diff --git a/.circleci/config.yml b/.circleci/config.yml index ffbb4f1a7..fb37bf1d8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,27 +7,35 @@ jobs: - checkout - restore_cache: + name: Restore Yarn Package Cache keys: - - v1-dependencies-{{ checksum "package.json" }} - - v1-dependencies- - - - run: npm install + - yarn-packages-{{ checksum "yarn.lock" }} + - run: + name: Install Dependencies + command: yarn install --immutable - save_cache: + name: Save Yarn Package Cache + key: yarn-packages-{{ checksum "yarn.lock" }} paths: - - node_modules - key: v1-dependencies-{{ checksum "package.json" }} + - ~/.cache/yarn + + - run: + name: Bootstrap with Lerna + command: yarn lerna bootstrap - - run: npm run build:umd + - run: yarn build:umd - run: name: Compatibility Test + # Only run e2e-tests if the PR + # is published by the Sortable Organization command: | if [ -z "$CIRCLE_PR_NUMBER" ]; then - npm run test:compat + yarn test:compat fi - - run: npm run test + - run: yarn test - store_test_results: path: /tmp/test-results diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 09d275186..000000000 --- a/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -# editorconfig.org -root = true - -[*] -indent_style = tab -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false - -[*.yml] -indent_style = space diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 53a033cfd..a35201c37 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,73 +1,48 @@ --- name: Bug report -about: Create a report to help us improve -title: "[bug] " +about: Document a bug with a working example +title: "" labels: "" assignees: "" --- - + + -If it is a bug found from using one of these, please link to the related issue. +### Scenario ---> +\ -**Describe the bug** +### Steps to Reproduce - - -**To Reproduce** -Steps to reproduce the behavior: +Summary of steps if applicable. 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error -**Expected behavior** - - - -**Information** - - +## Describe the bug -Versions - Look in your `package.json` for this information: -sortablejs = ^x.x.x -@types/sortablejs = ^x.x.x - -**Additional context** -Add any other context about the problem here. - -**Reproduction** -codesandbox: - - -Providing a codesandbox really helps us understand your issue. -Bugs with codesandboxes attached are likely to be resolved more quickly than others. +## Expected behavior -Once you've created a public codesandbox, please paste a link in here + -Here are some templates to get you started. +## Version -- Javascript: https://codesandbox.io/s/sortablejs-javascript-jy3tl?file=/src/index.js -- Typescript: https://codesandbox.io/s/sortablejs-typescript-6it9n?file=/src/index.ts +| package | version | +| :------------------ | :------------------ | +| `sortablejs` | `^x.x.x-?` | +| `@types/sortablejs` | `^x.x.x-?` \|\| N/A | ---> +## Additional Context diff --git a/.github/ISSUE_TEMPLATE/custom-template.md b/.github/ISSUE_TEMPLATE/custom-template.md deleted file mode 100644 index 14e2a2239..000000000 --- a/.github/ISSUE_TEMPLATE/custom-template.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -name: Custom issue template -about: Not a feature request or a bug report. Usually questions, queries or concerns -title: "" -labels: "" -assignees: "" ---- - -**Custom** - - - -**Reproduction** -codesandbox: - - diff --git a/.github/ISSUE_TEMPLATE/discussion.md b/.github/ISSUE_TEMPLATE/discussion.md new file mode 100644 index 000000000..6dfe95723 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/discussion.md @@ -0,0 +1,39 @@ +--- +name: Question/Feedback +about: Ask the community a question or give us some feedback! +title: "" +labels: "" +assignees: "" +--- + +Please answer the following: + +- What result are you trying to achieve and why? +- Where are you getting stuck at? + +## Reproduction + +### Scenario + + + + + + +\ + +### Steps to Reproduce + +Summary of steps if applicable. + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. Looks good + +## Version + +| package | version | +| :------------------ | :------------------ | +| `sortablejs` | `^x.x.x-?` | +| `@types/sortablejs` | `^x.x.x-?` \|\| N/A | diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index a0bbb57d0..88c190fb7 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -6,36 +6,16 @@ labels: "" assignees: "" --- - - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. +## Additional Context diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index ffbcc18f9..000000000 --- a/.jshintrc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "strict": false, - "newcap": false, - "node": true, - "expr": true, - "supernew": true, - "laxbreak": true, - "esversion": 9, - "white": true, - "globals": { - "define": true, - "test": true, - "expect": true, - "module": true, - "asyncTest": true, - "start": true, - "ok": true, - "equal": true, - "notEqual": true, - "deepEqual": true, - "window": true, - "document": true, - "performance": true - } -} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..222861c34 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..c59b8c5de --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "/home/wayne/Documents/code/nodejs/sortable/node_modules/typescript/lib" +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 25c149014..0d911171e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,26 +1,88 @@ # Contribution Guidelines -### Issue +Thank you for considering to contribute. Please follow the guidelines. +If the guidelines are not followed, your issues or requests may be closed or left on hold until the requirements are fulfilled. - 1. Try [master](https://github.com/SortableJS/Sortable/tree/master/)-branch, perhaps the problem has been solved; - 2. [Use the search](https://github.com/SortableJS/Sortable/search?type=Issues&q=problem), maybe already have an answer; - 3. If not found, create example on [jsbin.com (draft)](https://jsbin.com/kamiwez/edit?html,js,output) and describe the problem. +--- + +## Manners and Etiquette 🎩 + +Please be thoughtful and considerate of others when posting any content within the sortable community. We do this for free, just like you. + +Hate speech and non constructive, negatively loaded critisism will be issued with a warnings and potential bans. --- -### Pull Request +## Issues ❗ + +### Submitting an Issueβœ…βœ… + +We have three broad categories, to which _you should pick the correct template_. Selecting the correct templates help triage issues, allowing us to resolve the issue faster. + +We have **enhancements & features**, **bug reports** and **questions**. + +> _todo: expand on these_ + +#### Enhancements & Featuresβž•βž•βž•βž• βœ…βž•βž•βž•βž•βž•βž• + +These are additions to functionality that do are not documented. + +#### Bugs + +These are related to existing functionality that are documented, but not working correctly. + +Functionality bugs without a codesandbox or a jsfiddle will be marked as low priority unless a description is made. + +#### Questions + +When you have a question about how the code works, or you've become stuck on how to do something. + +--- + +## πŸšƒπŸšƒπŸšƒPull Requests πŸšƒπŸšƒπŸ“₯🌊🌊 + +All pull requests should close an issue, unless it: + +- Fixes a typo in the documentation +- Adds some documentation + +### Workflow + +We're aware that easy use nature of the library brings in many new programmers seeking to contribute. Please read the section below for how to do it properly. + +#### Git and GitHub CLI + +Please read the [GitHub Workflow Guide](https://gist.github.com/Chaser324/ce0505fbed06b947d962) for how to handle git when making changes. This is a great guide and once you learn it here, you can take it everywhere. + +You can use the [GitHub CLI](https://github.com/cli/cli) to skip a few steps, as it would create the fork, clone it locally and add both origin and upstream branches. + +> todo: add some more detailed instructions for the beginners. + +--- + +## Run locally + +The entry points are in `packages/sortablejs`, but most of the code is in `packages/sortable`. We've made this separation in preparation for the future. + +### Bootstrap + +After creating your fork and/or cloning this repository, please bootstrap (initialize) the repository so code can be run and built. + +```sh +# install dependencies with yarn +yarn install - 1. Only request to merge with the [master](https://github.com/SortableJS/Sortable/tree/master/)-branch. - 2. Only modify source files, **do not commit the resulting build** +# Use the locally downloaded version of lerna +# to install sub package dependencies +yarn lerna bootstrap +``` -### Setup +### Build - 1. Fork the repo on [github](https://github.com) - 2. Clone locally - 3. Run `npm i` in the local repo +Run `yarn build` to build all the files. You should end up with a total of 10 files between the two folders `packages/sortablejs/(dist|modular)` -### Building +_**Note:** Please don't use the following files, as they're deprecated and kept only for backwards compatability:_ - - For development, build the `./Sortable.js` file using the command `npm run build:umd:watch` - - To build everything and minify it, run `npm run build` - - Do not commit the resulting builds in any pull request – they will be generated at release +- Sortable.js +- Sortable.min.js +- modular/\*.js. diff --git a/README.md b/README.md index 956564bae..79f2f38f4 100644 --- a/README.md +++ b/README.md @@ -2,568 +2,314 @@ Sortable is a JavaScript library for reorderable drag-and-drop lists. -Demo: http://sortablejs.github.io/Sortable/ +Demo: https://sortablejs.github.io/sortablejs/ [](https://saucelabs.com/) -## Features +todo: add entrypoints table around here somewhere. - * Supports touch devices and [modern](http://caniuse.com/#search=drag) browsers (including IE9) - * Can drag from one list to another or within the same list - * CSS animation when moving items - * Supports drag handles *and selectable text* (better than voidberg's html5sortable) - * Smart auto-scrolling - * Advanced swap detection - * Smooth animations - * [Multi-drag](https://github.com/SortableJS/Sortable/tree/master/plugins/MultiDrag) support - * Support for CSS transforms - * Built using native HTML5 drag and drop API - * Supports - * [Meteor](https://github.com/SortableJS/meteor-sortablejs) - * Angular - * [2.0+](https://github.com/SortableJS/angular-sortablejs) - * [1.*](https://github.com/SortableJS/angular-legacy-sortablejs) - * React - * [ES2015+](https://github.com/SortableJS/react-sortablejs) - * [Mixin](https://github.com/SortableJS/react-mixin-sortablejs) - * [Knockout](https://github.com/SortableJS/knockout-sortablejs) - * [Polymer](https://github.com/SortableJS/polymer-sortablejs) - * [Vue](https://github.com/SortableJS/Vue.Draggable) - * [Ember](https://github.com/SortableJS/ember-sortablejs) - * Supports any CSS library, e.g. [Bootstrap](#bs) - * Simple API - * Support for [plugins](#plugins) - * [CDN](#cdn) - * No jQuery required (but there is [support](https://github.com/SortableJS/jquery-sortablejs)) - * Typescript definitions at `@types/sortablejs` - - -
+## Important Notices +### Github as CDN deprecation -### Articles +It was never fully supported, but we've decided to consciously deprecate the use of fetching files directly from GitHub. + +This came to our attention when a few tutorials out on the web (we thank you!) which instruct to import SortableJS directly from our GitHub source repository. +GitHub is used to develop Sortable, not host it. + +The correct way to consume sortable in a HTML script is to use an officially supported CDN, such as jsdelivr or unpkg. + +These files now trigger console.warn with a message to come here: + +- modular/sortable.core.esm.js +- modular/sortable.complete.esm.js +- modular/sortable.esm.js +- Sortable.js +- Sortable.min.js + +### Bower + +Bower has been deprecated, which means we will no longer support it. +Please replace your usage of bower with npm, yarn or a JavaScript package manager of your choice. - * [Dragging Multiple Items in Sortable](https://github.com/SortableJS/Sortable/wiki/Dragging-Multiple-Items-in-Sortable) (April 26, 2019) - * [Swap Thresholds and Direction](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction) (December 2, 2018) - * [Sortable v1.0 β€” New capabilities](https://github.com/SortableJS/Sortable/wiki/Sortable-v1.0-β€”-New-capabilities/) (December 22, 2014) - * [Sorting with the help of HTML5 Drag'n'Drop API](https://github.com/SortableJS/Sortable/wiki/Sorting-with-the-help-of-HTML5-Drag'n'Drop-API/) (December 23, 2013) +## Features + +- Supports touch devices and [modern](http://caniuse.com/#search=drag) browsers (including IE9) +- Can drag from one list to another or within the same list +- CSS animation when moving items +- Supports drag handles _and selectable text_ (better than voidberg's html5sortable) +- Smart auto-scrolling +- Advanced swap detection +- Smooth animations +- [Multi-drag](https://github.com/SortableJS/Sortable/tree/master/packages/plugins/multi-drag) support +- Support for CSS transforms +- Built using native HTML5 drag and drop API +- Supports +- Supports any CSS library, e.g. Bootstrap +- Simple API +- Support for [plugins](#plugins) +- [CDN](#cdn) +- No jQuery required (but there is [support]()) +- TypeScript definitions via [@types/sortablejs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/sortablejs) + +### Bindings and Components + +There are many bindings for SortableJS to use with your favourite frameworks and libraries: + +- [jQuery](https://github.com/SortableJS/jquery-sortablejs) +- [Meteor](https://github.com/SortableJS/meteor-sortablejs) +- Angular + - [2.0+](https://github.com/SortableJS/angular-sortablejs) + - [1.\*](https://github.com/SortableJS/angular-legacy-sortablejs) +- React + - [ES2015+](https://github.com/SortableJS/react-sortablejs) + - [Mixin](https://github.com/SortableJS/react-mixin-sortablejs) +- [Knockout](https://github.com/SortableJS/knockout-sortablejs) +- [Polymer](https://github.com/SortableJS/polymer-sortablejs) +- [Vue](https://github.com/SortableJS/Vue.Draggable) +- [Ember](https://github.com/SortableJS/ember-sortablejs) + +### Articles -
+- [Dragging Multiple Items in Sortable](https://github.com/SortableJS/Sortable/wiki/Dragging-Multiple-Items-in-Sortable) (April 26, 2019) +- [Swap Thresholds and Direction](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction) (December 2, 2018) +- [Sortable v1.0 β€” New capabilities](https://github.com/SortableJS/Sortable/wiki/Sortable-v1.0-β€”-New-capabilities/) (December 22, 2014) +- [Sorting with the help of HTML5 Drag'n'Drop API](https://github.com/SortableJS/Sortable/wiki/Sorting-with-the-help-of-HTML5-Drag'n'Drop-API/) (December 23, 2013) ### Getting Started -Install with NPM: -```bash -$ npm install sortablejs --save -``` +Install via command line using `yarn` or `npm`. -Install with Bower: ```bash -$ bower install --save sortablejs +# npm +npm install sortablejs --save + +# yarn v1.x +yarn add sortablejs ``` Import into your project: -```js -// Default SortableJS -import Sortable from 'sortablejs'; - -// Core SortableJS (without default plugins) -import Sortable from 'sortablejs/modular/sortable.core.esm.js'; -// Complete SortableJS (with all plugins) -import Sortable from 'sortablejs/modular/sortable.complete.esm.js'; +```ts +// Default SortableJS +import Sortable from "sortablejs"; +import { Sortable, MultiDrag, Swap, OnSpill, AutoScroll } from "sortablejs"; ``` Cherrypick plugins: -```js + +```ts // Cherrypick extra plugins -import Sortable, { MultiDrag, Swap } from 'sortablejs'; +import Sortable, { MultiDrag, Swap } from "sortablejs"; Sortable.mount(new MultiDrag(), new Swap()); - // Cherrypick default plugins -import Sortable, { AutoScroll } from 'sortablejs/modular/sortable.core.esm.js'; +import Sortable, { AutoScroll } from "sortablejs/modular/sortable.core.esm.js"; Sortable.mount(new AutoScroll()); ``` - --- - ### Usage + ```html
    -
  • item 1
  • -
  • item 2
  • -
  • item 3
  • +
  • item 1
  • +
  • item 2
  • +
  • item 3
``` ```js -var el = document.getElementById('items'); +var el = document.getElementById("items"); var sortable = Sortable.create(el); ``` You can use any element for the list and its elements, not just `ul`/`li`. Here is an [example with `div`s](https://jsbin.com/visimub/edit?html,js,output). - --- - ### Options -```js -var sortable = new Sortable(el, { - group: "name", // or { name: "...", pull: [true, false, 'clone', array], put: [true, false, array] } - sort: true, // sorting inside list - delay: 0, // time in milliseconds to define when the sorting should start - delayOnTouchOnly: false, // only delay if user is using touch - touchStartThreshold: 0, // px, how many pixels the point should move before cancelling a delayed drag event - disabled: false, // Disables the sortable if set to true. - store: null, // @see Store - animation: 150, // ms, animation speed moving items when sorting, `0` β€” without animation - easing: "cubic-bezier(1, 0, 0, 1)", // Easing for animation. Defaults to null. See https://easings.net/ for examples. - handle: ".my-handle", // Drag handle selector within list items - filter: ".ignore-elements", // Selectors that do not lead to dragging (String or Function) - preventOnFilter: true, // Call `event.preventDefault()` when triggered `filter` - draggable: ".item", // Specifies which items inside the element should be draggable - - dataIdAttr: 'data-id', - - ghostClass: "sortable-ghost", // Class name for the drop placeholder - chosenClass: "sortable-chosen", // Class name for the chosen item - dragClass: "sortable-drag", // Class name for the dragging item - - swapThreshold: 1, // Threshold of the swap zone - invertSwap: false, // Will always use inverted swap zone if set to true - invertedSwapThreshold: 1, // Threshold of the inverted swap zone (will be set to swapThreshold value by default) - direction: 'horizontal', // Direction of Sortable (will be detected automatically if not given) - - forceFallback: false, // ignore the HTML5 DnD behaviour and force the fallback to kick in - - fallbackClass: "sortable-fallback", // Class name for the cloned DOM Element when using forceFallback - fallbackOnBody: false, // Appends the cloned DOM Element into the Document's Body - fallbackTolerance: 0, // Specify in pixels how far the mouse should move before it's considered as a drag. - - dragoverBubble: false, - removeCloneOnHide: true, // Remove the clone element when it is not showing, rather than just hiding it - emptyInsertThreshold: 5, // px, distance mouse must be from empty sortable to insert drag element into it - - - setData: function (/** DataTransfer */dataTransfer, /** HTMLElement*/dragEl) { - dataTransfer.setData('Text', dragEl.textContent); // `dataTransfer` object of HTML5 DragEvent - }, - - // Element is chosen - onChoose: function (/**Event*/evt) { - evt.oldIndex; // element index within parent - }, - - // Element is unchosen - onUnchoose: function(/**Event*/evt) { - // same properties as onEnd - }, - - // Element dragging started - onStart: function (/**Event*/evt) { - evt.oldIndex; // element index within parent - }, - - // Element dragging ended - onEnd: function (/**Event*/evt) { - var itemEl = evt.item; // dragged HTMLElement - evt.to; // target list - evt.from; // previous list - evt.oldIndex; // element's old index within old parent - evt.newIndex; // element's new index within new parent - evt.oldDraggableIndex; // element's old index within old parent, only counting draggable elements - evt.newDraggableIndex; // element's new index within new parent, only counting draggable elements - evt.clone // the clone element - evt.pullMode; // when item is in another sortable: `"clone"` if cloning, `true` if moving - }, - - // Element is dropped into the list from another list - onAdd: function (/**Event*/evt) { - // same properties as onEnd - }, - - // Changed sorting within list - onUpdate: function (/**Event*/evt) { - // same properties as onEnd - }, - - // Called by any change to the list (add / update / remove) - onSort: function (/**Event*/evt) { - // same properties as onEnd - }, - - // Element is removed from the list into another list - onRemove: function (/**Event*/evt) { - // same properties as onEnd - }, - - // Attempt to drag a filtered element - onFilter: function (/**Event*/evt) { - var itemEl = evt.item; // HTMLElement receiving the `mousedown|tapstart` event. - }, - - // Event when you move an item in the list or between lists - onMove: function (/**Event*/evt, /**Event*/originalEvent) { - // Example: https://jsbin.com/nawahef/edit?js,output - evt.dragged; // dragged HTMLElement - evt.draggedRect; // DOMRect {left, top, right, bottom} - evt.related; // HTMLElement on which have guided - evt.relatedRect; // DOMRect - evt.willInsertAfter; // Boolean that is true if Sortable will insert drag element after target by default - originalEvent.clientY; // mouse position - // return false; β€” for cancel - // return -1; β€” insert before target - // return 1; β€” insert after target - }, - - // Called when creating a clone of element - onClone: function (/**Event*/evt) { - var origEl = evt.item; - var cloneEl = evt.clone; - }, - - // Called when dragging element changes position - onChange: function(/**Event*/evt) { - evt.newIndex // most likely why this event is used is to get the dragging element's current index - // same properties as onEnd - } -}); -``` - - ---- - - -#### `group` option -To drag elements from one list into another, both lists must have the same `group` value. -You can also define whether lists can give away, give and keep a copy (`clone`), and receive elements. - - * name: `String` β€” group name - * pull: `true|false|["foo", "bar"]|'clone'|function` β€” ability to move from the list. `clone` β€” copy the item, rather than move. Or an array of group names which the elements may be put in. Defaults to `true`. - * put: `true|false|["baz", "qux"]|function` β€” whether elements can be added from other lists, or an array of group names from which elements can be added. - * revertClone: `boolean` β€” revert cloned element to initial position after moving to a another list. - - -Demo: - - https://jsbin.com/hijetos/edit?js,output - - https://jsbin.com/nacoyah/edit?js,output β€” use of complex logic in the `pull` and` put` - - https://jsbin.com/bifuyab/edit?js,output β€” use `revertClone: true` - - ---- - - -#### `sort` option -Allow sorting inside list. - -Demo: https://jsbin.com/jayedig/edit?js,output - - ---- - - -#### `delay` option -Time in milliseconds to define when the sorting should start. -Unfortunately, due to browser restrictions, delaying is not possible on IE or Edge with native drag & drop. - -Demo: https://jsbin.com/zosiwah/edit?js,output - - ---- - - -#### `delayOnTouchOnly` option -Whether or not the delay should be applied only if the user is using touch (eg. on a mobile device). No delay will be applied in any other case. Defaults to `false`. - - ---- - - -#### `swapThreshold` option -Percentage of the target that the swap zone will take up, as a float between `0` and `1`. - -[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#swap-threshold) - -Demo: http://sortablejs.github.io/Sortable#thresholds - - ---- - - -#### `invertSwap` option -Set to `true` to set the swap zone to the sides of the target, for the effect of sorting "in between" items. - -[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#forcing-inverted-swap-zone) - -Demo: http://sortablejs.github.io/Sortable#thresholds - - ---- - - -#### `invertedSwapThreshold` option -Percentage of the target that the inverted swap zone will take up, as a float between `0` and `1`. If not given, will default to `swapThreshold`. - -[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#dealing-with-swap-glitching) - - ---- - - -#### `direction` option -Direction that the Sortable should sort in. Can be set to `'vertical'`, `'horizontal'`, or a function, which will be called whenever a target is dragged over. Must return `'vertical'` or `'horizontal'`. - -[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#direction) - - -Example of direction detection for vertical list that includes full column and half column elements: - -```js -Sortable.create(el, { - direction: function(evt, target, dragEl) { - if (target !== null && target.className.includes('half-column') && dragEl.className.includes('half-column')) { - return 'horizontal'; - } - return 'vertical'; - } -}); -``` - - ---- - - -#### `touchStartThreshold` option -This option is similar to `fallbackTolerance` option. - -When the `delay` option is set, some phones with very sensitive touch displays like the Samsung Galaxy S8 will fire -unwanted touchmove events even when your finger is not moving, resulting in the sort not triggering. - -This option sets the minimum pointer movement that must occur before the delayed sorting is cancelled. - -Values between 3 to 5 are good. - - ---- - - -#### `disabled` options -Disables the sortable if set to `true`. - -Demo: https://jsbin.com/sewokud/edit?js,output - -```js -var sortable = Sortable.create(list); - -document.getElementById("switcher").onclick = function () { - var state = sortable.option("disabled"); // get - - sortable.option("disabled", !state); // set -}; -``` - - ---- - - -#### `handle` option -To make list items draggable, Sortable disables text selection by the user. -That's not always desirable. To allow text selection, define a drag handler, -which is an area of every list element that allows it to be dragged around. - -Demo: https://jsbin.com/numakuh/edit?html,js,output - -```js -Sortable.create(el, { - handle: ".my-handle" -}); -``` - -```html -
    -
  • :: list item text one -
  • :: list item text two -
-``` - -```css -.my-handle { - cursor: move; - cursor: -webkit-grabbing; -} -``` - - ---- - - -#### `filter` option - - -```js -Sortable.create(list, { - filter: ".js-remove, .js-edit", - onFilter: function (evt) { - var item = evt.item, - ctrl = evt.target; - - if (Sortable.utils.is(ctrl, ".js-remove")) { // Click on remove button - item.parentNode.removeChild(item); // remove sortable item - } - else if (Sortable.utils.is(ctrl, ".js-edit")) { // Click on edit link - // ... - } - } -}) -``` - - ---- - - -#### `ghostClass` option -Class name for the drop placeholder (default `sortable-ghost`). - -Demo: https://jsbin.com/henuyiw/edit?css,js,output - -```css -.ghost { - opacity: 0.4; -} -``` - -```js -Sortable.create(list, { - ghostClass: "ghost" -}); -``` - - ---- - - -#### `chosenClass` option -Class name for the chosen item (default `sortable-chosen`). -Demo: https://jsbin.com/hoqufox/edit?css,js,output +Here we've summarised the options with their ~~default values~~ example values. More details available in the [docs/sortable-options](https://github.com/SortableJS/Sortable/blob/master/docs/sortable-options.md) -```css -.chosen { - color: #fff; - background-color: #c00; -} -``` - -```js -Sortable.create(list, { - delay: 500, - chosenClass: "chosen" +```ts +var sortable = new Sortable(el, { + // variables + + group: "name", // or { name: "...", pull: [true, false, 'clone', array], put: [true, false, array] } + sort: true, // sorting inside list + delay: 0, // time in milliseconds to define when the sorting should start + delayOnTouchOnly: false, // only delay if user is using touch + touchStartThreshold: 0, // px, how many pixels the point should move before cancelling a delayed drag event + disabled: false, // Disables the sortable if set to true. + store: null, // @see Store + animation: 150, // ms, animation speed moving items when sorting, `0` β€” without animation + easing: "cubic-bezier(1, 0, 0, 1)", // Easing for animation. Defaults to null. See https://easings.net/ for examples. + handle: ".my-handle", // Drag handle selector within list items + filter: ".ignore-elements", // Selectors that do not lead to dragging (String or Function) + preventOnFilter: true, // Call `event.preventDefault()` when triggered `filter` + draggable: ".item", // Specifies which items inside the element should be draggable + + dataIdAttr: "data-id", + + ghostClass: "sortable-ghost", // Class name for the drop placeholder + chosenClass: "sortable-chosen", // Class name for the chosen item + dragClass: "sortable-drag", // Class name for the dragging item + + swapThreshold: 1, // Threshold of the swap zone + invertSwap: false, // Will always use inverted swap zone if set to true + invertedSwapThreshold: 1, // Threshold of the inverted swap zone (will be set to swapThreshold value by default) + direction: "horizontal", // Direction of Sortable (will be detected automatically if not given) + + forceFallback: false, // ignore the HTML5 DnD behaviour and force the fallback to kick in + + fallbackClass: "sortable-fallback", // Class name for the cloned DOM Element when using forceFallback + fallbackOnBody: false, // Appends the cloned DOM Element into the Document's Body + fallbackTolerance: 0, // Specify in pixels how far the mouse should move before it's considered as a drag. + + dragoverBubble: false, + removeCloneOnHide: true, // Remove the clone element when it is not showing, rather than just hiding it + emptyInsertThreshold: 5, // px, distance mouse must be from empty sortable to insert drag element into it + + // handlers/hooks - listen to sortable events here. + + setData: function ( + /** DataTransfer */ dataTransfer, + /** HTMLElement*/ dragEl + ) { + dataTransfer.setData("Text", dragEl.textContent); // `dataTransfer` object of HTML5 DragEvent + }, + + // Element is chosen + onChoose: function (/**Event*/ evt) { + evt.oldIndex; // element index within parent + }, + + // Element is unchosen + onUnchoose: function (/**Event*/ evt) { + // same properties as onEnd + }, + + // Element dragging started + onStart: function (/**Event*/ evt) { + evt.oldIndex; // element index within parent + }, + + // Element dragging ended + onEnd: function (/**Event*/ evt) { + var itemEl = evt.item; // dragged HTMLElement + evt.to; // target list + evt.from; // previous list + evt.oldIndex; // element's old index within old parent + evt.newIndex; // element's new index within new parent + evt.oldDraggableIndex; // element's old index within old parent, only counting draggable elements + evt.newDraggableIndex; // element's new index within new parent, only counting draggable elements + evt.clone; // the clone element + evt.pullMode; // when item is in another sortable: `"clone"` if cloning, `true` if moving + }, + + // Element is dropped into the list from another list + onAdd: function (/**Event*/ evt) { + // same properties as onEnd + }, + + // Changed sorting within list + onUpdate: function (/**Event*/ evt) { + // same properties as onEnd + }, + + // Called by any change to the list (add / update / remove) + onSort: function (/**Event*/ evt) { + // same properties as onEnd + }, + + // Element is removed from the list into another list + onRemove: function (/**Event*/ evt) { + // same properties as onEnd + }, + + // Attempt to drag a filtered element + onFilter: function (/**Event*/ evt) { + var itemEl = evt.item; // HTMLElement receiving the `mousedown|tapstart` event. + }, + + // Event when you move an item in the list or between lists + onMove: function (/**Event*/ evt, /**Event*/ originalEvent) { + // Example: https://jsbin.com/nawahef/edit?js,output + evt.dragged; // dragged HTMLElement + evt.draggedRect; // DOMRect {left, top, right, bottom} + evt.related; // HTMLElement on which have guided + evt.relatedRect; // DOMRect + evt.willInsertAfter; // Boolean that is true if Sortable will insert drag element after target by default + originalEvent.clientY; // mouse position + // return false; β€” for cancel + // return -1; β€” insert before target + // return 1; β€” insert after target + // return true; β€” keep default insertion point based on the direction + // return void; β€” keep default insertion point based on the direction + }, + + // Called when creating a clone of element + onClone: function (/**Event*/ evt) { + var origEl = evt.item; + var cloneEl = evt.clone; + }, + + // Called when dragging element changes position + onChange: function (/**Event*/ evt) { + evt.newIndex; // most likely why this event is used is to get the dragging element's current index + // same properties as onEnd + }, }); ``` - ---- - - -#### `forceFallback` option -If set to `true`, the Fallback for non HTML5 Browser will be used, even if we are using an HTML5 Browser. -This gives us the possibility to test the behaviour for older Browsers even in newer Browser, or make the Drag 'n Drop feel more consistent between Desktop , Mobile and old Browsers. - -On top of that, the Fallback always generates a copy of that DOM Element and appends the class `fallbackClass` defined in the options. This behaviour controls the look of this 'dragged' Element. - -Demo: https://jsbin.com/sibiput/edit?html,css,js,output - - ---- - - -#### `fallbackTolerance` option -Emulates the native drag threshold. Specify in pixels how far the mouse should move before it's considered as a drag. -Useful if the items are also clickable like in a list of links. - -When the user clicks inside a sortable element, it's not uncommon for your hand to move a little between the time you press and the time you release. -Dragging only starts if you move the pointer past a certain tolerance, so that you don't accidentally start dragging every time you click. - -3 to 5 are probably good values. - - ---- - - -#### `dragoverBubble` option -If set to `true`, the dragover event will bubble to parent sortables. Works on both fallback and native dragover event. -By default, it is false, but Sortable will only stop bubbling the event once the element has been inserted into a parent Sortable, or *can* be inserted into a parent Sortable, but isn't at that specific time (due to animation, etc). - -Since 1.8.0, you will probably want to leave this option as false. Before 1.8.0, it may need to be `true` for nested sortables to work. - - ---- - - -#### `removeCloneOnHide` option -If set to `false`, the clone is hidden by having it's CSS `display` property set to `none`. -By default, this option is `true`, meaning Sortable will remove the cloned element from the DOM when it is supposed to be hidden. - - --- - -#### `emptyInsertThreshold` option -The distance (in pixels) the mouse must be from an empty sortable while dragging for the drag element to be inserted into that sortable. Defaults to `5`. Set to `0` to disable this feature. - -Demo: https://jsbin.com/becavoj/edit?js,output - - ---- ### Event object ([demo](https://jsbin.com/fogujiv/edit?js,output)) - - to:`HTMLElement` β€” list, in which moved element - - from:`HTMLElement` β€” previous list - - item:`HTMLElement` β€” dragged element - - clone:`HTMLElement` - - oldIndex:`Number|undefined` β€” old index within parent - - newIndex:`Number|undefined` β€” new index within parent - - oldDraggableIndex: `Number|undefined` β€” old index within parent, only counting draggable elements - - newDraggableIndex: `Number|undefined` β€” new index within parent, only counting draggable elements - - pullMode:`String|Boolean|undefined` β€” Pull mode if dragging into another sortable (`"clone"`, `true`, or `false`), otherwise undefined - +- to:`HTMLElement` β€” list, in which moved element +- from:`HTMLElement` β€” previous list +- item:`HTMLElement` β€” dragged element +- clone:`HTMLElement` +- oldIndex:`Number|undefined` β€” old index within parent +- newIndex:`Number|undefined` β€” new index within parent +- oldDraggableIndex: `Number|undefined` β€” old index within parent, only counting draggable elements +- newDraggableIndex: `Number|undefined` β€” new index within parent, only counting draggable elements +- pullMode:`String|Boolean|undefined` β€” Pull mode if dragging into another sortable (`"clone"`, `true`, or `false`), otherwise undefined #### `move` event object - - to:`HTMLElement` - - from:`HTMLElement` - - dragged:`HTMLElement` - - draggedRect:`DOMRect` - - related:`HTMLElement` β€” element on which have guided - - relatedRect:`DOMRect` - - willInsertAfter:`Boolean` β€” `true` if will element be inserted after target (or `false` if before) +- to:`HTMLElement` +- from:`HTMLElement` +- dragged:`HTMLElement` +- draggedRect:`DOMRect` +- related:`HTMLElement` β€” element on which have guided +- relatedRect:`DOMRect` +- willInsertAfter:`Boolean` β€” `true` if will element be inserted after target (or `false` if before) --- +### Methods -### Method - +These are available on each Sortable instance (the return value of `new Sortable({})`) ##### option(name:`String`[, value:`*`]):`*` -Get or set the option. - +Get or set the option. ##### closest(el:`HTMLElement`[, selector:`String`]):`HTMLElement|null` -For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. +For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. ##### toArray():`String[]` -Serializes the sortable's item `data-id`'s (`dataIdAttr` option) into an array of string. +Serializes the sortable's item `data-id`'s (`dataIdAttr` option) into an array of string. ##### sort(order:`String[]`) + Sorts the elements according to the array. ```js @@ -571,178 +317,136 @@ var order = sortable.toArray(); sortable.sort(order.reverse()); // apply ``` - ##### save() -Save the current sorting (see [store](#store)) +Save the current sorting (see [store](#store)) ##### destroy() -Removes the sortable functionality completely. +Removes the sortable functionality completely. --- - + ### Store + Saving and restoring of the sort. ```html
    -
  • order
  • -
  • save
  • -
  • restore
  • +
  • order
  • +
  • save
  • +
  • restore
``` ```js Sortable.create(el, { - group: "localStorage-example", - store: { - /** - * Get the order of elements. Called once during initialization. - * @param {Sortable} sortable - * @returns {Array} - */ - get: function (sortable) { - var order = localStorage.getItem(sortable.options.group.name); - return order ? order.split('|') : []; - }, - - /** - * Save the order of elements. Called onEnd (when the item is dropped). - * @param {Sortable} sortable - */ - set: function (sortable) { - var order = sortable.toArray(); - localStorage.setItem(sortable.options.group.name, order.join('|')); - } - } -}) -``` - - ---- - - - -### Bootstrap -Demo: https://jsbin.com/visimub/edit?html,js,output - -```html - - - - - - - - - -
    -
  • This is Sortable
  • -
  • It works with Bootstrap...
  • -
  • ...out of the box.
  • -
  • It has support for touch devices.
  • -
  • Just drag some elements around.
  • -
- - + group: "localStorage-example", + store: { + /** + * Get the order of elements. Called once during initialization. + * @param {Sortable} sortable + * @returns {Array} + */ + get: function (sortable) { + var order = localStorage.getItem(sortable.options.group.name); + return order ? order.split("|") : []; + }, + + /** + * Save the order of elements. Called onEnd (when the item is dropped). + * @param {Sortable} sortable + */ + set: function (sortable) { + var order = sortable.toArray(); + localStorage.setItem(sortable.options.group.name, order.join("|")); + }, + }, +}); ``` - ---- - +todo: overview of Sortable API Surface ### Static methods & properties - - ##### Sortable.create(el:`HTMLElement`[, options:`Object`]):`Sortable` -Create new instance. +Create new instance. --- - ##### Sortable.active:`Sortable` -The active Sortable instance. +The active Sortable instance. --- - ##### Sortable.dragged:`HTMLElement` -The element being dragged. +The element being dragged. --- - ##### Sortable.ghost:`HTMLElement` -The ghost element. +The ghost element. --- - ##### Sortable.clone:`HTMLElement` -The clone element. +The clone element. --- - ##### Sortable.get(element:`HTMLElement`):`Sortable` -Get the Sortable instance on an element. +Get the Sortable instance on an element. --- - ##### Sortable.mount(plugin:`...SortablePlugin|SortablePlugin[]`) -Mounts a plugin to Sortable. +Mounts a plugin to Sortable. --- - ##### Sortable.utils -* on(el`:HTMLElement`, event`:String`, fn`:Function`) β€” attach an event handler function -* off(el`:HTMLElement`, event`:String`, fn`:Function`) β€” remove an event handler -* css(el`:HTMLElement`)`:Object` β€” get the values of all the CSS properties -* css(el`:HTMLElement`, prop`:String`)`:Mixed` β€” get the value of style properties -* css(el`:HTMLElement`, prop`:String`, value`:String`) β€” set one CSS properties -* css(el`:HTMLElement`, props`:Object`) β€” set more CSS properties -* find(ctx`:HTMLElement`, tagName`:String`[, iterator`:Function`])`:Array` β€” get elements by tag name -* bind(ctx`:Mixed`, fn`:Function`)`:Function` β€” Takes a function and returns a new one that will always have a particular context -* is(el`:HTMLElement`, selector`:String`)`:Boolean` β€” check the current matched set of elements against a selector -* closest(el`:HTMLElement`, selector`:String`[, ctx`:HTMLElement`])`:HTMLElement|Null` β€” for each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree -* clone(el`:HTMLElement`)`:HTMLElement` β€” create a deep copy of the set of matched elements -* toggleClass(el`:HTMLElement`, name`:String`, state`:Boolean`) β€” add or remove one classes from each element -* detectDirection(el`:HTMLElement`)`:String` β€” automatically detect the [direction](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#direction) of the element as either `'vertical'` or `'horizontal'` +- on(el`:HTMLElement`, event`:String`, fn`:Function`) β€” attach an event handler function +- off(el`:HTMLElement`, event`:String`, fn`:Function`) β€” remove an event handler +- css(el`:HTMLElement`)`:Object` β€” get the values of all the CSS properties +- css(el`:HTMLElement`, prop`:String`)`:Mixed` β€” get the value of style properties +- css(el`:HTMLElement`, prop`:String`, value`:String`) β€” set one CSS properties +- css(el`:HTMLElement`, props`:Object`) β€” set more CSS properties +- find(ctx`:HTMLElement`, tagName`:String`[, iterator`:Function`])`:Array` β€” get elements by tag name +- bind(ctx`:Mixed`, fn`:Function`)`:Function` β€” Takes a function and returns a new one that will always have a particular context +- is(el`:HTMLElement`, selector`:String`)`:Boolean` β€” check the current matched set of elements against a selector +- closest(el`:HTMLElement`, selector`:String`[, ctx`:HTMLElement`])`:HTMLElement|Null` β€” for each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree +- clone(el`:HTMLElement`)`:HTMLElement` β€” create a deep copy of the set of matched elements +- toggleClass(el`:HTMLElement`, name`:String`, state`:Boolean`) β€” add or remove one classes from each element +- detectDirection(el`:HTMLElement`)`:String` β€” automatically detect the [direction](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#direction) of the element as either `'vertical'` or `'horizontal'` --- - ### Plugins + #### Extra Plugins (included in complete versions) - - [MultiDrag](https://github.com/SortableJS/Sortable/tree/master/plugins/MultiDrag) - - [Swap](https://github.com/SortableJS/Sortable/tree/master/plugins/Swap) + +- [MultiDrag](https://github.com/SortableJS/Sortable/tree/master/packages/plugins/multi-drag) +- [Swap](https://github.com/SortableJS/Sortable/tree/master/packages/plugins/swap) #### Default Plugins (included in default versions) - - [AutoScroll](https://github.com/SortableJS/Sortable/tree/master/plugins/AutoScroll) - - [OnSpill](https://github.com/SortableJS/Sortable/tree/master/plugins/OnSpill) +- [AutoScroll](https://github.com/SortableJS/Sortable/tree/master/packages/plugins/auto-scroll) +- [OnSpill](https://github.com/SortableJS/Sortable/tree/master/packages/plugins/on-spill) --- - + ### CDN ```html @@ -750,18 +454,14 @@ Mounts a plugin to Sortable. ``` - --- - ### Contributing (Issue/PR) Please, [read this](CONTRIBUTING.md). - --- - ## Contributors ### Code Contributors @@ -791,23 +491,3 @@ Support this project with your organization. Your logo will show up here with a - -## MIT LICENSE -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Sortable.js b/Sortable.js index c6d7f9da6..0f2e89a35 100644 --- a/Sortable.js +++ b/Sortable.js @@ -1,157 +1,48 @@ /**! - * Sortable 1.10.2 + * Sortable 1.11.0 * @author RubaXa * @author owenm * @license MIT */ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.Sortable = factory()); -}(this, function () { 'use strict'; - - function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); - } - - function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; - } - - function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; - } - - function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - var version = "1.10.2"; + typeof exports === "object" && typeof module !== "undefined" + ? (module.exports = factory()) + : typeof define === "function" && define.amd + ? define(factory) + : ((global = + typeof globalThis !== "undefined" ? globalThis : global || self), + (global.Sortable = factory())); +})(this, function () { + "use strict"; + const __warn = + "" + + "Importing Sortable directly from GitHub is deprecated.\n" + + "This file will not receive any more updates.\n" + + "Please follow the usage instructions to continue getting support: https://github.com/SortableJS/Sortable"; + + console.warn(__warn); + + var version = "1.11.0"; function userAgent(pattern) { - if (typeof window !== 'undefined' && window.navigator) { - return !! - /*@__PURE__*/ - navigator.userAgent.match(pattern); + if (typeof window !== "undefined" && window.navigator) { + return !!(/*@__PURE__*/ navigator.userAgent.match(pattern)); } } - var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); - var Edge = userAgent(/Edge/i); - var FireFox = userAgent(/firefox/i); - var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); - var IOS = userAgent(/iP(ad|od|hone)/i); - var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); - - var captureMode = { + const IE11OrLess = userAgent( + /(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i + ); + const Edge = userAgent(/Edge/i); + const FireFox = userAgent(/firefox/i); + const Safari = + userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); + const IOS = userAgent(/iP(ad|od|hone)/i); + const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); + + const captureMode = { capture: false, - passive: false + passive: false, }; function on(el, event, fn) { @@ -162,13 +53,10 @@ el.removeEventListener(event, fn, !IE11OrLess && captureMode); } - function matches( - /**HTMLElement*/ - el, - /**String*/ - selector) { + function matches(/**HTMLElement*/ el, /**String*/ selector) { if (!selector) return; - selector[0] === '>' && (selector = selector.substring(1)); + + selector[0] === ">" && (selector = selector.substring(1)); if (el) { try { @@ -188,95 +76,110 @@ } function getParentOrHost(el) { - return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode; + return el.host && el !== document && el.host.nodeType + ? el.host + : el.parentNode; } function closest( - /**HTMLElement*/ - el, - /**String*/ - selector, - /**HTMLElement*/ - ctx, includeCTX) { + /**HTMLElement*/ el, + /**String*/ selector, + /**HTMLElement*/ ctx, + includeCTX + ) { if (el) { ctx = ctx || document; do { - if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) { + if ( + (selector != null && + (selector[0] === ">" + ? el.parentNode === ctx && matches(el, selector) + : matches(el, selector))) || + (includeCTX && el === ctx) + ) { return el; } if (el === ctx) break; /* jshint boss:true */ - } while (el = getParentOrHost(el)); + } while ((el = getParentOrHost(el))); } return null; } - var R_SPACE = /\s+/g; + const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { - el.classList[state ? 'add' : 'remove'](name); + el.classList[state ? "add" : "remove"](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); - el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); + let className = (" " + el.className + " ") + .replace(R_SPACE, " ") + .replace(" " + name + " ", " "); + el.className = (className + (state ? " " + name : "")).replace( + R_SPACE, + " " + ); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(el, ''); + val = document.defaultView.getComputedStyle(el, ""); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { - if (!(prop in style) && prop.indexOf('webkit') === -1) { - prop = '-webkit-' + prop; + if (!(prop in style) && prop.indexOf("webkit") === -1) { + prop = "-webkit-" + prop; } - style[prop] = val + (typeof val === 'string' ? '' : 'px'); + style[prop] = val + (typeof val === "string" ? "" : "px"); } } } function matrix(el, selfOnly) { - var appliedTransforms = ''; - - if (typeof el === 'string') { + let appliedTransforms = ""; + if (typeof el === "string") { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + //@ts-ignore + let transform = css(el, "transform"); - if (transform && transform !== 'none') { - appliedTransforms = transform + ' ' + appliedTransforms; + if (transform && transform !== "none") { + appliedTransforms = transform + " " + appliedTransforms; } /* jshint boss:true */ - } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + //@ts-ignore + const matrixFn = + window.DOMMatrix || + window.WebKitCSSMatrix || + window.CSSMatrix || + window.MSCSSMatrix; /*jshint -W056 */ - return matrixFn && new matrixFn(appliedTransforms); } function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), - i = 0, - n = list.length; + let list = ctx.getElementsByTagName(tagName), + i = 0, + n = list.length; if (iterator) { for (; i < n; i++) { @@ -291,7 +194,7 @@ } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -299,6 +202,7 @@ return document.documentElement; } } + /** * Returns the "bounding client rect" of given element * @param {HTMLElement} el The element whose boundingClientRect is wanted @@ -308,11 +212,16 @@ * @param {[HTMLElement]} container The parent the element will be placed in * @return {Object} The boundingClientRect of el, with specified adjustments */ - - - function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { + function getRect( + el, + relativeToContainingBlock, + relativeToNonStaticParent, + undoScale, + container + ) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + + let elRect, top, left, bottom, right, height, width; if (el !== window && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -331,39 +240,60 @@ width = window.innerWidth; } - if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) { + if ( + (relativeToContainingBlock || relativeToNonStaticParent) && + el !== window + ) { // Adjust for translate() - container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) - // Not needed on <= IE11 + container = container || el.parentNode; + // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) + // Not needed on <= IE11 if (!IE11OrLess) { do { - if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container - - top -= containerRect.top + parseInt(css(container, 'border-top-width')); - left -= containerRect.left + parseInt(css(container, 'border-left-width')); + if ( + container && + container.getBoundingClientRect && + //@ts-ignore + (css(container, "transform") !== "none" || + (relativeToNonStaticParent && + //@ts-ignore + css(container, "position") !== "static")) + ) { + let containerRect = container.getBoundingClientRect(); + + // Set relative to edges of padding box of container + //@ts-ignore + top -= + containerRect.top + parseInt(css(container, "border-top-width")); + //@ts-ignore + left -= + containerRect.left + + parseInt(css(container, "border-left-width")); bottom = top + elRect.height; right = left + elRect.width; + break; } /* jshint boss:true */ - - } while (container = container.parentNode); + } while ((container = container.parentNode)); } } if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d; + //@ts-ignore + let elMatrix = matrix(container || el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d; if (elMatrix) { top /= scaleY; left /= scaleX; + width /= scaleX; height /= scaleY; + bottom = top + height; right = left + width; } @@ -375,9 +305,10 @@ bottom: bottom, right: right, width: width, - height: height + height: height, }; } + /** * Checks if a side of an element is scrolled past a side of its parents * @param {HTMLElement} el The element who's side being scrolled out of view is in question @@ -385,30 +316,33 @@ * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom') * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element */ - - function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), - elSideVal = getRect(el)[elSide]; - /* jshint boss:true */ + let parent = getParentAutoScrollElement(el, true), + //@ts-ignore + elSideVal = getRect(el)[elSide]; + /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + //@ts-ignore + let parentSideVal = getRect(parent)[parentSide], + visible; - if (parentSide === 'top' || parentSide === 'left') { + if (parentSide === "top" || parentSide === "left") { visible = elSideVal >= parentSideVal; } else { visible = elSideVal <= parentSideVal; } if (!visible) return parent; + if (parent === getWindowScrollingElement()) break; + parent = getParentAutoScrollElement(parent, false); } return false; } + /** * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) * and non-draggable elements @@ -417,44 +351,77 @@ * @param {Object} options Parent Sortable's options * @return {HTMLElement} The child at index childNum, or null if not found */ - - function getChild(el, childNum, options) { - var currentChild = 0, - i = 0, - children = el.children; + let currentChild = 0, + i = 0, + children = el.children; while (i < children.length) { - if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) { + if ( + children[i].style.display !== "none" && + //@ts-ignore + children[i] !== Sortable.ghost && + //@ts-ignore + children[i] !== Sortable.dragged && + closest(children[i], options.draggable, el, false) + ) { if (currentChild === childNum) { return children[i]; } - currentChild++; } i++; } - return null; } + /** * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) * @param {HTMLElement} el Parent element * @param {selector} selector Any other elements that should be ignored * @return {HTMLElement} The last child, ignoring ghostEl */ - - function lastChild(el, selector) { - var last = el.lastElementChild; - - while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { + let last = el.lastElementChild; + + while ( + last && + //@ts-ignore + (last === Sortable.ghost || + //@ts-ignore + css(last, "display") === "none" || + (selector && !matches(last, selector))) + ) { last = last.previousElementSibling; } return last || null; } + + /** + * Gets the first child in the el, ignoring ghostEl or invisible elements (clones) + * @param {HTMLElement} el Parent element + * @param {selector} selector Any other elements that should be ignored + * @return {HTMLElement} The first child, ignoring ghostEl + */ + function firstChild(el, selector) { + let first = el.firstElementChild; + + while ( + first && + //@ts-ignore + (first === Sortable.ghost || + //@ts-ignore + css(first, "display") === "none" || + (selector && !matches(first, selector))) + ) { + first = first.previousElementSibling; + } + + return first || null; + } + /** * Returns the index of an element within its parent for a selected set of * elements @@ -462,43 +429,46 @@ * @param {selector} selector * @return {number} */ - - function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; } - /* jshint boss:true */ - - while (el = el.previousElementSibling) { - if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) { + /* jshint boss:true */ + while ((el = el.previousElementSibling)) { + //@ts-ignore + if ( + el.nodeName.toUpperCase() !== "TEMPLATE" && + el !== Sortable.clone && + (!selector || matches(el, selector)) + ) { index++; } } return index; } + /** * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements. * The value is returned in real pixels. * @param {HTMLElement} el * @return {Array} Offsets in the format of [left, top] */ - - function getRelativeScrollOffset(el) { - var offsetLeft = 0, - offsetTop = 0, - winScroller = getWindowScrollingElement(); + let offsetLeft = 0, + offsetTop = 0, + winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), - scaleX = elMatrix.a, - scaleY = elMatrix.d; + //@ts-ignore + let elMatrix = matrix(el), + scaleX = elMatrix.a, + scaleY = elMatrix.d; + offsetLeft += el.scrollLeft * scaleX; offsetTop += el.scrollTop * scaleY; } while (el !== winScroller && (el = el.parentNode)); @@ -506,53 +476,60 @@ return [offsetLeft, offsetTop]; } + /** * Returns the index of the object within the given array * @param {Array} arr Array that may or may not hold the object * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find * @return {Number} The index of the object in the array, or -1 */ - - function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - - for (var key in obj) { - if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); + for (let key in obj) { + if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) + return Number(i); } } - return -1; } function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) - if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + if ( + elem.clientWidth < elem.scrollWidth || + elem.clientHeight < elem.scrollHeight + ) { + //@ts-ignore + let elemCSS = css(elem); + if ( + (elem.clientWidth < elem.scrollWidth && + (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll")) || + (elem.clientHeight < elem.scrollHeight && + (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) + ) { + if (!elem.getBoundingClientRect || elem === document.body) + return getWindowScrollingElement(); - if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { - if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); if (gotSelf || includeSelf) return elem; gotSelf = true; } } /* jshint boss:true */ - - } while (elem = elem.parentNode); + } while ((elem = elem.parentNode)); return getWindowScrollingElement(); } function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -563,16 +540,20 @@ } function isRectEqual(rect1, rect2) { - return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); + return ( + Math.round(rect1.top) === Math.round(rect2.top) && + Math.round(rect1.left) === Math.round(rect2.left) && + Math.round(rect1.height) === Math.round(rect2.height) && + Math.round(rect1.width) === Math.round(rect2.width) + ); } - var _throttleTimeout; - + let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, - _this = this; + let args = arguments, + _this = this; if (args.length === 1) { callback.call(_this, args[0]); @@ -598,8 +579,10 @@ } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + //@ts-ignore + let Polymer = window.Polymer; + //@ts-ignore + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -611,44 +594,47 @@ } function setRect(el, rect) { - css(el, 'position', 'absolute'); - css(el, 'top', rect.top); - css(el, 'left', rect.left); - css(el, 'width', rect.width); - css(el, 'height', rect.height); + css(el, "position", "absolute"); + css(el, "top", rect.top); + css(el, "left", rect.left); + css(el, "width", rect.width); + css(el, "height", rect.height); } function unsetRect(el) { - css(el, 'position', ''); - css(el, 'top', ''); - css(el, 'left', ''); - css(el, 'width', ''); - css(el, 'height', ''); + css(el, "position", ""); + css(el, "top", ""); + css(el, "left", ""); + css(el, "width", ""); + css(el, "height", ""); } - var expando = 'Sortable' + new Date().getTime(); + const expando = "Sortable" + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], - animationCallbackId; + let animationStates = [], + animationCallbackId; + return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { - if (css(child, 'display') === 'none' || child === Sortable.ghost) return; + let children = [].slice.call(this.el.children); + + children.forEach((child) => { + if (css(child, "display") === "none" || child === Sortable.ghost) + return; animationStates.push({ target: child, - rect: getRect(child) + rect: getRect(child), }); + let fromRect = { + ...animationStates[animationStates.length - 1].rect, + }; - var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - - + // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); - + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; fromRect.left -= childMatrix.e; @@ -658,34 +644,34 @@ child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { - animationStates.splice(indexOfObject(animationStates, { - target: target - }), 1); + + removeAnimationState(target) { + animationStates.splice(indexOfObject(animationStates, { target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); return; } - var animating = false, - animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, - target = state.target, - fromRect = target.fromRect, - toRect = getRect(target), - prevFromRect = target.prevFromRect, - prevToRect = target.prevToRect, - animatingRect = state.rect, - targetMatrix = matrix(target, true); + let animating = false, + animationTime = 0; + + animationStates.forEach((state) => { + let time = 0, + target = state.target, + fromRect = target.fromRect, + toRect = getRect(target), + prevFromRect = target.prevFromRect, + prevToRect = target.prevToRect, + animatingRect = state.rect, + targetMatrix = matrix(target, true); if (targetMatrix) { // Compensate for current animation @@ -697,23 +683,33 @@ if (target.thisAnimationDuration) { // Could also check if animatingRect is between fromRect and toRect - if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect - (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { + if ( + isRectEqual(prevFromRect, toRect) && + !isRectEqual(fromRect, toRect) && + // Make sure animatingRect is on line between toRect & fromRect + (animatingRect.top - toRect.top) / + (animatingRect.left - toRect.left) === + (fromRect.top - toRect.top) / (fromRect.left - toRect.left) + ) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime( + animatingRect, + prevFromRect, + prevToRect, + this.options + ); } - } // if fromRect != toRect: animate - + } + // if fromRect != toRect: animate if (!isRectEqual(toRect, fromRect)) { target.prevFromRect = fromRect; target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -730,44 +726,59 @@ target.thisAnimationDuration = time; } }); - clearTimeout(animationCallbackId); + clearTimeout(animationCallbackId); if (!animating) { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); } else { animationCallbackId = setTimeout(function () { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); }, animationTime); } - animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { - css(target, 'transition', ''); - css(target, 'transform', ''); - var elMatrix = matrix(this.el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d, - translateX = (currentRect.left - toRect.left) / (scaleX || 1), - translateY = (currentRect.top - toRect.top) / (scaleY || 1); + css(target, "transition", ""); + css(target, "transform", ""); + let elMatrix = matrix(this.el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d, + translateX = (currentRect.left - toRect.left) / (scaleX || 1), + translateY = (currentRect.top - toRect.top) / (scaleY || 1); + target.animatingX = !!translateX; target.animatingY = !!translateY; - css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)'); - repaint(target); // repaint - css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : '')); - css(target, 'transform', 'translate3d(0,0,0)'); - typeof target.animated === 'number' && clearTimeout(target.animated); + css( + target, + "transform", + "translate3d(" + translateX + "px," + translateY + "px,0)" + ); + + this.forRepaintDummy = repaint(target); // repaint + + css( + target, + "transition", + "transform " + + duration + + "ms" + + (this.options.easing ? " " + this.options.easing : "") + ); + css(target, "transform", "translate3d(0,0,0)"); + typeof target.animated === "number" && clearTimeout(target.animated); target.animated = setTimeout(function () { - css(target, 'transition', ''); - css(target, 'transform', ''); + css(target, "transition", ""); + css(target, "transform", ""); target.animated = false; + target.animatingX = false; target.animatingY = false; }, duration); } - } + }, }; } @@ -776,124 +787,149 @@ } function calculateRealTime(animatingRect, fromRect, toRect, options) { - return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; + return ( + (Math.sqrt( + Math.pow(fromRect.top - animatingRect.top, 2) + + Math.pow(fromRect.left - animatingRect.left, 2) + ) / + Math.sqrt( + Math.pow(fromRect.top - toRect.top, 2) + + Math.pow(fromRect.left - toRect.left, 2) + )) * + options.animation + ); } - var plugins = []; - var defaults = { - initializeByDefault: true + let plugins = []; + + const defaults = { + initializeByDefault: true, }; + var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; - + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { - if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable - + const eventNameGlobal = eventName + "Global"; + plugins.forEach((plugin) => { + if (!sortable[plugin.pluginName]) return; + // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread({ - sortable: sortable - }, evt)); - } // Only fire plugin event if plugin is enabled in this sortable, - // and plugin has event defined - + sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt }); + } - if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread({ - sortable: sortable - }, evt)); + // Only fire plugin event if plugin is enabled in this sortable, + // and plugin has event defined + if ( + sortable.options[plugin.pluginName] && + sortable[plugin.pluginName][eventName] + ) { + sortable[plugin.pluginName][eventName]({ sortable, ...evt }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; - if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + initializePlugins(sortable, el, defaults, options) { + plugins.forEach((plugin) => { + const pluginName = plugin.pluginName; + if (!sortable.options[pluginName] && !plugin.initializeByDefault) + return; + + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; - sortable[pluginName] = initialized; // Add default options from plugin + sortable[pluginName] = initialized; - _extends(defaults, initialized.defaults); + // Add default options from plugin + Object.assign(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); - - if (typeof modified !== 'undefined') { + let modified = this.modifyOption( + sortable, + option, + sortable.options[option] + ); + if (typeof modified !== "undefined") { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { - if (typeof plugin.eventProperties !== 'function') return; - - _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach((plugin) => { + if (typeof plugin.eventProperties !== "function") return; + Object.assign( + eventProperties, + plugin.eventProperties.call(sortable[plugin.pluginName], name) + ); }); + return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach((plugin) => { // Plugin must exist on the Sortable - if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin - - if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') { - modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value); + if (!sortable[plugin.pluginName]) return; + + // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin + if ( + plugin.optionListeners && + typeof plugin.optionListeners[name] === "function" + ) { + modifiedValue = plugin.optionListeners[name].call( + sortable[plugin.pluginName], + value + ); } }); + return modifiedValue; - } + }, }; - function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; - sortable = sortable || rootEl && rootEl[expando]; + function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties, + }) { + sortable = sortable || (rootEl && rootEl[expando]); if (!sortable) return; - var evt, - options = sortable.options, - onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature + let evt, + options = sortable.options, + onName = "on" + name.charAt(0).toUpperCase() + name.substr(1); + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { evt = new CustomEvent(name, { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); + evt = document.createEvent("Event"); evt.initEvent(name, true, true); } @@ -901,16 +937,21 @@ evt.from = fromEl || rootEl; evt.item = targetEl || rootEl; evt.clone = cloneEl; + evt.oldIndex = oldIndex; evt.newIndex = newIndex; + evt.oldDraggableIndex = oldDraggableIndex; evt.newDraggableIndex = newDraggableIndex; + evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; - var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + let allEventProperties = { + ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable), + }; + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -923,407 +964,498 @@ } } - var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, ["evt"]); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, + /**! + * Sortable + * @author RubaXa + * @author owenm + * @license MIT + */ + + let pluginEvent = function ( + eventName, + sortable, + { evt: originalEvent, ...data } = {} + ) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { - _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent - }); - } - }, data)); + + dispatchSortableEvent(name) { + _dispatchEvent({ sortable, name, originalEvent }); + }, + + ...data, + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); - } - - var dragEl, - parentEl, - ghostEl, rootEl, - nextEl, - lastDownEl, - cloneEl, - cloneHidden, oldIndex, - newIndex, oldDraggableIndex, + newIndex, newDraggableIndex, - activeGroup, - putSortable, - awaitingDragStarted = false, - ignoreNextClick = false, - sortables = [], - tapEvt, - touchEvt, - lastDx, - lastDy, - tapDistanceLeft, - tapDistanceTop, - moved, - lastTarget, - lastDirection, - pastFirstInvertThresh = false, - isCircumstantialInvert = false, - targetMoveDistance, - // For positioning ghost absolutely - ghostRelativeParent, - ghostRelativeParentInitialScroll = [], - // (left, top) - _silent = false, - savedInputChecked = []; - /** @const */ - - var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors - supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { - if (!documentExists) return; // false when <= IE11 + ...info, + }); + } - if (IE11OrLess) { - return false; - } + let dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + activeGroup, + putSortable, + awaitingDragStarted = false, + ignoreNextClick = false, + sortables = [], + tapEvt, + touchEvt, + lastDx, + lastDy, + tapDistanceLeft, + tapDistanceTop, + moved, + lastTarget, + lastDirection, + pastFirstInvertThresh = false, + isCircumstantialInvert = false, + targetMoveDistance, + // For positioning ghost absolutely + ghostRelativeParent, + ghostRelativeParentInitialScroll = [], // (left, top) + _silent = false, + savedInputChecked = []; - var el = document.createElement('x'); - el.style.cssText = 'pointer-events:auto'; - return el.style.pointerEvents === 'auto'; - }(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), - elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), + /** @const */ + const documentExists = typeof document !== "undefined", + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", + // This will not pass for IE9, because IE9 DnD only works on anchors + supportDraggable = + documentExists && + !ChromeForAndroid && + !IOS && + "draggable" in document.createElement("div"), + supportCssPointerEvents = (function () { + if (!documentExists) return; + // false when <= IE11 + if (IE11OrLess) { + return false; + } + let el = document.createElement("x"); + el.style.cssText = "pointer-events:auto"; + return el.style.pointerEvents === "auto"; + })(), + _detectDirection = function (el, options) { + let elCSS = css(el), + elWidth = + parseInt(elCSS.width) - + parseInt(elCSS.paddingLeft) - + parseInt(elCSS.paddingRight) - + parseInt(elCSS.borderLeftWidth) - + parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), - firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, - secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width; + firstChildWidth = + firstChildCSS && + parseInt(firstChildCSS.marginLeft) + + parseInt(firstChildCSS.marginRight) + + getRect(child1).width, + secondChildWidth = + secondChildCSS && + parseInt(secondChildCSS.marginLeft) + + parseInt(secondChildCSS.marginRight) + + getRect(child2).width; + + if (elCSS.display === "flex") { + return elCSS.flexDirection === "column" || + elCSS.flexDirection === "column-reverse" + ? "vertical" + : "horizontal"; + } - if (elCSS.display === 'flex') { - return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal'; - } + if (elCSS.display === "grid") { + return elCSS.gridTemplateColumns.split(" ").length <= 1 + ? "vertical" + : "horizontal"; + } - if (elCSS.display === 'grid') { - return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; - } + if (child1 && firstChildCSS.float && firstChildCSS.float !== "none") { + let touchingSideChild2 = + firstChildCSS.float === "left" ? "left" : "right"; - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; - return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; - } + return child2 && + (secondChildCSS.clear === "both" || + secondChildCSS.clear === touchingSideChild2) + ? "vertical" + : "horizontal"; + } - return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; - }, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + return child1 && + (firstChildCSS.display === "block" || + firstChildCSS.display === "flex" || + firstChildCSS.display === "table" || + firstChildCSS.display === "grid" || + (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none") || + (child2 && + elCSS[CSSFloatProperty] === "none" && + firstChildWidth + secondChildWidth > elWidth)) + ? "vertical" + : "horizontal"; + }, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height; - return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2; - }, - /** - * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. - * @param {Number} x X position - * @param {Number} y Y position - * @return {HTMLElement} Element of the first found nearest Sortable - */ - _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - if (lastChild(sortable)) return; - var rect = getRect(sortable), + return ( + dragElS1Opp === targetS1Opp || + dragElS2Opp === targetS2Opp || + dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2 + ); + }, + /** + * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. + * @param {Number} x X position + * @param {Number} y Y position + * @return {HTMLElement} Element of the first found nearest Sortable + */ + _detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some((sortable) => { + if (lastChild(sortable)) return; + if (firstChild(sortable)) return; + + let rect = getRect(sortable), threshold = sortable[expando].options.emptyInsertThreshold, - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + insideHorizontally = + x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = + y >= rect.top - threshold && y <= rect.bottom + threshold; - if (threshold && insideHorizontally && insideVertically) { - return ret = sortable; - } - }); - return ret; - }, - _prepareGroup = function _prepareGroup(options) { - function toFn(value, pull) { - return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; - - if (value == null && (pull || sameGroup)) { - // Default pull value - // Default pull and put value if same group - return true; - } else if (value == null || value === false) { - return false; - } else if (pull && value === 'clone') { - return value; - } else if (typeof value === 'function') { - return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); - } else { - var otherGroup = (pull ? to : from).options.group.name; - return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; + if (threshold && insideHorizontally && insideVertically) { + return (ret = sortable); } - }; - } + }); + return ret; + }, + _prepareGroup = function (options) { + function toFn(value, pull) { + return function (to, from, dragEl, evt) { + let sameGroup = + to.options.group.name && + from.options.group.name && + to.options.group.name === from.options.group.name; + + if (value == null && (pull || sameGroup)) { + // Default pull value + // Default pull and put value if same group + return true; + } else if (value == null || value === false) { + return false; + } else if (pull && value === "clone") { + return value; + } else if (typeof value === "function") { + return toFn(value(to, from, dragEl, evt), pull)( + to, + from, + dragEl, + evt + ); + } else { + let otherGroup = (pull ? to : from).options.group.name; - var group = {}; - var originalGroup = options.group; + return ( + value === true || + (typeof value === "string" && value === otherGroup) || + (value.join && value.indexOf(otherGroup) > -1) + ); + } + }; + } - if (!originalGroup || _typeof(originalGroup) != 'object') { - originalGroup = { - name: originalGroup - }; - } + let group = {}; + let originalGroup = options.group; - group.name = originalGroup.name; - group.checkPull = toFn(originalGroup.pull, true); - group.checkPut = toFn(originalGroup.put); - group.revertClone = originalGroup.revertClone; - options.group = group; - }, - _hideGhostForTarget = function _hideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', 'none'); - } - }, - _unhideGhostForTarget = function _unhideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', ''); - } - }; // #1184 fix - Prevent click event on fallback if dragged but item not changed position + if (!originalGroup || typeof originalGroup != "object") { + originalGroup = { name: originalGroup }; + } + group.name = originalGroup.name; + group.checkPull = toFn(originalGroup.pull, true); + group.checkPut = toFn(originalGroup.put); + group.revertClone = originalGroup.revertClone; - if (documentExists) { - document.addEventListener('click', function (evt) { - if (ignoreNextClick) { - evt.preventDefault(); - evt.stopPropagation && evt.stopPropagation(); - evt.stopImmediatePropagation && evt.stopImmediatePropagation(); - ignoreNextClick = false; - return false; + options.group = group; + }, + _hideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", "none"); } - }, true); + }, + _unhideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", ""); + } + }; + + // #1184 fix - Prevent click event on fallback if dragged but item not changed position + if (documentExists) { + document.addEventListener( + "click", + function (evt) { + if (ignoreNextClick) { + evt.preventDefault(); + evt.stopPropagation && evt.stopPropagation(); + evt.stopImmediatePropagation && evt.stopImmediatePropagation(); + ignoreNextClick = false; + return false; + } + }, + true + ); } - var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { + let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); - + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; - - for (var i in evt) { + let event = {}; + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } } - event.target = event.rootEl = nearest; event.preventDefault = void 0; event.stopPropagation = void 0; - nearest[expando]._onDragOver(event); } } }; - var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { + let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } }; + /** * @class Sortable * @param {HTMLElement} el * @param {Object} [options] */ - - function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call( + el + )}`; } this.el = el; // root element + this.options = options = Object.assign({}, options); - this.options = options = _extends({}, options); // Export instance - + // Export instance el[expando] = this; - var defaults = { + + let defaults = { group: null, sort: true, disabled: false, store: null, handle: null, - draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*', - swapThreshold: 1, - // percentage; 0 <= x <= 1 - invertSwap: false, - // invert always - invertedSwapThreshold: null, - // will be set to same as swapThreshold if default + draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*", + swapThreshold: 1, // percentage; 0 <= x <= 1 + invertSwap: false, // invert always + invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, - ghostClass: 'sortable-ghost', - chosenClass: 'sortable-chosen', - dragClass: 'sortable-drag', - ignore: 'a, img', + ghostClass: "sortable-ghost", + chosenClass: "sortable-chosen", + dragClass: "sortable-drag", + ignore: "a, img", filter: null, preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { - dataTransfer.setData('Text', dragEl.textContent); + setData: function (dataTransfer, dragEl) { + dataTransfer.setData("Text", dragEl.textContent); }, dropBubble: false, dragoverBubble: false, - dataIdAttr: 'data-id', + dataIdAttr: "data-id", delay: 0, delayOnTouchOnly: false, - touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, + touchStartThreshold: + (Number.parseInt ? Number : window).parseInt( + window.devicePixelRatio, + 10 + ) || 1, forceFallback: false, - fallbackClass: 'sortable-fallback', + fallbackClass: "sortable-fallback", fallbackOnBody: false, fallbackTolerance: 0, - fallbackOffset: { - x: 0, - y: 0 - }, - supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window, - emptyInsertThreshold: 5 + fallbackOffset: { x: 0, y: 0 }, + supportPointer: + Sortable.supportPointer !== false && "PointerEvent" in window, + emptyInsertThreshold: 5, }; - PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + PluginManager.initializePlugins(this, el, defaults); + + // Set default options + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } - _prepareGroup(options); // Bind all private methods + _prepareGroup(options); - - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } - } // Setup drag mode - + } + // Setup drag mode this.nativeDraggable = options.forceFallback ? false : supportDraggable; if (this.nativeDraggable) { // Touch start threshold cannot be greater than the native dragstart threshold this.options.touchStartThreshold = 1; - } // Bind events - + } + // Bind events if (options.supportPointer) { - on(el, 'pointerdown', this._onTapStart); + on(el, "pointerdown", this._onTapStart); } else { - on(el, 'mousedown', this._onTapStart); - on(el, 'touchstart', this._onTapStart); + on(el, "mousedown", this._onTapStart); + on(el, "touchstart", this._onTapStart); } if (this.nativeDraggable) { - on(el, 'dragover', this); - on(el, 'dragenter', this); + on(el, "dragover", this); + on(el, "dragenter", this); } - sortables.push(this.el); // Restore sorting + sortables.push(this.el); - options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager + // Restore sorting + options.store && + options.store.get && + this.sort(options.store.get(this) || []); - _extends(this, AnimationStateManager()); + // Add animation state manager + Object.assign(this, AnimationStateManager()); } - Sortable.prototype = - /** @lends Sortable.prototype */ - { + Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { - return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; - }, - _onTapStart: function _onTapStart( - /** Event|TouchEvent */ - evt) { - if (!evt.cancelable) return; - - var _this = this, - el = this.el, - options = this.options, - preventOnFilter = options.preventOnFilter, - type = evt.type, - touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt, - target = (touch || evt).target, - originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, - filter = options.filter; - - _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. + _getDirection: function (evt, target) { + return typeof this.options.direction === "function" + ? this.options.direction.call(this, evt, target, dragEl) + : this.options.direction; + }, + _onTapStart: function (/** Event|TouchEvent */ evt) { + if (!evt.cancelable) return; + let _this = this, + el = this.el, + options = this.options, + preventOnFilter = options.preventOnFilter, + type = evt.type, + touch = + (evt.touches && evt.touches[0]) || + (evt.pointerType && evt.pointerType === "touch" && evt), + target = (touch || evt).target, + originalTarget = + (evt.target.shadowRoot && + ((evt.path && evt.path[0]) || + (evt.composedPath && evt.composedPath()[0]))) || + target, + filter = options.filter; + + _saveInputCheckedState(el); + + // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. if (dragEl) { return; } - if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { + if ( + (/mousedown|pointerdown/.test(type) && evt.button !== 0) || + options.disabled + ) { return; // only left button and enabled - } // cancel dnd if original target is content editable - + } + // cancel dnd if original target is content editable if (originalTarget.isContentEditable) { return; } + // Safari ignores further event handling after mousedown + if ( + !this.nativeDraggable && + Safari && + target && + target.tagName.toUpperCase() === "SELECT" + ) { + return; + } + target = closest(target, options.draggable, el, false); if (target && target.animated) { @@ -1333,46 +1465,41 @@ if (lastDownEl === target) { // Ignoring duplicate `down` return; - } // Get the index of the dragged element within its parent - + } + // Get the index of the dragged element within its parent oldIndex = index(target); - oldDraggableIndex = index(target, options.draggable); // Check filter + oldDraggableIndex = index(target, options.draggable); - if (typeof filter === 'function') { + // Check filter + if (typeof filter === "function") { if (filter.call(this, evt, target, this)) { _dispatchEvent({ sortable: _this, rootEl: originalTarget, - name: 'filter', + name: "filter", targetEl: target, toEl: el, - fromEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + fromEl: el, }); + pluginEvent("filter", _this, { evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd } } else if (filter) { - filter = filter.split(',').some(function (criteria) { + filter = filter.split(",").some(function (criteria) { criteria = closest(originalTarget, criteria.trim(), el, false); if (criteria) { _dispatchEvent({ sortable: _this, rootEl: criteria, - name: 'filter', + name: "filter", targetEl: target, fromEl: el, - toEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + toEl: el, }); + pluginEvent("filter", _this, { evt }); return true; } }); @@ -1383,163 +1510,181 @@ } } - if (options.handle && !closest(originalTarget, options.handle, el, false)) { + if ( + options.handle && + !closest(originalTarget, options.handle, el, false) + ) { return; - } // Prepare `dragstart` - + } + // Prepare `dragstart` this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( - /** Event */ - evt, - /** Touch */ - touch, - /** HTMLElement */ - target) { - var _this = this, - el = _this.el, - options = _this.options, - ownerDocument = el.ownerDocument, - dragStartFn; + + _prepareDragStart: function ( + /** Event */ evt, + /** Touch */ touch, + /** HTMLElement */ target + ) { + let _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; + Sortable.dragged = dragEl; + tapEvt = { target: dragEl, clientX: (touch || evt).clientX, - clientY: (touch || evt).clientY + clientY: (touch || evt).clientY, }; + tapDistanceLeft = tapEvt.clientX - dragRect.left; tapDistanceTop = tapEvt.clientY - dragRect.top; + this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; - dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { - pluginEvent('delayEnded', _this, { - evt: evt - }); + dragEl.style["will-change"] = "all"; + dragStartFn = function () { + pluginEvent("delayEnded", _this, { evt }); if (Sortable.eventCanceled) { _this._onDrop(); - return; - } // Delayed drag has been triggered + } + // Delayed drag has been triggered // we can re-enable the events: touchmove/mousemove - - _this._disableDelayedDragEvents(); if (!FireFox && _this.nativeDraggable) { dragEl.draggable = true; - } // Bind the events: dragstart/dragend - - - _this._triggerDragStart(evt, touch); // Drag start event + } + // Bind the events: dragstart/dragend + _this._triggerDragStart(evt, touch); + // Drag start event _dispatchEvent({ sortable: _this, - name: 'choose', - originalEvent: evt - }); // Chosen item - + name: "choose", + originalEvent: evt, + }); + // Chosen item toggleClass(dragEl, options.chosenClass, true); - }; // Disable "draggable" - + }; - options.ignore.split(',').forEach(function (criteria) { + // Disable "draggable" + options.ignore.split(",").forEach(function (criteria) { find(dragEl, criteria.trim(), _disableDraggable); }); - on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mouseup', _this._onDrop); - on(ownerDocument, 'touchend', _this._onDrop); - on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox) + on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent); + on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent); + on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent); + + on(ownerDocument, "mouseup", _this._onDrop); + on(ownerDocument, "touchend", _this._onDrop); + on(ownerDocument, "touchcancel", _this._onDrop); + + // Make dragEl draggable (must be before delay for FireFox) if (FireFox && this.nativeDraggable) { this.options.touchStartThreshold = 4; dragEl.draggable = true; } - pluginEvent('delayStart', this, { - evt: evt - }); // Delay is impossible for native DnD in Edge or IE + pluginEvent("delayStart", this, { evt }); - if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { + // Delay is impossible for native DnD in Edge or IE + if ( + options.delay && + (!options.delayOnTouchOnly || touch) && + (!this.nativeDraggable || !(Edge || IE11OrLess)) + ) { if (Sortable.eventCanceled) { this._onDrop(); - return; - } // If the user moves the pointer or let go the click or touch + } + // If the user moves the pointer or let go the click or touch // before the delay has been reached: // disable the delayed drag + on(ownerDocument, "mouseup", _this._disableDelayedDrag); + on(ownerDocument, "touchend", _this._disableDelayedDrag); + on(ownerDocument, "touchcancel", _this._disableDelayedDrag); + on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler); + on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler); + options.supportPointer && + on( + ownerDocument, + "pointermove", + _this._delayedDragTouchMoveHandler + ); - - on(ownerDocument, 'mouseup', _this._disableDelayedDrag); - on(ownerDocument, 'touchend', _this._disableDelayedDrag); - on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); - on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler); - on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler); - options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( - /** TouchEvent|PointerEvent **/ - e) { - var touch = e.touches ? e.touches[0] : e; - if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { + _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) { + let touch = e.touches ? e.touches[0] : e; + if ( + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) >= + Math.floor( + this.options.touchStartThreshold / + ((this.nativeDraggable && window.devicePixelRatio) || 1) + ) + ) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._disableDelayedDrag); - off(ownerDocument, 'touchend', this._disableDelayedDrag); - off(ownerDocument, 'touchcancel', this._disableDelayedDrag); - off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); + + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; + off(ownerDocument, "mouseup", this._disableDelayedDrag); + off(ownerDocument, "touchend", this._disableDelayedDrag); + off(ownerDocument, "touchcancel", this._disableDelayedDrag); + off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( - /** Event */ - evt, - /** Touch */ - touch) { - touch = touch || evt.pointerType == 'touch' && evt; + + _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) { + touch = touch || (evt.pointerType == "touch" && evt); if (!this.nativeDraggable || touch) { if (this.options.supportPointer) { - on(document, 'pointermove', this._onTouchMove); + on(document, "pointermove", this._onTouchMove); } else if (touch) { - on(document, 'touchmove', this._onTouchMove); + on(document, "touchmove", this._onTouchMove); } else { - on(document, 'mousemove', this._onTouchMove); + on(document, "mousemove", this._onTouchMove); } } else { - on(dragEl, 'dragend', this); - on(rootEl, 'dragstart', this._onDragStart); + on(dragEl, "dragend", this); + on(rootEl, "dragstart", this._onDragStart); } try { @@ -1553,47 +1698,54 @@ } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; - if (rootEl && dragEl) { - pluginEvent('dragStarted', this, { - evt: evt - }); + pluginEvent("dragStarted", this, { evt }); if (this.nativeDraggable) { - on(document, 'dragover', _checkOutsideTargetEl); + on(document, "dragover", _checkOutsideTargetEl); } + let options = this.options; - var options = this.options; // Apply effect - + // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); + Sortable.active = this; - fallback && this._appendGhost(); // Drag start event + fallback && this._appendGhost(); + + // Drag start event _dispatchEvent({ sortable: this, - name: 'start', - originalEvent: evt + name: "start", + originalEvent: evt, }); } else { this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); + let parent = target; while (target && target.shadowRoot) { - target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + target = target.shadowRoot.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); if (target === parent) break; parent = target; } @@ -1603,12 +1755,13 @@ if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; + inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target: target, - rootEl: parent + rootEl: parent, }); if (inserted && !this.options.dragoverBubble) { @@ -1617,34 +1770,55 @@ } target = parent; // store last element - } - /* jshint boss:true */ - while (parent = parent.parentNode); + } while ( + /* jshint boss:true */ + (parent = parent.parentNode) + ); } _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( - /**TouchEvent*/ - evt) { - if (tapEvt) { - var options = this.options, - fallbackTolerance = options.fallbackTolerance, - fallbackOffset = options.fallbackOffset, - touch = evt.touches ? evt.touches[0] : evt, - ghostMatrix = ghostEl && matrix(ghostEl, true), - scaleX = ghostEl && ghostMatrix && ghostMatrix.a, - scaleY = ghostEl && ghostMatrix && ghostMatrix.d, - relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), - dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), - dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging + _onTouchMove: function (/**TouchEvent*/ evt) { + if (tapEvt) { + let options = this.options, + fallbackTolerance = options.fallbackTolerance, + fallbackOffset = options.fallbackOffset, + touch = evt.touches ? evt.touches[0] : evt, + ghostMatrix = ghostEl && matrix(ghostEl, true), + scaleX = ghostEl && ghostMatrix && ghostMatrix.a, + scaleY = ghostEl && ghostMatrix && ghostMatrix.d, + relativeScrollOffset = + PositionGhostAbsolutely && + ghostRelativeParent && + getRelativeScrollOffset(ghostRelativeParent), + dx = + (touch.clientX - tapEvt.clientX + fallbackOffset.x) / + (scaleX || 1) + + (relativeScrollOffset + ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] + : 0) / + (scaleX || 1), + dy = + (touch.clientY - tapEvt.clientY + fallbackOffset.y) / + (scaleY || 1) + + (relativeScrollOffset + ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] + : 0) / + (scaleY || 1); + + // only set the status to dragging, when we are actually dragging if (!Sortable.active && !awaitingDragStarted) { - if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) { + if ( + fallbackTolerance && + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) < fallbackTolerance + ) { return; } - this._onDragStart(evt, true); } @@ -1659,206 +1833,249 @@ c: 0, d: 1, e: dx, - f: dy + f: dy, }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); - css(ghostEl, 'webkitTransform', cssMatrix); - css(ghostEl, 'mozTransform', cssMatrix); - css(ghostEl, 'msTransform', cssMatrix); - css(ghostEl, 'transform', cssMatrix); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; + + css(ghostEl, "webkitTransform", cssMatrix); + css(ghostEl, "mozTransform", cssMatrix); + css(ghostEl, "msTransform", cssMatrix); + css(ghostEl, "transform", cssMatrix); + lastDx = dx; lastDy = dy; + touchEvt = touch; } evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, - rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), - options = this.options; // Position absolutely + let container = this.options.fallbackOnBody ? document.body : rootEl, + rect = getRect( + dragEl, + true, + PositionGhostAbsolutely, + true, + container + ), + options = this.options; + // Position absolutely if (PositionGhostAbsolutely) { // Get relatively positioned parent ghostRelativeParent = container; - while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) { + while ( + css(ghostRelativeParent, "position") === "static" && + css(ghostRelativeParent, "transform") === "none" && + ghostRelativeParent !== document + ) { ghostRelativeParent = ghostRelativeParent.parentNode; } - if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) { - if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement(); + if ( + ghostRelativeParent !== document.body && + ghostRelativeParent !== document.documentElement + ) { + if (ghostRelativeParent === document) + ghostRelativeParent = getWindowScrollingElement(); + rect.top += ghostRelativeParent.scrollTop; rect.left += ghostRelativeParent.scrollLeft; } else { ghostRelativeParent = getWindowScrollingElement(); } - - ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent); + ghostRelativeParentInitialScroll = getRelativeScrollOffset( + ghostRelativeParent + ); } ghostEl = dragEl.cloneNode(true); + toggleClass(ghostEl, options.ghostClass, false); toggleClass(ghostEl, options.fallbackClass, true); toggleClass(ghostEl, options.dragClass, true); - css(ghostEl, 'transition', ''); - css(ghostEl, 'transform', ''); - css(ghostEl, 'box-sizing', 'border-box'); - css(ghostEl, 'margin', 0); - css(ghostEl, 'top', rect.top); - css(ghostEl, 'left', rect.left); - css(ghostEl, 'width', rect.width); - css(ghostEl, 'height', rect.height); - css(ghostEl, 'opacity', '0.8'); - css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed'); - css(ghostEl, 'zIndex', '100000'); - css(ghostEl, 'pointerEvents', 'none'); + + css(ghostEl, "transition", ""); + css(ghostEl, "transform", ""); + + css(ghostEl, "box-sizing", "border-box"); + css(ghostEl, "margin", 0); + css(ghostEl, "top", rect.top); + css(ghostEl, "left", rect.left); + css(ghostEl, "width", rect.width); + css(ghostEl, "height", rect.height); + css(ghostEl, "opacity", "0.8"); + css( + ghostEl, + "position", + PositionGhostAbsolutely ? "absolute" : "fixed" + ); + css(ghostEl, "zIndex", "100000"); + css(ghostEl, "pointerEvents", "none"); + Sortable.ghost = ghostEl; - container.appendChild(ghostEl); // Set transform-origin - css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); + container.appendChild(ghostEl); + + // Set transform-origin + css( + ghostEl, + "transform-origin", + (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 + + "% " + + (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 + + "%" + ); } }, - _onDragStart: function _onDragStart( - /**Event*/ - evt, - /**boolean*/ - fallback) { - var _this = this; - - var dataTransfer = evt.dataTransfer; - var options = _this.options; - pluginEvent('dragStart', this, { - evt: evt - }); + _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) { + let _this = this; + let dataTransfer = evt.dataTransfer; + let options = _this.options; + + pluginEvent("dragStart", this, { evt }); if (Sortable.eventCanceled) { this._onDrop(); - return; } - pluginEvent('setupClone', this); - + pluginEvent("setupClone", this); if (!Sortable.eventCanceled) { cloneEl = clone(dragEl); + cloneEl.draggable = false; - cloneEl.style['will-change'] = ''; + cloneEl.style["will-change"] = ""; this._hideClone(); toggleClass(cloneEl, this.options.chosenClass, false); Sortable.clone = cloneEl; - } // #1143: IFrame support workaround - + } + // #1143: IFrame support workaround _this.cloneId = _nextTick(function () { - pluginEvent('clone', _this); + pluginEvent("clone", _this); if (Sortable.eventCanceled) return; if (!_this.options.removeCloneOnHide) { rootEl.insertBefore(cloneEl, dragEl); } - _this._hideClone(); _dispatchEvent({ sortable: _this, - name: 'clone' + name: "clone", }); }); - !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events + !fallback && toggleClass(dragEl, options.dragClass, true); + + // Set proper drop events if (fallback) { ignoreNextClick = true; _this._loopId = setInterval(_this._emulateDragOver, 50); } else { // Undo what was set in _prepareDragStart before drag started - off(document, 'mouseup', _this._onDrop); - off(document, 'touchend', _this._onDrop); - off(document, 'touchcancel', _this._onDrop); + off(document, "mouseup", _this._onDrop); + off(document, "touchend", _this._onDrop); + off(document, "touchcancel", _this._onDrop); if (dataTransfer) { - dataTransfer.effectAllowed = 'move'; + dataTransfer.effectAllowed = "move"; options.setData && options.setData.call(_this, dataTransfer, dragEl); } - on(document, 'drop', _this); // #1276 fix: + on(document, "drop", _this); - css(dragEl, 'transform', 'translateZ(0)'); + // #1276 fix: + css(dragEl, "transform", "translateZ(0)"); } awaitingDragStarted = true; - _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt)); - on(document, 'selectstart', _this); + + _this._dragStartId = _nextTick( + _this._dragStarted.bind(_this, fallback, evt) + ); + on(document, "selectstart", _this); + moved = true; if (Safari) { - css(document.body, 'user-select', 'none'); + css(document.body, "user-select", "none"); } }, + // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( - /**Event*/ - evt) { - var el = this.el, - target = evt.target, - dragRect, - targetRect, - revert, - options = this.options, - group = options.group, - activeSortable = Sortable.active, - isOwner = activeGroup === group, - canSort = options.sort, - fromSortable = putSortable || activeSortable, - vertical, - _this = this, - completedFired = false; + _onDragOver: function (/**Event*/ evt) { + let el = this.el, + target = evt.target, + dragRect, + targetRect, + revert, + options = this.options, + group = options.group, + activeSortable = Sortable.active, + isOwner = activeGroup === group, + canSort = options.sort, + fromSortable = putSortable || activeSortable, + vertical, + _this = this, + completedFired = false; if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread({ - evt: evt, - isOwner: isOwner, - axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + pluginEvent(name, _this, { + evt, + isOwner, + axis: vertical ? "vertical" : "horizontal", + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + onMove(target, after) { + return onMove( + rootEl, + el, + dragEl, + dragRect, + target, + getRect(target), + evt, + after + ); }, - changed: changed - }, extra)); - } // Capture animation state - + changed, + ...extra, + }); + } + // Capture animation state function capture() { - dragOverEvent('dragOverAnimationCapture'); + dragOverEvent("dragOverAnimationCapture"); _this.captureAnimationState(); - if (_this !== fromSortable) { fromSortable.captureAnimationState(); } - } // Return invocation when dragEl is inserted (or completed) - + } + // Return invocation when dragEl is inserted (or completed) function completed(insertion) { - dragOverEvent('dragOverCompleted', { - insertion: insertion - }); + dragOverEvent("dragOverCompleted", { insertion }); if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -1870,7 +2087,13 @@ if (_this !== fromSortable) { // Set ghost class to new sortable's ghost class - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : activeSortable.options.ghostClass, + false + ); toggleClass(dragEl, options.ghostClass, true); } @@ -1878,53 +2101,54 @@ putSortable = _this; } else if (_this === Sortable.active && putSortable) { putSortable = null; - } // Animation - + } + // Animation if (fromSortable === _this) { _this._ignoreWhileAnimating = target; } - _this.animateAll(function () { - dragOverEvent('dragOverAnimationComplete'); + dragOverEvent("dragOverAnimationComplete"); _this._ignoreWhileAnimating = null; }); - if (_this !== fromSortable) { fromSortable.animateAll(); fromSortable._ignoreWhileAnimating = null; } - } // Null lastTarget if it is not inside a previously swapped element - + } - if (target === dragEl && !dragEl.animated || target === el && !target.animated) { + // Null lastTarget if it is not inside a previously swapped element + if ( + (target === dragEl && !dragEl.animated) || + (target === el && !target.animated) + ) { lastTarget = null; - } // no bubbling and not fallback - + } + // no bubbling and not fallback if (!options.dragoverBubble && !evt.rootEl && target !== document) { - dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted - + dragEl.parentNode[expando]._isOutsideThisEl(evt.target); + // Do not detect for empty insert if already inserted !insertion && nearestEmptyInsertDetectEvent(evt); } !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); - return completedFired = true; - } // Call when dragEl has been inserted + return (completedFired = true); + } + // Call when dragEl has been inserted function changed() { newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - _dispatchEvent({ sortable: _this, - name: 'change', + name: "change", toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, - originalEvent: evt + newIndex, + newDraggableIndex, + originalEvent: evt, }); } @@ -1933,30 +2157,48 @@ } target = closest(target, options.draggable, el, true); - dragOverEvent('dragOver'); + + dragOverEvent("dragOver"); if (Sortable.eventCanceled) return completedFired; - if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) { + if ( + dragEl.contains(evt.target) || + (target.animated && target.animatingX && target.animatingY) || + _this._ignoreWhileAnimating === target + ) { return completed(false); } ignoreNextClick = false; - if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list - : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) { - vertical = this._getDirection(evt, target) === 'vertical'; + if ( + activeSortable && + !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : putSortable === this || + ((this.lastPutMode = activeGroup.checkPull( + this, + activeSortable, + dragEl, + evt + )) && + group.checkPut(this, activeSortable, dragEl, evt))) + ) { + vertical = this._getDirection(evt, target) === "vertical"; + dragRect = getRect(dragEl); - dragOverEvent('dragOverValid'); + + dragOverEvent("dragOverValid"); if (Sortable.eventCanceled) return completedFired; if (revert) { parentEl = rootEl; // actualization - capture(); this._hideClone(); - dragOverEvent('revert'); + dragOverEvent("revert"); if (!Sortable.eventCanceled) { if (nextEl) { @@ -1969,72 +2211,128 @@ return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); - if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { + let elFirstChild = firstChild(el, options.draggable); + if ( + !elLastChild || + (_ghostIsLast(evt, vertical, this) && !elLastChild.animated) || !elFirstChild || (_ghostIsFirst(evt,vertical,this) && !elFirstChild.animated) + ) { // If already at end of list: Do not insert - if (elLastChild === dragEl) { + if (elLastChild === dragEl || elFirstChild === dragEl) { return completed(false); - } // assign target only if condition is true - + } + // assign target only if condition is true if (elLastChild && el === evt.target) { target = elLastChild; } + if (elFirstChild && el === evt.target) { + target = elFirstChild; + } if (target) { targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if ( + onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + !!target + ) !== false + ) { capture(); - el.appendChild(dragEl); + if(!elLastChild || + (_ghostIsLast(evt, vertical, this) && !elLastChild.animated)){ + el.appendChild(dragEl); + } else { + el.insertBefore(dragEl, elFirstChild); + } parentEl = el; // actualization - changed(); return completed(true); } - } else if (target.parentNode === el) { + } + else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, - targetBeforeFirstSwap, - differentLevel = dragEl.parentNode !== el, - differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), - side1 = vertical ? 'top' : 'left', - scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'), - scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; + let direction = 0, + targetBeforeFirstSwap, + differentLevel = dragEl.parentNode !== el, + differentRowCol = !_dragElInRowColumn( + (dragEl.animated && dragEl.toRect) || dragRect, + (target.animated && target.toRect) || targetRect, + vertical + ), + side1 = vertical ? "top" : "left", + scrolledPastTop = + isScrolledPast(target, "top", "top") || + isScrolledPast(dragEl, "top", "top"), + scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; if (lastTarget !== target) { targetBeforeFirstSwap = targetRect[side1]; pastFirstInvertThresh = false; - isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel; + isCircumstantialInvert = + (!differentRowCol && options.invertSwap) || differentLevel; } - direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + direction = _getSwapDirection( + evt, + target, + targetRect, + vertical, + differentRowCol ? 1 : options.swapThreshold, + options.invertedSwapThreshold == null + ? options.swapThreshold + : options.invertedSwapThreshold, + isCircumstantialInvert, + lastTarget === target + ); + + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; sibling = parentEl.children[dragIndex]; - } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl)); - } // If dragEl is already beside target: Do not insert - - + } while ( + sibling && + (css(sibling, "display") === "none" || sibling === ghostEl) + ); + } + // If dragEl is already beside target: Do not insert if (direction === 0 || sibling === target) { return completed(false); } lastTarget = target; + lastDirection = direction; - var nextSibling = target.nextElementSibling, - after = false; + + let nextSibling = target.nextElementSibling, + after = false; + after = direction === 1; - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + after + ); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2043,27 +2341,40 @@ _silent = true; setTimeout(_unsilent, 30); + capture(); if (after && !nextSibling) { el.appendChild(dragEl); } else { - target.parentNode.insertBefore(dragEl, after ? nextSibling : target); - } // Undo chrome's scroll adjustment (has no effect on other browsers) - + target.parentNode.insertBefore( + dragEl, + after ? nextSibling : target + ); + } + // Undo chrome's scroll adjustment (has no effect on other browsers) if (scrolledPastTop) { - scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop); + scrollBy( + scrolledPastTop, + 0, + scrollBefore - scrolledPastTop.scrollTop + ); } parentEl = dragEl.parentNode; // actualization - // must be done before animation - if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { - targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]); + // must be done before animation + if ( + targetBeforeFirstSwap !== undefined && + !isCircumstantialInvert + ) { + targetMoveDistance = Math.abs( + targetBeforeFirstSwap - getRect(target)[side1] + ); } - changed(); + return completed(true); } } @@ -2075,70 +2386,75 @@ return false; }, + _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { - off(document, 'mousemove', this._onTouchMove); - off(document, 'touchmove', this._onTouchMove); - off(document, 'pointermove', this._onTouchMove); - off(document, 'dragover', nearestEmptyInsertDetectEvent); - off(document, 'mousemove', nearestEmptyInsertDetectEvent); - off(document, 'touchmove', nearestEmptyInsertDetectEvent); + + _offMoveEvents: function () { + off(document, "mousemove", this._onTouchMove); + off(document, "touchmove", this._onTouchMove); + off(document, "pointermove", this._onTouchMove); + off(document, "dragover", nearestEmptyInsertDetectEvent); + off(document, "mousemove", nearestEmptyInsertDetectEvent); + off(document, "touchmove", nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._onDrop); - off(ownerDocument, 'touchend', this._onDrop); - off(ownerDocument, 'pointerup', this._onDrop); - off(ownerDocument, 'touchcancel', this._onDrop); - off(document, 'selectstart', this); + + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; + + off(ownerDocument, "mouseup", this._onDrop); + off(ownerDocument, "touchend", this._onDrop); + off(ownerDocument, "pointerup", this._onDrop); + off(ownerDocument, "touchcancel", this._onDrop); + off(document, "selectstart", this); }, - _onDrop: function _onDrop( - /**Event*/ - evt) { - var el = this.el, - options = this.options; // Get the index of the dragged element within its parent + _onDrop: function (/**Event*/ evt) { + let el = this.el, + options = this.options; + + // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - pluginEvent('drop', this, { - evt: evt + + pluginEvent("drop", this, { + evt, }); - parentEl = dragEl && dragEl.parentNode; // Get again after plugin event + parentEl = dragEl && dragEl.parentNode; + + // Get again after plugin event newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); if (Sortable.eventCanceled) { this._nulling(); - return; } awaitingDragStarted = false; isCircumstantialInvert = false; pastFirstInvertThresh = false; + clearInterval(this._loopId); + clearTimeout(this._dragStartTimer); _cancelNextTick(this.cloneId); + _cancelNextTick(this._dragStartId); - _cancelNextTick(this._dragStartId); // Unbind events - - + // Unbind events if (this.nativeDraggable) { - off(document, 'drop', this); - off(el, 'dragstart', this._onDragStart); + off(document, "drop", this); + off(el, "dragstart", this._onDragStart); } - this._offMoveEvents(); - this._offUpEvents(); if (Safari) { - css(document.body, 'user-select', ''); + css(document.body, "user-select", ""); } - css(dragEl, 'transform', ''); + css(dragEl, "transform", ""); if (evt) { if (moved) { @@ -2146,36 +2462,49 @@ !options.dropBubble && evt.stopPropagation(); } - ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); + ghostEl && + ghostEl.parentNode && + ghostEl.parentNode.removeChild(ghostEl); - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { // Remove clone(s) - cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); + cloneEl && + cloneEl.parentNode && + cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { - off(dragEl, 'dragend', this); + off(dragEl, "dragend", this); } _disableDraggable(dragEl); + dragEl.style["will-change"] = ""; - dragEl.style['will-change'] = ''; // Remove classes + // Remove classes // ghostClass is added in dragStarted - if (moved && !awaitingDragStarted) { - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : this.options.ghostClass, + false + ); } + toggleClass(dragEl, this.options.chosenClass, false); - toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event - + // Drag stop event _dispatchEvent({ sortable: this, - name: 'unchoose', + name: "unchoose", toEl: parentEl, newIndex: null, newDraggableIndex: null, - originalEvent: evt + originalEvent: evt, }); if (rootEl !== parentEl) { @@ -2183,34 +2512,34 @@ // Add event _dispatchEvent({ rootEl: parentEl, - name: 'add', + name: "add", toEl: parentEl, fromEl: rootEl, - originalEvent: evt - }); // Remove event - + originalEvent: evt, + }); + // Remove event _dispatchEvent({ sortable: this, - name: 'remove', + name: "remove", toEl: parentEl, - originalEvent: evt - }); // drag from one list and drop into another - + originalEvent: evt, + }); + // drag from one list and drop into another _dispatchEvent({ rootEl: parentEl, - name: 'sort', + name: "sort", toEl: parentEl, fromEl: rootEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } @@ -2221,16 +2550,16 @@ // drag & drop within the same list _dispatchEvent({ sortable: this, - name: 'update', + name: "update", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } } @@ -2245,48 +2574,47 @@ _dispatchEvent({ sortable: this, - name: 'end', + name: "end", toEl: parentEl, - originalEvent: evt - }); // Save sorting - + originalEvent: evt, + }); + // Save sorting this.save(); } } } - this._nulling(); }, - _nulling: function _nulling() { - pluginEvent('nulling', this); + + _nulling: function () { + pluginEvent("nulling", this); + rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; + savedInputChecked.forEach(function (el) { el.checked = true; }); + savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( - /**Event*/ - evt) { + + handleEvent: function (/**Event*/ evt) { switch (evt.type) { - case 'drop': - case 'dragend': + case "drop": + case "dragend": this._onDrop(evt); - break; - case 'dragenter': - case 'dragover': + case "dragenter": + case "dragover": if (dragEl) { this._onDragOver(evt); - _globalDragOver(evt); } - break; - case 'selectstart': + case "selectstart": evt.preventDefault(); break; } @@ -2296,17 +2624,16 @@ * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], - el, - children = this.el.children, - i = 0, - n = children.length, - options = this.options; + toArray: function () { + let order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; for (; i < n; i++) { el = children[i]; - if (closest(el, options.draggable, this.el, false)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } @@ -2319,16 +2646,18 @@ * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order) { - var items = {}, - rootEl = this.el; + sort: function (order) { + let items = {}, + rootEl = this.el; + this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; } }, this); + order.forEach(function (id) { if (items[id]) { rootEl.removeChild(items[id]); @@ -2340,8 +2669,8 @@ /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2351,7 +2680,7 @@ * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2361,21 +2690,20 @@ * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); - - if (typeof modifiedValue !== 'undefined') { + let modifiedValue = PluginManager.modifyOption(this, name, value); + if (typeof modifiedValue !== "undefined") { options[name] = modifiedValue; } else { options[name] = value; } - if (name === 'group') { + if (name === "group") { _prepareGroup(options); } } @@ -2384,56 +2712,62 @@ /** * Destroy */ - destroy: function destroy() { - pluginEvent('destroy', this); - var el = this.el; - el[expando] = null; - off(el, 'mousedown', this._onTapStart); - off(el, 'touchstart', this._onTapStart); - off(el, 'pointerdown', this._onTapStart); + destroy: function () { + pluginEvent("destroy", this); + let el = this.el; - if (this.nativeDraggable) { - off(el, 'dragover', this); - off(el, 'dragenter', this); - } // Remove draggable attributes + el[expando] = null; + off(el, "mousedown", this._onTapStart); + off(el, "touchstart", this._onTapStart); + off(el, "pointerdown", this._onTapStart); - Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { - el.removeAttribute('draggable'); - }); + if (this.nativeDraggable) { + off(el, "dragover", this); + off(el, "dragenter", this); + } + // Remove draggable attributes + Array.prototype.forEach.call( + el.querySelectorAll("[draggable]"), + function (el) { + el.removeAttribute("draggable"); + } + ); this._onDrop(); this._disableDelayedDragEvents(); sortables.splice(sortables.indexOf(this.el), 1); + this.el = el = null; }, - _hideClone: function _hideClone() { + + _hideClone: function () { if (!cloneHidden) { - pluginEvent('hideClone', this); + pluginEvent("hideClone", this); if (Sortable.eventCanceled) return; - css(cloneEl, 'display', 'none'); + css(cloneEl, "display", "none"); if (this.options.removeCloneOnHide && cloneEl.parentNode) { cloneEl.parentNode.removeChild(cloneEl); } - cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { - if (putSortable.lastPutMode !== 'clone') { - this._hideClone(); + _showClone: function (putSortable) { + if (putSortable.lastPutMode !== "clone") { + this._hideClone(); return; } if (cloneHidden) { - pluginEvent('showClone', this); - if (Sortable.eventCanceled) return; // show clone at dragEl or original position + pluginEvent("showClone", this); + if (Sortable.eventCanceled) return; - if (rootEl.contains(dragEl) && !this.options.group.revertClone) { + // show clone at dragEl or original position + if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { rootEl.insertBefore(cloneEl, dragEl); } else if (nextEl) { rootEl.insertBefore(cloneEl, nextEl); @@ -2445,36 +2779,42 @@ this.animate(dragEl, cloneEl); } - css(cloneEl, 'display', ''); + css(cloneEl, "display", ""); cloneHidden = false; } - } + }, }; - function _globalDragOver( - /**Event*/ - evt) { + function _globalDragOver(/**Event*/ evt) { if (evt.dataTransfer) { - evt.dataTransfer.dropEffect = 'move'; + evt.dataTransfer.dropEffect = "move"; } - evt.cancelable && evt.preventDefault(); } - function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, - sortable = fromEl[expando], - onMoveFn = sortable.options.onMove, - retVal; // Support for new CustomEvent feature - + function onMove( + fromEl, + toEl, + dragEl, + dragRect, + targetEl, + targetRect, + originalEvent, + willInsertAfter + ) { + let evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { - evt = new CustomEvent('move', { + evt = new CustomEvent("move", { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); - evt.initEvent('move', true, true); + evt = document.createEvent("Event"); + evt.initEvent("move", true, true); } evt.to = toEl; @@ -2484,7 +2824,9 @@ evt.related = targetEl || toEl; evt.relatedRect = targetRect || getRect(toEl); evt.willInsertAfter = willInsertAfter; + evt.originalEvent = originalEvent; + fromEl.dispatchEvent(evt); if (onMoveFn) { @@ -2503,32 +2845,71 @@ } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; - return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; + + return vertical + ? evt.clientX > rect.right + spacer || + (evt.clientX <= rect.right && + evt.clientY > rect.bottom && + evt.clientX >= rect.left) + : (evt.clientX > rect.right && evt.clientY > rect.top) || + (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer); } - function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, - targetLength = vertical ? targetRect.height : targetRect.width, - targetS1 = vertical ? targetRect.top : targetRect.left, - targetS2 = vertical ? targetRect.bottom : targetRect.right, - invert = false; + function _ghostIsFirst(evt, vertical, sortable) { + let rect = getRect(firstChild(sortable.el, sortable.options.draggable)); + const spacer = 10; + + return vertical + ? evt.clientX > rect.right + spacer || + (evt.clientX <= rect.right && + evt.clientY < rect.top && + evt.clientX >= rect.left) + : (evt.clientX < rect.left && evt.clientY > rect.top) || + (evt.clientX >= rect.left && evt.clientY > rect.bottom + spacer); + } + + function _getSwapDirection( + evt, + target, + targetRect, + vertical, + swapThreshold, + invertedSwapThreshold, + invertSwap, + isLastTarget + ) { + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, + targetLength = vertical ? targetRect.height : targetRect.width, + targetS1 = vertical ? targetRect.top : targetRect.left, + targetS2 = vertical ? targetRect.bottom : targetRect.right, + invert = false; if (!invertSwap) { // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 // check if past first invert threshold on side opposite of lastDirection - if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) { + if ( + !pastFirstInvertThresh && + (lastDirection === 1 + ? mouseOnAxis > + targetS1 + (targetLength * invertedSwapThreshold) / 2 + : mouseOnAxis < + targetS2 - (targetLength * invertedSwapThreshold) / 2) + ) { // past first invert threshold, do not restrict inverted threshold to dragEl shadow pastFirstInvertThresh = true; } if (!pastFirstInvertThresh) { // dragEl shadow (target move distance shadow) - if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow - : mouseOnAxis > targetS2 - targetMoveDistance) { + if ( + lastDirection === 1 + ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow + : mouseOnAxis > targetS2 - targetMoveDistance + ) { return -lastDirection; } } else { @@ -2536,7 +2917,10 @@ } } else { // Regular - if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) { + if ( + mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 && + mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2 + ) { return _getInsertDirection(target); } } @@ -2546,21 +2930,23 @@ if (invert) { // Invert of regular - if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) { + if ( + mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 || + mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2 + ) { return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1; } } return 0; } + /** * Gets the direction dragEl must be swapped relative to target in order to make it * seem that dragEl has been "inserted" into that element's position * @param {HTMLElement} target The target whose position dragEl is being inserted at * @return {Number} Direction dragEl must be swapped */ - - function _getInsertDirection(target) { if (index(dragEl) < index(target)) { return 1; @@ -2568,18 +2954,17 @@ return -1; } } + /** * Generate id * @param {HTMLElement} el * @returns {String} * @private */ - - function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, - i = str.length, - sum = 0; + let str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; while (i--) { sum += str.charCodeAt(i); @@ -2590,11 +2975,12 @@ function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + + let inputs = root.getElementsByTagName("input"); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2605,24 +2991,24 @@ function _cancelNextTick(id) { return clearTimeout(id); - } // Fixed #973: - + } + // Fixed #973: if (documentExists) { - on(document, 'touchmove', function (evt) { + on(document, "touchmove", function (evt) { if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { evt.preventDefault(); } }); - } // Export utils - + } + // Export utils Sortable.utils = { on: on, off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2634,60 +3020,57 @@ nextTick: _nextTick, cancelNextTick: _cancelNextTick, detectDirection: _detectDirection, - getChild: getChild + getChild: getChild, }; + /** * Get the Sortable instance of an element * @param {HTMLElement} element The element * @return {Sortable|undefined} The instance of Sortable */ - Sortable.get = function (element) { return element[expando]; }; + /** * Mount a plugin to Sortable * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted */ - - - Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - + Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + + plugins.forEach((plugin) => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call( + plugin + )}`; } + if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils }; - if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils); PluginManager.mount(plugin); }); }; + /** * Create sortable instance * @param {HTMLElement} el * @param {Object} [options] */ - - Sortable.create = function (el, options) { return new Sortable(el, options); - }; // Export - + }; + // Export Sortable.version = version; - var autoScrolls = [], - scrollEl, - scrollRootEl, - scrolling = false, - lastAutoScrollX, - lastAutoScrollY, - touchEvt$1, - pointerElemChangedInterval; + let autoScrolls = [], + scrollEl, + scrollRootEl, + scrolling = false, + lastAutoScrollX, + lastAutoScrollY, + touchEvt$1, + pointerElemChangedInterval; function AutoScrollPlugin() { function AutoScroll() { @@ -2695,106 +3078,124 @@ scroll: true, scrollSensitivity: 30, scrollSpeed: 10, - bubbleScroll: true - }; // Bind all private methods + bubbleScroll: true, + }; - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ originalEvent }) { if (this.sortable.nativeDraggable) { - on(document, 'dragover', this._handleAutoScroll); + on(document, "dragover", this._handleAutoScroll); } else { if (this.options.supportPointer) { - on(document, 'pointermove', this._handleFallbackAutoScroll); + on(document, "pointermove", this._handleFallbackAutoScroll); } else if (originalEvent.touches) { - on(document, 'touchmove', this._handleFallbackAutoScroll); + on(document, "touchmove", this._handleFallbackAutoScroll); } else { - on(document, 'mousemove', this._handleFallbackAutoScroll); + on(document, "mousemove", this._handleFallbackAutoScroll); } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ originalEvent }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { - off(document, 'dragover', this._handleAutoScroll); + off(document, "dragover", this._handleAutoScroll); } else { - off(document, 'pointermove', this._handleFallbackAutoScroll); - off(document, 'touchmove', this._handleFallbackAutoScroll); - off(document, 'mousemove', this._handleFallbackAutoScroll); + off(document, "pointermove", this._handleFallbackAutoScroll); + off(document, "touchmove", this._handleFallbackAutoScroll); + off(document, "mousemove", this._handleFallbackAutoScroll); } clearPointerElemChangedInterval(); clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; + autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); - touchEvt$1 = evt; // IE does not seem to have native autoscroll, + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); + + touchEvt$1 = evt; + + // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, // Firefox and Chrome are good - if (fallback || Edge || IE11OrLess || Safari) { - autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - - var ogElemScroller = getParentAutoScrollElement(elem, true); - - if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { - pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); - + autoScroll(evt, this.options, elem, fallback); + + // Listener for pointer element change + let ogElemScroller = getParentAutoScrollElement(elem, true); + if ( + scrolling && + (!pointerElemChangedInterval || + x !== lastAutoScrollX || + y !== lastAutoScrollY) + ) { + pointerElemChangedInterval && clearPointerElemChangedInterval(); + // Detect for pointer elem change, emulating native DnD behaviour + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement( + document.elementFromPoint(x, y), + true + ); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; } } else { // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll - if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) { + if ( + !this.options.bubbleScroll || + getParentAutoScrollElement(elem, true) === + getWindowScrollingElement() + ) { clearAutoScrolls(); return; } - - autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); + autoScroll( + evt, + this.options, + getParentAutoScrollElement(elem, false), + false + ); } - } + }, }; - return _extends(AutoScroll, { - pluginName: 'scroll', - initializeByDefault: true + + return Object.assign(AutoScroll, { + pluginName: "scroll", + initializeByDefault: true, }); } @@ -2809,20 +3210,24 @@ clearInterval(pointerElemChangedInterval); } - var autoScroll = throttle(function (evt, options, rootEl, isFallback) { + const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, - scrollCustomFn; // New scroll root, set scrollEl + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + let scrollThisInstance = false, + scrollCustomFn; + + // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { scrollRootEl = rootEl; + clearAutoScrolls(); + scrollEl = options.scroll; scrollCustomFn = options.scrollFn; @@ -2831,105 +3236,140 @@ } } - var layersOut = 0; - var currentParent = scrollEl; - + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, - rect = getRect(el), - top = rect.top, - bottom = rect.bottom, - left = rect.left, - right = rect.right, - width = rect.width, - height = rect.height, - canScrollX = void 0, - canScrollY = void 0, - scrollWidth = el.scrollWidth, - scrollHeight = el.scrollHeight, - elCSS = css(el), - scrollPosX = el.scrollLeft, - scrollPosY = el.scrollTop; + let el = currentParent, + rect = getRect(el), + top = rect.top, + bottom = rect.bottom, + left = rect.left, + right = rect.right, + width = rect.width, + height = rect.height, + canScrollX, + canScrollY, + scrollWidth = el.scrollWidth, + scrollHeight = el.scrollHeight, + elCSS = css(el), + scrollPosX = el.scrollLeft, + scrollPosY = el.scrollTop; if (el === winScroller) { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || + elCSS.overflowX === "scroll" || + elCSS.overflowX === "visible"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || + elCSS.overflowY === "scroll" || + elCSS.overflowY === "visible"); } else { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll"); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = + canScrollX && + (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - + (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = + canScrollY && + (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - + (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } } } - if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { + if ( + autoScrolls[layersOut].vx != vx || + autoScrolls[layersOut].vy != vy || + autoScrolls[layersOut].el !== el + ) { autoScrolls[layersOut].el = el; autoScrolls[layersOut].vx = vx; autoScrolls[layersOut].vy = vy; + clearInterval(autoScrolls[layersOut].pid); if (vx != 0 || vy != 0) { scrollThisInstance = true; /* jshint loopfunc:true */ - - autoScrolls[layersOut].pid = setInterval(function () { - // emulate drag over during autoscroll (fallback), emulating native DnD behaviour - if (isFallback && this.layer === 0) { - Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely - - } - - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; - - if (typeof scrollCustomFn === 'function') { - if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { - return; + autoScrolls[layersOut].pid = setInterval( + function () { + // emulate drag over during autoscroll (fallback), emulating native DnD behaviour + if (isFallback && this.layer === 0) { + Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely + } + let scrollOffsetY = autoScrolls[this.layer].vy + ? autoScrolls[this.layer].vy * speed + : 0; + let scrollOffsetX = autoScrolls[this.layer].vx + ? autoScrolls[this.layer].vx * speed + : 0; + + if (typeof scrollCustomFn === "function") { + if ( + scrollCustomFn.call( + Sortable.dragged.parentNode[expando], + scrollOffsetX, + scrollOffsetY, + evt, + touchEvt$1, + autoScrolls[this.layer].el + ) !== "continue" + ) { + return; + } } - } - scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); - }.bind({ - layer: layersOut - }), 24); + scrollBy( + autoScrolls[this.layer].el, + scrollOffsetX, + scrollOffsetY + ); + }.bind({ layer: layersOut }), + 24 + ); } } - layersOut++; } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); - scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); - var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; + const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget, + }) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = + originalEvent.changedTouches && originalEvent.changedTouches.length + ? originalEvent.changedTouches[0] + : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); - if (toSortable && !toSortable.el.contains(target)) { - dispatchSortableEvent('spill'); - this.onSpill({ - dragEl: dragEl, - putSortable: putSortable - }); + dispatchSortableEvent("spill"); + this.onSpill({ dragEl, putSortable }); } }; @@ -2937,86 +3377,79 @@ Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + dragStart({ oldDraggableIndex }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + onSpill({ dragEl, putSortable }) { this.sortable.captureAnimationState(); - if (putSortable) { putSortable.captureAnimationState(); } - - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild( + this.sortable.el, + this.startIndex, + this.options + ); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); } else { this.sortable.el.appendChild(dragEl); } - this.sortable.animateAll(); - if (putSortable) { putSortable.animateAll(); } }, - drop: drop + drop, }; - _extends(Revert, { - pluginName: 'revertOnSpill' + Object.assign(Revert, { + pluginName: "revertOnSpill", }); function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ dragEl, putSortable }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + drop, }; - _extends(Remove, { - pluginName: 'removeOnSpill' + Object.assign(Remove, { + pluginName: "removeOnSpill", }); - var lastSwapEl; + let lastSwapEl; function SwapPlugin() { function Swap() { this.defaults = { - swapClass: 'sortable-swap-highlight' + swapClass: "sortable-swap-highlight", }; } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ dragEl }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel, + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, - options = this.options; - + let el = this.sortable.el, + options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; - + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); lastSwapEl = target; @@ -3028,207 +3461,197 @@ toggleClass(prevSwapEl, options.swapClass, false); } } - changed(); + completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + drop({ activeSortable, putSortable, dragEl }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); - - if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { + if ( + lastSwapEl && + (options.swap || (putSortable && putSortable.options.swap)) + ) { if (dragEl !== lastSwapEl) { toSortable.captureAnimationState(); - if (toSortable !== activeSortable) activeSortable.captureAnimationState(); + if (toSortable !== activeSortable) + activeSortable.captureAnimationState(); swapNodes(dragEl, lastSwapEl); + toSortable.animateAll(); if (toSortable !== activeSortable) activeSortable.animateAll(); } } }, - nulling: function nulling() { + nulling() { lastSwapEl = null; - } + }, }; - return _extends(Swap, { - pluginName: 'swap', - eventProperties: function eventProperties() { + + return Object.assign(Swap, { + pluginName: "swap", + eventProperties() { return { - swapItem: lastSwapEl + swapItem: lastSwapEl, }; - } + }, }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, - p2 = n2.parentNode, - i1, - i2; + let p1 = n1.parentNode, + p2 = n2.parentNode, + i1, + i2; + if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return; + i1 = index(n1); i2 = index(n2); if (p1.isEqualNode(p2) && i1 < i2) { i2++; } - p1.insertBefore(n2, p1.children[i1]); p2.insertBefore(n1, p2.children[i2]); } - var multiDragElements = [], - multiDragClones = [], - lastMultiDragSelect, - // for selection with modifier key down (SHIFT) - multiDragSortable, - initialFolding = false, - // Initial multi-drag fold when drag started - folding = false, - // Folding any other time - dragStarted = false, - dragEl$1, - clonesFromRect, - clonesHidden; + let multiDragElements = [], + multiDragClones = [], + lastMultiDragSelect, // for selection with modifier key down (SHIFT) + multiDragSortable, + initialFolding = false, // Initial multi-drag fold when drag started + folding = false, // Folding any other time + dragStarted = false, + dragEl$1, + clonesFromRect, + clonesHidden; function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } if (sortable.options.supportPointer) { - on(document, 'pointerup', this._deselectMultiDrag); + on(document, "pointerup", this._deselectMultiDrag); } else { - on(document, 'mouseup', this._deselectMultiDrag); - on(document, 'touchend', this._deselectMultiDrag); + on(document, "mouseup", this._deselectMultiDrag); + on(document, "touchend", this._deselectMultiDrag); } - on(document, 'keydown', this._checkKeyDown); - on(document, 'keyup', this._checkKeyUp); + on(document, "keydown", this._checkKeyDown); + on(document, "keyup", this._checkKeyUp); + this.defaults = { - selectedClass: 'sortable-selected', + selectedClass: "sortable-selected", multiDragKey: null, - setData: function setData(dataTransfer, dragEl) { - var data = ''; - + setData(dataTransfer, dragEl) { + let data = ""; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { - data += (!i ? '' : ', ') + multiDragElement.textContent; + multiDragElements.forEach((multiDragElement, i) => { + data += (!i ? "" : ", ") + multiDragElement.textContent; }); } else { data = dragEl.textContent; } - - dataTransfer.setData('Text', data); - } + dataTransfer.setData("Text", data); + }, }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ dragEl: dragged }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; - if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + setupClone({ sortable, cancel }) { + if (!this.isMultiDrag) return; + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); + multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; + multiDragClones[i].draggable = false; - multiDragClones[i].style['will-change'] = ''; + multiDragClones[i].style["will-change"] = ""; + toggleClass(multiDragClones[i], this.options.selectedClass, false); - multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false); + multiDragElements[i] === dragEl$1 && + toggleClass(multiDragClones[i], this.options.chosenClass, false); } sortable._hideClone(); - cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; - if (!this.isMultiDrag) return; + clone({ sortable, rootEl, dispatchSortableEvent, cancel }) { + if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { if (multiDragElements.length && multiDragSortable === sortable) { insertMultiDragClones(true, rootEl); - dispatchSortableEvent('clone'); + dispatchSortableEvent("clone"); + cancel(); } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ cloneNowShown, rootEl, cancel }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { - css(clone, 'display', ''); + multiDragClones.forEach((clone) => { + css(clone, "display", ""); }); + cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ sortable, cloneNowHidden, cancel }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { - css(clone, 'display', 'none'); - - if (_this.options.removeCloneOnHide && clone.parentNode) { + multiDragClones.forEach((clone) => { + css(clone, "display", "none"); + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); + cloneNowHidden(); clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ sortable }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.sortableIndex = index(multiDragElement); - }); // Sort multi-drag elements + }); + // Sort multi-drag elements multiDragElements = multiDragElements.sort(function (a, b) { return a.sortableIndex - b.sortableIndex; }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ sortable }) { if (!this.isMultiDrag) return; - if (this.options.sort) { // Capture rects, // hide multi drag elements (by positioning them absolute), @@ -3236,101 +3659,110 @@ // show multi drag elements, // animate to rects, // unset rects & remove from DOM + sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - css(multiDragElement, 'position', 'absolute'); + css(multiDragElement, "position", "absolute"); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + + let dragRect = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); + folding = true; initialFolding = true; } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); - } // Remove all auxiliary multidrag items from el, if sorting enabled - + } - if (_this2.options.sort) { + // Remove all auxiliary multidrag items from el, if sorting enabled + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ target, completed, cancel }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ fromSortable, rootEl, sortable, dragRect }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { sortable.addAnimationState({ target: multiDragElement, - rect: folding ? getRect(multiDragElement) : dragRect + rect: folding ? getRect(multiDragElement) : dragRect, }); + unsetRect(multiDragElement); + multiDragElement.fromRect = dragRect; + fromSortable.removeAnimationState(multiDragElement); }); folding = false; insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable, + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly if (isOwner) { activeSortable._hideClone(); } - initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location - - if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { + initialFolding = false; + // If leaving sort:false root, or already folding - Fold to new location + if ( + options.animation && + multiDragElements.length > 1 && + (folding || + (!isOwner && !activeSortable.options.sort && !putSortable)) + ) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted - // while folding, and so that we can capture them again because old sortable will no longer be fromSortable + setRect(multiDragElement, dragRectAbsolute); + // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted + // while folding, and so that we can capture them again because old sortable will no longer be fromSortable parentEl.appendChild(multiDragElement); }); - folding = true; - } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out + folding = true; + } + // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out if (!isOwner) { // Only remove if not folding (folding will remove them anyways) if (!folding) { @@ -3338,17 +3770,21 @@ } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; - - activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden - + let clonesHiddenBefore = clonesHidden; + activeSortable._showClone(sortable); - if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + // Unfold animation for clones if showing from hidden + if ( + activeSortable.options.animation && + !clonesHidden && + clonesHiddenBefore + ) { + multiDragClones.forEach((clone) => { activeSortable.addAnimationState({ target: clone, - rect: clonesFromRect + rect: clonesFromRect, }); + clone.fromRect = clonesFromRect; clone.thisAnimationDuration = null; }); @@ -3359,66 +3795,81 @@ } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; }); - if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { - clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + if ( + activeSortable.options.animation && + !isOwner && + activeSortable.multiDrag.isMultiDrag + ) { + clonesFromRect = Object.assign({}, dragRect); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable, + }) { + let toSortable = putSortable || this.sortable; + if (!evt) return; - var options = this.options, - children = parentEl.children; // Multi-drag selection + let options = this.options, + children = parentEl.children; + + // Multi-drag selection if (!dragStarted) { if (options.multiDragKey && !this.multiDragKeyDown) { this._deselectMultiDrag(); } - - toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1)); + toggleClass( + dragEl$1, + options.selectedClass, + !~multiDragElements.indexOf(dragEl$1) + ); if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: dragEl$1, - originalEvt: evt - }); // Modifier activated, select from last to dragEl + originalEvt: evt, + }); - if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), - currentIndex = index(dragEl$1); + // Modifier activated, select from last to dragEl + if ( + evt.shiftKey && + lastMultiDragSelect && + sortable.el.contains(lastMultiDragSelect) + ) { + let lastIndex = index(lastMultiDragSelect), + currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; - + let n, i; if (currentIndex > lastIndex) { i = lastIndex; n = currentIndex; @@ -3431,12 +3882,13 @@ if (~multiDragElements.indexOf(children[i])) continue; toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); + dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: children[i], - originalEvt: evt + originalEvt: evt, }); } } @@ -3449,222 +3901,256 @@ multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'deselect', + sortable, + rootEl, + name: "deselect", targetEl: dragEl$1, - originalEvt: evt + originalEvt: evt, }); } - } // Multi-drag drop - + } + // Multi-drag drop if (dragStarted && this.isMultiDrag) { // Do not "unfold" after around dragEl if reverted - if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), - multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); - if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; + if ( + (parentEl[expando].options.sort || parentEl !== rootEl) && + multiDragElements.length > 1 + ) { + let dragRect = getRect(dragEl$1), + multiDragIndex = index( + dragEl$1, + ":not(." + this.options.selectedClass + ")" + ); + + if (!initialFolding && options.animation) + dragEl$1.thisAnimationDuration = null; + toSortable.captureAnimationState(); if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; - if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; - multiDragElement.fromRect = rect; // Prepare unfold animation + let rect = folding ? getRect(multiDragElement) : dragRect; + multiDragElement.fromRect = rect; + // Prepare unfold animation toSortable.addAnimationState({ target: multiDragElement, - rect: rect + rect: rect, }); } }); - } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert - // properly they must all be removed - + } + // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert + // properly they must all be removed removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + + multiDragElements.forEach((multiDragElement) => { if (children[multiDragIndex]) { - parentEl.insertBefore(multiDragElement, children[multiDragIndex]); + parentEl.insertBefore( + multiDragElement, + children[multiDragIndex] + ); } else { parentEl.appendChild(multiDragElement); } - multiDragIndex++; - }); // If initial folding is done, the elements may have changed position because they are now + }); + + // If initial folding is done, the elements may have changed position because they are now // unfolding around dragEl, even though dragEl may not have his index changed, so update event // must be fired here as Sortable will not. - if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { - if (multiDragElement.sortableIndex !== index(multiDragElement)) { + let update = false; + multiDragElements.forEach((multiDragElement) => { + if ( + multiDragElement.sortableIndex !== index(multiDragElement) + ) { update = true; return; } }); if (update) { - dispatchSortableEvent('update'); + dispatchSortableEvent("update"); } } - } // Must be done after capturing individual rects (scroll bar) - + } - multiDragElements.forEach(function (multiDragElement) { + // Must be done after capturing individual rects (scroll bar) + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); + toSortable.animateAll(); } multiDragSortable = toSortable; - } // Remove clones if necessary - + } - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + // Remove clones if necessary + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { + multiDragClones.forEach((clone) => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); + off(document, "pointerup", this._deselectMultiDrag); + off(document, "mouseup", this._deselectMultiDrag); + off(document, "touchend", this._deselectMultiDrag); - off(document, 'pointerup', this._deselectMultiDrag); - off(document, 'mouseup', this._deselectMultiDrag); - off(document, 'touchend', this._deselectMultiDrag); - off(document, 'keydown', this._checkKeyDown); - off(document, 'keyup', this._checkKeyUp); + off(document, "keydown", this._checkKeyDown); + off(document, "keyup", this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { - if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable - if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable + _deselectMultiDrag(evt) { + if (typeof dragStarted !== "undefined" && dragStarted) return; + + // Only deselect if selection is in this sortable + if (multiDragSortable !== this.sortable) return; - if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click + // Only deselect if target is not item in this sortable + if ( + evt && + closest(evt.target, this.options.draggable, this.sortable.el, false) + ) + return; + // Only deselect if left click if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ sortable: this.sortable, rootEl: this.sortable.el, - name: 'deselect', + name: "deselect", targetEl: el, - originalEvt: evt + originalEvt: evt, }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } - } + }, }; - return _extends(MultiDrag, { + + return Object.assign(MultiDrag, { // Static methods & properties - pluginName: 'multiDrag', + pluginName: "multiDrag", utils: { /** * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; - if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; - + select(el) { + let sortable = el.parentNode[expando]; + if ( + !sortable || + !sortable.options.multiDrag || + ~multiDragElements.indexOf(el) + ) + return; if (multiDragSortable && multiDragSortable !== sortable) { multiDragSortable.multiDrag._deselectMultiDrag(); - multiDragSortable = sortable; } - toggleClass(el, sortable.options.selectedClass, true); multiDragElements.push(el); }, - /** * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], - index = multiDragElements.indexOf(el); + deselect(el) { + let sortable = el.parentNode[expando], + index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); - } + }, }, - eventProperties: function eventProperties() { - var _this3 = this; + eventProperties() { + const oldIndicies = [], + newIndicies = []; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { oldIndicies.push({ - multiDragElement: multiDragElement, - index: multiDragElement.sortableIndex - }); // multiDragElements will already be sorted if folding - - var newIndex; + multiDragElement, + index: multiDragElement.sortableIndex, + }); + // multiDragElements will already be sorted if folding + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index( + multiDragElement, + ":not(." + this.options.selectedClass + ")" + ); } else { newIndex = index(multiDragElement); } - newIndicies.push({ - multiDragElement: multiDragElement, - index: newIndex + multiDragElement, + index: newIndex, }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies, }; }, optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); - - if (key === 'ctrl') { - key = 'Control'; + if (key === "ctrl") { + key = "Control"; } else if (key.length > 1) { key = key.charAt(0).toUpperCase() + key.substr(1); } - return key; - } - } + }, + }, }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; - + multiDragElements.forEach((multiDragElement, i) => { + let target = + rootEl.children[ + multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0) + ]; if (target) { rootEl.insertBefore(multiDragElement, target); } else { @@ -3672,17 +4158,18 @@ } }); } + /** * Insert multi-drag clones * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted * @param {HTMLElement} rootEl */ - - function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; - + multiDragClones.forEach((clone, i) => { + let target = + rootEl.children[ + clone.sortableIndex + (elementsInserted ? Number(i) : 0) + ]; if (target) { rootEl.insertBefore(clone, target); } else { @@ -3692,9 +4179,10 @@ } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); + multiDragElement.parentNode && + multiDragElement.parentNode.removeChild(multiDragElement); }); } @@ -3705,5 +4193,4 @@ Sortable.mount(new MultiDragPlugin()); return Sortable; - -})); +}); diff --git a/Sortable.min.js b/Sortable.min.js index eba061497..5b48756b7 100644 --- a/Sortable.min.js +++ b/Sortable.min.js @@ -1,2 +1,2 @@ -/*! Sortable 1.10.2 - MIT | git://github.com/SortableJS/Sortable.git */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&h(t,e):h(t,e))||o&&t===n)return t;if(t===n)break}while(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode)}var i;return null}var f,p=/\s+/g;function k(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(p," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(p," ")}}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function g(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=e.left-n&&r<=e.right+n,i=a>=e.top-n&&a<=e.bottom+n;return n&&o&&i?l=t:void 0}}),l}((t=t.touches?t.touches[0]:t).clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[j]._onDragOver(n)}}}function kt(t){z&&z.parentNode[j]._isOutsideThisEl(t.target)}function Rt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ot(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Rt.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};for(var o in O.initializePlugins(this,t,n),n)o in e||(e[o]=n[o]);for(var i in At(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&xt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?u(t,"pointerdown",this._onTapStart):(u(t,"mousedown",this._onTapStart),u(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(u(t,"dragover",this),u(t,"dragenter",this)),bt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,T())}function Xt(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||w||E?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Yt(t){t.draggable=!1}function Bt(){Dt=!1}function Ft(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ht(t){return setTimeout(t,0)}function Lt(t){return clearTimeout(t)}Rt.prototype={constructor:Rt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(ht=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(function(t){St.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&St.push(o)}}(o),!z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled||s.isContentEditable||(l=P(l,t.draggable,o,!1))&&l.animated||Z===l)){if(J=F(l),et=F(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return W({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),K("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return W({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),K("filter",n,{evt:e}),!0})))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;if(n&&!z&&n.parentNode===r){var s=X(n);if(q=r,G=(z=n).parentNode,V=z.nextSibling,Z=n,ot=a.group,rt={target:Rt.dragged=z,clientX:(e||t).clientX,clientY:(e||t).clientY},ct=rt.clientX-s.left,ut=rt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,z.style["will-change"]="all",o=function(){K("delayEnded",i,{evt:t}),Rt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!c&&i.nativeDraggable&&(z.draggable=!0),i._triggerDragStart(t,e),W({sortable:i,name:"choose",originalEvent:t}),k(z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){g(z,t.trim(),Yt)}),u(l,"dragover",Pt),u(l,"mousemove",Pt),u(l,"touchmove",Pt),u(l,"mouseup",i._onDrop),u(l,"touchend",i._onDrop),u(l,"touchcancel",i._onDrop),c&&this.nativeDraggable&&(this.options.touchStartThreshold=4,z.draggable=!0),K("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(E||w))o();else{if(Rt.eventCanceled)return void this._onDrop();u(l,"mouseup",i._disableDelayedDrag),u(l,"touchend",i._disableDelayedDrag),u(l,"touchcancel",i._disableDelayedDrag),u(l,"mousemove",i._delayedDragTouchMoveHandler),u(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&u(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){z&&Yt(z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;d(t,"mouseup",this._disableDelayedDrag),d(t,"touchend",this._disableDelayedDrag),d(t,"touchcancel",this._disableDelayedDrag),d(t,"mousemove",this._delayedDragTouchMoveHandler),d(t,"touchmove",this._delayedDragTouchMoveHandler),d(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?u(document,"pointermove",this._onTouchMove):u(document,e?"touchmove":"mousemove",this._onTouchMove):(u(z,"dragend",this),u(q,"dragstart",this._onDragStart));try{document.selection?Ht(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(vt=!1,q&&z){K("dragStarted",this,{evt:e}),this.nativeDraggable&&u(document,"dragover",kt);var n=this.options;t||k(z,n.dragClass,!1),k(z,n.ghostClass,!0),Rt.active=this,t&&this._appendGhost(),W({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,Nt();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY))!==e;)e=t;if(z.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){if(e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);It()}},_onTouchMove:function(t){if(rt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=U&&v(U,!0),a=U&&r&&r.a,l=U&&r&&r.d,s=Ct&>&&b(gt),c=(i.clientX-rt.clientX+o.x)/(a||1)+(s?s[0]-Et[0]:0)/(a||1),u=(i.clientY-rt.clientY+o.y)/(l||1)+(s?s[1]-Et[1]:0)/(l||1);if(!Rt.active&&!vt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(n,a,this)&&!g.animated){if(g===z)return A(!1);if(g&&l===n.target&&(s=g),s&&(i=X(s)),!1!==Xt(q,l,z,o,s,i,n,!!s))return O(),l.appendChild(z),G=l,N(),A(!0)}else if(s.parentNode===l){i=X(s);var v,m,b,y=z.parentNode!==l,w=!function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,r=n?t.width:t.height,a=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===a||i===l||o+r/2===a+s/2}(z.animated&&z.toRect||o,s.animated&&s.toRect||i,a),E=a?"top":"left",D=Y(s,"top","top")||Y(z,"top","top"),S=D?D.scrollTop:void 0;if(ht!==s&&(m=i[E],yt=!1,wt=!w&&e.invertSwap||y),0!==(v=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,h=!1;if(!a)if(l&&pt", - "owenm " - ], - "description": "JavaScript library for reorderable drag-and-drop lists on modern browsers and touch devices. No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.", - "keywords": [ - "sortable", - "reorder", - "list", - "html5", - "drag", - "and", - "drop", - "dnd", - "web-components" - ], - "license": "MIT", - "ignore": [ - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..a0af95660 --- /dev/null +++ b/composer.json @@ -0,0 +1,41 @@ +{ + "name": "SortableJS/Sortable", + "type": "component", + "description": "Sortable is a JavaScript library for reorderable drag-and-drop lists.", + "homepage": "http://sortablejs.github.io/Sortable/", + "license": "MIT", + "authors": [ + { + "name": "Wayne Van Son", + "email": "waynevanson@gmail.com" + }, + { + "name": "Owen Mills", + "email": "owen23355@gmail.com" + } + ], + "keywords": [ + "sortable", + "reorder", + "list", + "html5", + "drag", + "and", + "drop", + "dnd" + ], + "support": { + "issues": "https://github.com/SortableJS/Sortable/issues", + "source": "https://github.com/SortableJS/Sortable.git" + }, + "prefer-stable": true, + "minimum-stability": "dev", + "extra": { + "component": { + "files": [ + "Sortable.js", + "Sortable.min.js" + ] + } + } +} diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 000000000..073b95b5b --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,32 @@ +### Bootstrap + +Demo: https://jsbin.com/visimub/edit?html,js,output + +```html + + + + + + + +
    +
  • + This is Sortable +
  • +
  • It works with Bootstrap...
  • +
  • ...out of the box.
  • +
  • It has support for touch devices.
  • +
  • Just drag some elements around.
  • +
+ + +``` diff --git a/plugins/README.md b/docs/plugins.md similarity index 89% rename from plugins/README.md rename to docs/plugins.md index 1dbef58d0..f36caa027 100644 --- a/plugins/README.md +++ b/docs/plugins.md @@ -1,6 +1,8 @@ +todo - move to wiki or docs + # Creating Sortable Plugins -Sortable plugins are plugins that can be directly mounted to the Sortable class. They are a powerful way of modifying the default behaviour of Sortable beyond what simply using events alone allows. To mount your plugin to Sortable, it must pass a constructor function to the `Sortable.mount` function. This constructor function will be called (with the `new` keyword in front of it) whenever a Sortable instance with your plugin enabled is initialized. The constructor function will be called with the parameters `sortable` and `el`, which is the HTMLElement that the Sortable is being initialized on. This means that there will be a new instance of your plugin each time it is enabled in a Sortable. +Sortable plugins are plugins that can be directly mounted to the Sortable class. They are a powerful way of modifying the default behaviour of Sortable beyond what simply using events alone allows. To mount your plugin to Sortable, it must pass a constructor function to the `Sortable.mount` function. This constructor function will be called (with the `new` keyword in front of it) whenever a Sortable instance with your plugin enabled is initialized. The constructor function will be called with the parameters `sortable` and `el`, which is the HTMLElement that the Sortable is being initialized on. This means that there will be a new instance of your plugin each time it is enabled in a Sortable. ## Constructor Parameters @@ -10,8 +12,8 @@ Sortable plugins are plugins that can be directly mounted to the Sortable class. `options: Object` β€” The options object that the user has passed into Sortable (not merged with defaults yet) - ## Static Properties + The constructor function passed to `Sortable.mount` may contain several static properties and methods. The following static properties may be defined: `pluginName: String` (Required) @@ -37,68 +39,71 @@ The name of the method should match the name of the option it listens for. The n Example: ```js -Plugin.name = 'generateTitle'; +Plugin.name = "generateTitle"; Plugin.optionListeners = { - // Listen for option 'generateTitle' - generateTitle: function(title) { - // Store the option in all caps - return title.toUpperCase(); - - // OR save it to this instance of your plugin as a private field. - // This way it can be accessed in events, but will not modify the user's options. - this.titleAllCaps = title.toUpperCase(); - } + // Listen for option 'generateTitle' + generateTitle: function (title) { + // Store the option in all caps + return title.toUpperCase(); + + // OR save it to this instance of your plugin as a private field. + // This way it can be accessed in events, but will not modify the user's options. + this.titleAllCaps = title.toUpperCase(); + }, }; - -``` +``` ## Plugin Options + Plugins may have custom default options or may override the defaults of other options. In order to do this, there must be a `defaults` object on the initialized plugin. This can be set in the plugin's prototype, or during the initialization of the plugin (when the `el` is available). For example: ```js function myPlugin(sortable, el, options) { - this.defaults = { - color: el.style.backgroundColor - }; + this.defaults = { + color: el.style.backgroundColor, + }; } Sortable.mount(myPlugin); ``` - ## Plugin Events ### Context + The events will be fired in the context of their own parent object (ie. context is not changed), however the plugin instance's Sortable instance is available under `this.sortable`. Likewise, the options are available under `this.options`. ### Event List + The following table contains details on the events that a plugin may handle in the prototype of the plugin's constructor function. -| Event Name | Description | Cancelable? | Cancel Behaviour | Event Type | Custom Event Object Properties | -|---------------------------|------------------------------------------------------------------------------------------------------------------|-------------|----------------------------------------------------|------------|-------------------------------------------------------------------------| -| filter | Fired when the element is filtered, and dragging is therefore canceled | No | - | Normal | None | -| delayStart | Fired when the delay starts, even if there is no delay | Yes | Cancels sorting | Normal | None | -| delayEnded | Fired when the delay ends, even if there is no delay | Yes | Cancels sorting | Normal | None | -| setupClone | Fired when Sortable clones the dragged element | Yes | Cancels normal clone setup | Normal | None | -| dragStart | Fired when the dragging is first started | Yes | Cancels sorting | Normal | None | -| clone | Fired when the clone is inserted into the DOM (if `removeCloneOnHide: false`). Tick after dragStart. | Yes | Cancels normal clone insertion & hiding | Normal | None | -| dragStarted | Fired tick after dragStart | No | - | Normal | None | -| dragOver | Fired when the user drags over a sortable | Yes | Cancels normal dragover behaviour | DragOver | None | -| dragOverValid | Fired when the user drags over a sortable that the dragged item can be inserted into | Yes | Cancels normal valid dragover behaviour | DragOver | None | -| revert | Fired when the dragged item is reverted to it's original position when entering it's `sort:false` root | Yes | Cancels normal reverting, but is still completed() | DragOver | None | -| dragOverCompleted | Fired when dragOver is completed (ie. bubbling is disabled). To check if inserted, use `inserted` even property. | No | - | DragOver | `insertion: Boolean` β€” Whether or not the dragged element was inserted | -| dragOverAnimationCapture | Fired right before the animation state is captured in dragOver | No | - | DragOver | None | -| dragOverAnimationComplete | Fired after the animation is completed after a dragOver insertion | No | - | DragOver | None | -| drop | Fired on drop | Yes | Cancels normal drop behavior | Normal | None | -| nulling | Fired when the plugin should preform cleanups, once all drop events have fired | No | - | Normal | None | -| destroy | Fired when Sortable is destroyed | No | - | Normal | None | +| Event Name | Description | Cancelable? | Cancel Behaviour | Event Type | Custom Event Object Properties | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------------------------- | ---------- | ---------------------------------------------------------------------- | +| filter | Fired when the element is filtered, and dragging is therefore canceled | No | - | Normal | None | +| delayStart | Fired when the delay starts, even if there is no delay | Yes | Cancels sorting | Normal | None | +| delayEnded | Fired when the delay ends, even if there is no delay | Yes | Cancels sorting | Normal | None | +| setupClone | Fired when Sortable clones the dragged element | Yes | Cancels normal clone setup | Normal | None | +| dragStart | Fired when the dragging is first started | Yes | Cancels sorting | Normal | None | +| clone | Fired when the clone is inserted into the DOM (if `removeCloneOnHide: false`). Tick after dragStart. | Yes | Cancels normal clone insertion & hiding | Normal | None | +| dragStarted | Fired tick after dragStart | No | - | Normal | None | +| dragOver | Fired when the user drags over a sortable | Yes | Cancels normal dragover behaviour | DragOver | None | +| dragOverValid | Fired when the user drags over a sortable that the dragged item can be inserted into | Yes | Cancels normal valid dragover behaviour | DragOver | None | +| revert | Fired when the dragged item is reverted to it's original position when entering it's `sort:false` root | Yes | Cancels normal reverting, but is still completed() | DragOver | None | +| dragOverCompleted | Fired when dragOver is completed (ie. bubbling is disabled). To check if inserted, use `inserted` even property. | No | - | DragOver | `insertion: Boolean` β€” Whether or not the dragged element was inserted | +| dragOverAnimationCapture | Fired right before the animation state is captured in dragOver | No | - | DragOver | None | +| dragOverAnimationComplete | Fired after the animation is completed after a dragOver insertion | No | - | DragOver | None | +| drop | Fired on drop | Yes | Cancels normal drop behavior | Normal | None | +| nulling | Fired when the plugin should preform cleanups, once all drop events have fired | No | - | Normal | None | +| destroy | Fired when Sortable is destroyed | No | - | Normal | None | ### Global Events + Normally, an event will only be fired in a plugin if the plugin is enabled on the Sortable from which the event is being fired. However, it sometimes may be desirable for a plugin to listen in on an event from Sortables in which it is not enabled on. This is possible with global events. For an event to be global, simply add the suffix 'Global' to the event's name (casing matters) (eg. `dragStartGlobal`). Please note that your plugin must be initialized on any Sortable from which it expects to recieve events, and that includes global events. In other words, you will want to keep the `initializeByDefault` option as it's default `true` value if your plugin needs to recieve events from Sortables it is not enabled on. Please also note that if both normal and global event handlers are set, the global event handler will always be fired before the regular one. ### Event Object + An object with the following properties is passed as an argument to each plugin event when it is fired. #### Properties: @@ -119,7 +124,7 @@ An object with the following properties is passed as an argument to each plugin `dragStarted: Boolean` β€” Boolean indicating whether or not the dragStart event has fired -`putSortable: Sortable|undefined` β€” The element that dragEl is dragged into from it's root, otherwise undefined +`putSortable: Sortable|undefined` β€” The element that dragEl is dragged into from it's root, otherwise undefined `activeSortable: Sortable` β€” The active Sortable instance @@ -133,7 +138,6 @@ An object with the following properties is passed as an argument to each plugin `newDraggableIndex: Number` β€” The new index of dragEl, only counting draggable elements - #### Methods: `cloneNowHidden()` β€” Function to be called if the plugin has hidden the clone @@ -146,8 +150,8 @@ An object with the following properties is passed as an argument to each plugin `dispatchSortableEvent(eventName: String)` β€” Function that can be used to emit an event on the current sortable while sorting, with all usual event properties set (eg. indexes, rootEl, cloneEl, originalEvent, etc.). - ### DragOverEvent Object + This event is passed to dragover events, and extends the normal event object. #### Properties: @@ -168,7 +172,6 @@ This event is passed to dragover events, and extends the normal event object. `target: HTMLElement` β€” The sortable item that is being dragged over - #### Methods: `onMove(target: HTMLElement, after: Boolean): Boolean|Number` β€” Calls the `onMove` function the user specified in the options diff --git a/docs/sortable-options.md b/docs/sortable-options.md new file mode 100644 index 000000000..3e2e2b3b6 --- /dev/null +++ b/docs/sortable-options.md @@ -0,0 +1,234 @@ +# Sortable Options + +todo: on[Event] options. Currently they're only in the summary. +todo: generate TOC + +## Normal Options + +### `group` option + +To drag elements from one list into another, both lists must have the same `group` value. +You can also define whether lists can give away, give and keep a copy (`clone`), and receive elements. + +- name: `String` β€” group name +- pull: `true|false|["foo", "bar"]|'clone'|function` β€” ability to move from the list. `clone` β€” copy the item, rather than move. Or an array of group names which the elements may be put in. Defaults to `true`. +- put: `true|false|["baz", "qux"]|function` β€” whether elements can be added from other lists, or an array of group names from which elements can be added. +- revertClone: `boolean` β€” revert cloned element to initial position after moving to a another list. + +Demo: + +- https://jsbin.com/hijetos/edit?js,output +- https://jsbin.com/nacoyah/edit?js,output β€” use of complex logic in the `pull` and` put` +- https://jsbin.com/bifuyab/edit?js,output β€” use `revertClone: true` + +### `sort` option + +Allow sorting inside list. + +Demo: https://jsbin.com/jayedig/edit?js,output + +### `delay` option + +Time in milliseconds to define when the sorting should start. +Unfortunately, due to browser restrictions, delaying is not possible on IE or Edge with native drag & drop. + +Demo: https://jsbin.com/zosiwah/edit?js,output + +### `delayOnTouchOnly` option + +Whether or not the delay should be applied only if the user is using touch (eg. on a mobile device). No delay will be applied in any other case. Defaults to `false`. + +### `swapThreshold` option + +Percentage of the target that the swap zone will take up, as a float between `0` and `1`. + +[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#swap-threshold) + +Demo: http://sortablejs.github.io/Sortable#thresholds + +### `invertSwap` option + +Set to `true` to set the swap zone to the sides of the target, for the effect of sorting "in between" items. + +[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#forcing-inverted-swap-zone) + +Demo: http://sortablejs.github.io/Sortable#thresholds + +### `invertedSwapThreshold` option + +Percentage of the target that the inverted swap zone will take up, as a float between `0` and `1`. If not given, will default to `swapThreshold`. + +[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#dealing-with-swap-glitching) + +### `direction` option + +Direction that the Sortable should sort in. Can be set to `'vertical'`, `'horizontal'`, or a function, which will be called whenever a target is dragged over. Must return `'vertical'` or `'horizontal'`. + +[Read more](https://github.com/SortableJS/Sortable/wiki/Swap-Thresholds-and-Direction#direction) + +Example of direction detection for vertical list that includes full column and half column elements: + +```js +Sortable.create(el, { + direction: function (evt, target, dragEl) { + if ( + target !== null && + target.className.includes("half-column") && + dragEl.className.includes("half-column") + ) { + return "horizontal"; + } + return "vertical"; + }, +}); +``` + +### `touchStartThreshold` option + +This option is similar to `fallbackTolerance` option. + +When the `delay` option is set, some phones with very sensitive touch displays like the Samsung Galaxy S8 will fire +unwanted touchmove events even when your finger is not moving, resulting in the sort not triggering. + +This option sets the minimum pointer movement that must occur before the delayed sorting is cancelled. + +Values between 3 to 5 are good. + +### `disabled` options + +Disables the sortable if set to `true`. + +Demo: https://jsbin.com/sewokud/edit?js,output + +```js +var sortable = Sortable.create(list); + +document.getElementById("switcher").onclick = function () { + var state = sortable.option("disabled"); // get + + sortable.option("disabled", !state); // set +}; +``` + +### `handle` option + +To make list items draggable, Sortable disables text selection by the user. +That's not always desirable. To allow text selection, define a drag handler, +which is an area of every list element that allows it to be dragged around. + +Demo: https://jsbin.com/numakuh/edit?html,js,output + +```js +Sortable.create(el, { + handle: ".my-handle", +}); +``` + +```html +
    +
  • :: list item text one
  • +
  • :: list item text two
  • +
+``` + +```css +.my-handle { + cursor: move; + cursor: -webkit-grabbing; +} +``` + +### `filter` option + +```js +Sortable.create(list, { + filter: ".js-remove, .js-edit", + onFilter: function (evt) { + var item = evt.item, + ctrl = evt.target; + + if (Sortable.utils.is(ctrl, ".js-remove")) { + // Click on remove button + item.parentNode.removeChild(item); // remove sortable item + } else if (Sortable.utils.is(ctrl, ".js-edit")) { + // Click on edit link + // ... + } + }, +}); +``` + +### `ghostClass` option + +Class name for the drop placeholder (default `sortable-ghost`). + +Demo: https://jsbin.com/henuyiw/edit?css,js,output + +```css +.ghost { + opacity: 0.4; +} +``` + +```js +Sortable.create(list, { + ghostClass: "ghost", +}); +``` + +### `chosenClass` option + +Class name for the chosen item (default `sortable-chosen`). + +Demo: https://jsbin.com/hoqufox/edit?css,js,output + +```css +.chosen { + color: #fff; + background-color: #c00; +} +``` + +```js +Sortable.create(list, { + delay: 500, + chosenClass: "chosen", +}); +``` + +### `forceFallback` option + +If set to `true`, the Fallback for non HTML5 Browser will be used, even if we are using an HTML5 Browser. +This gives us the possibility to test the behaviour for older Browsers even in newer Browser, or make the Drag 'n Drop feel more consistent between Desktop , Mobile and old Browsers. + +On top of that, the Fallback always generates a copy of that DOM Element and appends the class `fallbackClass` defined in the options. This behaviour controls the look of this 'dragged' Element. + +Demo: https://jsbin.com/sibiput/edit?html,css,js,output + +### `fallbackTolerance` option + +Emulates the native drag threshold. Specify in pixels how far the mouse should move before it's considered as a drag. +Useful if the items are also clickable like in a list of links. + +When the user clicks inside a sortable element, it's not uncommon for your hand to move a little between the time you press and the time you release. +Dragging only starts if you move the pointer past a certain tolerance, so that you don't accidentally start dragging every time you click. + +3 to 5 are probably good values. + +### `dragoverBubble` option + +If set to `true`, the dragover event will bubble to parent sortables. Works on both fallback and native dragover event. +By default, it is false, but Sortable will only stop bubbling the event once the element has been inserted into a parent Sortable, or _can_ be inserted into a parent Sortable, but isn't at that specific time (due to animation, etc). + +Since 1.8.0, you will probably want to leave this option as false. Before 1.8.0, it may need to be `true` for nested sortables to work. + +### `removeCloneOnHide` option + +If set to `false`, the clone is hidden by having it's CSS `display` property set to `none`. +By default, this option is `true`, meaning Sortable will remove the cloned element from the DOM when it is supposed to be hidden. + +### `emptyInsertThreshold` option + +The distance (in pixels) the mouse must be from an empty sortable while dragging for the drag element to be inserted into that sortable. Defaults to `5`. Set to `0` to disable this feature. + +Demo: https://jsbin.com/becavoj/edit?js,output diff --git a/entry/entry-complete.js b/entry/entry-complete.js deleted file mode 100644 index bf3dc5c13..000000000 --- a/entry/entry-complete.js +++ /dev/null @@ -1,8 +0,0 @@ -import Sortable from './entry-defaults.js'; -import Swap from '../plugins/Swap'; -import MultiDrag from '../plugins/MultiDrag'; - -Sortable.mount(new Swap()); -Sortable.mount(new MultiDrag()); - -export default Sortable; diff --git a/entry/entry-core.js b/entry/entry-core.js deleted file mode 100644 index b5c3f77f7..000000000 --- a/entry/entry-core.js +++ /dev/null @@ -1,19 +0,0 @@ -import Sortable from '../src/Sortable.js'; -import AutoScroll from '../plugins/AutoScroll'; -import OnSpill from '../plugins/OnSpill'; -import Swap from '../plugins/Swap'; -import MultiDrag from '../plugins/MultiDrag'; - -export default Sortable; - -export { - Sortable, - - // Default - AutoScroll, - OnSpill, - - // Extra - Swap, - MultiDrag -}; diff --git a/entry/entry-defaults.js b/entry/entry-defaults.js deleted file mode 100644 index 9d3fb6830..000000000 --- a/entry/entry-defaults.js +++ /dev/null @@ -1,19 +0,0 @@ -import Sortable from '../src/Sortable.js'; -import AutoScroll from '../plugins/AutoScroll'; -import { RemoveOnSpill, RevertOnSpill } from '../plugins/OnSpill'; -// Extra -import Swap from '../plugins/Swap'; -import MultiDrag from '../plugins/MultiDrag'; - -Sortable.mount(new AutoScroll()); -Sortable.mount(RemoveOnSpill, RevertOnSpill); - -export default Sortable; - -export { - Sortable, - - // Extra - Swap, - MultiDrag -}; diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..a514c17dd --- /dev/null +++ b/lerna.json @@ -0,0 +1,10 @@ +{ + "packages": [ + "packages/sortable", + "packages/sortablejs", + "packages/plugins/*", + "packages/utils" + ], + "version": "1.13.0", + "npmClient": "yarn" +} diff --git a/modular/sortable.complete.esm.js b/modular/sortable.complete.esm.js index 9d60bc0af..23374800c 100644 --- a/modular/sortable.complete.esm.js +++ b/modular/sortable.complete.esm.js @@ -1,151 +1,30 @@ /**! - * Sortable 1.10.2 + * Sortable 1.11.0 * @author RubaXa * @author owenm * @license MIT */ -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; -} - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } -} - -function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); -} - -var version = "1.10.2"; +var version = "1.11.0"; function userAgent(pattern) { - if (typeof window !== 'undefined' && window.navigator) { - return !! - /*@__PURE__*/ - navigator.userAgent.match(pattern); + if (typeof window !== "undefined" && window.navigator) { + return !!(/*@__PURE__*/ navigator.userAgent.match(pattern)); } } -var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -var Edge = userAgent(/Edge/i); -var FireFox = userAgent(/firefox/i); -var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -var IOS = userAgent(/iP(ad|od|hone)/i); -var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); - -var captureMode = { +const IE11OrLess = userAgent( + /(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i +); +const Edge = userAgent(/Edge/i); +const FireFox = userAgent(/firefox/i); +const Safari = + userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +const IOS = userAgent(/iP(ad|od|hone)/i); +const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); + +const captureMode = { capture: false, - passive: false + passive: false, }; function on(el, event, fn) { @@ -156,13 +35,10 @@ function off(el, event, fn) { el.removeEventListener(event, fn, !IE11OrLess && captureMode); } -function matches( -/**HTMLElement*/ -el, -/**String*/ -selector) { +function matches(/**HTMLElement*/ el, /**String*/ selector) { if (!selector) return; - selector[0] === '>' && (selector = selector.substring(1)); + + selector[0] === ">" && (selector = selector.substring(1)); if (el) { try { @@ -182,95 +58,110 @@ selector) { } function getParentOrHost(el) { - return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode; + return el.host && el !== document && el.host.nodeType + ? el.host + : el.parentNode; } function closest( -/**HTMLElement*/ -el, -/**String*/ -selector, -/**HTMLElement*/ -ctx, includeCTX) { + /**HTMLElement*/ el, + /**String*/ selector, + /**HTMLElement*/ ctx, + includeCTX +) { if (el) { ctx = ctx || document; do { - if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) { + if ( + (selector != null && + (selector[0] === ">" + ? el.parentNode === ctx && matches(el, selector) + : matches(el, selector))) || + (includeCTX && el === ctx) + ) { return el; } if (el === ctx) break; /* jshint boss:true */ - } while (el = getParentOrHost(el)); + } while ((el = getParentOrHost(el))); } return null; } -var R_SPACE = /\s+/g; +const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { - el.classList[state ? 'add' : 'remove'](name); + el.classList[state ? "add" : "remove"](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); - el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); + let className = (" " + el.className + " ") + .replace(R_SPACE, " ") + .replace(" " + name + " ", " "); + el.className = (className + (state ? " " + name : "")).replace( + R_SPACE, + " " + ); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(el, ''); + val = document.defaultView.getComputedStyle(el, ""); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { - if (!(prop in style) && prop.indexOf('webkit') === -1) { - prop = '-webkit-' + prop; + if (!(prop in style) && prop.indexOf("webkit") === -1) { + prop = "-webkit-" + prop; } - style[prop] = val + (typeof val === 'string' ? '' : 'px'); + style[prop] = val + (typeof val === "string" ? "" : "px"); } } } function matrix(el, selfOnly) { - var appliedTransforms = ''; - - if (typeof el === 'string') { + let appliedTransforms = ""; + if (typeof el === "string") { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + //@ts-ignore + let transform = css(el, "transform"); - if (transform && transform !== 'none') { - appliedTransforms = transform + ' ' + appliedTransforms; + if (transform && transform !== "none") { + appliedTransforms = transform + " " + appliedTransforms; } /* jshint boss:true */ - } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + //@ts-ignore + const matrixFn = + window.DOMMatrix || + window.WebKitCSSMatrix || + window.CSSMatrix || + window.MSCSSMatrix; /*jshint -W056 */ - return matrixFn && new matrixFn(appliedTransforms); } function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), - i = 0, - n = list.length; + let list = ctx.getElementsByTagName(tagName), + i = 0, + n = list.length; if (iterator) { for (; i < n; i++) { @@ -285,7 +176,7 @@ function find(ctx, tagName, iterator) { } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -293,6 +184,7 @@ function getWindowScrollingElement() { return document.documentElement; } } + /** * Returns the "bounding client rect" of given element * @param {HTMLElement} el The element whose boundingClientRect is wanted @@ -302,11 +194,16 @@ function getWindowScrollingElement() { * @param {[HTMLElement]} container The parent the element will be placed in * @return {Object} The boundingClientRect of el, with specified adjustments */ - - -function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { +function getRect( + el, + relativeToContainingBlock, + relativeToNonStaticParent, + undoScale, + container +) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + + let elRect, top, left, bottom, right, height, width; if (el !== window && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -325,39 +222,59 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS width = window.innerWidth; } - if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) { + if ( + (relativeToContainingBlock || relativeToNonStaticParent) && + el !== window + ) { // Adjust for translate() - container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) - // Not needed on <= IE11 + container = container || el.parentNode; + // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) + // Not needed on <= IE11 if (!IE11OrLess) { do { - if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container - - top -= containerRect.top + parseInt(css(container, 'border-top-width')); - left -= containerRect.left + parseInt(css(container, 'border-left-width')); + if ( + container && + container.getBoundingClientRect && + //@ts-ignore + (css(container, "transform") !== "none" || + (relativeToNonStaticParent && + //@ts-ignore + css(container, "position") !== "static")) + ) { + let containerRect = container.getBoundingClientRect(); + + // Set relative to edges of padding box of container + //@ts-ignore + top -= + containerRect.top + parseInt(css(container, "border-top-width")); + //@ts-ignore + left -= + containerRect.left + parseInt(css(container, "border-left-width")); bottom = top + elRect.height; right = left + elRect.width; + break; } /* jshint boss:true */ - - } while (container = container.parentNode); + } while ((container = container.parentNode)); } } if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d; + //@ts-ignore + let elMatrix = matrix(container || el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d; if (elMatrix) { top /= scaleY; left /= scaleX; + width /= scaleX; height /= scaleY; + bottom = top + height; right = left + width; } @@ -369,9 +286,10 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS bottom: bottom, right: right, width: width, - height: height + height: height, }; } + /** * Checks if a side of an element is scrolled past a side of its parents * @param {HTMLElement} el The element who's side being scrolled out of view is in question @@ -379,30 +297,33 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom') * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element */ - - function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), - elSideVal = getRect(el)[elSide]; - /* jshint boss:true */ + let parent = getParentAutoScrollElement(el, true), + //@ts-ignore + elSideVal = getRect(el)[elSide]; + /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + //@ts-ignore + let parentSideVal = getRect(parent)[parentSide], + visible; - if (parentSide === 'top' || parentSide === 'left') { + if (parentSide === "top" || parentSide === "left") { visible = elSideVal >= parentSideVal; } else { visible = elSideVal <= parentSideVal; } if (!visible) return parent; + if (parent === getWindowScrollingElement()) break; + parent = getParentAutoScrollElement(parent, false); } return false; } + /** * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) * and non-draggable elements @@ -411,44 +332,54 @@ function isScrolledPast(el, elSide, parentSide) { * @param {Object} options Parent Sortable's options * @return {HTMLElement} The child at index childNum, or null if not found */ - - function getChild(el, childNum, options) { - var currentChild = 0, - i = 0, - children = el.children; + let currentChild = 0, + i = 0, + children = el.children; while (i < children.length) { - if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) { + if ( + children[i].style.display !== "none" && + //@ts-ignore + children[i] !== Sortable.ghost && + //@ts-ignore + children[i] !== Sortable.dragged && + closest(children[i], options.draggable, el, false) + ) { if (currentChild === childNum) { return children[i]; } - currentChild++; } i++; } - return null; } + /** * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) * @param {HTMLElement} el Parent element * @param {selector} selector Any other elements that should be ignored * @return {HTMLElement} The last child, ignoring ghostEl */ - - function lastChild(el, selector) { - var last = el.lastElementChild; - - while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { + let last = el.lastElementChild; + + while ( + last && + //@ts-ignore + (last === Sortable.ghost || + //@ts-ignore + css(last, "display") === "none" || + (selector && !matches(last, selector))) + ) { last = last.previousElementSibling; } return last || null; } + /** * Returns the index of an element within its parent for a selected set of * elements @@ -456,43 +387,46 @@ function lastChild(el, selector) { * @param {selector} selector * @return {number} */ - - function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; } - /* jshint boss:true */ - - while (el = el.previousElementSibling) { - if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) { + /* jshint boss:true */ + while ((el = el.previousElementSibling)) { + //@ts-ignore + if ( + el.nodeName.toUpperCase() !== "TEMPLATE" && + el !== Sortable.clone && + (!selector || matches(el, selector)) + ) { index++; } } return index; } + /** * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements. * The value is returned in real pixels. * @param {HTMLElement} el * @return {Array} Offsets in the format of [left, top] */ - - function getRelativeScrollOffset(el) { - var offsetLeft = 0, - offsetTop = 0, - winScroller = getWindowScrollingElement(); + let offsetLeft = 0, + offsetTop = 0, + winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), - scaleX = elMatrix.a, - scaleY = elMatrix.d; + //@ts-ignore + let elMatrix = matrix(el), + scaleX = elMatrix.a, + scaleY = elMatrix.d; + offsetLeft += el.scrollLeft * scaleX; offsetTop += el.scrollTop * scaleY; } while (el !== winScroller && (el = el.parentNode)); @@ -500,53 +434,59 @@ function getRelativeScrollOffset(el) { return [offsetLeft, offsetTop]; } + /** * Returns the index of the object within the given array * @param {Array} arr Array that may or may not hold the object * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find * @return {Number} The index of the object in the array, or -1 */ - - function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } - return -1; } function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) - if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + if ( + elem.clientWidth < elem.scrollWidth || + elem.clientHeight < elem.scrollHeight + ) { + //@ts-ignore + let elemCSS = css(elem); + if ( + (elem.clientWidth < elem.scrollWidth && + (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll")) || + (elem.clientHeight < elem.scrollHeight && + (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) + ) { + if (!elem.getBoundingClientRect || elem === document.body) + return getWindowScrollingElement(); - if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { - if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); if (gotSelf || includeSelf) return elem; gotSelf = true; } } /* jshint boss:true */ - - } while (elem = elem.parentNode); + } while ((elem = elem.parentNode)); return getWindowScrollingElement(); } function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -557,16 +497,20 @@ function extend(dst, src) { } function isRectEqual(rect1, rect2) { - return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); + return ( + Math.round(rect1.top) === Math.round(rect2.top) && + Math.round(rect1.left) === Math.round(rect2.left) && + Math.round(rect1.height) === Math.round(rect2.height) && + Math.round(rect1.width) === Math.round(rect2.width) + ); } -var _throttleTimeout; - +let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, - _this = this; + let args = arguments, + _this = this; if (args.length === 1) { callback.call(_this, args[0]); @@ -592,8 +536,10 @@ function scrollBy(el, x, y) { } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + //@ts-ignore + let Polymer = window.Polymer; + //@ts-ignore + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -605,44 +551,45 @@ function clone(el) { } function setRect(el, rect) { - css(el, 'position', 'absolute'); - css(el, 'top', rect.top); - css(el, 'left', rect.left); - css(el, 'width', rect.width); - css(el, 'height', rect.height); + css(el, "position", "absolute"); + css(el, "top", rect.top); + css(el, "left", rect.left); + css(el, "width", rect.width); + css(el, "height", rect.height); } function unsetRect(el) { - css(el, 'position', ''); - css(el, 'top', ''); - css(el, 'left', ''); - css(el, 'width', ''); - css(el, 'height', ''); + css(el, "position", ""); + css(el, "top", ""); + css(el, "left", ""); + css(el, "width", ""); + css(el, "height", ""); } -var expando = 'Sortable' + new Date().getTime(); +const expando = "Sortable" + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], - animationCallbackId; + let animationStates = [], + animationCallbackId; + return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { - if (css(child, 'display') === 'none' || child === Sortable.ghost) return; + let children = [].slice.call(this.el.children); + + children.forEach((child) => { + if (css(child, "display") === "none" || child === Sortable.ghost) + return; animationStates.push({ target: child, - rect: getRect(child) + rect: getRect(child), }); + let fromRect = { ...animationStates[animationStates.length - 1].rect }; - var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - - + // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); - + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; fromRect.left -= childMatrix.e; @@ -652,34 +599,34 @@ function AnimationStateManager() { child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { - animationStates.splice(indexOfObject(animationStates, { - target: target - }), 1); + + removeAnimationState(target) { + animationStates.splice(indexOfObject(animationStates, { target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); return; } - var animating = false, - animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, - target = state.target, - fromRect = target.fromRect, - toRect = getRect(target), - prevFromRect = target.prevFromRect, - prevToRect = target.prevToRect, - animatingRect = state.rect, - targetMatrix = matrix(target, true); + let animating = false, + animationTime = 0; + + animationStates.forEach((state) => { + let time = 0, + target = state.target, + fromRect = target.fromRect, + toRect = getRect(target), + prevFromRect = target.prevFromRect, + prevToRect = target.prevToRect, + animatingRect = state.rect, + targetMatrix = matrix(target, true); if (targetMatrix) { // Compensate for current animation @@ -691,23 +638,33 @@ function AnimationStateManager() { if (target.thisAnimationDuration) { // Could also check if animatingRect is between fromRect and toRect - if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect - (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { + if ( + isRectEqual(prevFromRect, toRect) && + !isRectEqual(fromRect, toRect) && + // Make sure animatingRect is on line between toRect & fromRect + (animatingRect.top - toRect.top) / + (animatingRect.left - toRect.left) === + (fromRect.top - toRect.top) / (fromRect.left - toRect.left) + ) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime( + animatingRect, + prevFromRect, + prevToRect, + this.options + ); } - } // if fromRect != toRect: animate - + } + // if fromRect != toRect: animate if (!isRectEqual(toRect, fromRect)) { target.prevFromRect = fromRect; target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -724,44 +681,59 @@ function AnimationStateManager() { target.thisAnimationDuration = time; } }); - clearTimeout(animationCallbackId); + clearTimeout(animationCallbackId); if (!animating) { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); } else { animationCallbackId = setTimeout(function () { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); }, animationTime); } - animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { - css(target, 'transition', ''); - css(target, 'transform', ''); - var elMatrix = matrix(this.el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d, - translateX = (currentRect.left - toRect.left) / (scaleX || 1), - translateY = (currentRect.top - toRect.top) / (scaleY || 1); + css(target, "transition", ""); + css(target, "transform", ""); + let elMatrix = matrix(this.el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d, + translateX = (currentRect.left - toRect.left) / (scaleX || 1), + translateY = (currentRect.top - toRect.top) / (scaleY || 1); + target.animatingX = !!translateX; target.animatingY = !!translateY; - css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)'); - repaint(target); // repaint - css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : '')); - css(target, 'transform', 'translate3d(0,0,0)'); - typeof target.animated === 'number' && clearTimeout(target.animated); + css( + target, + "transform", + "translate3d(" + translateX + "px," + translateY + "px,0)" + ); + + this.forRepaintDummy = repaint(target); // repaint + + css( + target, + "transition", + "transform " + + duration + + "ms" + + (this.options.easing ? " " + this.options.easing : "") + ); + css(target, "transform", "translate3d(0,0,0)"); + typeof target.animated === "number" && clearTimeout(target.animated); target.animated = setTimeout(function () { - css(target, 'transition', ''); - css(target, 'transform', ''); + css(target, "transition", ""); + css(target, "transform", ""); target.animated = false; + target.animatingX = false; target.animatingY = false; }, duration); } - } + }, }; } @@ -770,124 +742,148 @@ function repaint(target) { } function calculateRealTime(animatingRect, fromRect, toRect, options) { - return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; + return ( + (Math.sqrt( + Math.pow(fromRect.top - animatingRect.top, 2) + + Math.pow(fromRect.left - animatingRect.left, 2) + ) / + Math.sqrt( + Math.pow(fromRect.top - toRect.top, 2) + + Math.pow(fromRect.left - toRect.left, 2) + )) * + options.animation + ); } -var plugins = []; -var defaults = { - initializeByDefault: true +let plugins = []; + +const defaults = { + initializeByDefault: true, }; + var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; - + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { - if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable - + const eventNameGlobal = eventName + "Global"; + plugins.forEach((plugin) => { + if (!sortable[plugin.pluginName]) return; + // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread({ - sortable: sortable - }, evt)); - } // Only fire plugin event if plugin is enabled in this sortable, - // and plugin has event defined - + sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt }); + } - if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread({ - sortable: sortable - }, evt)); + // Only fire plugin event if plugin is enabled in this sortable, + // and plugin has event defined + if ( + sortable.options[plugin.pluginName] && + sortable[plugin.pluginName][eventName] + ) { + sortable[plugin.pluginName][eventName]({ sortable, ...evt }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + initializePlugins(sortable, el, defaults, options) { + plugins.forEach((plugin) => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; - sortable[pluginName] = initialized; // Add default options from plugin + sortable[pluginName] = initialized; - _extends(defaults, initialized.defaults); + // Add default options from plugin + Object.assign(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); - - if (typeof modified !== 'undefined') { + let modified = this.modifyOption( + sortable, + option, + sortable.options[option] + ); + if (typeof modified !== "undefined") { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { - if (typeof plugin.eventProperties !== 'function') return; - - _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach((plugin) => { + if (typeof plugin.eventProperties !== "function") return; + Object.assign( + eventProperties, + plugin.eventProperties.call(sortable[plugin.pluginName], name) + ); }); + return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach((plugin) => { // Plugin must exist on the Sortable - if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin - - if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') { - modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value); + if (!sortable[plugin.pluginName]) return; + + // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin + if ( + plugin.optionListeners && + typeof plugin.optionListeners[name] === "function" + ) { + modifiedValue = plugin.optionListeners[name].call( + sortable[plugin.pluginName], + value + ); } }); + return modifiedValue; - } + }, }; -function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; - sortable = sortable || rootEl && rootEl[expando]; +function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties, +}) { + sortable = sortable || (rootEl && rootEl[expando]); if (!sortable) return; - var evt, - options = sortable.options, - onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature + let evt, + options = sortable.options, + onName = "on" + name.charAt(0).toUpperCase() + name.substr(1); + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { evt = new CustomEvent(name, { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); + evt = document.createEvent("Event"); evt.initEvent(name, true, true); } @@ -895,16 +891,21 @@ function dispatchEvent(_ref) { evt.from = fromEl || rootEl; evt.item = targetEl || rootEl; evt.clone = cloneEl; + evt.oldIndex = oldIndex; evt.newIndex = newIndex; + evt.oldDraggableIndex = oldDraggableIndex; evt.newDraggableIndex = newDraggableIndex; + evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; - var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + let allEventProperties = { + ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable), + }; + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -917,407 +918,506 @@ function dispatchEvent(_ref) { } } -var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, ["evt"]); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, +/**! + * Sortable + * @author RubaXa + * @author owenm + * @license MIT + */ + +let pluginEvent = function ( + eventName, + sortable, + { evt: originalEvent, ...data } = {} +) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { - _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent - }); - } - }, data)); + + dispatchSortableEvent(name) { + _dispatchEvent({ sortable, name, originalEvent }); + }, + + ...data, + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); -} - -var dragEl, - parentEl, - ghostEl, rootEl, - nextEl, - lastDownEl, - cloneEl, - cloneHidden, oldIndex, - newIndex, oldDraggableIndex, + newIndex, newDraggableIndex, - activeGroup, - putSortable, - awaitingDragStarted = false, - ignoreNextClick = false, - sortables = [], - tapEvt, - touchEvt, - lastDx, - lastDy, - tapDistanceLeft, - tapDistanceTop, - moved, - lastTarget, - lastDirection, - pastFirstInvertThresh = false, - isCircumstantialInvert = false, - targetMoveDistance, - // For positioning ghost absolutely -ghostRelativeParent, - ghostRelativeParentInitialScroll = [], - // (left, top) -_silent = false, - savedInputChecked = []; -/** @const */ + ...info, + }); +} -var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors -supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { - if (!documentExists) return; // false when <= IE11 +let dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + activeGroup, + putSortable, + awaitingDragStarted = false, + ignoreNextClick = false, + sortables = [], + tapEvt, + touchEvt, + lastDx, + lastDy, + tapDistanceLeft, + tapDistanceTop, + moved, + lastTarget, + lastDirection, + pastFirstInvertThresh = false, + isCircumstantialInvert = false, + targetMoveDistance, + // For positioning ghost absolutely + ghostRelativeParent, + ghostRelativeParentInitialScroll = [], // (left, top) + _silent = false, + savedInputChecked = []; - if (IE11OrLess) { - return false; - } - - var el = document.createElement('x'); - el.style.cssText = 'pointer-events:auto'; - return el.style.pointerEvents === 'auto'; -}(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), - elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), +/** @const */ +const documentExists = typeof document !== "undefined", + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", + // This will not pass for IE9, because IE9 DnD only works on anchors + supportDraggable = + documentExists && + !ChromeForAndroid && + !IOS && + "draggable" in document.createElement("div"), + supportCssPointerEvents = (function () { + if (!documentExists) return; + // false when <= IE11 + if (IE11OrLess) { + return false; + } + let el = document.createElement("x"); + el.style.cssText = "pointer-events:auto"; + return el.style.pointerEvents === "auto"; + })(), + _detectDirection = function (el, options) { + let elCSS = css(el), + elWidth = + parseInt(elCSS.width) - + parseInt(elCSS.paddingLeft) - + parseInt(elCSS.paddingRight) - + parseInt(elCSS.borderLeftWidth) - + parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), - firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, - secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width; + firstChildWidth = + firstChildCSS && + parseInt(firstChildCSS.marginLeft) + + parseInt(firstChildCSS.marginRight) + + getRect(child1).width, + secondChildWidth = + secondChildCSS && + parseInt(secondChildCSS.marginLeft) + + parseInt(secondChildCSS.marginRight) + + getRect(child2).width; + + if (elCSS.display === "flex") { + return elCSS.flexDirection === "column" || + elCSS.flexDirection === "column-reverse" + ? "vertical" + : "horizontal"; + } - if (elCSS.display === 'flex') { - return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal'; - } + if (elCSS.display === "grid") { + return elCSS.gridTemplateColumns.split(" ").length <= 1 + ? "vertical" + : "horizontal"; + } - if (elCSS.display === 'grid') { - return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; - } + if (child1 && firstChildCSS.float && firstChildCSS.float !== "none") { + let touchingSideChild2 = + firstChildCSS.float === "left" ? "left" : "right"; - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; - return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; - } + return child2 && + (secondChildCSS.clear === "both" || + secondChildCSS.clear === touchingSideChild2) + ? "vertical" + : "horizontal"; + } - return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; -}, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + return child1 && + (firstChildCSS.display === "block" || + firstChildCSS.display === "flex" || + firstChildCSS.display === "table" || + firstChildCSS.display === "grid" || + (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none") || + (child2 && + elCSS[CSSFloatProperty] === "none" && + firstChildWidth + secondChildWidth > elWidth)) + ? "vertical" + : "horizontal"; + }, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height; - return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2; -}, -/** - * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. - * @param {Number} x X position - * @param {Number} y Y position - * @return {HTMLElement} Element of the first found nearest Sortable - */ -_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - if (lastChild(sortable)) return; - var rect = getRect(sortable), + return ( + dragElS1Opp === targetS1Opp || + dragElS2Opp === targetS2Opp || + dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2 + ); + }, + /** + * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. + * @param {Number} x X position + * @param {Number} y Y position + * @return {HTMLElement} Element of the first found nearest Sortable + */ + _detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some((sortable) => { + if (lastChild(sortable)) return; + + let rect = getRect(sortable), threshold = sortable[expando].options.emptyInsertThreshold, - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + insideHorizontally = + x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = + y >= rect.top - threshold && y <= rect.bottom + threshold; - if (threshold && insideHorizontally && insideVertically) { - return ret = sortable; - } - }); - return ret; -}, - _prepareGroup = function _prepareGroup(options) { - function toFn(value, pull) { - return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; - - if (value == null && (pull || sameGroup)) { - // Default pull value - // Default pull and put value if same group - return true; - } else if (value == null || value === false) { - return false; - } else if (pull && value === 'clone') { - return value; - } else if (typeof value === 'function') { - return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); - } else { - var otherGroup = (pull ? to : from).options.group.name; - return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; + if (threshold && insideHorizontally && insideVertically) { + return (ret = sortable); } - }; - } + }); + return ret; + }, + _prepareGroup = function (options) { + function toFn(value, pull) { + return function (to, from, dragEl, evt) { + let sameGroup = + to.options.group.name && + from.options.group.name && + to.options.group.name === from.options.group.name; + + if (value == null && (pull || sameGroup)) { + // Default pull value + // Default pull and put value if same group + return true; + } else if (value == null || value === false) { + return false; + } else if (pull && value === "clone") { + return value; + } else if (typeof value === "function") { + return toFn(value(to, from, dragEl, evt), pull)( + to, + from, + dragEl, + evt + ); + } else { + let otherGroup = (pull ? to : from).options.group.name; - var group = {}; - var originalGroup = options.group; + return ( + value === true || + (typeof value === "string" && value === otherGroup) || + (value.join && value.indexOf(otherGroup) > -1) + ); + } + }; + } - if (!originalGroup || _typeof(originalGroup) != 'object') { - originalGroup = { - name: originalGroup - }; - } + let group = {}; + let originalGroup = options.group; - group.name = originalGroup.name; - group.checkPull = toFn(originalGroup.pull, true); - group.checkPut = toFn(originalGroup.put); - group.revertClone = originalGroup.revertClone; - options.group = group; -}, - _hideGhostForTarget = function _hideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', 'none'); - } -}, - _unhideGhostForTarget = function _unhideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', ''); - } -}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position + if (!originalGroup || typeof originalGroup != "object") { + originalGroup = { name: originalGroup }; + } + group.name = originalGroup.name; + group.checkPull = toFn(originalGroup.pull, true); + group.checkPut = toFn(originalGroup.put); + group.revertClone = originalGroup.revertClone; -if (documentExists) { - document.addEventListener('click', function (evt) { - if (ignoreNextClick) { - evt.preventDefault(); - evt.stopPropagation && evt.stopPropagation(); - evt.stopImmediatePropagation && evt.stopImmediatePropagation(); - ignoreNextClick = false; - return false; + options.group = group; + }, + _hideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", "none"); + } + }, + _unhideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", ""); } - }, true); + }; + +// #1184 fix - Prevent click event on fallback if dragged but item not changed position +if (documentExists) { + document.addEventListener( + "click", + function (evt) { + if (ignoreNextClick) { + evt.preventDefault(); + evt.stopPropagation && evt.stopPropagation(); + evt.stopImmediatePropagation && evt.stopImmediatePropagation(); + ignoreNextClick = false; + return false; + } + }, + true + ); } -var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { +let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; - - for (var i in evt) { + let event = {}; + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } } - event.target = event.rootEl = nearest; event.preventDefault = void 0; event.stopPropagation = void 0; - nearest[expando]._onDragOver(event); } } }; -var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { +let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } }; + /** * @class Sortable * @param {HTMLElement} el * @param {Object} [options] */ - - function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call( + el + )}`; } - this.el = el; // root element + const __warn = + "" + + "Importing Sortable directly from GitHub is deprecated.\n" + + "This file will not receive any more updates.\n" + + "Please follow the usage instructions to continue getting support: https://github.com/SortableJS/Sortable"; + + console.warn(__warn); - this.options = options = _extends({}, options); // Export instance + this.el = el; // root element + this.options = options = Object.assign({}, options); + // Export instance el[expando] = this; - var defaults = { + + let defaults = { group: null, sort: true, disabled: false, store: null, handle: null, - draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*', - swapThreshold: 1, - // percentage; 0 <= x <= 1 - invertSwap: false, - // invert always - invertedSwapThreshold: null, - // will be set to same as swapThreshold if default + draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*", + swapThreshold: 1, // percentage; 0 <= x <= 1 + invertSwap: false, // invert always + invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, - ghostClass: 'sortable-ghost', - chosenClass: 'sortable-chosen', - dragClass: 'sortable-drag', - ignore: 'a, img', + ghostClass: "sortable-ghost", + chosenClass: "sortable-chosen", + dragClass: "sortable-drag", + ignore: "a, img", filter: null, preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { - dataTransfer.setData('Text', dragEl.textContent); + setData: function (dataTransfer, dragEl) { + dataTransfer.setData("Text", dragEl.textContent); }, dropBubble: false, dragoverBubble: false, - dataIdAttr: 'data-id', + dataIdAttr: "data-id", delay: 0, delayOnTouchOnly: false, - touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, + touchStartThreshold: + (Number.parseInt ? Number : window).parseInt( + window.devicePixelRatio, + 10 + ) || 1, forceFallback: false, - fallbackClass: 'sortable-fallback', + fallbackClass: "sortable-fallback", fallbackOnBody: false, fallbackTolerance: 0, - fallbackOffset: { - x: 0, - y: 0 - }, - supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window, - emptyInsertThreshold: 5 + fallbackOffset: { x: 0, y: 0 }, + supportPointer: + Sortable.supportPointer !== false && "PointerEvent" in window, + emptyInsertThreshold: 5, }; - PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + PluginManager.initializePlugins(this, el, defaults); + + // Set default options + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } - _prepareGroup(options); // Bind all private methods - + _prepareGroup(options); - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } - } // Setup drag mode - + } + // Setup drag mode this.nativeDraggable = options.forceFallback ? false : supportDraggable; if (this.nativeDraggable) { // Touch start threshold cannot be greater than the native dragstart threshold this.options.touchStartThreshold = 1; - } // Bind events - + } + // Bind events if (options.supportPointer) { - on(el, 'pointerdown', this._onTapStart); + on(el, "pointerdown", this._onTapStart); } else { - on(el, 'mousedown', this._onTapStart); - on(el, 'touchstart', this._onTapStart); + on(el, "mousedown", this._onTapStart); + on(el, "touchstart", this._onTapStart); } if (this.nativeDraggable) { - on(el, 'dragover', this); - on(el, 'dragenter', this); + on(el, "dragover", this); + on(el, "dragenter", this); } - sortables.push(this.el); // Restore sorting + sortables.push(this.el); - options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager + // Restore sorting + options.store && + options.store.get && + this.sort(options.store.get(this) || []); - _extends(this, AnimationStateManager()); + // Add animation state manager + Object.assign(this, AnimationStateManager()); } -Sortable.prototype = -/** @lends Sortable.prototype */ -{ +Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { - return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; - }, - _onTapStart: function _onTapStart( - /** Event|TouchEvent */ - evt) { - if (!evt.cancelable) return; - - var _this = this, - el = this.el, - options = this.options, - preventOnFilter = options.preventOnFilter, - type = evt.type, - touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt, - target = (touch || evt).target, - originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, - filter = options.filter; - - _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. + _getDirection: function (evt, target) { + return typeof this.options.direction === "function" + ? this.options.direction.call(this, evt, target, dragEl) + : this.options.direction; + }, + _onTapStart: function (/** Event|TouchEvent */ evt) { + if (!evt.cancelable) return; + let _this = this, + el = this.el, + options = this.options, + preventOnFilter = options.preventOnFilter, + type = evt.type, + touch = + (evt.touches && evt.touches[0]) || + (evt.pointerType && evt.pointerType === "touch" && evt), + target = (touch || evt).target, + originalTarget = + (evt.target.shadowRoot && + ((evt.path && evt.path[0]) || + (evt.composedPath && evt.composedPath()[0]))) || + target, + filter = options.filter; + + _saveInputCheckedState(el); + + // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. if (dragEl) { return; } - if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { + if ( + (/mousedown|pointerdown/.test(type) && evt.button !== 0) || + options.disabled + ) { return; // only left button and enabled - } // cancel dnd if original target is content editable - + } + // cancel dnd if original target is content editable if (originalTarget.isContentEditable) { return; } + // Safari ignores further event handling after mousedown + if ( + !this.nativeDraggable && + Safari && + target && + target.tagName.toUpperCase() === "SELECT" + ) { + return; + } + target = closest(target, options.draggable, el, false); if (target && target.animated) { @@ -1327,46 +1427,41 @@ Sortable.prototype = if (lastDownEl === target) { // Ignoring duplicate `down` return; - } // Get the index of the dragged element within its parent - + } + // Get the index of the dragged element within its parent oldIndex = index(target); - oldDraggableIndex = index(target, options.draggable); // Check filter + oldDraggableIndex = index(target, options.draggable); - if (typeof filter === 'function') { + // Check filter + if (typeof filter === "function") { if (filter.call(this, evt, target, this)) { _dispatchEvent({ sortable: _this, rootEl: originalTarget, - name: 'filter', + name: "filter", targetEl: target, toEl: el, - fromEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + fromEl: el, }); + pluginEvent("filter", _this, { evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd } } else if (filter) { - filter = filter.split(',').some(function (criteria) { + filter = filter.split(",").some(function (criteria) { criteria = closest(originalTarget, criteria.trim(), el, false); if (criteria) { _dispatchEvent({ sortable: _this, rootEl: criteria, - name: 'filter', + name: "filter", targetEl: target, fromEl: el, - toEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + toEl: el, }); + pluginEvent("filter", _this, { evt }); return true; } }); @@ -1379,161 +1474,172 @@ Sortable.prototype = if (options.handle && !closest(originalTarget, options.handle, el, false)) { return; - } // Prepare `dragstart` - + } + // Prepare `dragstart` this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( - /** Event */ - evt, - /** Touch */ - touch, - /** HTMLElement */ - target) { - var _this = this, - el = _this.el, - options = _this.options, - ownerDocument = el.ownerDocument, - dragStartFn; + + _prepareDragStart: function ( + /** Event */ evt, + /** Touch */ touch, + /** HTMLElement */ target + ) { + let _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; + Sortable.dragged = dragEl; + tapEvt = { target: dragEl, clientX: (touch || evt).clientX, - clientY: (touch || evt).clientY + clientY: (touch || evt).clientY, }; + tapDistanceLeft = tapEvt.clientX - dragRect.left; tapDistanceTop = tapEvt.clientY - dragRect.top; + this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; - dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { - pluginEvent('delayEnded', _this, { - evt: evt - }); + dragEl.style["will-change"] = "all"; + dragStartFn = function () { + pluginEvent("delayEnded", _this, { evt }); if (Sortable.eventCanceled) { _this._onDrop(); - return; - } // Delayed drag has been triggered + } + // Delayed drag has been triggered // we can re-enable the events: touchmove/mousemove - - _this._disableDelayedDragEvents(); if (!FireFox && _this.nativeDraggable) { dragEl.draggable = true; - } // Bind the events: dragstart/dragend - - - _this._triggerDragStart(evt, touch); // Drag start event + } + // Bind the events: dragstart/dragend + _this._triggerDragStart(evt, touch); + // Drag start event _dispatchEvent({ sortable: _this, - name: 'choose', - originalEvent: evt - }); // Chosen item - + name: "choose", + originalEvent: evt, + }); + // Chosen item toggleClass(dragEl, options.chosenClass, true); - }; // Disable "draggable" - + }; - options.ignore.split(',').forEach(function (criteria) { + // Disable "draggable" + options.ignore.split(",").forEach(function (criteria) { find(dragEl, criteria.trim(), _disableDraggable); }); - on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mouseup', _this._onDrop); - on(ownerDocument, 'touchend', _this._onDrop); - on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox) + on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent); + on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent); + on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent); + + on(ownerDocument, "mouseup", _this._onDrop); + on(ownerDocument, "touchend", _this._onDrop); + on(ownerDocument, "touchcancel", _this._onDrop); + + // Make dragEl draggable (must be before delay for FireFox) if (FireFox && this.nativeDraggable) { this.options.touchStartThreshold = 4; dragEl.draggable = true; } - pluginEvent('delayStart', this, { - evt: evt - }); // Delay is impossible for native DnD in Edge or IE + pluginEvent("delayStart", this, { evt }); - if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { + // Delay is impossible for native DnD in Edge or IE + if ( + options.delay && + (!options.delayOnTouchOnly || touch) && + (!this.nativeDraggable || !(Edge || IE11OrLess)) + ) { if (Sortable.eventCanceled) { this._onDrop(); - return; - } // If the user moves the pointer or let go the click or touch + } + // If the user moves the pointer or let go the click or touch // before the delay has been reached: // disable the delayed drag + on(ownerDocument, "mouseup", _this._disableDelayedDrag); + on(ownerDocument, "touchend", _this._disableDelayedDrag); + on(ownerDocument, "touchcancel", _this._disableDelayedDrag); + on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler); + on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler); + options.supportPointer && + on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler); - - on(ownerDocument, 'mouseup', _this._disableDelayedDrag); - on(ownerDocument, 'touchend', _this._disableDelayedDrag); - on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); - on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler); - on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler); - options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( - /** TouchEvent|PointerEvent **/ - e) { - var touch = e.touches ? e.touches[0] : e; - if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { + _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) { + let touch = e.touches ? e.touches[0] : e; + if ( + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) >= + Math.floor( + this.options.touchStartThreshold / + ((this.nativeDraggable && window.devicePixelRatio) || 1) + ) + ) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._disableDelayedDrag); - off(ownerDocument, 'touchend', this._disableDelayedDrag); - off(ownerDocument, 'touchcancel', this._disableDelayedDrag); - off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); + + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; + off(ownerDocument, "mouseup", this._disableDelayedDrag); + off(ownerDocument, "touchend", this._disableDelayedDrag); + off(ownerDocument, "touchcancel", this._disableDelayedDrag); + off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( - /** Event */ - evt, - /** Touch */ - touch) { - touch = touch || evt.pointerType == 'touch' && evt; + + _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) { + touch = touch || (evt.pointerType == "touch" && evt); if (!this.nativeDraggable || touch) { if (this.options.supportPointer) { - on(document, 'pointermove', this._onTouchMove); + on(document, "pointermove", this._onTouchMove); } else if (touch) { - on(document, 'touchmove', this._onTouchMove); + on(document, "touchmove", this._onTouchMove); } else { - on(document, 'mousemove', this._onTouchMove); + on(document, "mousemove", this._onTouchMove); } } else { - on(dragEl, 'dragend', this); - on(rootEl, 'dragstart', this._onDragStart); + on(dragEl, "dragend", this); + on(rootEl, "dragstart", this._onDragStart); } try { @@ -1547,47 +1653,54 @@ Sortable.prototype = } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; - if (rootEl && dragEl) { - pluginEvent('dragStarted', this, { - evt: evt - }); + pluginEvent("dragStarted", this, { evt }); if (this.nativeDraggable) { - on(document, 'dragover', _checkOutsideTargetEl); + on(document, "dragover", _checkOutsideTargetEl); } + let options = this.options; - var options = this.options; // Apply effect - + // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); + Sortable.active = this; - fallback && this._appendGhost(); // Drag start event + fallback && this._appendGhost(); + + // Drag start event _dispatchEvent({ sortable: this, - name: 'start', - originalEvent: evt + name: "start", + originalEvent: evt, }); } else { this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); + let parent = target; while (target && target.shadowRoot) { - target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + target = target.shadowRoot.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); if (target === parent) break; parent = target; } @@ -1597,12 +1710,13 @@ Sortable.prototype = if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; + inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target: target, - rootEl: parent + rootEl: parent, }); if (inserted && !this.options.dragoverBubble) { @@ -1611,34 +1725,53 @@ Sortable.prototype = } target = parent; // store last element - } - /* jshint boss:true */ - while (parent = parent.parentNode); + } while ( + /* jshint boss:true */ + (parent = parent.parentNode) + ); } _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( - /**TouchEvent*/ - evt) { - if (tapEvt) { - var options = this.options, - fallbackTolerance = options.fallbackTolerance, - fallbackOffset = options.fallbackOffset, - touch = evt.touches ? evt.touches[0] : evt, - ghostMatrix = ghostEl && matrix(ghostEl, true), - scaleX = ghostEl && ghostMatrix && ghostMatrix.a, - scaleY = ghostEl && ghostMatrix && ghostMatrix.d, - relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), - dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), - dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging + _onTouchMove: function (/**TouchEvent*/ evt) { + if (tapEvt) { + let options = this.options, + fallbackTolerance = options.fallbackTolerance, + fallbackOffset = options.fallbackOffset, + touch = evt.touches ? evt.touches[0] : evt, + ghostMatrix = ghostEl && matrix(ghostEl, true), + scaleX = ghostEl && ghostMatrix && ghostMatrix.a, + scaleY = ghostEl && ghostMatrix && ghostMatrix.d, + relativeScrollOffset = + PositionGhostAbsolutely && + ghostRelativeParent && + getRelativeScrollOffset(ghostRelativeParent), + dx = + (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + + (relativeScrollOffset + ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] + : 0) / + (scaleX || 1), + dy = + (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + + (relativeScrollOffset + ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] + : 0) / + (scaleY || 1); + + // only set the status to dragging, when we are actually dragging if (!Sortable.active && !awaitingDragStarted) { - if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) { + if ( + fallbackTolerance && + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) < fallbackTolerance + ) { return; } - this._onDragStart(evt, true); } @@ -1653,206 +1786,239 @@ Sortable.prototype = c: 0, d: 1, e: dx, - f: dy + f: dy, }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); - css(ghostEl, 'webkitTransform', cssMatrix); - css(ghostEl, 'mozTransform', cssMatrix); - css(ghostEl, 'msTransform', cssMatrix); - css(ghostEl, 'transform', cssMatrix); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; + + css(ghostEl, "webkitTransform", cssMatrix); + css(ghostEl, "mozTransform", cssMatrix); + css(ghostEl, "msTransform", cssMatrix); + css(ghostEl, "transform", cssMatrix); + lastDx = dx; lastDy = dy; + touchEvt = touch; } evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, - rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), - options = this.options; // Position absolutely + let container = this.options.fallbackOnBody ? document.body : rootEl, + rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), + options = this.options; + // Position absolutely if (PositionGhostAbsolutely) { // Get relatively positioned parent ghostRelativeParent = container; - while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) { + while ( + css(ghostRelativeParent, "position") === "static" && + css(ghostRelativeParent, "transform") === "none" && + ghostRelativeParent !== document + ) { ghostRelativeParent = ghostRelativeParent.parentNode; } - if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) { - if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement(); + if ( + ghostRelativeParent !== document.body && + ghostRelativeParent !== document.documentElement + ) { + if (ghostRelativeParent === document) + ghostRelativeParent = getWindowScrollingElement(); + rect.top += ghostRelativeParent.scrollTop; rect.left += ghostRelativeParent.scrollLeft; } else { ghostRelativeParent = getWindowScrollingElement(); } - - ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent); + ghostRelativeParentInitialScroll = getRelativeScrollOffset( + ghostRelativeParent + ); } ghostEl = dragEl.cloneNode(true); + toggleClass(ghostEl, options.ghostClass, false); toggleClass(ghostEl, options.fallbackClass, true); toggleClass(ghostEl, options.dragClass, true); - css(ghostEl, 'transition', ''); - css(ghostEl, 'transform', ''); - css(ghostEl, 'box-sizing', 'border-box'); - css(ghostEl, 'margin', 0); - css(ghostEl, 'top', rect.top); - css(ghostEl, 'left', rect.left); - css(ghostEl, 'width', rect.width); - css(ghostEl, 'height', rect.height); - css(ghostEl, 'opacity', '0.8'); - css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed'); - css(ghostEl, 'zIndex', '100000'); - css(ghostEl, 'pointerEvents', 'none'); + + css(ghostEl, "transition", ""); + css(ghostEl, "transform", ""); + + css(ghostEl, "box-sizing", "border-box"); + css(ghostEl, "margin", 0); + css(ghostEl, "top", rect.top); + css(ghostEl, "left", rect.left); + css(ghostEl, "width", rect.width); + css(ghostEl, "height", rect.height); + css(ghostEl, "opacity", "0.8"); + css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed"); + css(ghostEl, "zIndex", "100000"); + css(ghostEl, "pointerEvents", "none"); + Sortable.ghost = ghostEl; - container.appendChild(ghostEl); // Set transform-origin - css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); + container.appendChild(ghostEl); + + // Set transform-origin + css( + ghostEl, + "transform-origin", + (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 + + "% " + + (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 + + "%" + ); } }, - _onDragStart: function _onDragStart( - /**Event*/ - evt, - /**boolean*/ - fallback) { - var _this = this; - - var dataTransfer = evt.dataTransfer; - var options = _this.options; - pluginEvent('dragStart', this, { - evt: evt - }); + _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) { + let _this = this; + let dataTransfer = evt.dataTransfer; + let options = _this.options; + + pluginEvent("dragStart", this, { evt }); if (Sortable.eventCanceled) { this._onDrop(); - return; } - pluginEvent('setupClone', this); - + pluginEvent("setupClone", this); if (!Sortable.eventCanceled) { cloneEl = clone(dragEl); + cloneEl.draggable = false; - cloneEl.style['will-change'] = ''; + cloneEl.style["will-change"] = ""; this._hideClone(); toggleClass(cloneEl, this.options.chosenClass, false); Sortable.clone = cloneEl; - } // #1143: IFrame support workaround - + } + // #1143: IFrame support workaround _this.cloneId = _nextTick(function () { - pluginEvent('clone', _this); + pluginEvent("clone", _this); if (Sortable.eventCanceled) return; if (!_this.options.removeCloneOnHide) { rootEl.insertBefore(cloneEl, dragEl); } - _this._hideClone(); _dispatchEvent({ sortable: _this, - name: 'clone' + name: "clone", }); }); - !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events + !fallback && toggleClass(dragEl, options.dragClass, true); + + // Set proper drop events if (fallback) { ignoreNextClick = true; _this._loopId = setInterval(_this._emulateDragOver, 50); } else { // Undo what was set in _prepareDragStart before drag started - off(document, 'mouseup', _this._onDrop); - off(document, 'touchend', _this._onDrop); - off(document, 'touchcancel', _this._onDrop); + off(document, "mouseup", _this._onDrop); + off(document, "touchend", _this._onDrop); + off(document, "touchcancel", _this._onDrop); if (dataTransfer) { - dataTransfer.effectAllowed = 'move'; + dataTransfer.effectAllowed = "move"; options.setData && options.setData.call(_this, dataTransfer, dragEl); } - on(document, 'drop', _this); // #1276 fix: + on(document, "drop", _this); - css(dragEl, 'transform', 'translateZ(0)'); + // #1276 fix: + css(dragEl, "transform", "translateZ(0)"); } awaitingDragStarted = true; - _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt)); - on(document, 'selectstart', _this); + + _this._dragStartId = _nextTick( + _this._dragStarted.bind(_this, fallback, evt) + ); + on(document, "selectstart", _this); + moved = true; if (Safari) { - css(document.body, 'user-select', 'none'); + css(document.body, "user-select", "none"); } }, + // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( - /**Event*/ - evt) { - var el = this.el, - target = evt.target, - dragRect, - targetRect, - revert, - options = this.options, - group = options.group, - activeSortable = Sortable.active, - isOwner = activeGroup === group, - canSort = options.sort, - fromSortable = putSortable || activeSortable, - vertical, - _this = this, - completedFired = false; + _onDragOver: function (/**Event*/ evt) { + let el = this.el, + target = evt.target, + dragRect, + targetRect, + revert, + options = this.options, + group = options.group, + activeSortable = Sortable.active, + isOwner = activeGroup === group, + canSort = options.sort, + fromSortable = putSortable || activeSortable, + vertical, + _this = this, + completedFired = false; if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread({ - evt: evt, - isOwner: isOwner, - axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + pluginEvent(name, _this, { + evt, + isOwner, + axis: vertical ? "vertical" : "horizontal", + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + onMove(target, after) { + return onMove( + rootEl, + el, + dragEl, + dragRect, + target, + getRect(target), + evt, + after + ); }, - changed: changed - }, extra)); - } // Capture animation state - + changed, + ...extra, + }); + } + // Capture animation state function capture() { - dragOverEvent('dragOverAnimationCapture'); + dragOverEvent("dragOverAnimationCapture"); _this.captureAnimationState(); - if (_this !== fromSortable) { fromSortable.captureAnimationState(); } - } // Return invocation when dragEl is inserted (or completed) - + } + // Return invocation when dragEl is inserted (or completed) function completed(insertion) { - dragOverEvent('dragOverCompleted', { - insertion: insertion - }); + dragOverEvent("dragOverCompleted", { insertion }); if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -1864,7 +2030,13 @@ Sortable.prototype = if (_this !== fromSortable) { // Set ghost class to new sortable's ghost class - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : activeSortable.options.ghostClass, + false + ); toggleClass(dragEl, options.ghostClass, true); } @@ -1872,53 +2044,54 @@ Sortable.prototype = putSortable = _this; } else if (_this === Sortable.active && putSortable) { putSortable = null; - } // Animation - + } + // Animation if (fromSortable === _this) { _this._ignoreWhileAnimating = target; } - _this.animateAll(function () { - dragOverEvent('dragOverAnimationComplete'); + dragOverEvent("dragOverAnimationComplete"); _this._ignoreWhileAnimating = null; }); - if (_this !== fromSortable) { fromSortable.animateAll(); fromSortable._ignoreWhileAnimating = null; } - } // Null lastTarget if it is not inside a previously swapped element - + } - if (target === dragEl && !dragEl.animated || target === el && !target.animated) { + // Null lastTarget if it is not inside a previously swapped element + if ( + (target === dragEl && !dragEl.animated) || + (target === el && !target.animated) + ) { lastTarget = null; - } // no bubbling and not fallback - + } + // no bubbling and not fallback if (!options.dragoverBubble && !evt.rootEl && target !== document) { - dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted - + dragEl.parentNode[expando]._isOutsideThisEl(evt.target); + // Do not detect for empty insert if already inserted !insertion && nearestEmptyInsertDetectEvent(evt); } !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); - return completedFired = true; - } // Call when dragEl has been inserted + return (completedFired = true); + } + // Call when dragEl has been inserted function changed() { newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - _dispatchEvent({ sortable: _this, - name: 'change', + name: "change", toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, - originalEvent: evt + newIndex, + newDraggableIndex, + originalEvent: evt, }); } @@ -1927,30 +2100,48 @@ Sortable.prototype = } target = closest(target, options.draggable, el, true); - dragOverEvent('dragOver'); + + dragOverEvent("dragOver"); if (Sortable.eventCanceled) return completedFired; - if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) { + if ( + dragEl.contains(evt.target) || + (target.animated && target.animatingX && target.animatingY) || + _this._ignoreWhileAnimating === target + ) { return completed(false); } ignoreNextClick = false; - if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list - : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) { - vertical = this._getDirection(evt, target) === 'vertical'; + if ( + activeSortable && + !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : putSortable === this || + ((this.lastPutMode = activeGroup.checkPull( + this, + activeSortable, + dragEl, + evt + )) && + group.checkPut(this, activeSortable, dragEl, evt))) + ) { + vertical = this._getDirection(evt, target) === "vertical"; + dragRect = getRect(dragEl); - dragOverEvent('dragOverValid'); + + dragOverEvent("dragOverValid"); if (Sortable.eventCanceled) return completedFired; if (revert) { parentEl = rootEl; // actualization - capture(); this._hideClone(); - dragOverEvent('revert'); + dragOverEvent("revert"); if (!Sortable.eventCanceled) { if (nextEl) { @@ -1963,15 +2154,18 @@ Sortable.prototype = return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); - if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { + if ( + !elLastChild || + (_ghostIsLast(evt, vertical, this) && !elLastChild.animated) + ) { // If already at end of list: Do not insert if (elLastChild === dragEl) { return completed(false); - } // assign target only if condition is true - + } + // assign target only if condition is true if (elLastChild && el === evt.target) { target = elLastChild; } @@ -1980,7 +2174,18 @@ Sortable.prototype = targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if ( + onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + !!target + ) !== false + ) { capture(); el.appendChild(dragEl); parentEl = el; // actualization @@ -1990,45 +2195,78 @@ Sortable.prototype = } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, - targetBeforeFirstSwap, - differentLevel = dragEl.parentNode !== el, - differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), - side1 = vertical ? 'top' : 'left', - scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'), - scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; + let direction = 0, + targetBeforeFirstSwap, + differentLevel = dragEl.parentNode !== el, + differentRowCol = !_dragElInRowColumn( + (dragEl.animated && dragEl.toRect) || dragRect, + (target.animated && target.toRect) || targetRect, + vertical + ), + side1 = vertical ? "top" : "left", + scrolledPastTop = + isScrolledPast(target, "top", "top") || + isScrolledPast(dragEl, "top", "top"), + scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; if (lastTarget !== target) { targetBeforeFirstSwap = targetRect[side1]; pastFirstInvertThresh = false; - isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel; + isCircumstantialInvert = + (!differentRowCol && options.invertSwap) || differentLevel; } - direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + direction = _getSwapDirection( + evt, + target, + targetRect, + vertical, + differentRowCol ? 1 : options.swapThreshold, + options.invertedSwapThreshold == null + ? options.swapThreshold + : options.invertedSwapThreshold, + isCircumstantialInvert, + lastTarget === target + ); + + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; sibling = parentEl.children[dragIndex]; - } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl)); - } // If dragEl is already beside target: Do not insert - - + } while ( + sibling && + (css(sibling, "display") === "none" || sibling === ghostEl) + ); + } + // If dragEl is already beside target: Do not insert if (direction === 0 || sibling === target) { return completed(false); } lastTarget = target; + lastDirection = direction; - var nextSibling = target.nextElementSibling, - after = false; + + let nextSibling = target.nextElementSibling, + after = false; + after = direction === 1; - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + after + ); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2037,27 +2275,37 @@ Sortable.prototype = _silent = true; setTimeout(_unsilent, 30); + capture(); if (after && !nextSibling) { el.appendChild(dragEl); } else { - target.parentNode.insertBefore(dragEl, after ? nextSibling : target); - } // Undo chrome's scroll adjustment (has no effect on other browsers) - + target.parentNode.insertBefore( + dragEl, + after ? nextSibling : target + ); + } + // Undo chrome's scroll adjustment (has no effect on other browsers) if (scrolledPastTop) { - scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop); + scrollBy( + scrolledPastTop, + 0, + scrollBefore - scrolledPastTop.scrollTop + ); } parentEl = dragEl.parentNode; // actualization - // must be done before animation + // must be done before animation if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { - targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]); + targetMoveDistance = Math.abs( + targetBeforeFirstSwap - getRect(target)[side1] + ); } - changed(); + return completed(true); } } @@ -2069,70 +2317,75 @@ Sortable.prototype = return false; }, + _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { - off(document, 'mousemove', this._onTouchMove); - off(document, 'touchmove', this._onTouchMove); - off(document, 'pointermove', this._onTouchMove); - off(document, 'dragover', nearestEmptyInsertDetectEvent); - off(document, 'mousemove', nearestEmptyInsertDetectEvent); - off(document, 'touchmove', nearestEmptyInsertDetectEvent); + + _offMoveEvents: function () { + off(document, "mousemove", this._onTouchMove); + off(document, "touchmove", this._onTouchMove); + off(document, "pointermove", this._onTouchMove); + off(document, "dragover", nearestEmptyInsertDetectEvent); + off(document, "mousemove", nearestEmptyInsertDetectEvent); + off(document, "touchmove", nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._onDrop); - off(ownerDocument, 'touchend', this._onDrop); - off(ownerDocument, 'pointerup', this._onDrop); - off(ownerDocument, 'touchcancel', this._onDrop); - off(document, 'selectstart', this); + + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; + + off(ownerDocument, "mouseup", this._onDrop); + off(ownerDocument, "touchend", this._onDrop); + off(ownerDocument, "pointerup", this._onDrop); + off(ownerDocument, "touchcancel", this._onDrop); + off(document, "selectstart", this); }, - _onDrop: function _onDrop( - /**Event*/ - evt) { - var el = this.el, - options = this.options; // Get the index of the dragged element within its parent + _onDrop: function (/**Event*/ evt) { + let el = this.el, + options = this.options; + + // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - pluginEvent('drop', this, { - evt: evt + + pluginEvent("drop", this, { + evt, }); - parentEl = dragEl && dragEl.parentNode; // Get again after plugin event + parentEl = dragEl && dragEl.parentNode; + + // Get again after plugin event newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); if (Sortable.eventCanceled) { this._nulling(); - return; } awaitingDragStarted = false; isCircumstantialInvert = false; pastFirstInvertThresh = false; + clearInterval(this._loopId); + clearTimeout(this._dragStartTimer); _cancelNextTick(this.cloneId); + _cancelNextTick(this._dragStartId); - _cancelNextTick(this._dragStartId); // Unbind events - - + // Unbind events if (this.nativeDraggable) { - off(document, 'drop', this); - off(el, 'dragstart', this._onDragStart); + off(document, "drop", this); + off(el, "dragstart", this._onDragStart); } - this._offMoveEvents(); - this._offUpEvents(); if (Safari) { - css(document.body, 'user-select', ''); + css(document.body, "user-select", ""); } - css(dragEl, 'transform', ''); + css(dragEl, "transform", ""); if (evt) { if (moved) { @@ -2142,34 +2395,45 @@ Sortable.prototype = ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { // Remove clone(s) - cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); + cloneEl && + cloneEl.parentNode && + cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { - off(dragEl, 'dragend', this); + off(dragEl, "dragend", this); } _disableDraggable(dragEl); + dragEl.style["will-change"] = ""; - dragEl.style['will-change'] = ''; // Remove classes + // Remove classes // ghostClass is added in dragStarted - if (moved && !awaitingDragStarted) { - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : this.options.ghostClass, + false + ); } + toggleClass(dragEl, this.options.chosenClass, false); - toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event - + // Drag stop event _dispatchEvent({ sortable: this, - name: 'unchoose', + name: "unchoose", toEl: parentEl, newIndex: null, newDraggableIndex: null, - originalEvent: evt + originalEvent: evt, }); if (rootEl !== parentEl) { @@ -2177,34 +2441,34 @@ Sortable.prototype = // Add event _dispatchEvent({ rootEl: parentEl, - name: 'add', + name: "add", toEl: parentEl, fromEl: rootEl, - originalEvent: evt - }); // Remove event - + originalEvent: evt, + }); + // Remove event _dispatchEvent({ sortable: this, - name: 'remove', + name: "remove", toEl: parentEl, - originalEvent: evt - }); // drag from one list and drop into another - + originalEvent: evt, + }); + // drag from one list and drop into another _dispatchEvent({ rootEl: parentEl, - name: 'sort', + name: "sort", toEl: parentEl, fromEl: rootEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } @@ -2215,16 +2479,16 @@ Sortable.prototype = // drag & drop within the same list _dispatchEvent({ sortable: this, - name: 'update', + name: "update", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } } @@ -2239,48 +2503,47 @@ Sortable.prototype = _dispatchEvent({ sortable: this, - name: 'end', + name: "end", toEl: parentEl, - originalEvent: evt - }); // Save sorting - + originalEvent: evt, + }); + // Save sorting this.save(); } } } - this._nulling(); }, - _nulling: function _nulling() { - pluginEvent('nulling', this); + + _nulling: function () { + pluginEvent("nulling", this); + rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; + savedInputChecked.forEach(function (el) { el.checked = true; }); + savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( - /**Event*/ - evt) { + + handleEvent: function (/**Event*/ evt) { switch (evt.type) { - case 'drop': - case 'dragend': + case "drop": + case "dragend": this._onDrop(evt); - break; - case 'dragenter': - case 'dragover': + case "dragenter": + case "dragover": if (dragEl) { this._onDragOver(evt); - _globalDragOver(evt); } - break; - case 'selectstart': + case "selectstart": evt.preventDefault(); break; } @@ -2290,17 +2553,16 @@ Sortable.prototype = * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], - el, - children = this.el.children, - i = 0, - n = children.length, - options = this.options; + toArray: function () { + let order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; for (; i < n; i++) { el = children[i]; - if (closest(el, options.draggable, this.el, false)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } @@ -2313,16 +2575,18 @@ Sortable.prototype = * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order) { - var items = {}, - rootEl = this.el; + sort: function (order) { + let items = {}, + rootEl = this.el; + this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; } }, this); + order.forEach(function (id) { if (items[id]) { rootEl.removeChild(items[id]); @@ -2334,8 +2598,8 @@ Sortable.prototype = /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2345,7 +2609,7 @@ Sortable.prototype = * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2355,21 +2619,20 @@ Sortable.prototype = * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); - - if (typeof modifiedValue !== 'undefined') { + let modifiedValue = PluginManager.modifyOption(this, name, value); + if (typeof modifiedValue !== "undefined") { options[name] = modifiedValue; } else { options[name] = value; } - if (name === 'group') { + if (name === "group") { _prepareGroup(options); } } @@ -2378,22 +2641,25 @@ Sortable.prototype = /** * Destroy */ - destroy: function destroy() { - pluginEvent('destroy', this); - var el = this.el; - el[expando] = null; - off(el, 'mousedown', this._onTapStart); - off(el, 'touchstart', this._onTapStart); - off(el, 'pointerdown', this._onTapStart); + destroy: function () { + pluginEvent("destroy", this); + let el = this.el; - if (this.nativeDraggable) { - off(el, 'dragover', this); - off(el, 'dragenter', this); - } // Remove draggable attributes + el[expando] = null; + off(el, "mousedown", this._onTapStart); + off(el, "touchstart", this._onTapStart); + off(el, "pointerdown", this._onTapStart); - Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { - el.removeAttribute('draggable'); + if (this.nativeDraggable) { + off(el, "dragover", this); + off(el, "dragenter", this); + } + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function ( + el + ) { + el.removeAttribute("draggable"); }); this._onDrop(); @@ -2401,33 +2667,35 @@ Sortable.prototype = this._disableDelayedDragEvents(); sortables.splice(sortables.indexOf(this.el), 1); + this.el = el = null; }, - _hideClone: function _hideClone() { + + _hideClone: function () { if (!cloneHidden) { - pluginEvent('hideClone', this); + pluginEvent("hideClone", this); if (Sortable.eventCanceled) return; - css(cloneEl, 'display', 'none'); + css(cloneEl, "display", "none"); if (this.options.removeCloneOnHide && cloneEl.parentNode) { cloneEl.parentNode.removeChild(cloneEl); } - cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { - if (putSortable.lastPutMode !== 'clone') { - this._hideClone(); + _showClone: function (putSortable) { + if (putSortable.lastPutMode !== "clone") { + this._hideClone(); return; } if (cloneHidden) { - pluginEvent('showClone', this); - if (Sortable.eventCanceled) return; // show clone at dragEl or original position + pluginEvent("showClone", this); + if (Sortable.eventCanceled) return; - if (rootEl.contains(dragEl) && !this.options.group.revertClone) { + // show clone at dragEl or original position + if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { rootEl.insertBefore(cloneEl, dragEl); } else if (nextEl) { rootEl.insertBefore(cloneEl, nextEl); @@ -2439,36 +2707,42 @@ Sortable.prototype = this.animate(dragEl, cloneEl); } - css(cloneEl, 'display', ''); + css(cloneEl, "display", ""); cloneHidden = false; } - } + }, }; -function _globalDragOver( -/**Event*/ -evt) { +function _globalDragOver(/**Event*/ evt) { if (evt.dataTransfer) { - evt.dataTransfer.dropEffect = 'move'; + evt.dataTransfer.dropEffect = "move"; } - evt.cancelable && evt.preventDefault(); } -function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, - sortable = fromEl[expando], - onMoveFn = sortable.options.onMove, - retVal; // Support for new CustomEvent feature - +function onMove( + fromEl, + toEl, + dragEl, + dragRect, + targetEl, + targetRect, + originalEvent, + willInsertAfter +) { + let evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { - evt = new CustomEvent('move', { + evt = new CustomEvent("move", { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); - evt.initEvent('move', true, true); + evt = document.createEvent("Event"); + evt.initEvent("move", true, true); } evt.to = toEl; @@ -2478,7 +2752,9 @@ function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalE evt.related = targetEl || toEl; evt.relatedRect = targetRect || getRect(toEl); evt.willInsertAfter = willInsertAfter; + evt.originalEvent = originalEvent; + fromEl.dispatchEvent(evt); if (onMoveFn) { @@ -2497,32 +2773,56 @@ function _unsilent() { } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; - return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; + + return vertical + ? evt.clientX > rect.right + spacer || + (evt.clientX <= rect.right && + evt.clientY > rect.bottom && + evt.clientX >= rect.left) + : (evt.clientX > rect.right && evt.clientY > rect.top) || + (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer); } -function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, - targetLength = vertical ? targetRect.height : targetRect.width, - targetS1 = vertical ? targetRect.top : targetRect.left, - targetS2 = vertical ? targetRect.bottom : targetRect.right, - invert = false; +function _getSwapDirection( + evt, + target, + targetRect, + vertical, + swapThreshold, + invertedSwapThreshold, + invertSwap, + isLastTarget +) { + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, + targetLength = vertical ? targetRect.height : targetRect.width, + targetS1 = vertical ? targetRect.top : targetRect.left, + targetS2 = vertical ? targetRect.bottom : targetRect.right, + invert = false; if (!invertSwap) { // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 // check if past first invert threshold on side opposite of lastDirection - if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) { + if ( + !pastFirstInvertThresh && + (lastDirection === 1 + ? mouseOnAxis > targetS1 + (targetLength * invertedSwapThreshold) / 2 + : mouseOnAxis < targetS2 - (targetLength * invertedSwapThreshold) / 2) + ) { // past first invert threshold, do not restrict inverted threshold to dragEl shadow pastFirstInvertThresh = true; } if (!pastFirstInvertThresh) { // dragEl shadow (target move distance shadow) - if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow - : mouseOnAxis > targetS2 - targetMoveDistance) { + if ( + lastDirection === 1 + ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow + : mouseOnAxis > targetS2 - targetMoveDistance + ) { return -lastDirection; } } else { @@ -2530,7 +2830,10 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv } } else { // Regular - if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) { + if ( + mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 && + mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2 + ) { return _getInsertDirection(target); } } @@ -2540,21 +2843,23 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv if (invert) { // Invert of regular - if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) { + if ( + mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 || + mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2 + ) { return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1; } } return 0; } + /** * Gets the direction dragEl must be swapped relative to target in order to make it * seem that dragEl has been "inserted" into that element's position * @param {HTMLElement} target The target whose position dragEl is being inserted at * @return {Number} Direction dragEl must be swapped */ - - function _getInsertDirection(target) { if (index(dragEl) < index(target)) { return 1; @@ -2562,18 +2867,17 @@ function _getInsertDirection(target) { return -1; } } + /** * Generate id * @param {HTMLElement} el * @returns {String} * @private */ - - function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, - i = str.length, - sum = 0; + let str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; while (i--) { sum += str.charCodeAt(i); @@ -2584,11 +2888,12 @@ function _generateId(el) { function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + + let inputs = root.getElementsByTagName("input"); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2599,24 +2904,24 @@ function _nextTick(fn) { function _cancelNextTick(id) { return clearTimeout(id); -} // Fixed #973: - +} +// Fixed #973: if (documentExists) { - on(document, 'touchmove', function (evt) { + on(document, "touchmove", function (evt) { if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { evt.preventDefault(); } }); -} // Export utils - +} +// Export utils Sortable.utils = { on: on, off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2628,60 +2933,57 @@ Sortable.utils = { nextTick: _nextTick, cancelNextTick: _cancelNextTick, detectDirection: _detectDirection, - getChild: getChild + getChild: getChild, }; + /** * Get the Sortable instance of an element * @param {HTMLElement} element The element * @return {Sortable|undefined} The instance of Sortable */ - Sortable.get = function (element) { return element[expando]; }; + /** * Mount a plugin to Sortable * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted */ - - -Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - +Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + + plugins.forEach((plugin) => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call( + plugin + )}`; } + if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils }; - if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils); PluginManager.mount(plugin); }); }; + /** * Create sortable instance * @param {HTMLElement} el * @param {Object} [options] */ - - Sortable.create = function (el, options) { return new Sortable(el, options); -}; // Export - +}; +// Export Sortable.version = version; -var autoScrolls = [], - scrollEl, - scrollRootEl, - scrolling = false, - lastAutoScrollX, - lastAutoScrollY, - touchEvt$1, - pointerElemChangedInterval; +let autoScrolls = [], + scrollEl, + scrollRootEl, + scrolling = false, + lastAutoScrollX, + lastAutoScrollY, + touchEvt$1, + pointerElemChangedInterval; function AutoScrollPlugin() { function AutoScroll() { @@ -2689,106 +2991,123 @@ function AutoScrollPlugin() { scroll: true, scrollSensitivity: 30, scrollSpeed: 10, - bubbleScroll: true - }; // Bind all private methods + bubbleScroll: true, + }; - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ originalEvent }) { if (this.sortable.nativeDraggable) { - on(document, 'dragover', this._handleAutoScroll); + on(document, "dragover", this._handleAutoScroll); } else { if (this.options.supportPointer) { - on(document, 'pointermove', this._handleFallbackAutoScroll); + on(document, "pointermove", this._handleFallbackAutoScroll); } else if (originalEvent.touches) { - on(document, 'touchmove', this._handleFallbackAutoScroll); + on(document, "touchmove", this._handleFallbackAutoScroll); } else { - on(document, 'mousemove', this._handleFallbackAutoScroll); + on(document, "mousemove", this._handleFallbackAutoScroll); } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ originalEvent }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { - off(document, 'dragover', this._handleAutoScroll); + off(document, "dragover", this._handleAutoScroll); } else { - off(document, 'pointermove', this._handleFallbackAutoScroll); - off(document, 'touchmove', this._handleFallbackAutoScroll); - off(document, 'mousemove', this._handleFallbackAutoScroll); + off(document, "pointermove", this._handleFallbackAutoScroll); + off(document, "touchmove", this._handleFallbackAutoScroll); + off(document, "mousemove", this._handleFallbackAutoScroll); } clearPointerElemChangedInterval(); clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; + autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); - touchEvt$1 = evt; // IE does not seem to have native autoscroll, + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); + + touchEvt$1 = evt; + + // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, // Firefox and Chrome are good - if (fallback || Edge || IE11OrLess || Safari) { - autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - - var ogElemScroller = getParentAutoScrollElement(elem, true); - - if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { - pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); - + autoScroll(evt, this.options, elem, fallback); + + // Listener for pointer element change + let ogElemScroller = getParentAutoScrollElement(elem, true); + if ( + scrolling && + (!pointerElemChangedInterval || + x !== lastAutoScrollX || + y !== lastAutoScrollY) + ) { + pointerElemChangedInterval && clearPointerElemChangedInterval(); + // Detect for pointer elem change, emulating native DnD behaviour + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement( + document.elementFromPoint(x, y), + true + ); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; } } else { // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll - if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) { + if ( + !this.options.bubbleScroll || + getParentAutoScrollElement(elem, true) === getWindowScrollingElement() + ) { clearAutoScrolls(); return; } - - autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); + autoScroll( + evt, + this.options, + getParentAutoScrollElement(elem, false), + false + ); } - } + }, }; - return _extends(AutoScroll, { - pluginName: 'scroll', - initializeByDefault: true + + return Object.assign(AutoScroll, { + pluginName: "scroll", + initializeByDefault: true, }); } @@ -2803,20 +3122,24 @@ function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } -var autoScroll = throttle(function (evt, options, rootEl, isFallback) { +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, - scrollCustomFn; // New scroll root, set scrollEl + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + + let scrollThisInstance = false, + scrollCustomFn; + // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { scrollRootEl = rootEl; + clearAutoScrolls(); + scrollEl = options.scroll; scrollCustomFn = options.scrollFn; @@ -2825,105 +3148,136 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } } - var layersOut = 0; - var currentParent = scrollEl; - + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, - rect = getRect(el), - top = rect.top, - bottom = rect.bottom, - left = rect.left, - right = rect.right, - width = rect.width, - height = rect.height, - canScrollX = void 0, - canScrollY = void 0, - scrollWidth = el.scrollWidth, - scrollHeight = el.scrollHeight, - elCSS = css(el), - scrollPosX = el.scrollLeft, - scrollPosY = el.scrollTop; + let el = currentParent, + rect = getRect(el), + top = rect.top, + bottom = rect.bottom, + left = rect.left, + right = rect.right, + width = rect.width, + height = rect.height, + canScrollX, + canScrollY, + scrollWidth = el.scrollWidth, + scrollHeight = el.scrollHeight, + elCSS = css(el), + scrollPosX = el.scrollLeft, + scrollPosY = el.scrollTop; if (el === winScroller) { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || + elCSS.overflowX === "scroll" || + elCSS.overflowX === "visible"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || + elCSS.overflowY === "scroll" || + elCSS.overflowY === "visible"); } else { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll"); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = + canScrollX && + (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - + (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = + canScrollY && + (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - + (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } } } - if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { + if ( + autoScrolls[layersOut].vx != vx || + autoScrolls[layersOut].vy != vy || + autoScrolls[layersOut].el !== el + ) { autoScrolls[layersOut].el = el; autoScrolls[layersOut].vx = vx; autoScrolls[layersOut].vy = vy; + clearInterval(autoScrolls[layersOut].pid); if (vx != 0 || vy != 0) { scrollThisInstance = true; /* jshint loopfunc:true */ - - autoScrolls[layersOut].pid = setInterval(function () { - // emulate drag over during autoscroll (fallback), emulating native DnD behaviour - if (isFallback && this.layer === 0) { - Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely - - } - - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; - - if (typeof scrollCustomFn === 'function') { - if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { - return; + autoScrolls[layersOut].pid = setInterval( + function () { + // emulate drag over during autoscroll (fallback), emulating native DnD behaviour + if (isFallback && this.layer === 0) { + Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely + } + let scrollOffsetY = autoScrolls[this.layer].vy + ? autoScrolls[this.layer].vy * speed + : 0; + let scrollOffsetX = autoScrolls[this.layer].vx + ? autoScrolls[this.layer].vx * speed + : 0; + + if (typeof scrollCustomFn === "function") { + if ( + scrollCustomFn.call( + Sortable.dragged.parentNode[expando], + scrollOffsetX, + scrollOffsetY, + evt, + touchEvt$1, + autoScrolls[this.layer].el + ) !== "continue" + ) { + return; + } } - } - scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); - }.bind({ - layer: layersOut - }), 24); + scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); + }.bind({ layer: layersOut }), + 24 + ); } } - layersOut++; } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); - scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); -var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget, +}) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = + originalEvent.changedTouches && originalEvent.changedTouches.length + ? originalEvent.changedTouches[0] + : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); - if (toSortable && !toSortable.el.contains(target)) { - dispatchSortableEvent('spill'); - this.onSpill({ - dragEl: dragEl, - putSortable: putSortable - }); + dispatchSortableEvent("spill"); + this.onSpill({ dragEl, putSortable }); } }; @@ -2931,86 +3285,75 @@ function Revert() {} Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + dragStart({ oldDraggableIndex }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + onSpill({ dragEl, putSortable }) { this.sortable.captureAnimationState(); - if (putSortable) { putSortable.captureAnimationState(); } - - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); } else { this.sortable.el.appendChild(dragEl); } - this.sortable.animateAll(); - if (putSortable) { putSortable.animateAll(); } }, - drop: drop + drop, }; -_extends(Revert, { - pluginName: 'revertOnSpill' +Object.assign(Revert, { + pluginName: "revertOnSpill", }); function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ dragEl, putSortable }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + drop, }; -_extends(Remove, { - pluginName: 'removeOnSpill' +Object.assign(Remove, { + pluginName: "removeOnSpill", }); -var lastSwapEl; +let lastSwapEl; function SwapPlugin() { function Swap() { this.defaults = { - swapClass: 'sortable-swap-highlight' + swapClass: "sortable-swap-highlight", }; } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ dragEl }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel, + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, - options = this.options; - + let el = this.sortable.el, + options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; - + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); lastSwapEl = target; @@ -3022,207 +3365,197 @@ function SwapPlugin() { toggleClass(prevSwapEl, options.swapClass, false); } } - changed(); + completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + drop({ activeSortable, putSortable, dragEl }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); - - if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { + if ( + lastSwapEl && + (options.swap || (putSortable && putSortable.options.swap)) + ) { if (dragEl !== lastSwapEl) { toSortable.captureAnimationState(); - if (toSortable !== activeSortable) activeSortable.captureAnimationState(); + if (toSortable !== activeSortable) + activeSortable.captureAnimationState(); swapNodes(dragEl, lastSwapEl); + toSortable.animateAll(); if (toSortable !== activeSortable) activeSortable.animateAll(); } } }, - nulling: function nulling() { + nulling() { lastSwapEl = null; - } + }, }; - return _extends(Swap, { - pluginName: 'swap', - eventProperties: function eventProperties() { + + return Object.assign(Swap, { + pluginName: "swap", + eventProperties() { return { - swapItem: lastSwapEl + swapItem: lastSwapEl, }; - } + }, }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, - p2 = n2.parentNode, - i1, - i2; + let p1 = n1.parentNode, + p2 = n2.parentNode, + i1, + i2; + if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return; + i1 = index(n1); i2 = index(n2); if (p1.isEqualNode(p2) && i1 < i2) { i2++; } - p1.insertBefore(n2, p1.children[i1]); p2.insertBefore(n1, p2.children[i2]); } -var multiDragElements = [], - multiDragClones = [], - lastMultiDragSelect, - // for selection with modifier key down (SHIFT) -multiDragSortable, - initialFolding = false, - // Initial multi-drag fold when drag started -folding = false, - // Folding any other time -dragStarted = false, - dragEl$1, - clonesFromRect, - clonesHidden; +let multiDragElements = [], + multiDragClones = [], + lastMultiDragSelect, // for selection with modifier key down (SHIFT) + multiDragSortable, + initialFolding = false, // Initial multi-drag fold when drag started + folding = false, // Folding any other time + dragStarted = false, + dragEl$1, + clonesFromRect, + clonesHidden; function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } if (sortable.options.supportPointer) { - on(document, 'pointerup', this._deselectMultiDrag); + on(document, "pointerup", this._deselectMultiDrag); } else { - on(document, 'mouseup', this._deselectMultiDrag); - on(document, 'touchend', this._deselectMultiDrag); + on(document, "mouseup", this._deselectMultiDrag); + on(document, "touchend", this._deselectMultiDrag); } - on(document, 'keydown', this._checkKeyDown); - on(document, 'keyup', this._checkKeyUp); + on(document, "keydown", this._checkKeyDown); + on(document, "keyup", this._checkKeyUp); + this.defaults = { - selectedClass: 'sortable-selected', + selectedClass: "sortable-selected", multiDragKey: null, - setData: function setData(dataTransfer, dragEl) { - var data = ''; - + setData(dataTransfer, dragEl) { + let data = ""; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { - data += (!i ? '' : ', ') + multiDragElement.textContent; + multiDragElements.forEach((multiDragElement, i) => { + data += (!i ? "" : ", ") + multiDragElement.textContent; }); } else { data = dragEl.textContent; } - - dataTransfer.setData('Text', data); - } + dataTransfer.setData("Text", data); + }, }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ dragEl: dragged }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; - if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + setupClone({ sortable, cancel }) { + if (!this.isMultiDrag) return; + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); + multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; + multiDragClones[i].draggable = false; - multiDragClones[i].style['will-change'] = ''; + multiDragClones[i].style["will-change"] = ""; + toggleClass(multiDragClones[i], this.options.selectedClass, false); - multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false); + multiDragElements[i] === dragEl$1 && + toggleClass(multiDragClones[i], this.options.chosenClass, false); } sortable._hideClone(); - cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; - if (!this.isMultiDrag) return; + clone({ sortable, rootEl, dispatchSortableEvent, cancel }) { + if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { if (multiDragElements.length && multiDragSortable === sortable) { insertMultiDragClones(true, rootEl); - dispatchSortableEvent('clone'); + dispatchSortableEvent("clone"); + cancel(); } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ cloneNowShown, rootEl, cancel }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { - css(clone, 'display', ''); + multiDragClones.forEach((clone) => { + css(clone, "display", ""); }); + cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ sortable, cloneNowHidden, cancel }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { - css(clone, 'display', 'none'); - - if (_this.options.removeCloneOnHide && clone.parentNode) { + multiDragClones.forEach((clone) => { + css(clone, "display", "none"); + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); + cloneNowHidden(); clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ sortable }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.sortableIndex = index(multiDragElement); - }); // Sort multi-drag elements + }); + // Sort multi-drag elements multiDragElements = multiDragElements.sort(function (a, b) { return a.sortableIndex - b.sortableIndex; }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ sortable }) { if (!this.isMultiDrag) return; - if (this.options.sort) { // Capture rects, // hide multi drag elements (by positioning them absolute), @@ -3230,101 +3563,110 @@ function MultiDragPlugin() { // show multi drag elements, // animate to rects, // unset rects & remove from DOM + sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - css(multiDragElement, 'position', 'absolute'); + css(multiDragElement, "position", "absolute"); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + + let dragRect = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); + folding = true; initialFolding = true; } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); - } // Remove all auxiliary multidrag items from el, if sorting enabled - + } - if (_this2.options.sort) { + // Remove all auxiliary multidrag items from el, if sorting enabled + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ target, completed, cancel }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ fromSortable, rootEl, sortable, dragRect }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { sortable.addAnimationState({ target: multiDragElement, - rect: folding ? getRect(multiDragElement) : dragRect + rect: folding ? getRect(multiDragElement) : dragRect, }); + unsetRect(multiDragElement); + multiDragElement.fromRect = dragRect; + fromSortable.removeAnimationState(multiDragElement); }); folding = false; insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable, + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly if (isOwner) { activeSortable._hideClone(); } - initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location - - if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { + initialFolding = false; + // If leaving sort:false root, or already folding - Fold to new location + if ( + options.animation && + multiDragElements.length > 1 && + (folding || + (!isOwner && !activeSortable.options.sort && !putSortable)) + ) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted - // while folding, and so that we can capture them again because old sortable will no longer be fromSortable + setRect(multiDragElement, dragRectAbsolute); + // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted + // while folding, and so that we can capture them again because old sortable will no longer be fromSortable parentEl.appendChild(multiDragElement); }); - folding = true; - } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out + folding = true; + } + // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out if (!isOwner) { // Only remove if not folding (folding will remove them anyways) if (!folding) { @@ -3332,17 +3674,21 @@ function MultiDragPlugin() { } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; - - activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden - + let clonesHiddenBefore = clonesHidden; + activeSortable._showClone(sortable); - if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + // Unfold animation for clones if showing from hidden + if ( + activeSortable.options.animation && + !clonesHidden && + clonesHiddenBefore + ) { + multiDragClones.forEach((clone) => { activeSortable.addAnimationState({ target: clone, - rect: clonesFromRect + rect: clonesFromRect, }); + clone.fromRect = clonesFromRect; clone.thisAnimationDuration = null; }); @@ -3353,66 +3699,81 @@ function MultiDragPlugin() { } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; }); - if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { - clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + if ( + activeSortable.options.animation && + !isOwner && + activeSortable.multiDrag.isMultiDrag + ) { + clonesFromRect = Object.assign({}, dragRect); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable, + }) { + let toSortable = putSortable || this.sortable; + if (!evt) return; - var options = this.options, - children = parentEl.children; // Multi-drag selection + let options = this.options, + children = parentEl.children; + + // Multi-drag selection if (!dragStarted) { if (options.multiDragKey && !this.multiDragKeyDown) { this._deselectMultiDrag(); } - - toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1)); + toggleClass( + dragEl$1, + options.selectedClass, + !~multiDragElements.indexOf(dragEl$1) + ); if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: dragEl$1, - originalEvt: evt - }); // Modifier activated, select from last to dragEl + originalEvt: evt, + }); - if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), - currentIndex = index(dragEl$1); + // Modifier activated, select from last to dragEl + if ( + evt.shiftKey && + lastMultiDragSelect && + sortable.el.contains(lastMultiDragSelect) + ) { + let lastIndex = index(lastMultiDragSelect), + currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; - + let n, i; if (currentIndex > lastIndex) { i = lastIndex; n = currentIndex; @@ -3425,12 +3786,13 @@ function MultiDragPlugin() { if (~multiDragElements.indexOf(children[i])) continue; toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); + dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: children[i], - originalEvt: evt + originalEvt: evt, }); } } @@ -3443,222 +3805,256 @@ function MultiDragPlugin() { multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'deselect', + sortable, + rootEl, + name: "deselect", targetEl: dragEl$1, - originalEvt: evt + originalEvt: evt, }); } - } // Multi-drag drop - + } + // Multi-drag drop if (dragStarted && this.isMultiDrag) { // Do not "unfold" after around dragEl if reverted - if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), - multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); - if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; + if ( + (parentEl[expando].options.sort || parentEl !== rootEl) && + multiDragElements.length > 1 + ) { + let dragRect = getRect(dragEl$1), + multiDragIndex = index( + dragEl$1, + ":not(." + this.options.selectedClass + ")" + ); + + if (!initialFolding && options.animation) + dragEl$1.thisAnimationDuration = null; + toSortable.captureAnimationState(); if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; - if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; - multiDragElement.fromRect = rect; // Prepare unfold animation + let rect = folding ? getRect(multiDragElement) : dragRect; + multiDragElement.fromRect = rect; + // Prepare unfold animation toSortable.addAnimationState({ target: multiDragElement, - rect: rect + rect: rect, }); } }); - } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert - // properly they must all be removed - + } + // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert + // properly they must all be removed removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + + multiDragElements.forEach((multiDragElement) => { if (children[multiDragIndex]) { - parentEl.insertBefore(multiDragElement, children[multiDragIndex]); + parentEl.insertBefore( + multiDragElement, + children[multiDragIndex] + ); } else { parentEl.appendChild(multiDragElement); } - multiDragIndex++; - }); // If initial folding is done, the elements may have changed position because they are now + }); + + // If initial folding is done, the elements may have changed position because they are now // unfolding around dragEl, even though dragEl may not have his index changed, so update event // must be fired here as Sortable will not. - if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { - if (multiDragElement.sortableIndex !== index(multiDragElement)) { + let update = false; + multiDragElements.forEach((multiDragElement) => { + if ( + multiDragElement.sortableIndex !== index(multiDragElement) + ) { update = true; return; } }); if (update) { - dispatchSortableEvent('update'); + dispatchSortableEvent("update"); } } - } // Must be done after capturing individual rects (scroll bar) - + } - multiDragElements.forEach(function (multiDragElement) { + // Must be done after capturing individual rects (scroll bar) + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); + toSortable.animateAll(); } multiDragSortable = toSortable; - } // Remove clones if necessary - + } - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + // Remove clones if necessary + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { + multiDragClones.forEach((clone) => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); + off(document, "pointerup", this._deselectMultiDrag); + off(document, "mouseup", this._deselectMultiDrag); + off(document, "touchend", this._deselectMultiDrag); - off(document, 'pointerup', this._deselectMultiDrag); - off(document, 'mouseup', this._deselectMultiDrag); - off(document, 'touchend', this._deselectMultiDrag); - off(document, 'keydown', this._checkKeyDown); - off(document, 'keyup', this._checkKeyUp); + off(document, "keydown", this._checkKeyDown); + off(document, "keyup", this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { - if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable - if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable + _deselectMultiDrag(evt) { + if (typeof dragStarted !== "undefined" && dragStarted) return; - if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click + // Only deselect if selection is in this sortable + if (multiDragSortable !== this.sortable) return; + // Only deselect if target is not item in this sortable + if ( + evt && + closest(evt.target, this.options.draggable, this.sortable.el, false) + ) + return; + + // Only deselect if left click if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ sortable: this.sortable, rootEl: this.sortable.el, - name: 'deselect', + name: "deselect", targetEl: el, - originalEvt: evt + originalEvt: evt, }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } - } + }, }; - return _extends(MultiDrag, { + + return Object.assign(MultiDrag, { // Static methods & properties - pluginName: 'multiDrag', + pluginName: "multiDrag", utils: { /** * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; - if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; - + select(el) { + let sortable = el.parentNode[expando]; + if ( + !sortable || + !sortable.options.multiDrag || + ~multiDragElements.indexOf(el) + ) + return; if (multiDragSortable && multiDragSortable !== sortable) { multiDragSortable.multiDrag._deselectMultiDrag(); - multiDragSortable = sortable; } - toggleClass(el, sortable.options.selectedClass, true); multiDragElements.push(el); }, - /** * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], - index = multiDragElements.indexOf(el); + deselect(el) { + let sortable = el.parentNode[expando], + index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); - } + }, }, - eventProperties: function eventProperties() { - var _this3 = this; + eventProperties() { + const oldIndicies = [], + newIndicies = []; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { oldIndicies.push({ - multiDragElement: multiDragElement, - index: multiDragElement.sortableIndex - }); // multiDragElements will already be sorted if folding - - var newIndex; + multiDragElement, + index: multiDragElement.sortableIndex, + }); + // multiDragElements will already be sorted if folding + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index( + multiDragElement, + ":not(." + this.options.selectedClass + ")" + ); } else { newIndex = index(multiDragElement); } - newIndicies.push({ - multiDragElement: multiDragElement, - index: newIndex + multiDragElement, + index: newIndex, }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies, }; }, optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); - - if (key === 'ctrl') { - key = 'Control'; + if (key === "ctrl") { + key = "Control"; } else if (key.length > 1) { key = key.charAt(0).toUpperCase() + key.substr(1); } - return key; - } - } + }, + }, }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; - + multiDragElements.forEach((multiDragElement, i) => { + let target = + rootEl.children[ + multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0) + ]; if (target) { rootEl.insertBefore(multiDragElement, target); } else { @@ -3666,17 +4062,16 @@ function insertMultiDragElements(clonesInserted, rootEl) { } }); } + /** * Insert multi-drag clones * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted * @param {HTMLElement} rootEl */ - - function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; - + multiDragClones.forEach((clone, i) => { + let target = + rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); } else { @@ -3686,9 +4081,10 @@ function insertMultiDragClones(elementsInserted, rootEl) { } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); + multiDragElement.parentNode && + multiDragElement.parentNode.removeChild(multiDragElement); }); } diff --git a/modular/sortable.core.esm.js b/modular/sortable.core.esm.js index 6e6d13829..4a98a0e0c 100644 --- a/modular/sortable.core.esm.js +++ b/modular/sortable.core.esm.js @@ -1,151 +1,30 @@ /**! - * Sortable 1.10.2 + * Sortable 1.11.0 * @author RubaXa * @author owenm * @license MIT */ -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; -} - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } -} - -function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); -} - -var version = "1.10.2"; +var version = "1.11.0"; function userAgent(pattern) { - if (typeof window !== 'undefined' && window.navigator) { - return !! - /*@__PURE__*/ - navigator.userAgent.match(pattern); + if (typeof window !== "undefined" && window.navigator) { + return !!(/*@__PURE__*/ navigator.userAgent.match(pattern)); } } -var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -var Edge = userAgent(/Edge/i); -var FireFox = userAgent(/firefox/i); -var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -var IOS = userAgent(/iP(ad|od|hone)/i); -var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); - -var captureMode = { +const IE11OrLess = userAgent( + /(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i +); +const Edge = userAgent(/Edge/i); +const FireFox = userAgent(/firefox/i); +const Safari = + userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +const IOS = userAgent(/iP(ad|od|hone)/i); +const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); + +const captureMode = { capture: false, - passive: false + passive: false, }; function on(el, event, fn) { @@ -156,13 +35,10 @@ function off(el, event, fn) { el.removeEventListener(event, fn, !IE11OrLess && captureMode); } -function matches( -/**HTMLElement*/ -el, -/**String*/ -selector) { +function matches(/**HTMLElement*/ el, /**String*/ selector) { if (!selector) return; - selector[0] === '>' && (selector = selector.substring(1)); + + selector[0] === ">" && (selector = selector.substring(1)); if (el) { try { @@ -182,95 +58,110 @@ selector) { } function getParentOrHost(el) { - return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode; + return el.host && el !== document && el.host.nodeType + ? el.host + : el.parentNode; } function closest( -/**HTMLElement*/ -el, -/**String*/ -selector, -/**HTMLElement*/ -ctx, includeCTX) { + /**HTMLElement*/ el, + /**String*/ selector, + /**HTMLElement*/ ctx, + includeCTX +) { if (el) { ctx = ctx || document; do { - if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) { + if ( + (selector != null && + (selector[0] === ">" + ? el.parentNode === ctx && matches(el, selector) + : matches(el, selector))) || + (includeCTX && el === ctx) + ) { return el; } if (el === ctx) break; /* jshint boss:true */ - } while (el = getParentOrHost(el)); + } while ((el = getParentOrHost(el))); } return null; } -var R_SPACE = /\s+/g; +const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { - el.classList[state ? 'add' : 'remove'](name); + el.classList[state ? "add" : "remove"](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); - el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); + let className = (" " + el.className + " ") + .replace(R_SPACE, " ") + .replace(" " + name + " ", " "); + el.className = (className + (state ? " " + name : "")).replace( + R_SPACE, + " " + ); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(el, ''); + val = document.defaultView.getComputedStyle(el, ""); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { - if (!(prop in style) && prop.indexOf('webkit') === -1) { - prop = '-webkit-' + prop; + if (!(prop in style) && prop.indexOf("webkit") === -1) { + prop = "-webkit-" + prop; } - style[prop] = val + (typeof val === 'string' ? '' : 'px'); + style[prop] = val + (typeof val === "string" ? "" : "px"); } } } function matrix(el, selfOnly) { - var appliedTransforms = ''; - - if (typeof el === 'string') { + let appliedTransforms = ""; + if (typeof el === "string") { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + //@ts-ignore + let transform = css(el, "transform"); - if (transform && transform !== 'none') { - appliedTransforms = transform + ' ' + appliedTransforms; + if (transform && transform !== "none") { + appliedTransforms = transform + " " + appliedTransforms; } /* jshint boss:true */ - } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + //@ts-ignore + const matrixFn = + window.DOMMatrix || + window.WebKitCSSMatrix || + window.CSSMatrix || + window.MSCSSMatrix; /*jshint -W056 */ - return matrixFn && new matrixFn(appliedTransforms); } function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), - i = 0, - n = list.length; + let list = ctx.getElementsByTagName(tagName), + i = 0, + n = list.length; if (iterator) { for (; i < n; i++) { @@ -285,7 +176,7 @@ function find(ctx, tagName, iterator) { } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -293,6 +184,7 @@ function getWindowScrollingElement() { return document.documentElement; } } + /** * Returns the "bounding client rect" of given element * @param {HTMLElement} el The element whose boundingClientRect is wanted @@ -302,11 +194,16 @@ function getWindowScrollingElement() { * @param {[HTMLElement]} container The parent the element will be placed in * @return {Object} The boundingClientRect of el, with specified adjustments */ - - -function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { +function getRect( + el, + relativeToContainingBlock, + relativeToNonStaticParent, + undoScale, + container +) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + + let elRect, top, left, bottom, right, height, width; if (el !== window && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -325,39 +222,59 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS width = window.innerWidth; } - if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) { + if ( + (relativeToContainingBlock || relativeToNonStaticParent) && + el !== window + ) { // Adjust for translate() - container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) - // Not needed on <= IE11 + container = container || el.parentNode; + // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) + // Not needed on <= IE11 if (!IE11OrLess) { do { - if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container - - top -= containerRect.top + parseInt(css(container, 'border-top-width')); - left -= containerRect.left + parseInt(css(container, 'border-left-width')); + if ( + container && + container.getBoundingClientRect && + //@ts-ignore + (css(container, "transform") !== "none" || + (relativeToNonStaticParent && + //@ts-ignore + css(container, "position") !== "static")) + ) { + let containerRect = container.getBoundingClientRect(); + + // Set relative to edges of padding box of container + //@ts-ignore + top -= + containerRect.top + parseInt(css(container, "border-top-width")); + //@ts-ignore + left -= + containerRect.left + parseInt(css(container, "border-left-width")); bottom = top + elRect.height; right = left + elRect.width; + break; } /* jshint boss:true */ - - } while (container = container.parentNode); + } while ((container = container.parentNode)); } } if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d; + //@ts-ignore + let elMatrix = matrix(container || el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d; if (elMatrix) { top /= scaleY; left /= scaleX; + width /= scaleX; height /= scaleY; + bottom = top + height; right = left + width; } @@ -369,9 +286,10 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS bottom: bottom, right: right, width: width, - height: height + height: height, }; } + /** * Checks if a side of an element is scrolled past a side of its parents * @param {HTMLElement} el The element who's side being scrolled out of view is in question @@ -379,30 +297,33 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom') * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element */ - - function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), - elSideVal = getRect(el)[elSide]; - /* jshint boss:true */ + let parent = getParentAutoScrollElement(el, true), + //@ts-ignore + elSideVal = getRect(el)[elSide]; + /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + //@ts-ignore + let parentSideVal = getRect(parent)[parentSide], + visible; - if (parentSide === 'top' || parentSide === 'left') { + if (parentSide === "top" || parentSide === "left") { visible = elSideVal >= parentSideVal; } else { visible = elSideVal <= parentSideVal; } if (!visible) return parent; + if (parent === getWindowScrollingElement()) break; + parent = getParentAutoScrollElement(parent, false); } return false; } + /** * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) * and non-draggable elements @@ -411,44 +332,54 @@ function isScrolledPast(el, elSide, parentSide) { * @param {Object} options Parent Sortable's options * @return {HTMLElement} The child at index childNum, or null if not found */ - - function getChild(el, childNum, options) { - var currentChild = 0, - i = 0, - children = el.children; + let currentChild = 0, + i = 0, + children = el.children; while (i < children.length) { - if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) { + if ( + children[i].style.display !== "none" && + //@ts-ignore + children[i] !== Sortable.ghost && + //@ts-ignore + children[i] !== Sortable.dragged && + closest(children[i], options.draggable, el, false) + ) { if (currentChild === childNum) { return children[i]; } - currentChild++; } i++; } - return null; } + /** * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) * @param {HTMLElement} el Parent element * @param {selector} selector Any other elements that should be ignored * @return {HTMLElement} The last child, ignoring ghostEl */ - - function lastChild(el, selector) { - var last = el.lastElementChild; - - while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { + let last = el.lastElementChild; + + while ( + last && + //@ts-ignore + (last === Sortable.ghost || + //@ts-ignore + css(last, "display") === "none" || + (selector && !matches(last, selector))) + ) { last = last.previousElementSibling; } return last || null; } + /** * Returns the index of an element within its parent for a selected set of * elements @@ -456,43 +387,46 @@ function lastChild(el, selector) { * @param {selector} selector * @return {number} */ - - function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; } - /* jshint boss:true */ - - while (el = el.previousElementSibling) { - if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) { + /* jshint boss:true */ + while ((el = el.previousElementSibling)) { + //@ts-ignore + if ( + el.nodeName.toUpperCase() !== "TEMPLATE" && + el !== Sortable.clone && + (!selector || matches(el, selector)) + ) { index++; } } return index; } + /** * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements. * The value is returned in real pixels. * @param {HTMLElement} el * @return {Array} Offsets in the format of [left, top] */ - - function getRelativeScrollOffset(el) { - var offsetLeft = 0, - offsetTop = 0, - winScroller = getWindowScrollingElement(); + let offsetLeft = 0, + offsetTop = 0, + winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), - scaleX = elMatrix.a, - scaleY = elMatrix.d; + //@ts-ignore + let elMatrix = matrix(el), + scaleX = elMatrix.a, + scaleY = elMatrix.d; + offsetLeft += el.scrollLeft * scaleX; offsetTop += el.scrollTop * scaleY; } while (el !== winScroller && (el = el.parentNode)); @@ -500,53 +434,59 @@ function getRelativeScrollOffset(el) { return [offsetLeft, offsetTop]; } + /** * Returns the index of the object within the given array * @param {Array} arr Array that may or may not hold the object * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find * @return {Number} The index of the object in the array, or -1 */ - - function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } - return -1; } function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) - if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + if ( + elem.clientWidth < elem.scrollWidth || + elem.clientHeight < elem.scrollHeight + ) { + //@ts-ignore + let elemCSS = css(elem); + if ( + (elem.clientWidth < elem.scrollWidth && + (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll")) || + (elem.clientHeight < elem.scrollHeight && + (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) + ) { + if (!elem.getBoundingClientRect || elem === document.body) + return getWindowScrollingElement(); - if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { - if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); if (gotSelf || includeSelf) return elem; gotSelf = true; } } /* jshint boss:true */ - - } while (elem = elem.parentNode); + } while ((elem = elem.parentNode)); return getWindowScrollingElement(); } function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -557,16 +497,20 @@ function extend(dst, src) { } function isRectEqual(rect1, rect2) { - return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); + return ( + Math.round(rect1.top) === Math.round(rect2.top) && + Math.round(rect1.left) === Math.round(rect2.left) && + Math.round(rect1.height) === Math.round(rect2.height) && + Math.round(rect1.width) === Math.round(rect2.width) + ); } -var _throttleTimeout; - +let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, - _this = this; + let args = arguments, + _this = this; if (args.length === 1) { callback.call(_this, args[0]); @@ -592,8 +536,10 @@ function scrollBy(el, x, y) { } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + //@ts-ignore + let Polymer = window.Polymer; + //@ts-ignore + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -605,44 +551,45 @@ function clone(el) { } function setRect(el, rect) { - css(el, 'position', 'absolute'); - css(el, 'top', rect.top); - css(el, 'left', rect.left); - css(el, 'width', rect.width); - css(el, 'height', rect.height); + css(el, "position", "absolute"); + css(el, "top", rect.top); + css(el, "left", rect.left); + css(el, "width", rect.width); + css(el, "height", rect.height); } function unsetRect(el) { - css(el, 'position', ''); - css(el, 'top', ''); - css(el, 'left', ''); - css(el, 'width', ''); - css(el, 'height', ''); + css(el, "position", ""); + css(el, "top", ""); + css(el, "left", ""); + css(el, "width", ""); + css(el, "height", ""); } -var expando = 'Sortable' + new Date().getTime(); +const expando = "Sortable" + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], - animationCallbackId; + let animationStates = [], + animationCallbackId; + return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { - if (css(child, 'display') === 'none' || child === Sortable.ghost) return; + let children = [].slice.call(this.el.children); + + children.forEach((child) => { + if (css(child, "display") === "none" || child === Sortable.ghost) + return; animationStates.push({ target: child, - rect: getRect(child) + rect: getRect(child), }); + let fromRect = { ...animationStates[animationStates.length - 1].rect }; - var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - - + // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); - + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; fromRect.left -= childMatrix.e; @@ -652,34 +599,34 @@ function AnimationStateManager() { child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { - animationStates.splice(indexOfObject(animationStates, { - target: target - }), 1); + + removeAnimationState(target) { + animationStates.splice(indexOfObject(animationStates, { target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); return; } - var animating = false, - animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, - target = state.target, - fromRect = target.fromRect, - toRect = getRect(target), - prevFromRect = target.prevFromRect, - prevToRect = target.prevToRect, - animatingRect = state.rect, - targetMatrix = matrix(target, true); + let animating = false, + animationTime = 0; + + animationStates.forEach((state) => { + let time = 0, + target = state.target, + fromRect = target.fromRect, + toRect = getRect(target), + prevFromRect = target.prevFromRect, + prevToRect = target.prevToRect, + animatingRect = state.rect, + targetMatrix = matrix(target, true); if (targetMatrix) { // Compensate for current animation @@ -691,23 +638,33 @@ function AnimationStateManager() { if (target.thisAnimationDuration) { // Could also check if animatingRect is between fromRect and toRect - if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect - (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { + if ( + isRectEqual(prevFromRect, toRect) && + !isRectEqual(fromRect, toRect) && + // Make sure animatingRect is on line between toRect & fromRect + (animatingRect.top - toRect.top) / + (animatingRect.left - toRect.left) === + (fromRect.top - toRect.top) / (fromRect.left - toRect.left) + ) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime( + animatingRect, + prevFromRect, + prevToRect, + this.options + ); } - } // if fromRect != toRect: animate - + } + // if fromRect != toRect: animate if (!isRectEqual(toRect, fromRect)) { target.prevFromRect = fromRect; target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -724,44 +681,59 @@ function AnimationStateManager() { target.thisAnimationDuration = time; } }); - clearTimeout(animationCallbackId); + clearTimeout(animationCallbackId); if (!animating) { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); } else { animationCallbackId = setTimeout(function () { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); }, animationTime); } - animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { - css(target, 'transition', ''); - css(target, 'transform', ''); - var elMatrix = matrix(this.el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d, - translateX = (currentRect.left - toRect.left) / (scaleX || 1), - translateY = (currentRect.top - toRect.top) / (scaleY || 1); + css(target, "transition", ""); + css(target, "transform", ""); + let elMatrix = matrix(this.el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d, + translateX = (currentRect.left - toRect.left) / (scaleX || 1), + translateY = (currentRect.top - toRect.top) / (scaleY || 1); + target.animatingX = !!translateX; target.animatingY = !!translateY; - css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)'); - repaint(target); // repaint - css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : '')); - css(target, 'transform', 'translate3d(0,0,0)'); - typeof target.animated === 'number' && clearTimeout(target.animated); + css( + target, + "transform", + "translate3d(" + translateX + "px," + translateY + "px,0)" + ); + + this.forRepaintDummy = repaint(target); // repaint + + css( + target, + "transition", + "transform " + + duration + + "ms" + + (this.options.easing ? " " + this.options.easing : "") + ); + css(target, "transform", "translate3d(0,0,0)"); + typeof target.animated === "number" && clearTimeout(target.animated); target.animated = setTimeout(function () { - css(target, 'transition', ''); - css(target, 'transform', ''); + css(target, "transition", ""); + css(target, "transform", ""); target.animated = false; + target.animatingX = false; target.animatingY = false; }, duration); } - } + }, }; } @@ -770,124 +742,148 @@ function repaint(target) { } function calculateRealTime(animatingRect, fromRect, toRect, options) { - return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; + return ( + (Math.sqrt( + Math.pow(fromRect.top - animatingRect.top, 2) + + Math.pow(fromRect.left - animatingRect.left, 2) + ) / + Math.sqrt( + Math.pow(fromRect.top - toRect.top, 2) + + Math.pow(fromRect.left - toRect.left, 2) + )) * + options.animation + ); } -var plugins = []; -var defaults = { - initializeByDefault: true +let plugins = []; + +const defaults = { + initializeByDefault: true, }; + var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; - + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { - if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable - + const eventNameGlobal = eventName + "Global"; + plugins.forEach((plugin) => { + if (!sortable[plugin.pluginName]) return; + // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread({ - sortable: sortable - }, evt)); - } // Only fire plugin event if plugin is enabled in this sortable, - // and plugin has event defined - + sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt }); + } - if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread({ - sortable: sortable - }, evt)); + // Only fire plugin event if plugin is enabled in this sortable, + // and plugin has event defined + if ( + sortable.options[plugin.pluginName] && + sortable[plugin.pluginName][eventName] + ) { + sortable[plugin.pluginName][eventName]({ sortable, ...evt }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + initializePlugins(sortable, el, defaults, options) { + plugins.forEach((plugin) => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; - sortable[pluginName] = initialized; // Add default options from plugin + sortable[pluginName] = initialized; - _extends(defaults, initialized.defaults); + // Add default options from plugin + Object.assign(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); - - if (typeof modified !== 'undefined') { + let modified = this.modifyOption( + sortable, + option, + sortable.options[option] + ); + if (typeof modified !== "undefined") { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { - if (typeof plugin.eventProperties !== 'function') return; - - _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach((plugin) => { + if (typeof plugin.eventProperties !== "function") return; + Object.assign( + eventProperties, + plugin.eventProperties.call(sortable[plugin.pluginName], name) + ); }); + return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach((plugin) => { // Plugin must exist on the Sortable - if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin - - if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') { - modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value); + if (!sortable[plugin.pluginName]) return; + + // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin + if ( + plugin.optionListeners && + typeof plugin.optionListeners[name] === "function" + ) { + modifiedValue = plugin.optionListeners[name].call( + sortable[plugin.pluginName], + value + ); } }); + return modifiedValue; - } + }, }; -function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; - sortable = sortable || rootEl && rootEl[expando]; +function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties, +}) { + sortable = sortable || (rootEl && rootEl[expando]); if (!sortable) return; - var evt, - options = sortable.options, - onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature + let evt, + options = sortable.options, + onName = "on" + name.charAt(0).toUpperCase() + name.substr(1); + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { evt = new CustomEvent(name, { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); + evt = document.createEvent("Event"); evt.initEvent(name, true, true); } @@ -895,16 +891,21 @@ function dispatchEvent(_ref) { evt.from = fromEl || rootEl; evt.item = targetEl || rootEl; evt.clone = cloneEl; + evt.oldIndex = oldIndex; evt.newIndex = newIndex; + evt.oldDraggableIndex = oldDraggableIndex; evt.newDraggableIndex = newDraggableIndex; + evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; - var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + let allEventProperties = { + ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable), + }; + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -917,407 +918,506 @@ function dispatchEvent(_ref) { } } -var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, ["evt"]); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, +/**! + * Sortable + * @author RubaXa + * @author owenm + * @license MIT + */ + +let pluginEvent = function ( + eventName, + sortable, + { evt: originalEvent, ...data } = {} +) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { - _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent - }); - } - }, data)); + + dispatchSortableEvent(name) { + _dispatchEvent({ sortable, name, originalEvent }); + }, + + ...data, + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); -} - -var dragEl, - parentEl, - ghostEl, rootEl, - nextEl, - lastDownEl, - cloneEl, - cloneHidden, oldIndex, - newIndex, oldDraggableIndex, + newIndex, newDraggableIndex, - activeGroup, - putSortable, - awaitingDragStarted = false, - ignoreNextClick = false, - sortables = [], - tapEvt, - touchEvt, - lastDx, - lastDy, - tapDistanceLeft, - tapDistanceTop, - moved, - lastTarget, - lastDirection, - pastFirstInvertThresh = false, - isCircumstantialInvert = false, - targetMoveDistance, - // For positioning ghost absolutely -ghostRelativeParent, - ghostRelativeParentInitialScroll = [], - // (left, top) -_silent = false, - savedInputChecked = []; -/** @const */ - -var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors -supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { - if (!documentExists) return; // false when <= IE11 + ...info, + }); +} - if (IE11OrLess) { - return false; - } +let dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + activeGroup, + putSortable, + awaitingDragStarted = false, + ignoreNextClick = false, + sortables = [], + tapEvt, + touchEvt, + lastDx, + lastDy, + tapDistanceLeft, + tapDistanceTop, + moved, + lastTarget, + lastDirection, + pastFirstInvertThresh = false, + isCircumstantialInvert = false, + targetMoveDistance, + // For positioning ghost absolutely + ghostRelativeParent, + ghostRelativeParentInitialScroll = [], // (left, top) + _silent = false, + savedInputChecked = []; - var el = document.createElement('x'); - el.style.cssText = 'pointer-events:auto'; - return el.style.pointerEvents === 'auto'; -}(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), - elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), +/** @const */ +const documentExists = typeof document !== "undefined", + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", + // This will not pass for IE9, because IE9 DnD only works on anchors + supportDraggable = + documentExists && + !ChromeForAndroid && + !IOS && + "draggable" in document.createElement("div"), + supportCssPointerEvents = (function () { + if (!documentExists) return; + // false when <= IE11 + if (IE11OrLess) { + return false; + } + let el = document.createElement("x"); + el.style.cssText = "pointer-events:auto"; + return el.style.pointerEvents === "auto"; + })(), + _detectDirection = function (el, options) { + let elCSS = css(el), + elWidth = + parseInt(elCSS.width) - + parseInt(elCSS.paddingLeft) - + parseInt(elCSS.paddingRight) - + parseInt(elCSS.borderLeftWidth) - + parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), - firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, - secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width; + firstChildWidth = + firstChildCSS && + parseInt(firstChildCSS.marginLeft) + + parseInt(firstChildCSS.marginRight) + + getRect(child1).width, + secondChildWidth = + secondChildCSS && + parseInt(secondChildCSS.marginLeft) + + parseInt(secondChildCSS.marginRight) + + getRect(child2).width; + + if (elCSS.display === "flex") { + return elCSS.flexDirection === "column" || + elCSS.flexDirection === "column-reverse" + ? "vertical" + : "horizontal"; + } - if (elCSS.display === 'flex') { - return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal'; - } + if (elCSS.display === "grid") { + return elCSS.gridTemplateColumns.split(" ").length <= 1 + ? "vertical" + : "horizontal"; + } - if (elCSS.display === 'grid') { - return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; - } + if (child1 && firstChildCSS.float && firstChildCSS.float !== "none") { + let touchingSideChild2 = + firstChildCSS.float === "left" ? "left" : "right"; - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; - return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; - } + return child2 && + (secondChildCSS.clear === "both" || + secondChildCSS.clear === touchingSideChild2) + ? "vertical" + : "horizontal"; + } - return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; -}, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + return child1 && + (firstChildCSS.display === "block" || + firstChildCSS.display === "flex" || + firstChildCSS.display === "table" || + firstChildCSS.display === "grid" || + (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none") || + (child2 && + elCSS[CSSFloatProperty] === "none" && + firstChildWidth + secondChildWidth > elWidth)) + ? "vertical" + : "horizontal"; + }, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height; - return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2; -}, -/** - * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. - * @param {Number} x X position - * @param {Number} y Y position - * @return {HTMLElement} Element of the first found nearest Sortable - */ -_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - if (lastChild(sortable)) return; - var rect = getRect(sortable), + return ( + dragElS1Opp === targetS1Opp || + dragElS2Opp === targetS2Opp || + dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2 + ); + }, + /** + * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. + * @param {Number} x X position + * @param {Number} y Y position + * @return {HTMLElement} Element of the first found nearest Sortable + */ + _detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some((sortable) => { + if (lastChild(sortable)) return; + + let rect = getRect(sortable), threshold = sortable[expando].options.emptyInsertThreshold, - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + insideHorizontally = + x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = + y >= rect.top - threshold && y <= rect.bottom + threshold; - if (threshold && insideHorizontally && insideVertically) { - return ret = sortable; - } - }); - return ret; -}, - _prepareGroup = function _prepareGroup(options) { - function toFn(value, pull) { - return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; - - if (value == null && (pull || sameGroup)) { - // Default pull value - // Default pull and put value if same group - return true; - } else if (value == null || value === false) { - return false; - } else if (pull && value === 'clone') { - return value; - } else if (typeof value === 'function') { - return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); - } else { - var otherGroup = (pull ? to : from).options.group.name; - return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; + if (threshold && insideHorizontally && insideVertically) { + return (ret = sortable); } - }; - } + }); + return ret; + }, + _prepareGroup = function (options) { + function toFn(value, pull) { + return function (to, from, dragEl, evt) { + let sameGroup = + to.options.group.name && + from.options.group.name && + to.options.group.name === from.options.group.name; + + if (value == null && (pull || sameGroup)) { + // Default pull value + // Default pull and put value if same group + return true; + } else if (value == null || value === false) { + return false; + } else if (pull && value === "clone") { + return value; + } else if (typeof value === "function") { + return toFn(value(to, from, dragEl, evt), pull)( + to, + from, + dragEl, + evt + ); + } else { + let otherGroup = (pull ? to : from).options.group.name; - var group = {}; - var originalGroup = options.group; + return ( + value === true || + (typeof value === "string" && value === otherGroup) || + (value.join && value.indexOf(otherGroup) > -1) + ); + } + }; + } - if (!originalGroup || _typeof(originalGroup) != 'object') { - originalGroup = { - name: originalGroup - }; - } + let group = {}; + let originalGroup = options.group; - group.name = originalGroup.name; - group.checkPull = toFn(originalGroup.pull, true); - group.checkPut = toFn(originalGroup.put); - group.revertClone = originalGroup.revertClone; - options.group = group; -}, - _hideGhostForTarget = function _hideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', 'none'); - } -}, - _unhideGhostForTarget = function _unhideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', ''); - } -}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position + if (!originalGroup || typeof originalGroup != "object") { + originalGroup = { name: originalGroup }; + } + group.name = originalGroup.name; + group.checkPull = toFn(originalGroup.pull, true); + group.checkPut = toFn(originalGroup.put); + group.revertClone = originalGroup.revertClone; -if (documentExists) { - document.addEventListener('click', function (evt) { - if (ignoreNextClick) { - evt.preventDefault(); - evt.stopPropagation && evt.stopPropagation(); - evt.stopImmediatePropagation && evt.stopImmediatePropagation(); - ignoreNextClick = false; - return false; + options.group = group; + }, + _hideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", "none"); + } + }, + _unhideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", ""); } - }, true); + }; + +// #1184 fix - Prevent click event on fallback if dragged but item not changed position +if (documentExists) { + document.addEventListener( + "click", + function (evt) { + if (ignoreNextClick) { + evt.preventDefault(); + evt.stopPropagation && evt.stopPropagation(); + evt.stopImmediatePropagation && evt.stopImmediatePropagation(); + ignoreNextClick = false; + return false; + } + }, + true + ); } -var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { +let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; - - for (var i in evt) { + let event = {}; + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } } - event.target = event.rootEl = nearest; event.preventDefault = void 0; event.stopPropagation = void 0; - nearest[expando]._onDragOver(event); } } }; -var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { +let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } }; + /** * @class Sortable * @param {HTMLElement} el * @param {Object} [options] */ - - function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call( + el + )}`; } - this.el = el; // root element + const __warn = + "" + + "Importing Sortable directly from GitHub is deprecated.\n" + + "This file will not receive any more updates.\n" + + "Please follow the usage instructions to continue getting support: https://github.com/SortableJS/Sortable"; - this.options = options = _extends({}, options); // Export instance + console.warn(__warn); + + this.el = el; // root element + this.options = options = Object.assign({}, options); + // Export instance el[expando] = this; - var defaults = { + + let defaults = { group: null, sort: true, disabled: false, store: null, handle: null, - draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*', - swapThreshold: 1, - // percentage; 0 <= x <= 1 - invertSwap: false, - // invert always - invertedSwapThreshold: null, - // will be set to same as swapThreshold if default + draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*", + swapThreshold: 1, // percentage; 0 <= x <= 1 + invertSwap: false, // invert always + invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, - ghostClass: 'sortable-ghost', - chosenClass: 'sortable-chosen', - dragClass: 'sortable-drag', - ignore: 'a, img', + ghostClass: "sortable-ghost", + chosenClass: "sortable-chosen", + dragClass: "sortable-drag", + ignore: "a, img", filter: null, preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { - dataTransfer.setData('Text', dragEl.textContent); + setData: function (dataTransfer, dragEl) { + dataTransfer.setData("Text", dragEl.textContent); }, dropBubble: false, dragoverBubble: false, - dataIdAttr: 'data-id', + dataIdAttr: "data-id", delay: 0, delayOnTouchOnly: false, - touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, + touchStartThreshold: + (Number.parseInt ? Number : window).parseInt( + window.devicePixelRatio, + 10 + ) || 1, forceFallback: false, - fallbackClass: 'sortable-fallback', + fallbackClass: "sortable-fallback", fallbackOnBody: false, fallbackTolerance: 0, - fallbackOffset: { - x: 0, - y: 0 - }, - supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window, - emptyInsertThreshold: 5 + fallbackOffset: { x: 0, y: 0 }, + supportPointer: + Sortable.supportPointer !== false && "PointerEvent" in window, + emptyInsertThreshold: 5, }; - PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + PluginManager.initializePlugins(this, el, defaults); + + // Set default options + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } - _prepareGroup(options); // Bind all private methods + _prepareGroup(options); - - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } - } // Setup drag mode - + } + // Setup drag mode this.nativeDraggable = options.forceFallback ? false : supportDraggable; if (this.nativeDraggable) { // Touch start threshold cannot be greater than the native dragstart threshold this.options.touchStartThreshold = 1; - } // Bind events - + } + // Bind events if (options.supportPointer) { - on(el, 'pointerdown', this._onTapStart); + on(el, "pointerdown", this._onTapStart); } else { - on(el, 'mousedown', this._onTapStart); - on(el, 'touchstart', this._onTapStart); + on(el, "mousedown", this._onTapStart); + on(el, "touchstart", this._onTapStart); } if (this.nativeDraggable) { - on(el, 'dragover', this); - on(el, 'dragenter', this); + on(el, "dragover", this); + on(el, "dragenter", this); } - sortables.push(this.el); // Restore sorting + sortables.push(this.el); - options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager + // Restore sorting + options.store && + options.store.get && + this.sort(options.store.get(this) || []); - _extends(this, AnimationStateManager()); + // Add animation state manager + Object.assign(this, AnimationStateManager()); } -Sortable.prototype = -/** @lends Sortable.prototype */ -{ +Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { - return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; - }, - _onTapStart: function _onTapStart( - /** Event|TouchEvent */ - evt) { - if (!evt.cancelable) return; - - var _this = this, - el = this.el, - options = this.options, - preventOnFilter = options.preventOnFilter, - type = evt.type, - touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt, - target = (touch || evt).target, - originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, - filter = options.filter; - - _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. + _getDirection: function (evt, target) { + return typeof this.options.direction === "function" + ? this.options.direction.call(this, evt, target, dragEl) + : this.options.direction; + }, + _onTapStart: function (/** Event|TouchEvent */ evt) { + if (!evt.cancelable) return; + let _this = this, + el = this.el, + options = this.options, + preventOnFilter = options.preventOnFilter, + type = evt.type, + touch = + (evt.touches && evt.touches[0]) || + (evt.pointerType && evt.pointerType === "touch" && evt), + target = (touch || evt).target, + originalTarget = + (evt.target.shadowRoot && + ((evt.path && evt.path[0]) || + (evt.composedPath && evt.composedPath()[0]))) || + target, + filter = options.filter; + + _saveInputCheckedState(el); + + // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. if (dragEl) { return; } - if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { + if ( + (/mousedown|pointerdown/.test(type) && evt.button !== 0) || + options.disabled + ) { return; // only left button and enabled - } // cancel dnd if original target is content editable - + } + // cancel dnd if original target is content editable if (originalTarget.isContentEditable) { return; } + // Safari ignores further event handling after mousedown + if ( + !this.nativeDraggable && + Safari && + target && + target.tagName.toUpperCase() === "SELECT" + ) { + return; + } + target = closest(target, options.draggable, el, false); if (target && target.animated) { @@ -1327,46 +1427,41 @@ Sortable.prototype = if (lastDownEl === target) { // Ignoring duplicate `down` return; - } // Get the index of the dragged element within its parent - + } + // Get the index of the dragged element within its parent oldIndex = index(target); - oldDraggableIndex = index(target, options.draggable); // Check filter + oldDraggableIndex = index(target, options.draggable); - if (typeof filter === 'function') { + // Check filter + if (typeof filter === "function") { if (filter.call(this, evt, target, this)) { _dispatchEvent({ sortable: _this, rootEl: originalTarget, - name: 'filter', + name: "filter", targetEl: target, toEl: el, - fromEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + fromEl: el, }); + pluginEvent("filter", _this, { evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd } } else if (filter) { - filter = filter.split(',').some(function (criteria) { + filter = filter.split(",").some(function (criteria) { criteria = closest(originalTarget, criteria.trim(), el, false); if (criteria) { _dispatchEvent({ sortable: _this, rootEl: criteria, - name: 'filter', + name: "filter", targetEl: target, fromEl: el, - toEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + toEl: el, }); + pluginEvent("filter", _this, { evt }); return true; } }); @@ -1379,161 +1474,172 @@ Sortable.prototype = if (options.handle && !closest(originalTarget, options.handle, el, false)) { return; - } // Prepare `dragstart` - + } + // Prepare `dragstart` this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( - /** Event */ - evt, - /** Touch */ - touch, - /** HTMLElement */ - target) { - var _this = this, - el = _this.el, - options = _this.options, - ownerDocument = el.ownerDocument, - dragStartFn; + + _prepareDragStart: function ( + /** Event */ evt, + /** Touch */ touch, + /** HTMLElement */ target + ) { + let _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; + Sortable.dragged = dragEl; + tapEvt = { target: dragEl, clientX: (touch || evt).clientX, - clientY: (touch || evt).clientY + clientY: (touch || evt).clientY, }; + tapDistanceLeft = tapEvt.clientX - dragRect.left; tapDistanceTop = tapEvt.clientY - dragRect.top; + this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; - dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { - pluginEvent('delayEnded', _this, { - evt: evt - }); + dragEl.style["will-change"] = "all"; + dragStartFn = function () { + pluginEvent("delayEnded", _this, { evt }); if (Sortable.eventCanceled) { _this._onDrop(); - return; - } // Delayed drag has been triggered + } + // Delayed drag has been triggered // we can re-enable the events: touchmove/mousemove - - _this._disableDelayedDragEvents(); if (!FireFox && _this.nativeDraggable) { dragEl.draggable = true; - } // Bind the events: dragstart/dragend - - - _this._triggerDragStart(evt, touch); // Drag start event + } + // Bind the events: dragstart/dragend + _this._triggerDragStart(evt, touch); + // Drag start event _dispatchEvent({ sortable: _this, - name: 'choose', - originalEvent: evt - }); // Chosen item - + name: "choose", + originalEvent: evt, + }); + // Chosen item toggleClass(dragEl, options.chosenClass, true); - }; // Disable "draggable" - + }; - options.ignore.split(',').forEach(function (criteria) { + // Disable "draggable" + options.ignore.split(",").forEach(function (criteria) { find(dragEl, criteria.trim(), _disableDraggable); }); - on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mouseup', _this._onDrop); - on(ownerDocument, 'touchend', _this._onDrop); - on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox) + on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent); + on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent); + on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent); + + on(ownerDocument, "mouseup", _this._onDrop); + on(ownerDocument, "touchend", _this._onDrop); + on(ownerDocument, "touchcancel", _this._onDrop); + + // Make dragEl draggable (must be before delay for FireFox) if (FireFox && this.nativeDraggable) { this.options.touchStartThreshold = 4; dragEl.draggable = true; } - pluginEvent('delayStart', this, { - evt: evt - }); // Delay is impossible for native DnD in Edge or IE + pluginEvent("delayStart", this, { evt }); - if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { + // Delay is impossible for native DnD in Edge or IE + if ( + options.delay && + (!options.delayOnTouchOnly || touch) && + (!this.nativeDraggable || !(Edge || IE11OrLess)) + ) { if (Sortable.eventCanceled) { this._onDrop(); - return; - } // If the user moves the pointer or let go the click or touch + } + // If the user moves the pointer or let go the click or touch // before the delay has been reached: // disable the delayed drag + on(ownerDocument, "mouseup", _this._disableDelayedDrag); + on(ownerDocument, "touchend", _this._disableDelayedDrag); + on(ownerDocument, "touchcancel", _this._disableDelayedDrag); + on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler); + on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler); + options.supportPointer && + on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler); - - on(ownerDocument, 'mouseup', _this._disableDelayedDrag); - on(ownerDocument, 'touchend', _this._disableDelayedDrag); - on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); - on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler); - on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler); - options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( - /** TouchEvent|PointerEvent **/ - e) { - var touch = e.touches ? e.touches[0] : e; - if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { + _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) { + let touch = e.touches ? e.touches[0] : e; + if ( + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) >= + Math.floor( + this.options.touchStartThreshold / + ((this.nativeDraggable && window.devicePixelRatio) || 1) + ) + ) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._disableDelayedDrag); - off(ownerDocument, 'touchend', this._disableDelayedDrag); - off(ownerDocument, 'touchcancel', this._disableDelayedDrag); - off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); + + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; + off(ownerDocument, "mouseup", this._disableDelayedDrag); + off(ownerDocument, "touchend", this._disableDelayedDrag); + off(ownerDocument, "touchcancel", this._disableDelayedDrag); + off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( - /** Event */ - evt, - /** Touch */ - touch) { - touch = touch || evt.pointerType == 'touch' && evt; + + _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) { + touch = touch || (evt.pointerType == "touch" && evt); if (!this.nativeDraggable || touch) { if (this.options.supportPointer) { - on(document, 'pointermove', this._onTouchMove); + on(document, "pointermove", this._onTouchMove); } else if (touch) { - on(document, 'touchmove', this._onTouchMove); + on(document, "touchmove", this._onTouchMove); } else { - on(document, 'mousemove', this._onTouchMove); + on(document, "mousemove", this._onTouchMove); } } else { - on(dragEl, 'dragend', this); - on(rootEl, 'dragstart', this._onDragStart); + on(dragEl, "dragend", this); + on(rootEl, "dragstart", this._onDragStart); } try { @@ -1547,47 +1653,54 @@ Sortable.prototype = } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; - if (rootEl && dragEl) { - pluginEvent('dragStarted', this, { - evt: evt - }); + pluginEvent("dragStarted", this, { evt }); if (this.nativeDraggable) { - on(document, 'dragover', _checkOutsideTargetEl); + on(document, "dragover", _checkOutsideTargetEl); } + let options = this.options; - var options = this.options; // Apply effect - + // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); + Sortable.active = this; - fallback && this._appendGhost(); // Drag start event + fallback && this._appendGhost(); + + // Drag start event _dispatchEvent({ sortable: this, - name: 'start', - originalEvent: evt + name: "start", + originalEvent: evt, }); } else { this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); + let parent = target; while (target && target.shadowRoot) { - target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + target = target.shadowRoot.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); if (target === parent) break; parent = target; } @@ -1597,12 +1710,13 @@ Sortable.prototype = if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; + inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target: target, - rootEl: parent + rootEl: parent, }); if (inserted && !this.options.dragoverBubble) { @@ -1611,34 +1725,53 @@ Sortable.prototype = } target = parent; // store last element - } - /* jshint boss:true */ - while (parent = parent.parentNode); + } while ( + /* jshint boss:true */ + (parent = parent.parentNode) + ); } _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( - /**TouchEvent*/ - evt) { - if (tapEvt) { - var options = this.options, - fallbackTolerance = options.fallbackTolerance, - fallbackOffset = options.fallbackOffset, - touch = evt.touches ? evt.touches[0] : evt, - ghostMatrix = ghostEl && matrix(ghostEl, true), - scaleX = ghostEl && ghostMatrix && ghostMatrix.a, - scaleY = ghostEl && ghostMatrix && ghostMatrix.d, - relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), - dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), - dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging + _onTouchMove: function (/**TouchEvent*/ evt) { + if (tapEvt) { + let options = this.options, + fallbackTolerance = options.fallbackTolerance, + fallbackOffset = options.fallbackOffset, + touch = evt.touches ? evt.touches[0] : evt, + ghostMatrix = ghostEl && matrix(ghostEl, true), + scaleX = ghostEl && ghostMatrix && ghostMatrix.a, + scaleY = ghostEl && ghostMatrix && ghostMatrix.d, + relativeScrollOffset = + PositionGhostAbsolutely && + ghostRelativeParent && + getRelativeScrollOffset(ghostRelativeParent), + dx = + (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + + (relativeScrollOffset + ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] + : 0) / + (scaleX || 1), + dy = + (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + + (relativeScrollOffset + ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] + : 0) / + (scaleY || 1); + + // only set the status to dragging, when we are actually dragging if (!Sortable.active && !awaitingDragStarted) { - if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) { + if ( + fallbackTolerance && + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) < fallbackTolerance + ) { return; } - this._onDragStart(evt, true); } @@ -1653,206 +1786,239 @@ Sortable.prototype = c: 0, d: 1, e: dx, - f: dy + f: dy, }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); - css(ghostEl, 'webkitTransform', cssMatrix); - css(ghostEl, 'mozTransform', cssMatrix); - css(ghostEl, 'msTransform', cssMatrix); - css(ghostEl, 'transform', cssMatrix); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; + + css(ghostEl, "webkitTransform", cssMatrix); + css(ghostEl, "mozTransform", cssMatrix); + css(ghostEl, "msTransform", cssMatrix); + css(ghostEl, "transform", cssMatrix); + lastDx = dx; lastDy = dy; + touchEvt = touch; } evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, - rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), - options = this.options; // Position absolutely + let container = this.options.fallbackOnBody ? document.body : rootEl, + rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), + options = this.options; + // Position absolutely if (PositionGhostAbsolutely) { // Get relatively positioned parent ghostRelativeParent = container; - while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) { + while ( + css(ghostRelativeParent, "position") === "static" && + css(ghostRelativeParent, "transform") === "none" && + ghostRelativeParent !== document + ) { ghostRelativeParent = ghostRelativeParent.parentNode; } - if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) { - if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement(); + if ( + ghostRelativeParent !== document.body && + ghostRelativeParent !== document.documentElement + ) { + if (ghostRelativeParent === document) + ghostRelativeParent = getWindowScrollingElement(); + rect.top += ghostRelativeParent.scrollTop; rect.left += ghostRelativeParent.scrollLeft; } else { ghostRelativeParent = getWindowScrollingElement(); } - - ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent); + ghostRelativeParentInitialScroll = getRelativeScrollOffset( + ghostRelativeParent + ); } ghostEl = dragEl.cloneNode(true); + toggleClass(ghostEl, options.ghostClass, false); toggleClass(ghostEl, options.fallbackClass, true); toggleClass(ghostEl, options.dragClass, true); - css(ghostEl, 'transition', ''); - css(ghostEl, 'transform', ''); - css(ghostEl, 'box-sizing', 'border-box'); - css(ghostEl, 'margin', 0); - css(ghostEl, 'top', rect.top); - css(ghostEl, 'left', rect.left); - css(ghostEl, 'width', rect.width); - css(ghostEl, 'height', rect.height); - css(ghostEl, 'opacity', '0.8'); - css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed'); - css(ghostEl, 'zIndex', '100000'); - css(ghostEl, 'pointerEvents', 'none'); + + css(ghostEl, "transition", ""); + css(ghostEl, "transform", ""); + + css(ghostEl, "box-sizing", "border-box"); + css(ghostEl, "margin", 0); + css(ghostEl, "top", rect.top); + css(ghostEl, "left", rect.left); + css(ghostEl, "width", rect.width); + css(ghostEl, "height", rect.height); + css(ghostEl, "opacity", "0.8"); + css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed"); + css(ghostEl, "zIndex", "100000"); + css(ghostEl, "pointerEvents", "none"); + Sortable.ghost = ghostEl; - container.appendChild(ghostEl); // Set transform-origin - css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); + container.appendChild(ghostEl); + + // Set transform-origin + css( + ghostEl, + "transform-origin", + (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 + + "% " + + (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 + + "%" + ); } }, - _onDragStart: function _onDragStart( - /**Event*/ - evt, - /**boolean*/ - fallback) { - var _this = this; - - var dataTransfer = evt.dataTransfer; - var options = _this.options; - pluginEvent('dragStart', this, { - evt: evt - }); + _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) { + let _this = this; + let dataTransfer = evt.dataTransfer; + let options = _this.options; + + pluginEvent("dragStart", this, { evt }); if (Sortable.eventCanceled) { this._onDrop(); - return; } - pluginEvent('setupClone', this); - + pluginEvent("setupClone", this); if (!Sortable.eventCanceled) { cloneEl = clone(dragEl); + cloneEl.draggable = false; - cloneEl.style['will-change'] = ''; + cloneEl.style["will-change"] = ""; this._hideClone(); toggleClass(cloneEl, this.options.chosenClass, false); Sortable.clone = cloneEl; - } // #1143: IFrame support workaround - + } + // #1143: IFrame support workaround _this.cloneId = _nextTick(function () { - pluginEvent('clone', _this); + pluginEvent("clone", _this); if (Sortable.eventCanceled) return; if (!_this.options.removeCloneOnHide) { rootEl.insertBefore(cloneEl, dragEl); } - _this._hideClone(); _dispatchEvent({ sortable: _this, - name: 'clone' + name: "clone", }); }); - !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events + !fallback && toggleClass(dragEl, options.dragClass, true); + + // Set proper drop events if (fallback) { ignoreNextClick = true; _this._loopId = setInterval(_this._emulateDragOver, 50); } else { // Undo what was set in _prepareDragStart before drag started - off(document, 'mouseup', _this._onDrop); - off(document, 'touchend', _this._onDrop); - off(document, 'touchcancel', _this._onDrop); + off(document, "mouseup", _this._onDrop); + off(document, "touchend", _this._onDrop); + off(document, "touchcancel", _this._onDrop); if (dataTransfer) { - dataTransfer.effectAllowed = 'move'; + dataTransfer.effectAllowed = "move"; options.setData && options.setData.call(_this, dataTransfer, dragEl); } - on(document, 'drop', _this); // #1276 fix: + on(document, "drop", _this); - css(dragEl, 'transform', 'translateZ(0)'); + // #1276 fix: + css(dragEl, "transform", "translateZ(0)"); } awaitingDragStarted = true; - _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt)); - on(document, 'selectstart', _this); + + _this._dragStartId = _nextTick( + _this._dragStarted.bind(_this, fallback, evt) + ); + on(document, "selectstart", _this); + moved = true; if (Safari) { - css(document.body, 'user-select', 'none'); + css(document.body, "user-select", "none"); } }, + // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( - /**Event*/ - evt) { - var el = this.el, - target = evt.target, - dragRect, - targetRect, - revert, - options = this.options, - group = options.group, - activeSortable = Sortable.active, - isOwner = activeGroup === group, - canSort = options.sort, - fromSortable = putSortable || activeSortable, - vertical, - _this = this, - completedFired = false; + _onDragOver: function (/**Event*/ evt) { + let el = this.el, + target = evt.target, + dragRect, + targetRect, + revert, + options = this.options, + group = options.group, + activeSortable = Sortable.active, + isOwner = activeGroup === group, + canSort = options.sort, + fromSortable = putSortable || activeSortable, + vertical, + _this = this, + completedFired = false; if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread({ - evt: evt, - isOwner: isOwner, - axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + pluginEvent(name, _this, { + evt, + isOwner, + axis: vertical ? "vertical" : "horizontal", + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + onMove(target, after) { + return onMove( + rootEl, + el, + dragEl, + dragRect, + target, + getRect(target), + evt, + after + ); }, - changed: changed - }, extra)); - } // Capture animation state - + changed, + ...extra, + }); + } + // Capture animation state function capture() { - dragOverEvent('dragOverAnimationCapture'); + dragOverEvent("dragOverAnimationCapture"); _this.captureAnimationState(); - if (_this !== fromSortable) { fromSortable.captureAnimationState(); } - } // Return invocation when dragEl is inserted (or completed) - + } + // Return invocation when dragEl is inserted (or completed) function completed(insertion) { - dragOverEvent('dragOverCompleted', { - insertion: insertion - }); + dragOverEvent("dragOverCompleted", { insertion }); if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -1864,7 +2030,13 @@ Sortable.prototype = if (_this !== fromSortable) { // Set ghost class to new sortable's ghost class - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : activeSortable.options.ghostClass, + false + ); toggleClass(dragEl, options.ghostClass, true); } @@ -1872,53 +2044,54 @@ Sortable.prototype = putSortable = _this; } else if (_this === Sortable.active && putSortable) { putSortable = null; - } // Animation - + } + // Animation if (fromSortable === _this) { _this._ignoreWhileAnimating = target; } - _this.animateAll(function () { - dragOverEvent('dragOverAnimationComplete'); + dragOverEvent("dragOverAnimationComplete"); _this._ignoreWhileAnimating = null; }); - if (_this !== fromSortable) { fromSortable.animateAll(); fromSortable._ignoreWhileAnimating = null; } - } // Null lastTarget if it is not inside a previously swapped element - + } - if (target === dragEl && !dragEl.animated || target === el && !target.animated) { + // Null lastTarget if it is not inside a previously swapped element + if ( + (target === dragEl && !dragEl.animated) || + (target === el && !target.animated) + ) { lastTarget = null; - } // no bubbling and not fallback - + } + // no bubbling and not fallback if (!options.dragoverBubble && !evt.rootEl && target !== document) { - dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted - + dragEl.parentNode[expando]._isOutsideThisEl(evt.target); + // Do not detect for empty insert if already inserted !insertion && nearestEmptyInsertDetectEvent(evt); } !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); - return completedFired = true; - } // Call when dragEl has been inserted + return (completedFired = true); + } + // Call when dragEl has been inserted function changed() { newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - _dispatchEvent({ sortable: _this, - name: 'change', + name: "change", toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, - originalEvent: evt + newIndex, + newDraggableIndex, + originalEvent: evt, }); } @@ -1927,30 +2100,48 @@ Sortable.prototype = } target = closest(target, options.draggable, el, true); - dragOverEvent('dragOver'); + + dragOverEvent("dragOver"); if (Sortable.eventCanceled) return completedFired; - if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) { + if ( + dragEl.contains(evt.target) || + (target.animated && target.animatingX && target.animatingY) || + _this._ignoreWhileAnimating === target + ) { return completed(false); } ignoreNextClick = false; - if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list - : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) { - vertical = this._getDirection(evt, target) === 'vertical'; + if ( + activeSortable && + !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : putSortable === this || + ((this.lastPutMode = activeGroup.checkPull( + this, + activeSortable, + dragEl, + evt + )) && + group.checkPut(this, activeSortable, dragEl, evt))) + ) { + vertical = this._getDirection(evt, target) === "vertical"; + dragRect = getRect(dragEl); - dragOverEvent('dragOverValid'); + + dragOverEvent("dragOverValid"); if (Sortable.eventCanceled) return completedFired; if (revert) { parentEl = rootEl; // actualization - capture(); this._hideClone(); - dragOverEvent('revert'); + dragOverEvent("revert"); if (!Sortable.eventCanceled) { if (nextEl) { @@ -1963,15 +2154,18 @@ Sortable.prototype = return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); - if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { + if ( + !elLastChild || + (_ghostIsLast(evt, vertical, this) && !elLastChild.animated) + ) { // If already at end of list: Do not insert if (elLastChild === dragEl) { return completed(false); - } // assign target only if condition is true - + } + // assign target only if condition is true if (elLastChild && el === evt.target) { target = elLastChild; } @@ -1980,7 +2174,18 @@ Sortable.prototype = targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if ( + onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + !!target + ) !== false + ) { capture(); el.appendChild(dragEl); parentEl = el; // actualization @@ -1990,45 +2195,78 @@ Sortable.prototype = } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, - targetBeforeFirstSwap, - differentLevel = dragEl.parentNode !== el, - differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), - side1 = vertical ? 'top' : 'left', - scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'), - scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; + let direction = 0, + targetBeforeFirstSwap, + differentLevel = dragEl.parentNode !== el, + differentRowCol = !_dragElInRowColumn( + (dragEl.animated && dragEl.toRect) || dragRect, + (target.animated && target.toRect) || targetRect, + vertical + ), + side1 = vertical ? "top" : "left", + scrolledPastTop = + isScrolledPast(target, "top", "top") || + isScrolledPast(dragEl, "top", "top"), + scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; if (lastTarget !== target) { targetBeforeFirstSwap = targetRect[side1]; pastFirstInvertThresh = false; - isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel; + isCircumstantialInvert = + (!differentRowCol && options.invertSwap) || differentLevel; } - direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + direction = _getSwapDirection( + evt, + target, + targetRect, + vertical, + differentRowCol ? 1 : options.swapThreshold, + options.invertedSwapThreshold == null + ? options.swapThreshold + : options.invertedSwapThreshold, + isCircumstantialInvert, + lastTarget === target + ); + + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; sibling = parentEl.children[dragIndex]; - } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl)); - } // If dragEl is already beside target: Do not insert - - + } while ( + sibling && + (css(sibling, "display") === "none" || sibling === ghostEl) + ); + } + // If dragEl is already beside target: Do not insert if (direction === 0 || sibling === target) { return completed(false); } lastTarget = target; + lastDirection = direction; - var nextSibling = target.nextElementSibling, - after = false; + + let nextSibling = target.nextElementSibling, + after = false; + after = direction === 1; - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + after + ); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2037,27 +2275,37 @@ Sortable.prototype = _silent = true; setTimeout(_unsilent, 30); + capture(); if (after && !nextSibling) { el.appendChild(dragEl); } else { - target.parentNode.insertBefore(dragEl, after ? nextSibling : target); - } // Undo chrome's scroll adjustment (has no effect on other browsers) - + target.parentNode.insertBefore( + dragEl, + after ? nextSibling : target + ); + } + // Undo chrome's scroll adjustment (has no effect on other browsers) if (scrolledPastTop) { - scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop); + scrollBy( + scrolledPastTop, + 0, + scrollBefore - scrolledPastTop.scrollTop + ); } parentEl = dragEl.parentNode; // actualization - // must be done before animation + // must be done before animation if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { - targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]); + targetMoveDistance = Math.abs( + targetBeforeFirstSwap - getRect(target)[side1] + ); } - changed(); + return completed(true); } } @@ -2069,70 +2317,75 @@ Sortable.prototype = return false; }, + _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { - off(document, 'mousemove', this._onTouchMove); - off(document, 'touchmove', this._onTouchMove); - off(document, 'pointermove', this._onTouchMove); - off(document, 'dragover', nearestEmptyInsertDetectEvent); - off(document, 'mousemove', nearestEmptyInsertDetectEvent); - off(document, 'touchmove', nearestEmptyInsertDetectEvent); + + _offMoveEvents: function () { + off(document, "mousemove", this._onTouchMove); + off(document, "touchmove", this._onTouchMove); + off(document, "pointermove", this._onTouchMove); + off(document, "dragover", nearestEmptyInsertDetectEvent); + off(document, "mousemove", nearestEmptyInsertDetectEvent); + off(document, "touchmove", nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._onDrop); - off(ownerDocument, 'touchend', this._onDrop); - off(ownerDocument, 'pointerup', this._onDrop); - off(ownerDocument, 'touchcancel', this._onDrop); - off(document, 'selectstart', this); + + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; + + off(ownerDocument, "mouseup", this._onDrop); + off(ownerDocument, "touchend", this._onDrop); + off(ownerDocument, "pointerup", this._onDrop); + off(ownerDocument, "touchcancel", this._onDrop); + off(document, "selectstart", this); }, - _onDrop: function _onDrop( - /**Event*/ - evt) { - var el = this.el, - options = this.options; // Get the index of the dragged element within its parent + _onDrop: function (/**Event*/ evt) { + let el = this.el, + options = this.options; + + // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - pluginEvent('drop', this, { - evt: evt + + pluginEvent("drop", this, { + evt, }); - parentEl = dragEl && dragEl.parentNode; // Get again after plugin event + parentEl = dragEl && dragEl.parentNode; + + // Get again after plugin event newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); if (Sortable.eventCanceled) { this._nulling(); - return; } awaitingDragStarted = false; isCircumstantialInvert = false; pastFirstInvertThresh = false; + clearInterval(this._loopId); + clearTimeout(this._dragStartTimer); _cancelNextTick(this.cloneId); + _cancelNextTick(this._dragStartId); - _cancelNextTick(this._dragStartId); // Unbind events - - + // Unbind events if (this.nativeDraggable) { - off(document, 'drop', this); - off(el, 'dragstart', this._onDragStart); + off(document, "drop", this); + off(el, "dragstart", this._onDragStart); } - this._offMoveEvents(); - this._offUpEvents(); if (Safari) { - css(document.body, 'user-select', ''); + css(document.body, "user-select", ""); } - css(dragEl, 'transform', ''); + css(dragEl, "transform", ""); if (evt) { if (moved) { @@ -2142,34 +2395,45 @@ Sortable.prototype = ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { // Remove clone(s) - cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); + cloneEl && + cloneEl.parentNode && + cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { - off(dragEl, 'dragend', this); + off(dragEl, "dragend", this); } _disableDraggable(dragEl); + dragEl.style["will-change"] = ""; - dragEl.style['will-change'] = ''; // Remove classes + // Remove classes // ghostClass is added in dragStarted - if (moved && !awaitingDragStarted) { - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : this.options.ghostClass, + false + ); } + toggleClass(dragEl, this.options.chosenClass, false); - toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event - + // Drag stop event _dispatchEvent({ sortable: this, - name: 'unchoose', + name: "unchoose", toEl: parentEl, newIndex: null, newDraggableIndex: null, - originalEvent: evt + originalEvent: evt, }); if (rootEl !== parentEl) { @@ -2177,34 +2441,34 @@ Sortable.prototype = // Add event _dispatchEvent({ rootEl: parentEl, - name: 'add', + name: "add", toEl: parentEl, fromEl: rootEl, - originalEvent: evt - }); // Remove event - + originalEvent: evt, + }); + // Remove event _dispatchEvent({ sortable: this, - name: 'remove', + name: "remove", toEl: parentEl, - originalEvent: evt - }); // drag from one list and drop into another - + originalEvent: evt, + }); + // drag from one list and drop into another _dispatchEvent({ rootEl: parentEl, - name: 'sort', + name: "sort", toEl: parentEl, fromEl: rootEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } @@ -2215,16 +2479,16 @@ Sortable.prototype = // drag & drop within the same list _dispatchEvent({ sortable: this, - name: 'update', + name: "update", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } } @@ -2239,48 +2503,47 @@ Sortable.prototype = _dispatchEvent({ sortable: this, - name: 'end', + name: "end", toEl: parentEl, - originalEvent: evt - }); // Save sorting - + originalEvent: evt, + }); + // Save sorting this.save(); } } } - this._nulling(); }, - _nulling: function _nulling() { - pluginEvent('nulling', this); + + _nulling: function () { + pluginEvent("nulling", this); + rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; + savedInputChecked.forEach(function (el) { el.checked = true; }); + savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( - /**Event*/ - evt) { + + handleEvent: function (/**Event*/ evt) { switch (evt.type) { - case 'drop': - case 'dragend': + case "drop": + case "dragend": this._onDrop(evt); - break; - case 'dragenter': - case 'dragover': + case "dragenter": + case "dragover": if (dragEl) { this._onDragOver(evt); - _globalDragOver(evt); } - break; - case 'selectstart': + case "selectstart": evt.preventDefault(); break; } @@ -2290,17 +2553,16 @@ Sortable.prototype = * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], - el, - children = this.el.children, - i = 0, - n = children.length, - options = this.options; + toArray: function () { + let order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; for (; i < n; i++) { el = children[i]; - if (closest(el, options.draggable, this.el, false)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } @@ -2313,16 +2575,18 @@ Sortable.prototype = * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order) { - var items = {}, - rootEl = this.el; + sort: function (order) { + let items = {}, + rootEl = this.el; + this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; } }, this); + order.forEach(function (id) { if (items[id]) { rootEl.removeChild(items[id]); @@ -2334,8 +2598,8 @@ Sortable.prototype = /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2345,7 +2609,7 @@ Sortable.prototype = * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2355,21 +2619,20 @@ Sortable.prototype = * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); - - if (typeof modifiedValue !== 'undefined') { + let modifiedValue = PluginManager.modifyOption(this, name, value); + if (typeof modifiedValue !== "undefined") { options[name] = modifiedValue; } else { options[name] = value; } - if (name === 'group') { + if (name === "group") { _prepareGroup(options); } } @@ -2378,22 +2641,25 @@ Sortable.prototype = /** * Destroy */ - destroy: function destroy() { - pluginEvent('destroy', this); - var el = this.el; - el[expando] = null; - off(el, 'mousedown', this._onTapStart); - off(el, 'touchstart', this._onTapStart); - off(el, 'pointerdown', this._onTapStart); + destroy: function () { + pluginEvent("destroy", this); + let el = this.el; - if (this.nativeDraggable) { - off(el, 'dragover', this); - off(el, 'dragenter', this); - } // Remove draggable attributes + el[expando] = null; + off(el, "mousedown", this._onTapStart); + off(el, "touchstart", this._onTapStart); + off(el, "pointerdown", this._onTapStart); - Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { - el.removeAttribute('draggable'); + if (this.nativeDraggable) { + off(el, "dragover", this); + off(el, "dragenter", this); + } + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function ( + el + ) { + el.removeAttribute("draggable"); }); this._onDrop(); @@ -2401,33 +2667,35 @@ Sortable.prototype = this._disableDelayedDragEvents(); sortables.splice(sortables.indexOf(this.el), 1); + this.el = el = null; }, - _hideClone: function _hideClone() { + + _hideClone: function () { if (!cloneHidden) { - pluginEvent('hideClone', this); + pluginEvent("hideClone", this); if (Sortable.eventCanceled) return; - css(cloneEl, 'display', 'none'); + css(cloneEl, "display", "none"); if (this.options.removeCloneOnHide && cloneEl.parentNode) { cloneEl.parentNode.removeChild(cloneEl); } - cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { - if (putSortable.lastPutMode !== 'clone') { - this._hideClone(); + _showClone: function (putSortable) { + if (putSortable.lastPutMode !== "clone") { + this._hideClone(); return; } if (cloneHidden) { - pluginEvent('showClone', this); - if (Sortable.eventCanceled) return; // show clone at dragEl or original position + pluginEvent("showClone", this); + if (Sortable.eventCanceled) return; - if (rootEl.contains(dragEl) && !this.options.group.revertClone) { + // show clone at dragEl or original position + if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { rootEl.insertBefore(cloneEl, dragEl); } else if (nextEl) { rootEl.insertBefore(cloneEl, nextEl); @@ -2439,36 +2707,42 @@ Sortable.prototype = this.animate(dragEl, cloneEl); } - css(cloneEl, 'display', ''); + css(cloneEl, "display", ""); cloneHidden = false; } - } + }, }; -function _globalDragOver( -/**Event*/ -evt) { +function _globalDragOver(/**Event*/ evt) { if (evt.dataTransfer) { - evt.dataTransfer.dropEffect = 'move'; + evt.dataTransfer.dropEffect = "move"; } - evt.cancelable && evt.preventDefault(); } -function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, - sortable = fromEl[expando], - onMoveFn = sortable.options.onMove, - retVal; // Support for new CustomEvent feature - +function onMove( + fromEl, + toEl, + dragEl, + dragRect, + targetEl, + targetRect, + originalEvent, + willInsertAfter +) { + let evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { - evt = new CustomEvent('move', { + evt = new CustomEvent("move", { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); - evt.initEvent('move', true, true); + evt = document.createEvent("Event"); + evt.initEvent("move", true, true); } evt.to = toEl; @@ -2478,7 +2752,9 @@ function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalE evt.related = targetEl || toEl; evt.relatedRect = targetRect || getRect(toEl); evt.willInsertAfter = willInsertAfter; + evt.originalEvent = originalEvent; + fromEl.dispatchEvent(evt); if (onMoveFn) { @@ -2497,32 +2773,56 @@ function _unsilent() { } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; - return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; + + return vertical + ? evt.clientX > rect.right + spacer || + (evt.clientX <= rect.right && + evt.clientY > rect.bottom && + evt.clientX >= rect.left) + : (evt.clientX > rect.right && evt.clientY > rect.top) || + (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer); } -function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, - targetLength = vertical ? targetRect.height : targetRect.width, - targetS1 = vertical ? targetRect.top : targetRect.left, - targetS2 = vertical ? targetRect.bottom : targetRect.right, - invert = false; +function _getSwapDirection( + evt, + target, + targetRect, + vertical, + swapThreshold, + invertedSwapThreshold, + invertSwap, + isLastTarget +) { + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, + targetLength = vertical ? targetRect.height : targetRect.width, + targetS1 = vertical ? targetRect.top : targetRect.left, + targetS2 = vertical ? targetRect.bottom : targetRect.right, + invert = false; if (!invertSwap) { // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 // check if past first invert threshold on side opposite of lastDirection - if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) { + if ( + !pastFirstInvertThresh && + (lastDirection === 1 + ? mouseOnAxis > targetS1 + (targetLength * invertedSwapThreshold) / 2 + : mouseOnAxis < targetS2 - (targetLength * invertedSwapThreshold) / 2) + ) { // past first invert threshold, do not restrict inverted threshold to dragEl shadow pastFirstInvertThresh = true; } if (!pastFirstInvertThresh) { // dragEl shadow (target move distance shadow) - if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow - : mouseOnAxis > targetS2 - targetMoveDistance) { + if ( + lastDirection === 1 + ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow + : mouseOnAxis > targetS2 - targetMoveDistance + ) { return -lastDirection; } } else { @@ -2530,7 +2830,10 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv } } else { // Regular - if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) { + if ( + mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 && + mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2 + ) { return _getInsertDirection(target); } } @@ -2540,21 +2843,23 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv if (invert) { // Invert of regular - if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) { + if ( + mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 || + mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2 + ) { return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1; } } return 0; } + /** * Gets the direction dragEl must be swapped relative to target in order to make it * seem that dragEl has been "inserted" into that element's position * @param {HTMLElement} target The target whose position dragEl is being inserted at * @return {Number} Direction dragEl must be swapped */ - - function _getInsertDirection(target) { if (index(dragEl) < index(target)) { return 1; @@ -2562,18 +2867,17 @@ function _getInsertDirection(target) { return -1; } } + /** * Generate id * @param {HTMLElement} el * @returns {String} * @private */ - - function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, - i = str.length, - sum = 0; + let str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; while (i--) { sum += str.charCodeAt(i); @@ -2584,11 +2888,12 @@ function _generateId(el) { function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + + let inputs = root.getElementsByTagName("input"); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2599,24 +2904,24 @@ function _nextTick(fn) { function _cancelNextTick(id) { return clearTimeout(id); -} // Fixed #973: - +} +// Fixed #973: if (documentExists) { - on(document, 'touchmove', function (evt) { + on(document, "touchmove", function (evt) { if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { evt.preventDefault(); } }); -} // Export utils - +} +// Export utils Sortable.utils = { on: on, off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2628,60 +2933,57 @@ Sortable.utils = { nextTick: _nextTick, cancelNextTick: _cancelNextTick, detectDirection: _detectDirection, - getChild: getChild + getChild: getChild, }; + /** * Get the Sortable instance of an element * @param {HTMLElement} element The element * @return {Sortable|undefined} The instance of Sortable */ - Sortable.get = function (element) { return element[expando]; }; + /** * Mount a plugin to Sortable * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted */ - - -Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - +Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + + plugins.forEach((plugin) => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call( + plugin + )}`; } + if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils }; - if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils); PluginManager.mount(plugin); }); }; + /** * Create sortable instance * @param {HTMLElement} el * @param {Object} [options] */ - - Sortable.create = function (el, options) { return new Sortable(el, options); -}; // Export - +}; +// Export Sortable.version = version; -var autoScrolls = [], - scrollEl, - scrollRootEl, - scrolling = false, - lastAutoScrollX, - lastAutoScrollY, - touchEvt$1, - pointerElemChangedInterval; +let autoScrolls = [], + scrollEl, + scrollRootEl, + scrolling = false, + lastAutoScrollX, + lastAutoScrollY, + touchEvt$1, + pointerElemChangedInterval; function AutoScrollPlugin() { function AutoScroll() { @@ -2689,106 +2991,123 @@ function AutoScrollPlugin() { scroll: true, scrollSensitivity: 30, scrollSpeed: 10, - bubbleScroll: true - }; // Bind all private methods + bubbleScroll: true, + }; - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ originalEvent }) { if (this.sortable.nativeDraggable) { - on(document, 'dragover', this._handleAutoScroll); + on(document, "dragover", this._handleAutoScroll); } else { if (this.options.supportPointer) { - on(document, 'pointermove', this._handleFallbackAutoScroll); + on(document, "pointermove", this._handleFallbackAutoScroll); } else if (originalEvent.touches) { - on(document, 'touchmove', this._handleFallbackAutoScroll); + on(document, "touchmove", this._handleFallbackAutoScroll); } else { - on(document, 'mousemove', this._handleFallbackAutoScroll); + on(document, "mousemove", this._handleFallbackAutoScroll); } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ originalEvent }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { - off(document, 'dragover', this._handleAutoScroll); + off(document, "dragover", this._handleAutoScroll); } else { - off(document, 'pointermove', this._handleFallbackAutoScroll); - off(document, 'touchmove', this._handleFallbackAutoScroll); - off(document, 'mousemove', this._handleFallbackAutoScroll); + off(document, "pointermove", this._handleFallbackAutoScroll); + off(document, "touchmove", this._handleFallbackAutoScroll); + off(document, "mousemove", this._handleFallbackAutoScroll); } clearPointerElemChangedInterval(); clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; + autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); - touchEvt$1 = evt; // IE does not seem to have native autoscroll, + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); + + touchEvt$1 = evt; + + // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, // Firefox and Chrome are good - if (fallback || Edge || IE11OrLess || Safari) { - autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - - var ogElemScroller = getParentAutoScrollElement(elem, true); - - if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { - pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); - + autoScroll(evt, this.options, elem, fallback); + + // Listener for pointer element change + let ogElemScroller = getParentAutoScrollElement(elem, true); + if ( + scrolling && + (!pointerElemChangedInterval || + x !== lastAutoScrollX || + y !== lastAutoScrollY) + ) { + pointerElemChangedInterval && clearPointerElemChangedInterval(); + // Detect for pointer elem change, emulating native DnD behaviour + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement( + document.elementFromPoint(x, y), + true + ); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; } } else { // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll - if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) { + if ( + !this.options.bubbleScroll || + getParentAutoScrollElement(elem, true) === getWindowScrollingElement() + ) { clearAutoScrolls(); return; } - - autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); + autoScroll( + evt, + this.options, + getParentAutoScrollElement(elem, false), + false + ); } - } + }, }; - return _extends(AutoScroll, { - pluginName: 'scroll', - initializeByDefault: true + + return Object.assign(AutoScroll, { + pluginName: "scroll", + initializeByDefault: true, }); } @@ -2803,20 +3122,24 @@ function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } -var autoScroll = throttle(function (evt, options, rootEl, isFallback) { +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, - scrollCustomFn; // New scroll root, set scrollEl + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + let scrollThisInstance = false, + scrollCustomFn; + + // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { scrollRootEl = rootEl; + clearAutoScrolls(); + scrollEl = options.scroll; scrollCustomFn = options.scrollFn; @@ -2825,105 +3148,136 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } } - var layersOut = 0; - var currentParent = scrollEl; - + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, - rect = getRect(el), - top = rect.top, - bottom = rect.bottom, - left = rect.left, - right = rect.right, - width = rect.width, - height = rect.height, - canScrollX = void 0, - canScrollY = void 0, - scrollWidth = el.scrollWidth, - scrollHeight = el.scrollHeight, - elCSS = css(el), - scrollPosX = el.scrollLeft, - scrollPosY = el.scrollTop; + let el = currentParent, + rect = getRect(el), + top = rect.top, + bottom = rect.bottom, + left = rect.left, + right = rect.right, + width = rect.width, + height = rect.height, + canScrollX, + canScrollY, + scrollWidth = el.scrollWidth, + scrollHeight = el.scrollHeight, + elCSS = css(el), + scrollPosX = el.scrollLeft, + scrollPosY = el.scrollTop; if (el === winScroller) { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || + elCSS.overflowX === "scroll" || + elCSS.overflowX === "visible"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || + elCSS.overflowY === "scroll" || + elCSS.overflowY === "visible"); } else { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll"); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = + canScrollX && + (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - + (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = + canScrollY && + (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - + (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } } } - if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { + if ( + autoScrolls[layersOut].vx != vx || + autoScrolls[layersOut].vy != vy || + autoScrolls[layersOut].el !== el + ) { autoScrolls[layersOut].el = el; autoScrolls[layersOut].vx = vx; autoScrolls[layersOut].vy = vy; + clearInterval(autoScrolls[layersOut].pid); if (vx != 0 || vy != 0) { scrollThisInstance = true; /* jshint loopfunc:true */ - - autoScrolls[layersOut].pid = setInterval(function () { - // emulate drag over during autoscroll (fallback), emulating native DnD behaviour - if (isFallback && this.layer === 0) { - Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely - - } - - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; - - if (typeof scrollCustomFn === 'function') { - if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { - return; + autoScrolls[layersOut].pid = setInterval( + function () { + // emulate drag over during autoscroll (fallback), emulating native DnD behaviour + if (isFallback && this.layer === 0) { + Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely + } + let scrollOffsetY = autoScrolls[this.layer].vy + ? autoScrolls[this.layer].vy * speed + : 0; + let scrollOffsetX = autoScrolls[this.layer].vx + ? autoScrolls[this.layer].vx * speed + : 0; + + if (typeof scrollCustomFn === "function") { + if ( + scrollCustomFn.call( + Sortable.dragged.parentNode[expando], + scrollOffsetX, + scrollOffsetY, + evt, + touchEvt$1, + autoScrolls[this.layer].el + ) !== "continue" + ) { + return; + } } - } - scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); - }.bind({ - layer: layersOut - }), 24); + scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); + }.bind({ layer: layersOut }), + 24 + ); } } - layersOut++; } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); - scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); -var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget, +}) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = + originalEvent.changedTouches && originalEvent.changedTouches.length + ? originalEvent.changedTouches[0] + : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); - if (toSortable && !toSortable.el.contains(target)) { - dispatchSortableEvent('spill'); - this.onSpill({ - dragEl: dragEl, - putSortable: putSortable - }); + dispatchSortableEvent("spill"); + this.onSpill({ dragEl, putSortable }); } }; @@ -2931,88 +3285,77 @@ function Revert() {} Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + dragStart({ oldDraggableIndex }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + onSpill({ dragEl, putSortable }) { this.sortable.captureAnimationState(); - if (putSortable) { putSortable.captureAnimationState(); } - - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); } else { this.sortable.el.appendChild(dragEl); } - this.sortable.animateAll(); - if (putSortable) { putSortable.animateAll(); } }, - drop: drop + drop, }; -_extends(Revert, { - pluginName: 'revertOnSpill' +Object.assign(Revert, { + pluginName: "revertOnSpill", }); function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ dragEl, putSortable }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + drop, }; -_extends(Remove, { - pluginName: 'removeOnSpill' +Object.assign(Remove, { + pluginName: "removeOnSpill", }); var OnSpill = [Remove, Revert]; -var lastSwapEl; +let lastSwapEl; function SwapPlugin() { function Swap() { this.defaults = { - swapClass: 'sortable-swap-highlight' + swapClass: "sortable-swap-highlight", }; } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ dragEl }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel, + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, - options = this.options; - + let el = this.sortable.el, + options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; - + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); lastSwapEl = target; @@ -3024,207 +3367,197 @@ function SwapPlugin() { toggleClass(prevSwapEl, options.swapClass, false); } } - changed(); + completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + drop({ activeSortable, putSortable, dragEl }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); - - if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { + if ( + lastSwapEl && + (options.swap || (putSortable && putSortable.options.swap)) + ) { if (dragEl !== lastSwapEl) { toSortable.captureAnimationState(); - if (toSortable !== activeSortable) activeSortable.captureAnimationState(); + if (toSortable !== activeSortable) + activeSortable.captureAnimationState(); swapNodes(dragEl, lastSwapEl); + toSortable.animateAll(); if (toSortable !== activeSortable) activeSortable.animateAll(); } } }, - nulling: function nulling() { + nulling() { lastSwapEl = null; - } + }, }; - return _extends(Swap, { - pluginName: 'swap', - eventProperties: function eventProperties() { + + return Object.assign(Swap, { + pluginName: "swap", + eventProperties() { return { - swapItem: lastSwapEl + swapItem: lastSwapEl, }; - } + }, }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, - p2 = n2.parentNode, - i1, - i2; + let p1 = n1.parentNode, + p2 = n2.parentNode, + i1, + i2; + if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return; + i1 = index(n1); i2 = index(n2); if (p1.isEqualNode(p2) && i1 < i2) { i2++; } - p1.insertBefore(n2, p1.children[i1]); p2.insertBefore(n1, p2.children[i2]); } -var multiDragElements = [], - multiDragClones = [], - lastMultiDragSelect, - // for selection with modifier key down (SHIFT) -multiDragSortable, - initialFolding = false, - // Initial multi-drag fold when drag started -folding = false, - // Folding any other time -dragStarted = false, - dragEl$1, - clonesFromRect, - clonesHidden; +let multiDragElements = [], + multiDragClones = [], + lastMultiDragSelect, // for selection with modifier key down (SHIFT) + multiDragSortable, + initialFolding = false, // Initial multi-drag fold when drag started + folding = false, // Folding any other time + dragStarted = false, + dragEl$1, + clonesFromRect, + clonesHidden; function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } if (sortable.options.supportPointer) { - on(document, 'pointerup', this._deselectMultiDrag); + on(document, "pointerup", this._deselectMultiDrag); } else { - on(document, 'mouseup', this._deselectMultiDrag); - on(document, 'touchend', this._deselectMultiDrag); + on(document, "mouseup", this._deselectMultiDrag); + on(document, "touchend", this._deselectMultiDrag); } - on(document, 'keydown', this._checkKeyDown); - on(document, 'keyup', this._checkKeyUp); + on(document, "keydown", this._checkKeyDown); + on(document, "keyup", this._checkKeyUp); + this.defaults = { - selectedClass: 'sortable-selected', + selectedClass: "sortable-selected", multiDragKey: null, - setData: function setData(dataTransfer, dragEl) { - var data = ''; - + setData(dataTransfer, dragEl) { + let data = ""; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { - data += (!i ? '' : ', ') + multiDragElement.textContent; + multiDragElements.forEach((multiDragElement, i) => { + data += (!i ? "" : ", ") + multiDragElement.textContent; }); } else { data = dragEl.textContent; } - - dataTransfer.setData('Text', data); - } + dataTransfer.setData("Text", data); + }, }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ dragEl: dragged }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; - if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + setupClone({ sortable, cancel }) { + if (!this.isMultiDrag) return; + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); + multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; + multiDragClones[i].draggable = false; - multiDragClones[i].style['will-change'] = ''; + multiDragClones[i].style["will-change"] = ""; + toggleClass(multiDragClones[i], this.options.selectedClass, false); - multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false); + multiDragElements[i] === dragEl$1 && + toggleClass(multiDragClones[i], this.options.chosenClass, false); } sortable._hideClone(); - cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; - if (!this.isMultiDrag) return; + clone({ sortable, rootEl, dispatchSortableEvent, cancel }) { + if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { if (multiDragElements.length && multiDragSortable === sortable) { insertMultiDragClones(true, rootEl); - dispatchSortableEvent('clone'); + dispatchSortableEvent("clone"); + cancel(); } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ cloneNowShown, rootEl, cancel }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { - css(clone, 'display', ''); + multiDragClones.forEach((clone) => { + css(clone, "display", ""); }); + cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ sortable, cloneNowHidden, cancel }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { - css(clone, 'display', 'none'); - - if (_this.options.removeCloneOnHide && clone.parentNode) { + multiDragClones.forEach((clone) => { + css(clone, "display", "none"); + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); + cloneNowHidden(); clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ sortable }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.sortableIndex = index(multiDragElement); - }); // Sort multi-drag elements + }); + // Sort multi-drag elements multiDragElements = multiDragElements.sort(function (a, b) { return a.sortableIndex - b.sortableIndex; }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ sortable }) { if (!this.isMultiDrag) return; - if (this.options.sort) { // Capture rects, // hide multi drag elements (by positioning them absolute), @@ -3232,101 +3565,110 @@ function MultiDragPlugin() { // show multi drag elements, // animate to rects, // unset rects & remove from DOM + sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - css(multiDragElement, 'position', 'absolute'); + css(multiDragElement, "position", "absolute"); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + + let dragRect = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); + folding = true; initialFolding = true; } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); - } // Remove all auxiliary multidrag items from el, if sorting enabled - + } - if (_this2.options.sort) { + // Remove all auxiliary multidrag items from el, if sorting enabled + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ target, completed, cancel }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ fromSortable, rootEl, sortable, dragRect }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { sortable.addAnimationState({ target: multiDragElement, - rect: folding ? getRect(multiDragElement) : dragRect + rect: folding ? getRect(multiDragElement) : dragRect, }); + unsetRect(multiDragElement); + multiDragElement.fromRect = dragRect; + fromSortable.removeAnimationState(multiDragElement); }); folding = false; insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable, + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly if (isOwner) { activeSortable._hideClone(); } - initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location - - if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { + initialFolding = false; + // If leaving sort:false root, or already folding - Fold to new location + if ( + options.animation && + multiDragElements.length > 1 && + (folding || + (!isOwner && !activeSortable.options.sort && !putSortable)) + ) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted - // while folding, and so that we can capture them again because old sortable will no longer be fromSortable + setRect(multiDragElement, dragRectAbsolute); + // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted + // while folding, and so that we can capture them again because old sortable will no longer be fromSortable parentEl.appendChild(multiDragElement); }); - folding = true; - } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out + folding = true; + } + // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out if (!isOwner) { // Only remove if not folding (folding will remove them anyways) if (!folding) { @@ -3334,17 +3676,21 @@ function MultiDragPlugin() { } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; - - activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden - + let clonesHiddenBefore = clonesHidden; + activeSortable._showClone(sortable); - if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + // Unfold animation for clones if showing from hidden + if ( + activeSortable.options.animation && + !clonesHidden && + clonesHiddenBefore + ) { + multiDragClones.forEach((clone) => { activeSortable.addAnimationState({ target: clone, - rect: clonesFromRect + rect: clonesFromRect, }); + clone.fromRect = clonesFromRect; clone.thisAnimationDuration = null; }); @@ -3355,66 +3701,81 @@ function MultiDragPlugin() { } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; }); - if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { - clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + if ( + activeSortable.options.animation && + !isOwner && + activeSortable.multiDrag.isMultiDrag + ) { + clonesFromRect = Object.assign({}, dragRect); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable, + }) { + let toSortable = putSortable || this.sortable; + if (!evt) return; - var options = this.options, - children = parentEl.children; // Multi-drag selection + let options = this.options, + children = parentEl.children; + + // Multi-drag selection if (!dragStarted) { if (options.multiDragKey && !this.multiDragKeyDown) { this._deselectMultiDrag(); } - - toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1)); + toggleClass( + dragEl$1, + options.selectedClass, + !~multiDragElements.indexOf(dragEl$1) + ); if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: dragEl$1, - originalEvt: evt - }); // Modifier activated, select from last to dragEl + originalEvt: evt, + }); - if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), - currentIndex = index(dragEl$1); + // Modifier activated, select from last to dragEl + if ( + evt.shiftKey && + lastMultiDragSelect && + sortable.el.contains(lastMultiDragSelect) + ) { + let lastIndex = index(lastMultiDragSelect), + currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; - + let n, i; if (currentIndex > lastIndex) { i = lastIndex; n = currentIndex; @@ -3427,12 +3788,13 @@ function MultiDragPlugin() { if (~multiDragElements.indexOf(children[i])) continue; toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); + dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: children[i], - originalEvt: evt + originalEvt: evt, }); } } @@ -3445,222 +3807,256 @@ function MultiDragPlugin() { multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'deselect', + sortable, + rootEl, + name: "deselect", targetEl: dragEl$1, - originalEvt: evt + originalEvt: evt, }); } - } // Multi-drag drop - + } + // Multi-drag drop if (dragStarted && this.isMultiDrag) { // Do not "unfold" after around dragEl if reverted - if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), - multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); - if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; + if ( + (parentEl[expando].options.sort || parentEl !== rootEl) && + multiDragElements.length > 1 + ) { + let dragRect = getRect(dragEl$1), + multiDragIndex = index( + dragEl$1, + ":not(." + this.options.selectedClass + ")" + ); + + if (!initialFolding && options.animation) + dragEl$1.thisAnimationDuration = null; + toSortable.captureAnimationState(); if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; - if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; - multiDragElement.fromRect = rect; // Prepare unfold animation + let rect = folding ? getRect(multiDragElement) : dragRect; + multiDragElement.fromRect = rect; + // Prepare unfold animation toSortable.addAnimationState({ target: multiDragElement, - rect: rect + rect: rect, }); } }); - } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert - // properly they must all be removed - + } + // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert + // properly they must all be removed removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + + multiDragElements.forEach((multiDragElement) => { if (children[multiDragIndex]) { - parentEl.insertBefore(multiDragElement, children[multiDragIndex]); + parentEl.insertBefore( + multiDragElement, + children[multiDragIndex] + ); } else { parentEl.appendChild(multiDragElement); } - multiDragIndex++; - }); // If initial folding is done, the elements may have changed position because they are now + }); + + // If initial folding is done, the elements may have changed position because they are now // unfolding around dragEl, even though dragEl may not have his index changed, so update event // must be fired here as Sortable will not. - if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { - if (multiDragElement.sortableIndex !== index(multiDragElement)) { + let update = false; + multiDragElements.forEach((multiDragElement) => { + if ( + multiDragElement.sortableIndex !== index(multiDragElement) + ) { update = true; return; } }); if (update) { - dispatchSortableEvent('update'); + dispatchSortableEvent("update"); } } - } // Must be done after capturing individual rects (scroll bar) - + } - multiDragElements.forEach(function (multiDragElement) { + // Must be done after capturing individual rects (scroll bar) + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); + toSortable.animateAll(); } multiDragSortable = toSortable; - } // Remove clones if necessary - + } - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + // Remove clones if necessary + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { + multiDragClones.forEach((clone) => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); + off(document, "pointerup", this._deselectMultiDrag); + off(document, "mouseup", this._deselectMultiDrag); + off(document, "touchend", this._deselectMultiDrag); - off(document, 'pointerup', this._deselectMultiDrag); - off(document, 'mouseup', this._deselectMultiDrag); - off(document, 'touchend', this._deselectMultiDrag); - off(document, 'keydown', this._checkKeyDown); - off(document, 'keyup', this._checkKeyUp); + off(document, "keydown", this._checkKeyDown); + off(document, "keyup", this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { - if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable - if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable + _deselectMultiDrag(evt) { + if (typeof dragStarted !== "undefined" && dragStarted) return; + + // Only deselect if selection is in this sortable + if (multiDragSortable !== this.sortable) return; - if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click + // Only deselect if target is not item in this sortable + if ( + evt && + closest(evt.target, this.options.draggable, this.sortable.el, false) + ) + return; + // Only deselect if left click if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ sortable: this.sortable, rootEl: this.sortable.el, - name: 'deselect', + name: "deselect", targetEl: el, - originalEvt: evt + originalEvt: evt, }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } - } + }, }; - return _extends(MultiDrag, { + + return Object.assign(MultiDrag, { // Static methods & properties - pluginName: 'multiDrag', + pluginName: "multiDrag", utils: { /** * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; - if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; - + select(el) { + let sortable = el.parentNode[expando]; + if ( + !sortable || + !sortable.options.multiDrag || + ~multiDragElements.indexOf(el) + ) + return; if (multiDragSortable && multiDragSortable !== sortable) { multiDragSortable.multiDrag._deselectMultiDrag(); - multiDragSortable = sortable; } - toggleClass(el, sortable.options.selectedClass, true); multiDragElements.push(el); }, - /** * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], - index = multiDragElements.indexOf(el); + deselect(el) { + let sortable = el.parentNode[expando], + index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); - } + }, }, - eventProperties: function eventProperties() { - var _this3 = this; + eventProperties() { + const oldIndicies = [], + newIndicies = []; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { oldIndicies.push({ - multiDragElement: multiDragElement, - index: multiDragElement.sortableIndex - }); // multiDragElements will already be sorted if folding - - var newIndex; + multiDragElement, + index: multiDragElement.sortableIndex, + }); + // multiDragElements will already be sorted if folding + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index( + multiDragElement, + ":not(." + this.options.selectedClass + ")" + ); } else { newIndex = index(multiDragElement); } - newIndicies.push({ - multiDragElement: multiDragElement, - index: newIndex + multiDragElement, + index: newIndex, }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies, }; }, optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); - - if (key === 'ctrl') { - key = 'Control'; + if (key === "ctrl") { + key = "Control"; } else if (key.length > 1) { key = key.charAt(0).toUpperCase() + key.substr(1); } - return key; - } - } + }, + }, }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; - + multiDragElements.forEach((multiDragElement, i) => { + let target = + rootEl.children[ + multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0) + ]; if (target) { rootEl.insertBefore(multiDragElement, target); } else { @@ -3668,17 +4064,16 @@ function insertMultiDragElements(clonesInserted, rootEl) { } }); } + /** * Insert multi-drag clones * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted * @param {HTMLElement} rootEl */ - - function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; - + multiDragClones.forEach((clone, i) => { + let target = + rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); } else { @@ -3688,11 +4083,18 @@ function insertMultiDragClones(elementsInserted, rootEl) { } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); + multiDragElement.parentNode && + multiDragElement.parentNode.removeChild(multiDragElement); }); } export default Sortable; -export { AutoScrollPlugin as AutoScroll, MultiDragPlugin as MultiDrag, OnSpill, Sortable, SwapPlugin as Swap }; +export { + AutoScrollPlugin as AutoScroll, + MultiDragPlugin as MultiDrag, + OnSpill, + Sortable, + SwapPlugin as Swap, +}; diff --git a/modular/sortable.esm.js b/modular/sortable.esm.js index f8a64b180..77a8ab785 100644 --- a/modular/sortable.esm.js +++ b/modular/sortable.esm.js @@ -1,151 +1,30 @@ /**! - * Sortable 1.10.2 + * Sortable 1.11.0 * @author RubaXa * @author owenm * @license MIT */ -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; -} - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } -} - -function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); -} - -var version = "1.10.2"; +var version = "1.11.0"; function userAgent(pattern) { - if (typeof window !== 'undefined' && window.navigator) { - return !! - /*@__PURE__*/ - navigator.userAgent.match(pattern); + if (typeof window !== "undefined" && window.navigator) { + return !!(/*@__PURE__*/ navigator.userAgent.match(pattern)); } } -var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -var Edge = userAgent(/Edge/i); -var FireFox = userAgent(/firefox/i); -var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -var IOS = userAgent(/iP(ad|od|hone)/i); -var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); - -var captureMode = { +const IE11OrLess = userAgent( + /(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i +); +const Edge = userAgent(/Edge/i); +const FireFox = userAgent(/firefox/i); +const Safari = + userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +const IOS = userAgent(/iP(ad|od|hone)/i); +const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); + +const captureMode = { capture: false, - passive: false + passive: false, }; function on(el, event, fn) { @@ -156,13 +35,10 @@ function off(el, event, fn) { el.removeEventListener(event, fn, !IE11OrLess && captureMode); } -function matches( -/**HTMLElement*/ -el, -/**String*/ -selector) { +function matches(/**HTMLElement*/ el, /**String*/ selector) { if (!selector) return; - selector[0] === '>' && (selector = selector.substring(1)); + + selector[0] === ">" && (selector = selector.substring(1)); if (el) { try { @@ -182,95 +58,110 @@ selector) { } function getParentOrHost(el) { - return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode; + return el.host && el !== document && el.host.nodeType + ? el.host + : el.parentNode; } function closest( -/**HTMLElement*/ -el, -/**String*/ -selector, -/**HTMLElement*/ -ctx, includeCTX) { + /**HTMLElement*/ el, + /**String*/ selector, + /**HTMLElement*/ ctx, + includeCTX +) { if (el) { ctx = ctx || document; do { - if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) { + if ( + (selector != null && + (selector[0] === ">" + ? el.parentNode === ctx && matches(el, selector) + : matches(el, selector))) || + (includeCTX && el === ctx) + ) { return el; } if (el === ctx) break; /* jshint boss:true */ - } while (el = getParentOrHost(el)); + } while ((el = getParentOrHost(el))); } return null; } -var R_SPACE = /\s+/g; +const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { - el.classList[state ? 'add' : 'remove'](name); + el.classList[state ? "add" : "remove"](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); - el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); + let className = (" " + el.className + " ") + .replace(R_SPACE, " ") + .replace(" " + name + " ", " "); + el.className = (className + (state ? " " + name : "")).replace( + R_SPACE, + " " + ); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(el, ''); + val = document.defaultView.getComputedStyle(el, ""); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { - if (!(prop in style) && prop.indexOf('webkit') === -1) { - prop = '-webkit-' + prop; + if (!(prop in style) && prop.indexOf("webkit") === -1) { + prop = "-webkit-" + prop; } - style[prop] = val + (typeof val === 'string' ? '' : 'px'); + style[prop] = val + (typeof val === "string" ? "" : "px"); } } } function matrix(el, selfOnly) { - var appliedTransforms = ''; - - if (typeof el === 'string') { + let appliedTransforms = ""; + if (typeof el === "string") { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + //@ts-ignore + let transform = css(el, "transform"); - if (transform && transform !== 'none') { - appliedTransforms = transform + ' ' + appliedTransforms; + if (transform && transform !== "none") { + appliedTransforms = transform + " " + appliedTransforms; } /* jshint boss:true */ - } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + //@ts-ignore + const matrixFn = + window.DOMMatrix || + window.WebKitCSSMatrix || + window.CSSMatrix || + window.MSCSSMatrix; /*jshint -W056 */ - return matrixFn && new matrixFn(appliedTransforms); } function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), - i = 0, - n = list.length; + let list = ctx.getElementsByTagName(tagName), + i = 0, + n = list.length; if (iterator) { for (; i < n; i++) { @@ -285,7 +176,7 @@ function find(ctx, tagName, iterator) { } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -293,6 +184,7 @@ function getWindowScrollingElement() { return document.documentElement; } } + /** * Returns the "bounding client rect" of given element * @param {HTMLElement} el The element whose boundingClientRect is wanted @@ -302,11 +194,16 @@ function getWindowScrollingElement() { * @param {[HTMLElement]} container The parent the element will be placed in * @return {Object} The boundingClientRect of el, with specified adjustments */ - - -function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { +function getRect( + el, + relativeToContainingBlock, + relativeToNonStaticParent, + undoScale, + container +) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + + let elRect, top, left, bottom, right, height, width; if (el !== window && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -325,39 +222,59 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS width = window.innerWidth; } - if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) { + if ( + (relativeToContainingBlock || relativeToNonStaticParent) && + el !== window + ) { // Adjust for translate() - container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) - // Not needed on <= IE11 + container = container || el.parentNode; + // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) + // Not needed on <= IE11 if (!IE11OrLess) { do { - if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container - - top -= containerRect.top + parseInt(css(container, 'border-top-width')); - left -= containerRect.left + parseInt(css(container, 'border-left-width')); + if ( + container && + container.getBoundingClientRect && + //@ts-ignore + (css(container, "transform") !== "none" || + (relativeToNonStaticParent && + //@ts-ignore + css(container, "position") !== "static")) + ) { + let containerRect = container.getBoundingClientRect(); + + // Set relative to edges of padding box of container + //@ts-ignore + top -= + containerRect.top + parseInt(css(container, "border-top-width")); + //@ts-ignore + left -= + containerRect.left + parseInt(css(container, "border-left-width")); bottom = top + elRect.height; right = left + elRect.width; + break; } /* jshint boss:true */ - - } while (container = container.parentNode); + } while ((container = container.parentNode)); } } if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d; + //@ts-ignore + let elMatrix = matrix(container || el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d; if (elMatrix) { top /= scaleY; left /= scaleX; + width /= scaleX; height /= scaleY; + bottom = top + height; right = left + width; } @@ -369,9 +286,10 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS bottom: bottom, right: right, width: width, - height: height + height: height, }; } + /** * Checks if a side of an element is scrolled past a side of its parents * @param {HTMLElement} el The element who's side being scrolled out of view is in question @@ -379,30 +297,33 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom') * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element */ - - function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), - elSideVal = getRect(el)[elSide]; - /* jshint boss:true */ + let parent = getParentAutoScrollElement(el, true), + //@ts-ignore + elSideVal = getRect(el)[elSide]; + /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + //@ts-ignore + let parentSideVal = getRect(parent)[parentSide], + visible; - if (parentSide === 'top' || parentSide === 'left') { + if (parentSide === "top" || parentSide === "left") { visible = elSideVal >= parentSideVal; } else { visible = elSideVal <= parentSideVal; } if (!visible) return parent; + if (parent === getWindowScrollingElement()) break; + parent = getParentAutoScrollElement(parent, false); } return false; } + /** * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) * and non-draggable elements @@ -411,44 +332,54 @@ function isScrolledPast(el, elSide, parentSide) { * @param {Object} options Parent Sortable's options * @return {HTMLElement} The child at index childNum, or null if not found */ - - function getChild(el, childNum, options) { - var currentChild = 0, - i = 0, - children = el.children; + let currentChild = 0, + i = 0, + children = el.children; while (i < children.length) { - if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) { + if ( + children[i].style.display !== "none" && + //@ts-ignore + children[i] !== Sortable.ghost && + //@ts-ignore + children[i] !== Sortable.dragged && + closest(children[i], options.draggable, el, false) + ) { if (currentChild === childNum) { return children[i]; } - currentChild++; } i++; } - return null; } + /** * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) * @param {HTMLElement} el Parent element * @param {selector} selector Any other elements that should be ignored * @return {HTMLElement} The last child, ignoring ghostEl */ - - function lastChild(el, selector) { - var last = el.lastElementChild; - - while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { + let last = el.lastElementChild; + + while ( + last && + //@ts-ignore + (last === Sortable.ghost || + //@ts-ignore + css(last, "display") === "none" || + (selector && !matches(last, selector))) + ) { last = last.previousElementSibling; } return last || null; } + /** * Returns the index of an element within its parent for a selected set of * elements @@ -456,43 +387,46 @@ function lastChild(el, selector) { * @param {selector} selector * @return {number} */ - - function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; } - /* jshint boss:true */ - - while (el = el.previousElementSibling) { - if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) { + /* jshint boss:true */ + while ((el = el.previousElementSibling)) { + //@ts-ignore + if ( + el.nodeName.toUpperCase() !== "TEMPLATE" && + el !== Sortable.clone && + (!selector || matches(el, selector)) + ) { index++; } } return index; } + /** * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements. * The value is returned in real pixels. * @param {HTMLElement} el * @return {Array} Offsets in the format of [left, top] */ - - function getRelativeScrollOffset(el) { - var offsetLeft = 0, - offsetTop = 0, - winScroller = getWindowScrollingElement(); + let offsetLeft = 0, + offsetTop = 0, + winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), - scaleX = elMatrix.a, - scaleY = elMatrix.d; + //@ts-ignore + let elMatrix = matrix(el), + scaleX = elMatrix.a, + scaleY = elMatrix.d; + offsetLeft += el.scrollLeft * scaleX; offsetTop += el.scrollTop * scaleY; } while (el !== winScroller && (el = el.parentNode)); @@ -500,53 +434,59 @@ function getRelativeScrollOffset(el) { return [offsetLeft, offsetTop]; } + /** * Returns the index of the object within the given array * @param {Array} arr Array that may or may not hold the object * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find * @return {Number} The index of the object in the array, or -1 */ - - function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } - return -1; } function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) - if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + if ( + elem.clientWidth < elem.scrollWidth || + elem.clientHeight < elem.scrollHeight + ) { + //@ts-ignore + let elemCSS = css(elem); + if ( + (elem.clientWidth < elem.scrollWidth && + (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll")) || + (elem.clientHeight < elem.scrollHeight && + (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) + ) { + if (!elem.getBoundingClientRect || elem === document.body) + return getWindowScrollingElement(); - if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { - if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); if (gotSelf || includeSelf) return elem; gotSelf = true; } } /* jshint boss:true */ - - } while (elem = elem.parentNode); + } while ((elem = elem.parentNode)); return getWindowScrollingElement(); } function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -557,16 +497,20 @@ function extend(dst, src) { } function isRectEqual(rect1, rect2) { - return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); + return ( + Math.round(rect1.top) === Math.round(rect2.top) && + Math.round(rect1.left) === Math.round(rect2.left) && + Math.round(rect1.height) === Math.round(rect2.height) && + Math.round(rect1.width) === Math.round(rect2.width) + ); } -var _throttleTimeout; - +let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, - _this = this; + let args = arguments, + _this = this; if (args.length === 1) { callback.call(_this, args[0]); @@ -592,8 +536,10 @@ function scrollBy(el, x, y) { } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + //@ts-ignore + let Polymer = window.Polymer; + //@ts-ignore + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -605,44 +551,45 @@ function clone(el) { } function setRect(el, rect) { - css(el, 'position', 'absolute'); - css(el, 'top', rect.top); - css(el, 'left', rect.left); - css(el, 'width', rect.width); - css(el, 'height', rect.height); + css(el, "position", "absolute"); + css(el, "top", rect.top); + css(el, "left", rect.left); + css(el, "width", rect.width); + css(el, "height", rect.height); } function unsetRect(el) { - css(el, 'position', ''); - css(el, 'top', ''); - css(el, 'left', ''); - css(el, 'width', ''); - css(el, 'height', ''); + css(el, "position", ""); + css(el, "top", ""); + css(el, "left", ""); + css(el, "width", ""); + css(el, "height", ""); } -var expando = 'Sortable' + new Date().getTime(); +const expando = "Sortable" + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], - animationCallbackId; + let animationStates = [], + animationCallbackId; + return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { - if (css(child, 'display') === 'none' || child === Sortable.ghost) return; + let children = [].slice.call(this.el.children); + + children.forEach((child) => { + if (css(child, "display") === "none" || child === Sortable.ghost) + return; animationStates.push({ target: child, - rect: getRect(child) + rect: getRect(child), }); + let fromRect = { ...animationStates[animationStates.length - 1].rect }; - var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - - + // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); - + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; fromRect.left -= childMatrix.e; @@ -652,34 +599,34 @@ function AnimationStateManager() { child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { - animationStates.splice(indexOfObject(animationStates, { - target: target - }), 1); + + removeAnimationState(target) { + animationStates.splice(indexOfObject(animationStates, { target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); return; } - var animating = false, - animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, - target = state.target, - fromRect = target.fromRect, - toRect = getRect(target), - prevFromRect = target.prevFromRect, - prevToRect = target.prevToRect, - animatingRect = state.rect, - targetMatrix = matrix(target, true); + let animating = false, + animationTime = 0; + + animationStates.forEach((state) => { + let time = 0, + target = state.target, + fromRect = target.fromRect, + toRect = getRect(target), + prevFromRect = target.prevFromRect, + prevToRect = target.prevToRect, + animatingRect = state.rect, + targetMatrix = matrix(target, true); if (targetMatrix) { // Compensate for current animation @@ -691,23 +638,33 @@ function AnimationStateManager() { if (target.thisAnimationDuration) { // Could also check if animatingRect is between fromRect and toRect - if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect - (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { + if ( + isRectEqual(prevFromRect, toRect) && + !isRectEqual(fromRect, toRect) && + // Make sure animatingRect is on line between toRect & fromRect + (animatingRect.top - toRect.top) / + (animatingRect.left - toRect.left) === + (fromRect.top - toRect.top) / (fromRect.left - toRect.left) + ) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime( + animatingRect, + prevFromRect, + prevToRect, + this.options + ); } - } // if fromRect != toRect: animate - + } + // if fromRect != toRect: animate if (!isRectEqual(toRect, fromRect)) { target.prevFromRect = fromRect; target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -724,44 +681,59 @@ function AnimationStateManager() { target.thisAnimationDuration = time; } }); - clearTimeout(animationCallbackId); + clearTimeout(animationCallbackId); if (!animating) { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); } else { animationCallbackId = setTimeout(function () { - if (typeof callback === 'function') callback(); + if (typeof callback === "function") callback(); }, animationTime); } - animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { - css(target, 'transition', ''); - css(target, 'transform', ''); - var elMatrix = matrix(this.el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d, - translateX = (currentRect.left - toRect.left) / (scaleX || 1), - translateY = (currentRect.top - toRect.top) / (scaleY || 1); + css(target, "transition", ""); + css(target, "transform", ""); + let elMatrix = matrix(this.el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d, + translateX = (currentRect.left - toRect.left) / (scaleX || 1), + translateY = (currentRect.top - toRect.top) / (scaleY || 1); + target.animatingX = !!translateX; target.animatingY = !!translateY; - css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)'); - repaint(target); // repaint - css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : '')); - css(target, 'transform', 'translate3d(0,0,0)'); - typeof target.animated === 'number' && clearTimeout(target.animated); + css( + target, + "transform", + "translate3d(" + translateX + "px," + translateY + "px,0)" + ); + + this.forRepaintDummy = repaint(target); // repaint + + css( + target, + "transition", + "transform " + + duration + + "ms" + + (this.options.easing ? " " + this.options.easing : "") + ); + css(target, "transform", "translate3d(0,0,0)"); + typeof target.animated === "number" && clearTimeout(target.animated); target.animated = setTimeout(function () { - css(target, 'transition', ''); - css(target, 'transform', ''); + css(target, "transition", ""); + css(target, "transform", ""); target.animated = false; + target.animatingX = false; target.animatingY = false; }, duration); } - } + }, }; } @@ -770,124 +742,148 @@ function repaint(target) { } function calculateRealTime(animatingRect, fromRect, toRect, options) { - return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; + return ( + (Math.sqrt( + Math.pow(fromRect.top - animatingRect.top, 2) + + Math.pow(fromRect.left - animatingRect.left, 2) + ) / + Math.sqrt( + Math.pow(fromRect.top - toRect.top, 2) + + Math.pow(fromRect.left - toRect.left, 2) + )) * + options.animation + ); } -var plugins = []; -var defaults = { - initializeByDefault: true +let plugins = []; + +const defaults = { + initializeByDefault: true, }; + var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; - + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { - if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable - + const eventNameGlobal = eventName + "Global"; + plugins.forEach((plugin) => { + if (!sortable[plugin.pluginName]) return; + // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread({ - sortable: sortable - }, evt)); - } // Only fire plugin event if plugin is enabled in this sortable, - // and plugin has event defined - + sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt }); + } - if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread({ - sortable: sortable - }, evt)); + // Only fire plugin event if plugin is enabled in this sortable, + // and plugin has event defined + if ( + sortable.options[plugin.pluginName] && + sortable[plugin.pluginName][eventName] + ) { + sortable[plugin.pluginName][eventName]({ sortable, ...evt }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + initializePlugins(sortable, el, defaults, options) { + plugins.forEach((plugin) => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; - sortable[pluginName] = initialized; // Add default options from plugin + sortable[pluginName] = initialized; - _extends(defaults, initialized.defaults); + // Add default options from plugin + Object.assign(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); - - if (typeof modified !== 'undefined') { + let modified = this.modifyOption( + sortable, + option, + sortable.options[option] + ); + if (typeof modified !== "undefined") { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { - if (typeof plugin.eventProperties !== 'function') return; - - _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach((plugin) => { + if (typeof plugin.eventProperties !== "function") return; + Object.assign( + eventProperties, + plugin.eventProperties.call(sortable[plugin.pluginName], name) + ); }); + return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach((plugin) => { // Plugin must exist on the Sortable - if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin - - if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') { - modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value); + if (!sortable[plugin.pluginName]) return; + + // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin + if ( + plugin.optionListeners && + typeof plugin.optionListeners[name] === "function" + ) { + modifiedValue = plugin.optionListeners[name].call( + sortable[plugin.pluginName], + value + ); } }); + return modifiedValue; - } + }, }; -function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; - sortable = sortable || rootEl && rootEl[expando]; +function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties, +}) { + sortable = sortable || (rootEl && rootEl[expando]); if (!sortable) return; - var evt, - options = sortable.options, - onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature + let evt, + options = sortable.options, + onName = "on" + name.charAt(0).toUpperCase() + name.substr(1); + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { evt = new CustomEvent(name, { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); + evt = document.createEvent("Event"); evt.initEvent(name, true, true); } @@ -895,16 +891,21 @@ function dispatchEvent(_ref) { evt.from = fromEl || rootEl; evt.item = targetEl || rootEl; evt.clone = cloneEl; + evt.oldIndex = oldIndex; evt.newIndex = newIndex; + evt.oldDraggableIndex = oldDraggableIndex; evt.newDraggableIndex = newDraggableIndex; + evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; - var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + let allEventProperties = { + ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable), + }; + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -917,407 +918,506 @@ function dispatchEvent(_ref) { } } -var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, ["evt"]); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, +/**! + * Sortable + * @author RubaXa + * @author owenm + * @license MIT + */ + +let pluginEvent = function ( + eventName, + sortable, + { evt: originalEvent, ...data } = {} +) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { - _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent - }); - } - }, data)); + + dispatchSortableEvent(name) { + _dispatchEvent({ sortable, name, originalEvent }); + }, + + ...data, + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); -} - -var dragEl, - parentEl, - ghostEl, rootEl, - nextEl, - lastDownEl, - cloneEl, - cloneHidden, oldIndex, - newIndex, oldDraggableIndex, + newIndex, newDraggableIndex, - activeGroup, - putSortable, - awaitingDragStarted = false, - ignoreNextClick = false, - sortables = [], - tapEvt, - touchEvt, - lastDx, - lastDy, - tapDistanceLeft, - tapDistanceTop, - moved, - lastTarget, - lastDirection, - pastFirstInvertThresh = false, - isCircumstantialInvert = false, - targetMoveDistance, - // For positioning ghost absolutely -ghostRelativeParent, - ghostRelativeParentInitialScroll = [], - // (left, top) -_silent = false, - savedInputChecked = []; -/** @const */ - -var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors -supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { - if (!documentExists) return; // false when <= IE11 + ...info, + }); +} - if (IE11OrLess) { - return false; - } +let dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + activeGroup, + putSortable, + awaitingDragStarted = false, + ignoreNextClick = false, + sortables = [], + tapEvt, + touchEvt, + lastDx, + lastDy, + tapDistanceLeft, + tapDistanceTop, + moved, + lastTarget, + lastDirection, + pastFirstInvertThresh = false, + isCircumstantialInvert = false, + targetMoveDistance, + // For positioning ghost absolutely + ghostRelativeParent, + ghostRelativeParentInitialScroll = [], // (left, top) + _silent = false, + savedInputChecked = []; - var el = document.createElement('x'); - el.style.cssText = 'pointer-events:auto'; - return el.style.pointerEvents === 'auto'; -}(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), - elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), +/** @const */ +const documentExists = typeof document !== "undefined", + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", + // This will not pass for IE9, because IE9 DnD only works on anchors + supportDraggable = + documentExists && + !ChromeForAndroid && + !IOS && + "draggable" in document.createElement("div"), + supportCssPointerEvents = (function () { + if (!documentExists) return; + // false when <= IE11 + if (IE11OrLess) { + return false; + } + let el = document.createElement("x"); + el.style.cssText = "pointer-events:auto"; + return el.style.pointerEvents === "auto"; + })(), + _detectDirection = function (el, options) { + let elCSS = css(el), + elWidth = + parseInt(elCSS.width) - + parseInt(elCSS.paddingLeft) - + parseInt(elCSS.paddingRight) - + parseInt(elCSS.borderLeftWidth) - + parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), - firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, - secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width; - - if (elCSS.display === 'flex') { - return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal'; - } - - if (elCSS.display === 'grid') { - return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; - } - - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; - return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; - } - - return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; -}, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + firstChildWidth = + firstChildCSS && + parseInt(firstChildCSS.marginLeft) + + parseInt(firstChildCSS.marginRight) + + getRect(child1).width, + secondChildWidth = + secondChildCSS && + parseInt(secondChildCSS.marginLeft) + + parseInt(secondChildCSS.marginRight) + + getRect(child2).width; + + if (elCSS.display === "flex") { + return elCSS.flexDirection === "column" || + elCSS.flexDirection === "column-reverse" + ? "vertical" + : "horizontal"; + } + + if (elCSS.display === "grid") { + return elCSS.gridTemplateColumns.split(" ").length <= 1 + ? "vertical" + : "horizontal"; + } + + if (child1 && firstChildCSS.float && firstChildCSS.float !== "none") { + let touchingSideChild2 = + firstChildCSS.float === "left" ? "left" : "right"; + + return child2 && + (secondChildCSS.clear === "both" || + secondChildCSS.clear === touchingSideChild2) + ? "vertical" + : "horizontal"; + } + + return child1 && + (firstChildCSS.display === "block" || + firstChildCSS.display === "flex" || + firstChildCSS.display === "table" || + firstChildCSS.display === "grid" || + (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none") || + (child2 && + elCSS[CSSFloatProperty] === "none" && + firstChildWidth + secondChildWidth > elWidth)) + ? "vertical" + : "horizontal"; + }, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height; - return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2; -}, -/** - * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. - * @param {Number} x X position - * @param {Number} y Y position - * @return {HTMLElement} Element of the first found nearest Sortable - */ -_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - if (lastChild(sortable)) return; - var rect = getRect(sortable), + return ( + dragElS1Opp === targetS1Opp || + dragElS2Opp === targetS2Opp || + dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2 + ); + }, + /** + * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. + * @param {Number} x X position + * @param {Number} y Y position + * @return {HTMLElement} Element of the first found nearest Sortable + */ + _detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some((sortable) => { + if (lastChild(sortable)) return; + + let rect = getRect(sortable), threshold = sortable[expando].options.emptyInsertThreshold, - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + insideHorizontally = + x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = + y >= rect.top - threshold && y <= rect.bottom + threshold; - if (threshold && insideHorizontally && insideVertically) { - return ret = sortable; - } - }); - return ret; -}, - _prepareGroup = function _prepareGroup(options) { - function toFn(value, pull) { - return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; - - if (value == null && (pull || sameGroup)) { - // Default pull value - // Default pull and put value if same group - return true; - } else if (value == null || value === false) { - return false; - } else if (pull && value === 'clone') { - return value; - } else if (typeof value === 'function') { - return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); - } else { - var otherGroup = (pull ? to : from).options.group.name; - return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; + if (threshold && insideHorizontally && insideVertically) { + return (ret = sortable); } - }; - } + }); + return ret; + }, + _prepareGroup = function (options) { + function toFn(value, pull) { + return function (to, from, dragEl, evt) { + let sameGroup = + to.options.group.name && + from.options.group.name && + to.options.group.name === from.options.group.name; + + if (value == null && (pull || sameGroup)) { + // Default pull value + // Default pull and put value if same group + return true; + } else if (value == null || value === false) { + return false; + } else if (pull && value === "clone") { + return value; + } else if (typeof value === "function") { + return toFn(value(to, from, dragEl, evt), pull)( + to, + from, + dragEl, + evt + ); + } else { + let otherGroup = (pull ? to : from).options.group.name; - var group = {}; - var originalGroup = options.group; + return ( + value === true || + (typeof value === "string" && value === otherGroup) || + (value.join && value.indexOf(otherGroup) > -1) + ); + } + }; + } - if (!originalGroup || _typeof(originalGroup) != 'object') { - originalGroup = { - name: originalGroup - }; - } + let group = {}; + let originalGroup = options.group; - group.name = originalGroup.name; - group.checkPull = toFn(originalGroup.pull, true); - group.checkPut = toFn(originalGroup.put); - group.revertClone = originalGroup.revertClone; - options.group = group; -}, - _hideGhostForTarget = function _hideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', 'none'); - } -}, - _unhideGhostForTarget = function _unhideGhostForTarget() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', ''); - } -}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position + if (!originalGroup || typeof originalGroup != "object") { + originalGroup = { name: originalGroup }; + } + group.name = originalGroup.name; + group.checkPull = toFn(originalGroup.pull, true); + group.checkPut = toFn(originalGroup.put); + group.revertClone = originalGroup.revertClone; -if (documentExists) { - document.addEventListener('click', function (evt) { - if (ignoreNextClick) { - evt.preventDefault(); - evt.stopPropagation && evt.stopPropagation(); - evt.stopImmediatePropagation && evt.stopImmediatePropagation(); - ignoreNextClick = false; - return false; + options.group = group; + }, + _hideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", "none"); + } + }, + _unhideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", ""); } - }, true); + }; + +// #1184 fix - Prevent click event on fallback if dragged but item not changed position +if (documentExists) { + document.addEventListener( + "click", + function (evt) { + if (ignoreNextClick) { + evt.preventDefault(); + evt.stopPropagation && evt.stopPropagation(); + evt.stopImmediatePropagation && evt.stopImmediatePropagation(); + ignoreNextClick = false; + return false; + } + }, + true + ); } -var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { +let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; - - for (var i in evt) { + let event = {}; + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } } - event.target = event.rootEl = nearest; event.preventDefault = void 0; event.stopPropagation = void 0; - nearest[expando]._onDragOver(event); } } }; -var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { +let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } }; + /** * @class Sortable * @param {HTMLElement} el * @param {Object} [options] */ - - function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call( + el + )}`; } - this.el = el; // root element + const __warn = + "" + + "Importing Sortable directly from GitHub is deprecated.\n" + + "This file will not receive any more updates.\n" + + "Please follow the usage instructions to continue getting support: https://github.com/SortableJS/Sortable"; - this.options = options = _extends({}, options); // Export instance + console.warn(__warn); + + this.el = el; // root element + this.options = options = Object.assign({}, options); + // Export instance el[expando] = this; - var defaults = { + + let defaults = { group: null, sort: true, disabled: false, store: null, handle: null, - draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*', - swapThreshold: 1, - // percentage; 0 <= x <= 1 - invertSwap: false, - // invert always - invertedSwapThreshold: null, - // will be set to same as swapThreshold if default + draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*", + swapThreshold: 1, // percentage; 0 <= x <= 1 + invertSwap: false, // invert always + invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, - ghostClass: 'sortable-ghost', - chosenClass: 'sortable-chosen', - dragClass: 'sortable-drag', - ignore: 'a, img', + ghostClass: "sortable-ghost", + chosenClass: "sortable-chosen", + dragClass: "sortable-drag", + ignore: "a, img", filter: null, preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { - dataTransfer.setData('Text', dragEl.textContent); + setData: function (dataTransfer, dragEl) { + dataTransfer.setData("Text", dragEl.textContent); }, dropBubble: false, dragoverBubble: false, - dataIdAttr: 'data-id', + dataIdAttr: "data-id", delay: 0, delayOnTouchOnly: false, - touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, + touchStartThreshold: + (Number.parseInt ? Number : window).parseInt( + window.devicePixelRatio, + 10 + ) || 1, forceFallback: false, - fallbackClass: 'sortable-fallback', + fallbackClass: "sortable-fallback", fallbackOnBody: false, fallbackTolerance: 0, - fallbackOffset: { - x: 0, - y: 0 - }, - supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window, - emptyInsertThreshold: 5 + fallbackOffset: { x: 0, y: 0 }, + supportPointer: + Sortable.supportPointer !== false && "PointerEvent" in window, + emptyInsertThreshold: 5, }; - PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + PluginManager.initializePlugins(this, el, defaults); + + // Set default options + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } - _prepareGroup(options); // Bind all private methods + _prepareGroup(options); - - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } - } // Setup drag mode - + } + // Setup drag mode this.nativeDraggable = options.forceFallback ? false : supportDraggable; if (this.nativeDraggable) { // Touch start threshold cannot be greater than the native dragstart threshold this.options.touchStartThreshold = 1; - } // Bind events - + } + // Bind events if (options.supportPointer) { - on(el, 'pointerdown', this._onTapStart); + on(el, "pointerdown", this._onTapStart); } else { - on(el, 'mousedown', this._onTapStart); - on(el, 'touchstart', this._onTapStart); + on(el, "mousedown", this._onTapStart); + on(el, "touchstart", this._onTapStart); } if (this.nativeDraggable) { - on(el, 'dragover', this); - on(el, 'dragenter', this); + on(el, "dragover", this); + on(el, "dragenter", this); } - sortables.push(this.el); // Restore sorting + sortables.push(this.el); - options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager + // Restore sorting + options.store && + options.store.get && + this.sort(options.store.get(this) || []); - _extends(this, AnimationStateManager()); + // Add animation state manager + Object.assign(this, AnimationStateManager()); } -Sortable.prototype = -/** @lends Sortable.prototype */ -{ +Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { - return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; - }, - _onTapStart: function _onTapStart( - /** Event|TouchEvent */ - evt) { - if (!evt.cancelable) return; - - var _this = this, - el = this.el, - options = this.options, - preventOnFilter = options.preventOnFilter, - type = evt.type, - touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt, - target = (touch || evt).target, - originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, - filter = options.filter; - - _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. + _getDirection: function (evt, target) { + return typeof this.options.direction === "function" + ? this.options.direction.call(this, evt, target, dragEl) + : this.options.direction; + }, + _onTapStart: function (/** Event|TouchEvent */ evt) { + if (!evt.cancelable) return; + let _this = this, + el = this.el, + options = this.options, + preventOnFilter = options.preventOnFilter, + type = evt.type, + touch = + (evt.touches && evt.touches[0]) || + (evt.pointerType && evt.pointerType === "touch" && evt), + target = (touch || evt).target, + originalTarget = + (evt.target.shadowRoot && + ((evt.path && evt.path[0]) || + (evt.composedPath && evt.composedPath()[0]))) || + target, + filter = options.filter; + + _saveInputCheckedState(el); + + // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. if (dragEl) { return; } - if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { + if ( + (/mousedown|pointerdown/.test(type) && evt.button !== 0) || + options.disabled + ) { return; // only left button and enabled - } // cancel dnd if original target is content editable - + } + // cancel dnd if original target is content editable if (originalTarget.isContentEditable) { return; } + // Safari ignores further event handling after mousedown + if ( + !this.nativeDraggable && + Safari && + target && + target.tagName.toUpperCase() === "SELECT" + ) { + return; + } + target = closest(target, options.draggable, el, false); if (target && target.animated) { @@ -1327,46 +1427,41 @@ Sortable.prototype = if (lastDownEl === target) { // Ignoring duplicate `down` return; - } // Get the index of the dragged element within its parent - + } + // Get the index of the dragged element within its parent oldIndex = index(target); - oldDraggableIndex = index(target, options.draggable); // Check filter + oldDraggableIndex = index(target, options.draggable); - if (typeof filter === 'function') { + // Check filter + if (typeof filter === "function") { if (filter.call(this, evt, target, this)) { _dispatchEvent({ sortable: _this, rootEl: originalTarget, - name: 'filter', + name: "filter", targetEl: target, toEl: el, - fromEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + fromEl: el, }); + pluginEvent("filter", _this, { evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd } } else if (filter) { - filter = filter.split(',').some(function (criteria) { + filter = filter.split(",").some(function (criteria) { criteria = closest(originalTarget, criteria.trim(), el, false); if (criteria) { _dispatchEvent({ sortable: _this, rootEl: criteria, - name: 'filter', + name: "filter", targetEl: target, fromEl: el, - toEl: el - }); - - pluginEvent('filter', _this, { - evt: evt + toEl: el, }); + pluginEvent("filter", _this, { evt }); return true; } }); @@ -1379,161 +1474,172 @@ Sortable.prototype = if (options.handle && !closest(originalTarget, options.handle, el, false)) { return; - } // Prepare `dragstart` - + } + // Prepare `dragstart` this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( - /** Event */ - evt, - /** Touch */ - touch, - /** HTMLElement */ - target) { - var _this = this, - el = _this.el, - options = _this.options, - ownerDocument = el.ownerDocument, - dragStartFn; + + _prepareDragStart: function ( + /** Event */ evt, + /** Touch */ touch, + /** HTMLElement */ target + ) { + let _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; + Sortable.dragged = dragEl; + tapEvt = { target: dragEl, clientX: (touch || evt).clientX, - clientY: (touch || evt).clientY + clientY: (touch || evt).clientY, }; + tapDistanceLeft = tapEvt.clientX - dragRect.left; tapDistanceTop = tapEvt.clientY - dragRect.top; + this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; - dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { - pluginEvent('delayEnded', _this, { - evt: evt - }); + dragEl.style["will-change"] = "all"; + dragStartFn = function () { + pluginEvent("delayEnded", _this, { evt }); if (Sortable.eventCanceled) { _this._onDrop(); - return; - } // Delayed drag has been triggered + } + // Delayed drag has been triggered // we can re-enable the events: touchmove/mousemove - - _this._disableDelayedDragEvents(); if (!FireFox && _this.nativeDraggable) { dragEl.draggable = true; - } // Bind the events: dragstart/dragend - - - _this._triggerDragStart(evt, touch); // Drag start event + } + // Bind the events: dragstart/dragend + _this._triggerDragStart(evt, touch); + // Drag start event _dispatchEvent({ sortable: _this, - name: 'choose', - originalEvent: evt - }); // Chosen item - + name: "choose", + originalEvent: evt, + }); + // Chosen item toggleClass(dragEl, options.chosenClass, true); - }; // Disable "draggable" - + }; - options.ignore.split(',').forEach(function (criteria) { + // Disable "draggable" + options.ignore.split(",").forEach(function (criteria) { find(dragEl, criteria.trim(), _disableDraggable); }); - on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mouseup', _this._onDrop); - on(ownerDocument, 'touchend', _this._onDrop); - on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox) + on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent); + on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent); + on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent); + + on(ownerDocument, "mouseup", _this._onDrop); + on(ownerDocument, "touchend", _this._onDrop); + on(ownerDocument, "touchcancel", _this._onDrop); + + // Make dragEl draggable (must be before delay for FireFox) if (FireFox && this.nativeDraggable) { this.options.touchStartThreshold = 4; dragEl.draggable = true; } - pluginEvent('delayStart', this, { - evt: evt - }); // Delay is impossible for native DnD in Edge or IE + pluginEvent("delayStart", this, { evt }); - if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { + // Delay is impossible for native DnD in Edge or IE + if ( + options.delay && + (!options.delayOnTouchOnly || touch) && + (!this.nativeDraggable || !(Edge || IE11OrLess)) + ) { if (Sortable.eventCanceled) { this._onDrop(); - return; - } // If the user moves the pointer or let go the click or touch + } + // If the user moves the pointer or let go the click or touch // before the delay has been reached: // disable the delayed drag + on(ownerDocument, "mouseup", _this._disableDelayedDrag); + on(ownerDocument, "touchend", _this._disableDelayedDrag); + on(ownerDocument, "touchcancel", _this._disableDelayedDrag); + on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler); + on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler); + options.supportPointer && + on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler); - - on(ownerDocument, 'mouseup', _this._disableDelayedDrag); - on(ownerDocument, 'touchend', _this._disableDelayedDrag); - on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); - on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler); - on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler); - options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( - /** TouchEvent|PointerEvent **/ - e) { - var touch = e.touches ? e.touches[0] : e; - if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { + _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) { + let touch = e.touches ? e.touches[0] : e; + if ( + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) >= + Math.floor( + this.options.touchStartThreshold / + ((this.nativeDraggable && window.devicePixelRatio) || 1) + ) + ) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._disableDelayedDrag); - off(ownerDocument, 'touchend', this._disableDelayedDrag); - off(ownerDocument, 'touchcancel', this._disableDelayedDrag); - off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); + + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; + off(ownerDocument, "mouseup", this._disableDelayedDrag); + off(ownerDocument, "touchend", this._disableDelayedDrag); + off(ownerDocument, "touchcancel", this._disableDelayedDrag); + off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( - /** Event */ - evt, - /** Touch */ - touch) { - touch = touch || evt.pointerType == 'touch' && evt; + + _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) { + touch = touch || (evt.pointerType == "touch" && evt); if (!this.nativeDraggable || touch) { if (this.options.supportPointer) { - on(document, 'pointermove', this._onTouchMove); + on(document, "pointermove", this._onTouchMove); } else if (touch) { - on(document, 'touchmove', this._onTouchMove); + on(document, "touchmove", this._onTouchMove); } else { - on(document, 'mousemove', this._onTouchMove); + on(document, "mousemove", this._onTouchMove); } } else { - on(dragEl, 'dragend', this); - on(rootEl, 'dragstart', this._onDragStart); + on(dragEl, "dragend", this); + on(rootEl, "dragstart", this._onDragStart); } try { @@ -1547,47 +1653,54 @@ Sortable.prototype = } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; - if (rootEl && dragEl) { - pluginEvent('dragStarted', this, { - evt: evt - }); + pluginEvent("dragStarted", this, { evt }); if (this.nativeDraggable) { - on(document, 'dragover', _checkOutsideTargetEl); + on(document, "dragover", _checkOutsideTargetEl); } + let options = this.options; - var options = this.options; // Apply effect - + // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); + Sortable.active = this; - fallback && this._appendGhost(); // Drag start event + fallback && this._appendGhost(); + + // Drag start event _dispatchEvent({ sortable: this, - name: 'start', - originalEvent: evt + name: "start", + originalEvent: evt, }); } else { this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); + let parent = target; while (target && target.shadowRoot) { - target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + target = target.shadowRoot.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); if (target === parent) break; parent = target; } @@ -1597,12 +1710,13 @@ Sortable.prototype = if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; + inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target: target, - rootEl: parent + rootEl: parent, }); if (inserted && !this.options.dragoverBubble) { @@ -1611,34 +1725,53 @@ Sortable.prototype = } target = parent; // store last element - } - /* jshint boss:true */ - while (parent = parent.parentNode); + } while ( + /* jshint boss:true */ + (parent = parent.parentNode) + ); } _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( - /**TouchEvent*/ - evt) { - if (tapEvt) { - var options = this.options, - fallbackTolerance = options.fallbackTolerance, - fallbackOffset = options.fallbackOffset, - touch = evt.touches ? evt.touches[0] : evt, - ghostMatrix = ghostEl && matrix(ghostEl, true), - scaleX = ghostEl && ghostMatrix && ghostMatrix.a, - scaleY = ghostEl && ghostMatrix && ghostMatrix.d, - relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), - dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), - dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging + _onTouchMove: function (/**TouchEvent*/ evt) { + if (tapEvt) { + let options = this.options, + fallbackTolerance = options.fallbackTolerance, + fallbackOffset = options.fallbackOffset, + touch = evt.touches ? evt.touches[0] : evt, + ghostMatrix = ghostEl && matrix(ghostEl, true), + scaleX = ghostEl && ghostMatrix && ghostMatrix.a, + scaleY = ghostEl && ghostMatrix && ghostMatrix.d, + relativeScrollOffset = + PositionGhostAbsolutely && + ghostRelativeParent && + getRelativeScrollOffset(ghostRelativeParent), + dx = + (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + + (relativeScrollOffset + ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] + : 0) / + (scaleX || 1), + dy = + (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + + (relativeScrollOffset + ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] + : 0) / + (scaleY || 1); + + // only set the status to dragging, when we are actually dragging if (!Sortable.active && !awaitingDragStarted) { - if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) { + if ( + fallbackTolerance && + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) < fallbackTolerance + ) { return; } - this._onDragStart(evt, true); } @@ -1653,206 +1786,239 @@ Sortable.prototype = c: 0, d: 1, e: dx, - f: dy + f: dy, }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); - css(ghostEl, 'webkitTransform', cssMatrix); - css(ghostEl, 'mozTransform', cssMatrix); - css(ghostEl, 'msTransform', cssMatrix); - css(ghostEl, 'transform', cssMatrix); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; + + css(ghostEl, "webkitTransform", cssMatrix); + css(ghostEl, "mozTransform", cssMatrix); + css(ghostEl, "msTransform", cssMatrix); + css(ghostEl, "transform", cssMatrix); + lastDx = dx; lastDy = dy; + touchEvt = touch; } evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, - rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), - options = this.options; // Position absolutely + let container = this.options.fallbackOnBody ? document.body : rootEl, + rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), + options = this.options; + // Position absolutely if (PositionGhostAbsolutely) { // Get relatively positioned parent ghostRelativeParent = container; - while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) { + while ( + css(ghostRelativeParent, "position") === "static" && + css(ghostRelativeParent, "transform") === "none" && + ghostRelativeParent !== document + ) { ghostRelativeParent = ghostRelativeParent.parentNode; } - if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) { - if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement(); + if ( + ghostRelativeParent !== document.body && + ghostRelativeParent !== document.documentElement + ) { + if (ghostRelativeParent === document) + ghostRelativeParent = getWindowScrollingElement(); + rect.top += ghostRelativeParent.scrollTop; rect.left += ghostRelativeParent.scrollLeft; } else { ghostRelativeParent = getWindowScrollingElement(); } - - ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent); + ghostRelativeParentInitialScroll = getRelativeScrollOffset( + ghostRelativeParent + ); } ghostEl = dragEl.cloneNode(true); + toggleClass(ghostEl, options.ghostClass, false); toggleClass(ghostEl, options.fallbackClass, true); toggleClass(ghostEl, options.dragClass, true); - css(ghostEl, 'transition', ''); - css(ghostEl, 'transform', ''); - css(ghostEl, 'box-sizing', 'border-box'); - css(ghostEl, 'margin', 0); - css(ghostEl, 'top', rect.top); - css(ghostEl, 'left', rect.left); - css(ghostEl, 'width', rect.width); - css(ghostEl, 'height', rect.height); - css(ghostEl, 'opacity', '0.8'); - css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed'); - css(ghostEl, 'zIndex', '100000'); - css(ghostEl, 'pointerEvents', 'none'); + + css(ghostEl, "transition", ""); + css(ghostEl, "transform", ""); + + css(ghostEl, "box-sizing", "border-box"); + css(ghostEl, "margin", 0); + css(ghostEl, "top", rect.top); + css(ghostEl, "left", rect.left); + css(ghostEl, "width", rect.width); + css(ghostEl, "height", rect.height); + css(ghostEl, "opacity", "0.8"); + css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed"); + css(ghostEl, "zIndex", "100000"); + css(ghostEl, "pointerEvents", "none"); + Sortable.ghost = ghostEl; - container.appendChild(ghostEl); // Set transform-origin - css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); + container.appendChild(ghostEl); + + // Set transform-origin + css( + ghostEl, + "transform-origin", + (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 + + "% " + + (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 + + "%" + ); } }, - _onDragStart: function _onDragStart( - /**Event*/ - evt, - /**boolean*/ - fallback) { - var _this = this; - - var dataTransfer = evt.dataTransfer; - var options = _this.options; - pluginEvent('dragStart', this, { - evt: evt - }); + _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) { + let _this = this; + let dataTransfer = evt.dataTransfer; + let options = _this.options; + + pluginEvent("dragStart", this, { evt }); if (Sortable.eventCanceled) { this._onDrop(); - return; } - pluginEvent('setupClone', this); - + pluginEvent("setupClone", this); if (!Sortable.eventCanceled) { cloneEl = clone(dragEl); + cloneEl.draggable = false; - cloneEl.style['will-change'] = ''; + cloneEl.style["will-change"] = ""; this._hideClone(); toggleClass(cloneEl, this.options.chosenClass, false); Sortable.clone = cloneEl; - } // #1143: IFrame support workaround - + } + // #1143: IFrame support workaround _this.cloneId = _nextTick(function () { - pluginEvent('clone', _this); + pluginEvent("clone", _this); if (Sortable.eventCanceled) return; if (!_this.options.removeCloneOnHide) { rootEl.insertBefore(cloneEl, dragEl); } - _this._hideClone(); _dispatchEvent({ sortable: _this, - name: 'clone' + name: "clone", }); }); - !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events + !fallback && toggleClass(dragEl, options.dragClass, true); + + // Set proper drop events if (fallback) { ignoreNextClick = true; _this._loopId = setInterval(_this._emulateDragOver, 50); } else { // Undo what was set in _prepareDragStart before drag started - off(document, 'mouseup', _this._onDrop); - off(document, 'touchend', _this._onDrop); - off(document, 'touchcancel', _this._onDrop); + off(document, "mouseup", _this._onDrop); + off(document, "touchend", _this._onDrop); + off(document, "touchcancel", _this._onDrop); if (dataTransfer) { - dataTransfer.effectAllowed = 'move'; + dataTransfer.effectAllowed = "move"; options.setData && options.setData.call(_this, dataTransfer, dragEl); } - on(document, 'drop', _this); // #1276 fix: + on(document, "drop", _this); - css(dragEl, 'transform', 'translateZ(0)'); + // #1276 fix: + css(dragEl, "transform", "translateZ(0)"); } awaitingDragStarted = true; - _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt)); - on(document, 'selectstart', _this); + + _this._dragStartId = _nextTick( + _this._dragStarted.bind(_this, fallback, evt) + ); + on(document, "selectstart", _this); + moved = true; if (Safari) { - css(document.body, 'user-select', 'none'); + css(document.body, "user-select", "none"); } }, + // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( - /**Event*/ - evt) { - var el = this.el, - target = evt.target, - dragRect, - targetRect, - revert, - options = this.options, - group = options.group, - activeSortable = Sortable.active, - isOwner = activeGroup === group, - canSort = options.sort, - fromSortable = putSortable || activeSortable, - vertical, - _this = this, - completedFired = false; + _onDragOver: function (/**Event*/ evt) { + let el = this.el, + target = evt.target, + dragRect, + targetRect, + revert, + options = this.options, + group = options.group, + activeSortable = Sortable.active, + isOwner = activeGroup === group, + canSort = options.sort, + fromSortable = putSortable || activeSortable, + vertical, + _this = this, + completedFired = false; if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread({ - evt: evt, - isOwner: isOwner, - axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + pluginEvent(name, _this, { + evt, + isOwner, + axis: vertical ? "vertical" : "horizontal", + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + onMove(target, after) { + return onMove( + rootEl, + el, + dragEl, + dragRect, + target, + getRect(target), + evt, + after + ); }, - changed: changed - }, extra)); - } // Capture animation state - + changed, + ...extra, + }); + } + // Capture animation state function capture() { - dragOverEvent('dragOverAnimationCapture'); + dragOverEvent("dragOverAnimationCapture"); _this.captureAnimationState(); - if (_this !== fromSortable) { fromSortable.captureAnimationState(); } - } // Return invocation when dragEl is inserted (or completed) - + } + // Return invocation when dragEl is inserted (or completed) function completed(insertion) { - dragOverEvent('dragOverCompleted', { - insertion: insertion - }); + dragOverEvent("dragOverCompleted", { insertion }); if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -1864,7 +2030,13 @@ Sortable.prototype = if (_this !== fromSortable) { // Set ghost class to new sortable's ghost class - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : activeSortable.options.ghostClass, + false + ); toggleClass(dragEl, options.ghostClass, true); } @@ -1872,53 +2044,54 @@ Sortable.prototype = putSortable = _this; } else if (_this === Sortable.active && putSortable) { putSortable = null; - } // Animation - + } + // Animation if (fromSortable === _this) { _this._ignoreWhileAnimating = target; } - _this.animateAll(function () { - dragOverEvent('dragOverAnimationComplete'); + dragOverEvent("dragOverAnimationComplete"); _this._ignoreWhileAnimating = null; }); - if (_this !== fromSortable) { fromSortable.animateAll(); fromSortable._ignoreWhileAnimating = null; } - } // Null lastTarget if it is not inside a previously swapped element - + } - if (target === dragEl && !dragEl.animated || target === el && !target.animated) { + // Null lastTarget if it is not inside a previously swapped element + if ( + (target === dragEl && !dragEl.animated) || + (target === el && !target.animated) + ) { lastTarget = null; - } // no bubbling and not fallback - + } + // no bubbling and not fallback if (!options.dragoverBubble && !evt.rootEl && target !== document) { - dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted - + dragEl.parentNode[expando]._isOutsideThisEl(evt.target); + // Do not detect for empty insert if already inserted !insertion && nearestEmptyInsertDetectEvent(evt); } !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); - return completedFired = true; - } // Call when dragEl has been inserted + return (completedFired = true); + } + // Call when dragEl has been inserted function changed() { newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - _dispatchEvent({ sortable: _this, - name: 'change', + name: "change", toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, - originalEvent: evt + newIndex, + newDraggableIndex, + originalEvent: evt, }); } @@ -1927,30 +2100,48 @@ Sortable.prototype = } target = closest(target, options.draggable, el, true); - dragOverEvent('dragOver'); + + dragOverEvent("dragOver"); if (Sortable.eventCanceled) return completedFired; - if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) { + if ( + dragEl.contains(evt.target) || + (target.animated && target.animatingX && target.animatingY) || + _this._ignoreWhileAnimating === target + ) { return completed(false); } ignoreNextClick = false; - if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list - : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) { - vertical = this._getDirection(evt, target) === 'vertical'; + if ( + activeSortable && + !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : putSortable === this || + ((this.lastPutMode = activeGroup.checkPull( + this, + activeSortable, + dragEl, + evt + )) && + group.checkPut(this, activeSortable, dragEl, evt))) + ) { + vertical = this._getDirection(evt, target) === "vertical"; + dragRect = getRect(dragEl); - dragOverEvent('dragOverValid'); + + dragOverEvent("dragOverValid"); if (Sortable.eventCanceled) return completedFired; if (revert) { parentEl = rootEl; // actualization - capture(); this._hideClone(); - dragOverEvent('revert'); + dragOverEvent("revert"); if (!Sortable.eventCanceled) { if (nextEl) { @@ -1963,15 +2154,18 @@ Sortable.prototype = return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); - if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { + if ( + !elLastChild || + (_ghostIsLast(evt, vertical, this) && !elLastChild.animated) + ) { // If already at end of list: Do not insert if (elLastChild === dragEl) { return completed(false); - } // assign target only if condition is true - + } + // assign target only if condition is true if (elLastChild && el === evt.target) { target = elLastChild; } @@ -1980,7 +2174,18 @@ Sortable.prototype = targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if ( + onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + !!target + ) !== false + ) { capture(); el.appendChild(dragEl); parentEl = el; // actualization @@ -1990,45 +2195,78 @@ Sortable.prototype = } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, - targetBeforeFirstSwap, - differentLevel = dragEl.parentNode !== el, - differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), - side1 = vertical ? 'top' : 'left', - scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'), - scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; + let direction = 0, + targetBeforeFirstSwap, + differentLevel = dragEl.parentNode !== el, + differentRowCol = !_dragElInRowColumn( + (dragEl.animated && dragEl.toRect) || dragRect, + (target.animated && target.toRect) || targetRect, + vertical + ), + side1 = vertical ? "top" : "left", + scrolledPastTop = + isScrolledPast(target, "top", "top") || + isScrolledPast(dragEl, "top", "top"), + scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; if (lastTarget !== target) { targetBeforeFirstSwap = targetRect[side1]; pastFirstInvertThresh = false; - isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel; + isCircumstantialInvert = + (!differentRowCol && options.invertSwap) || differentLevel; } - direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + direction = _getSwapDirection( + evt, + target, + targetRect, + vertical, + differentRowCol ? 1 : options.swapThreshold, + options.invertedSwapThreshold == null + ? options.swapThreshold + : options.invertedSwapThreshold, + isCircumstantialInvert, + lastTarget === target + ); + + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; sibling = parentEl.children[dragIndex]; - } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl)); - } // If dragEl is already beside target: Do not insert - - + } while ( + sibling && + (css(sibling, "display") === "none" || sibling === ghostEl) + ); + } + // If dragEl is already beside target: Do not insert if (direction === 0 || sibling === target) { return completed(false); } lastTarget = target; + lastDirection = direction; - var nextSibling = target.nextElementSibling, - after = false; + + let nextSibling = target.nextElementSibling, + after = false; + after = direction === 1; - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + after + ); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2037,27 +2275,37 @@ Sortable.prototype = _silent = true; setTimeout(_unsilent, 30); + capture(); if (after && !nextSibling) { el.appendChild(dragEl); } else { - target.parentNode.insertBefore(dragEl, after ? nextSibling : target); - } // Undo chrome's scroll adjustment (has no effect on other browsers) - + target.parentNode.insertBefore( + dragEl, + after ? nextSibling : target + ); + } + // Undo chrome's scroll adjustment (has no effect on other browsers) if (scrolledPastTop) { - scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop); + scrollBy( + scrolledPastTop, + 0, + scrollBefore - scrolledPastTop.scrollTop + ); } parentEl = dragEl.parentNode; // actualization - // must be done before animation + // must be done before animation if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { - targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]); + targetMoveDistance = Math.abs( + targetBeforeFirstSwap - getRect(target)[side1] + ); } - changed(); + return completed(true); } } @@ -2069,70 +2317,75 @@ Sortable.prototype = return false; }, + _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { - off(document, 'mousemove', this._onTouchMove); - off(document, 'touchmove', this._onTouchMove); - off(document, 'pointermove', this._onTouchMove); - off(document, 'dragover', nearestEmptyInsertDetectEvent); - off(document, 'mousemove', nearestEmptyInsertDetectEvent); - off(document, 'touchmove', nearestEmptyInsertDetectEvent); + + _offMoveEvents: function () { + off(document, "mousemove", this._onTouchMove); + off(document, "touchmove", this._onTouchMove); + off(document, "pointermove", this._onTouchMove); + off(document, "dragover", nearestEmptyInsertDetectEvent); + off(document, "mousemove", nearestEmptyInsertDetectEvent); + off(document, "touchmove", nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._onDrop); - off(ownerDocument, 'touchend', this._onDrop); - off(ownerDocument, 'pointerup', this._onDrop); - off(ownerDocument, 'touchcancel', this._onDrop); - off(document, 'selectstart', this); + + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; + + off(ownerDocument, "mouseup", this._onDrop); + off(ownerDocument, "touchend", this._onDrop); + off(ownerDocument, "pointerup", this._onDrop); + off(ownerDocument, "touchcancel", this._onDrop); + off(document, "selectstart", this); }, - _onDrop: function _onDrop( - /**Event*/ - evt) { - var el = this.el, - options = this.options; // Get the index of the dragged element within its parent + _onDrop: function (/**Event*/ evt) { + let el = this.el, + options = this.options; + + // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); - pluginEvent('drop', this, { - evt: evt + + pluginEvent("drop", this, { + evt, }); - parentEl = dragEl && dragEl.parentNode; // Get again after plugin event + parentEl = dragEl && dragEl.parentNode; + + // Get again after plugin event newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); if (Sortable.eventCanceled) { this._nulling(); - return; } awaitingDragStarted = false; isCircumstantialInvert = false; pastFirstInvertThresh = false; + clearInterval(this._loopId); + clearTimeout(this._dragStartTimer); _cancelNextTick(this.cloneId); + _cancelNextTick(this._dragStartId); - _cancelNextTick(this._dragStartId); // Unbind events - - + // Unbind events if (this.nativeDraggable) { - off(document, 'drop', this); - off(el, 'dragstart', this._onDragStart); + off(document, "drop", this); + off(el, "dragstart", this._onDragStart); } - this._offMoveEvents(); - this._offUpEvents(); if (Safari) { - css(document.body, 'user-select', ''); + css(document.body, "user-select", ""); } - css(dragEl, 'transform', ''); + css(dragEl, "transform", ""); if (evt) { if (moved) { @@ -2142,34 +2395,45 @@ Sortable.prototype = ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { // Remove clone(s) - cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); + cloneEl && + cloneEl.parentNode && + cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { - off(dragEl, 'dragend', this); + off(dragEl, "dragend", this); } _disableDraggable(dragEl); + dragEl.style["will-change"] = ""; - dragEl.style['will-change'] = ''; // Remove classes + // Remove classes // ghostClass is added in dragStarted - if (moved && !awaitingDragStarted) { - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : this.options.ghostClass, + false + ); } + toggleClass(dragEl, this.options.chosenClass, false); - toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event - + // Drag stop event _dispatchEvent({ sortable: this, - name: 'unchoose', + name: "unchoose", toEl: parentEl, newIndex: null, newDraggableIndex: null, - originalEvent: evt + originalEvent: evt, }); if (rootEl !== parentEl) { @@ -2177,34 +2441,34 @@ Sortable.prototype = // Add event _dispatchEvent({ rootEl: parentEl, - name: 'add', + name: "add", toEl: parentEl, fromEl: rootEl, - originalEvent: evt - }); // Remove event - + originalEvent: evt, + }); + // Remove event _dispatchEvent({ sortable: this, - name: 'remove', + name: "remove", toEl: parentEl, - originalEvent: evt - }); // drag from one list and drop into another - + originalEvent: evt, + }); + // drag from one list and drop into another _dispatchEvent({ rootEl: parentEl, - name: 'sort', + name: "sort", toEl: parentEl, fromEl: rootEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } @@ -2215,16 +2479,16 @@ Sortable.prototype = // drag & drop within the same list _dispatchEvent({ sortable: this, - name: 'update', + name: "update", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); _dispatchEvent({ sortable: this, - name: 'sort', + name: "sort", toEl: parentEl, - originalEvent: evt + originalEvent: evt, }); } } @@ -2239,48 +2503,47 @@ Sortable.prototype = _dispatchEvent({ sortable: this, - name: 'end', + name: "end", toEl: parentEl, - originalEvent: evt - }); // Save sorting - + originalEvent: evt, + }); + // Save sorting this.save(); } } } - this._nulling(); }, - _nulling: function _nulling() { - pluginEvent('nulling', this); + + _nulling: function () { + pluginEvent("nulling", this); + rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; + savedInputChecked.forEach(function (el) { el.checked = true; }); + savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( - /**Event*/ - evt) { + + handleEvent: function (/**Event*/ evt) { switch (evt.type) { - case 'drop': - case 'dragend': + case "drop": + case "dragend": this._onDrop(evt); - break; - case 'dragenter': - case 'dragover': + case "dragenter": + case "dragover": if (dragEl) { this._onDragOver(evt); - _globalDragOver(evt); } - break; - case 'selectstart': + case "selectstart": evt.preventDefault(); break; } @@ -2290,17 +2553,16 @@ Sortable.prototype = * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], - el, - children = this.el.children, - i = 0, - n = children.length, - options = this.options; + toArray: function () { + let order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; for (; i < n; i++) { el = children[i]; - if (closest(el, options.draggable, this.el, false)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } @@ -2313,16 +2575,18 @@ Sortable.prototype = * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order) { - var items = {}, - rootEl = this.el; + sort: function (order) { + let items = {}, + rootEl = this.el; + this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; } }, this); + order.forEach(function (id) { if (items[id]) { rootEl.removeChild(items[id]); @@ -2334,8 +2598,8 @@ Sortable.prototype = /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2345,7 +2609,7 @@ Sortable.prototype = * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2355,21 +2619,20 @@ Sortable.prototype = * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); - - if (typeof modifiedValue !== 'undefined') { + let modifiedValue = PluginManager.modifyOption(this, name, value); + if (typeof modifiedValue !== "undefined") { options[name] = modifiedValue; } else { options[name] = value; } - if (name === 'group') { + if (name === "group") { _prepareGroup(options); } } @@ -2378,22 +2641,25 @@ Sortable.prototype = /** * Destroy */ - destroy: function destroy() { - pluginEvent('destroy', this); - var el = this.el; - el[expando] = null; - off(el, 'mousedown', this._onTapStart); - off(el, 'touchstart', this._onTapStart); - off(el, 'pointerdown', this._onTapStart); + destroy: function () { + pluginEvent("destroy", this); + let el = this.el; - if (this.nativeDraggable) { - off(el, 'dragover', this); - off(el, 'dragenter', this); - } // Remove draggable attributes + el[expando] = null; + off(el, "mousedown", this._onTapStart); + off(el, "touchstart", this._onTapStart); + off(el, "pointerdown", this._onTapStart); - Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { - el.removeAttribute('draggable'); + if (this.nativeDraggable) { + off(el, "dragover", this); + off(el, "dragenter", this); + } + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function ( + el + ) { + el.removeAttribute("draggable"); }); this._onDrop(); @@ -2401,33 +2667,35 @@ Sortable.prototype = this._disableDelayedDragEvents(); sortables.splice(sortables.indexOf(this.el), 1); + this.el = el = null; }, - _hideClone: function _hideClone() { + + _hideClone: function () { if (!cloneHidden) { - pluginEvent('hideClone', this); + pluginEvent("hideClone", this); if (Sortable.eventCanceled) return; - css(cloneEl, 'display', 'none'); + css(cloneEl, "display", "none"); if (this.options.removeCloneOnHide && cloneEl.parentNode) { cloneEl.parentNode.removeChild(cloneEl); } - cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { - if (putSortable.lastPutMode !== 'clone') { - this._hideClone(); + _showClone: function (putSortable) { + if (putSortable.lastPutMode !== "clone") { + this._hideClone(); return; } if (cloneHidden) { - pluginEvent('showClone', this); - if (Sortable.eventCanceled) return; // show clone at dragEl or original position + pluginEvent("showClone", this); + if (Sortable.eventCanceled) return; - if (rootEl.contains(dragEl) && !this.options.group.revertClone) { + // show clone at dragEl or original position + if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { rootEl.insertBefore(cloneEl, dragEl); } else if (nextEl) { rootEl.insertBefore(cloneEl, nextEl); @@ -2439,36 +2707,42 @@ Sortable.prototype = this.animate(dragEl, cloneEl); } - css(cloneEl, 'display', ''); + css(cloneEl, "display", ""); cloneHidden = false; } - } + }, }; -function _globalDragOver( -/**Event*/ -evt) { +function _globalDragOver(/**Event*/ evt) { if (evt.dataTransfer) { - evt.dataTransfer.dropEffect = 'move'; + evt.dataTransfer.dropEffect = "move"; } - evt.cancelable && evt.preventDefault(); } -function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, - sortable = fromEl[expando], - onMoveFn = sortable.options.onMove, - retVal; // Support for new CustomEvent feature - +function onMove( + fromEl, + toEl, + dragEl, + dragRect, + targetEl, + targetRect, + originalEvent, + willInsertAfter +) { + let evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + // Support for new CustomEvent feature if (window.CustomEvent && !IE11OrLess && !Edge) { - evt = new CustomEvent('move', { + evt = new CustomEvent("move", { bubbles: true, - cancelable: true + cancelable: true, }); } else { - evt = document.createEvent('Event'); - evt.initEvent('move', true, true); + evt = document.createEvent("Event"); + evt.initEvent("move", true, true); } evt.to = toEl; @@ -2478,7 +2752,9 @@ function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalE evt.related = targetEl || toEl; evt.relatedRect = targetRect || getRect(toEl); evt.willInsertAfter = willInsertAfter; + evt.originalEvent = originalEvent; + fromEl.dispatchEvent(evt); if (onMoveFn) { @@ -2497,32 +2773,56 @@ function _unsilent() { } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; - return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; + + return vertical + ? evt.clientX > rect.right + spacer || + (evt.clientX <= rect.right && + evt.clientY > rect.bottom && + evt.clientX >= rect.left) + : (evt.clientX > rect.right && evt.clientY > rect.top) || + (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer); } -function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, - targetLength = vertical ? targetRect.height : targetRect.width, - targetS1 = vertical ? targetRect.top : targetRect.left, - targetS2 = vertical ? targetRect.bottom : targetRect.right, - invert = false; +function _getSwapDirection( + evt, + target, + targetRect, + vertical, + swapThreshold, + invertedSwapThreshold, + invertSwap, + isLastTarget +) { + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, + targetLength = vertical ? targetRect.height : targetRect.width, + targetS1 = vertical ? targetRect.top : targetRect.left, + targetS2 = vertical ? targetRect.bottom : targetRect.right, + invert = false; if (!invertSwap) { // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 // check if past first invert threshold on side opposite of lastDirection - if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) { + if ( + !pastFirstInvertThresh && + (lastDirection === 1 + ? mouseOnAxis > targetS1 + (targetLength * invertedSwapThreshold) / 2 + : mouseOnAxis < targetS2 - (targetLength * invertedSwapThreshold) / 2) + ) { // past first invert threshold, do not restrict inverted threshold to dragEl shadow pastFirstInvertThresh = true; } if (!pastFirstInvertThresh) { // dragEl shadow (target move distance shadow) - if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow - : mouseOnAxis > targetS2 - targetMoveDistance) { + if ( + lastDirection === 1 + ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow + : mouseOnAxis > targetS2 - targetMoveDistance + ) { return -lastDirection; } } else { @@ -2530,7 +2830,10 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv } } else { // Regular - if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) { + if ( + mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 && + mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2 + ) { return _getInsertDirection(target); } } @@ -2540,21 +2843,23 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv if (invert) { // Invert of regular - if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) { + if ( + mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 || + mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2 + ) { return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1; } } return 0; } + /** * Gets the direction dragEl must be swapped relative to target in order to make it * seem that dragEl has been "inserted" into that element's position * @param {HTMLElement} target The target whose position dragEl is being inserted at * @return {Number} Direction dragEl must be swapped */ - - function _getInsertDirection(target) { if (index(dragEl) < index(target)) { return 1; @@ -2562,18 +2867,17 @@ function _getInsertDirection(target) { return -1; } } + /** * Generate id * @param {HTMLElement} el * @returns {String} * @private */ - - function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, - i = str.length, - sum = 0; + let str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; while (i--) { sum += str.charCodeAt(i); @@ -2584,11 +2888,12 @@ function _generateId(el) { function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + + let inputs = root.getElementsByTagName("input"); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2599,24 +2904,24 @@ function _nextTick(fn) { function _cancelNextTick(id) { return clearTimeout(id); -} // Fixed #973: - +} +// Fixed #973: if (documentExists) { - on(document, 'touchmove', function (evt) { + on(document, "touchmove", function (evt) { if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { evt.preventDefault(); } }); -} // Export utils - +} +// Export utils Sortable.utils = { on: on, off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2628,60 +2933,57 @@ Sortable.utils = { nextTick: _nextTick, cancelNextTick: _cancelNextTick, detectDirection: _detectDirection, - getChild: getChild + getChild: getChild, }; + /** * Get the Sortable instance of an element * @param {HTMLElement} element The element * @return {Sortable|undefined} The instance of Sortable */ - Sortable.get = function (element) { return element[expando]; }; + /** * Mount a plugin to Sortable * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted */ - - -Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - +Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + + plugins.forEach((plugin) => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call( + plugin + )}`; } + if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils }; - if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils); PluginManager.mount(plugin); }); }; + /** * Create sortable instance * @param {HTMLElement} el * @param {Object} [options] */ - - Sortable.create = function (el, options) { return new Sortable(el, options); -}; // Export - +}; +// Export Sortable.version = version; -var autoScrolls = [], - scrollEl, - scrollRootEl, - scrolling = false, - lastAutoScrollX, - lastAutoScrollY, - touchEvt$1, - pointerElemChangedInterval; +let autoScrolls = [], + scrollEl, + scrollRootEl, + scrolling = false, + lastAutoScrollX, + lastAutoScrollY, + touchEvt$1, + pointerElemChangedInterval; function AutoScrollPlugin() { function AutoScroll() { @@ -2689,106 +2991,123 @@ function AutoScrollPlugin() { scroll: true, scrollSensitivity: 30, scrollSpeed: 10, - bubbleScroll: true - }; // Bind all private methods + bubbleScroll: true, + }; - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ originalEvent }) { if (this.sortable.nativeDraggable) { - on(document, 'dragover', this._handleAutoScroll); + on(document, "dragover", this._handleAutoScroll); } else { if (this.options.supportPointer) { - on(document, 'pointermove', this._handleFallbackAutoScroll); + on(document, "pointermove", this._handleFallbackAutoScroll); } else if (originalEvent.touches) { - on(document, 'touchmove', this._handleFallbackAutoScroll); + on(document, "touchmove", this._handleFallbackAutoScroll); } else { - on(document, 'mousemove', this._handleFallbackAutoScroll); + on(document, "mousemove", this._handleFallbackAutoScroll); } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ originalEvent }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { - off(document, 'dragover', this._handleAutoScroll); + off(document, "dragover", this._handleAutoScroll); } else { - off(document, 'pointermove', this._handleFallbackAutoScroll); - off(document, 'touchmove', this._handleFallbackAutoScroll); - off(document, 'mousemove', this._handleFallbackAutoScroll); + off(document, "pointermove", this._handleFallbackAutoScroll); + off(document, "touchmove", this._handleFallbackAutoScroll); + off(document, "mousemove", this._handleFallbackAutoScroll); } clearPointerElemChangedInterval(); clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; + autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); - touchEvt$1 = evt; // IE does not seem to have native autoscroll, + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); + + touchEvt$1 = evt; + + // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, // Firefox and Chrome are good - if (fallback || Edge || IE11OrLess || Safari) { - autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - - var ogElemScroller = getParentAutoScrollElement(elem, true); - - if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { - pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); - + autoScroll(evt, this.options, elem, fallback); + + // Listener for pointer element change + let ogElemScroller = getParentAutoScrollElement(elem, true); + if ( + scrolling && + (!pointerElemChangedInterval || + x !== lastAutoScrollX || + y !== lastAutoScrollY) + ) { + pointerElemChangedInterval && clearPointerElemChangedInterval(); + // Detect for pointer elem change, emulating native DnD behaviour + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement( + document.elementFromPoint(x, y), + true + ); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; } } else { // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll - if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) { + if ( + !this.options.bubbleScroll || + getParentAutoScrollElement(elem, true) === getWindowScrollingElement() + ) { clearAutoScrolls(); return; } - - autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); + autoScroll( + evt, + this.options, + getParentAutoScrollElement(elem, false), + false + ); } - } + }, }; - return _extends(AutoScroll, { - pluginName: 'scroll', - initializeByDefault: true + + return Object.assign(AutoScroll, { + pluginName: "scroll", + initializeByDefault: true, }); } @@ -2803,20 +3122,24 @@ function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } -var autoScroll = throttle(function (evt, options, rootEl, isFallback) { +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, - scrollCustomFn; // New scroll root, set scrollEl + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + + let scrollThisInstance = false, + scrollCustomFn; + // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { scrollRootEl = rootEl; + clearAutoScrolls(); + scrollEl = options.scroll; scrollCustomFn = options.scrollFn; @@ -2825,105 +3148,136 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } } - var layersOut = 0; - var currentParent = scrollEl; - + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, - rect = getRect(el), - top = rect.top, - bottom = rect.bottom, - left = rect.left, - right = rect.right, - width = rect.width, - height = rect.height, - canScrollX = void 0, - canScrollY = void 0, - scrollWidth = el.scrollWidth, - scrollHeight = el.scrollHeight, - elCSS = css(el), - scrollPosX = el.scrollLeft, - scrollPosY = el.scrollTop; + let el = currentParent, + rect = getRect(el), + top = rect.top, + bottom = rect.bottom, + left = rect.left, + right = rect.right, + width = rect.width, + height = rect.height, + canScrollX, + canScrollY, + scrollWidth = el.scrollWidth, + scrollHeight = el.scrollHeight, + elCSS = css(el), + scrollPosX = el.scrollLeft, + scrollPosY = el.scrollTop; if (el === winScroller) { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible'); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || + elCSS.overflowX === "scroll" || + elCSS.overflowX === "visible"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || + elCSS.overflowY === "scroll" || + elCSS.overflowY === "visible"); } else { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); - } - - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll"); + } + + let vx = + canScrollX && + (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - + (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = + canScrollY && + (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - + (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } } } - if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { + if ( + autoScrolls[layersOut].vx != vx || + autoScrolls[layersOut].vy != vy || + autoScrolls[layersOut].el !== el + ) { autoScrolls[layersOut].el = el; autoScrolls[layersOut].vx = vx; autoScrolls[layersOut].vy = vy; + clearInterval(autoScrolls[layersOut].pid); if (vx != 0 || vy != 0) { scrollThisInstance = true; /* jshint loopfunc:true */ - - autoScrolls[layersOut].pid = setInterval(function () { - // emulate drag over during autoscroll (fallback), emulating native DnD behaviour - if (isFallback && this.layer === 0) { - Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely - - } - - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; - - if (typeof scrollCustomFn === 'function') { - if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { - return; + autoScrolls[layersOut].pid = setInterval( + function () { + // emulate drag over during autoscroll (fallback), emulating native DnD behaviour + if (isFallback && this.layer === 0) { + Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely + } + let scrollOffsetY = autoScrolls[this.layer].vy + ? autoScrolls[this.layer].vy * speed + : 0; + let scrollOffsetX = autoScrolls[this.layer].vx + ? autoScrolls[this.layer].vx * speed + : 0; + + if (typeof scrollCustomFn === "function") { + if ( + scrollCustomFn.call( + Sortable.dragged.parentNode[expando], + scrollOffsetX, + scrollOffsetY, + evt, + touchEvt$1, + autoScrolls[this.layer].el + ) !== "continue" + ) { + return; + } } - } - scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); - }.bind({ - layer: layersOut - }), 24); + scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); + }.bind({ layer: layersOut }), + 24 + ); } } - layersOut++; } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); - scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); -var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget, +}) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = + originalEvent.changedTouches && originalEvent.changedTouches.length + ? originalEvent.changedTouches[0] + : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); - if (toSortable && !toSortable.el.contains(target)) { - dispatchSortableEvent('spill'); - this.onSpill({ - dragEl: dragEl, - putSortable: putSortable - }); + dispatchSortableEvent("spill"); + this.onSpill({ dragEl, putSortable }); } }; @@ -2931,86 +3285,75 @@ function Revert() {} Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + dragStart({ oldDraggableIndex }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + onSpill({ dragEl, putSortable }) { this.sortable.captureAnimationState(); - if (putSortable) { putSortable.captureAnimationState(); } - - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); } else { this.sortable.el.appendChild(dragEl); } - this.sortable.animateAll(); - if (putSortable) { putSortable.animateAll(); } }, - drop: drop + drop, }; -_extends(Revert, { - pluginName: 'revertOnSpill' +Object.assign(Revert, { + pluginName: "revertOnSpill", }); function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ dragEl, putSortable }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + drop, }; -_extends(Remove, { - pluginName: 'removeOnSpill' +Object.assign(Remove, { + pluginName: "removeOnSpill", }); -var lastSwapEl; +let lastSwapEl; function SwapPlugin() { function Swap() { this.defaults = { - swapClass: 'sortable-swap-highlight' + swapClass: "sortable-swap-highlight", }; } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ dragEl }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel, + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, - options = this.options; - + let el = this.sortable.el, + options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; - + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); lastSwapEl = target; @@ -3022,207 +3365,197 @@ function SwapPlugin() { toggleClass(prevSwapEl, options.swapClass, false); } } - changed(); + completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + drop({ activeSortable, putSortable, dragEl }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); - - if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { + if ( + lastSwapEl && + (options.swap || (putSortable && putSortable.options.swap)) + ) { if (dragEl !== lastSwapEl) { toSortable.captureAnimationState(); - if (toSortable !== activeSortable) activeSortable.captureAnimationState(); + if (toSortable !== activeSortable) + activeSortable.captureAnimationState(); swapNodes(dragEl, lastSwapEl); + toSortable.animateAll(); if (toSortable !== activeSortable) activeSortable.animateAll(); } } }, - nulling: function nulling() { + nulling() { lastSwapEl = null; - } + }, }; - return _extends(Swap, { - pluginName: 'swap', - eventProperties: function eventProperties() { + + return Object.assign(Swap, { + pluginName: "swap", + eventProperties() { return { - swapItem: lastSwapEl + swapItem: lastSwapEl, }; - } + }, }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, - p2 = n2.parentNode, - i1, - i2; + let p1 = n1.parentNode, + p2 = n2.parentNode, + i1, + i2; + if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return; + i1 = index(n1); i2 = index(n2); if (p1.isEqualNode(p2) && i1 < i2) { i2++; } - p1.insertBefore(n2, p1.children[i1]); p2.insertBefore(n1, p2.children[i2]); } -var multiDragElements = [], - multiDragClones = [], - lastMultiDragSelect, - // for selection with modifier key down (SHIFT) -multiDragSortable, - initialFolding = false, - // Initial multi-drag fold when drag started -folding = false, - // Folding any other time -dragStarted = false, - dragEl$1, - clonesFromRect, - clonesHidden; +let multiDragElements = [], + multiDragClones = [], + lastMultiDragSelect, // for selection with modifier key down (SHIFT) + multiDragSortable, + initialFolding = false, // Initial multi-drag fold when drag started + folding = false, // Folding any other time + dragStarted = false, + dragEl$1, + clonesFromRect, + clonesHidden; function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } if (sortable.options.supportPointer) { - on(document, 'pointerup', this._deselectMultiDrag); + on(document, "pointerup", this._deselectMultiDrag); } else { - on(document, 'mouseup', this._deselectMultiDrag); - on(document, 'touchend', this._deselectMultiDrag); + on(document, "mouseup", this._deselectMultiDrag); + on(document, "touchend", this._deselectMultiDrag); } - on(document, 'keydown', this._checkKeyDown); - on(document, 'keyup', this._checkKeyUp); + on(document, "keydown", this._checkKeyDown); + on(document, "keyup", this._checkKeyUp); + this.defaults = { - selectedClass: 'sortable-selected', + selectedClass: "sortable-selected", multiDragKey: null, - setData: function setData(dataTransfer, dragEl) { - var data = ''; - + setData(dataTransfer, dragEl) { + let data = ""; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { - data += (!i ? '' : ', ') + multiDragElement.textContent; + multiDragElements.forEach((multiDragElement, i) => { + data += (!i ? "" : ", ") + multiDragElement.textContent; }); } else { data = dragEl.textContent; } - - dataTransfer.setData('Text', data); - } + dataTransfer.setData("Text", data); + }, }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ dragEl: dragged }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; - if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + setupClone({ sortable, cancel }) { + if (!this.isMultiDrag) return; + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); + multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; + multiDragClones[i].draggable = false; - multiDragClones[i].style['will-change'] = ''; + multiDragClones[i].style["will-change"] = ""; + toggleClass(multiDragClones[i], this.options.selectedClass, false); - multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false); + multiDragElements[i] === dragEl$1 && + toggleClass(multiDragClones[i], this.options.chosenClass, false); } sortable._hideClone(); - cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; - if (!this.isMultiDrag) return; + clone({ sortable, rootEl, dispatchSortableEvent, cancel }) { + if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { if (multiDragElements.length && multiDragSortable === sortable) { insertMultiDragClones(true, rootEl); - dispatchSortableEvent('clone'); + dispatchSortableEvent("clone"); + cancel(); } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ cloneNowShown, rootEl, cancel }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { - css(clone, 'display', ''); + multiDragClones.forEach((clone) => { + css(clone, "display", ""); }); + cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ sortable, cloneNowHidden, cancel }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { - css(clone, 'display', 'none'); - - if (_this.options.removeCloneOnHide && clone.parentNode) { + multiDragClones.forEach((clone) => { + css(clone, "display", "none"); + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); + cloneNowHidden(); clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ sortable }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.sortableIndex = index(multiDragElement); - }); // Sort multi-drag elements + }); + // Sort multi-drag elements multiDragElements = multiDragElements.sort(function (a, b) { return a.sortableIndex - b.sortableIndex; }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ sortable }) { if (!this.isMultiDrag) return; - if (this.options.sort) { // Capture rects, // hide multi drag elements (by positioning them absolute), @@ -3230,101 +3563,110 @@ function MultiDragPlugin() { // show multi drag elements, // animate to rects, // unset rects & remove from DOM + sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - css(multiDragElement, 'position', 'absolute'); + css(multiDragElement, "position", "absolute"); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + + let dragRect = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); + folding = true; initialFolding = true; } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); - } // Remove all auxiliary multidrag items from el, if sorting enabled - + } - if (_this2.options.sort) { + // Remove all auxiliary multidrag items from el, if sorting enabled + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ target, completed, cancel }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ fromSortable, rootEl, sortable, dragRect }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { sortable.addAnimationState({ target: multiDragElement, - rect: folding ? getRect(multiDragElement) : dragRect + rect: folding ? getRect(multiDragElement) : dragRect, }); + unsetRect(multiDragElement); + multiDragElement.fromRect = dragRect; + fromSortable.removeAnimationState(multiDragElement); }); folding = false; insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable, + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly if (isOwner) { activeSortable._hideClone(); } - initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location - - if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { + initialFolding = false; + // If leaving sort:false root, or already folding - Fold to new location + if ( + options.animation && + multiDragElements.length > 1 && + (folding || + (!isOwner && !activeSortable.options.sort && !putSortable)) + ) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted - // while folding, and so that we can capture them again because old sortable will no longer be fromSortable + setRect(multiDragElement, dragRectAbsolute); + // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted + // while folding, and so that we can capture them again because old sortable will no longer be fromSortable parentEl.appendChild(multiDragElement); }); - folding = true; - } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out + folding = true; + } + // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out if (!isOwner) { // Only remove if not folding (folding will remove them anyways) if (!folding) { @@ -3332,17 +3674,21 @@ function MultiDragPlugin() { } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; - - activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden - + let clonesHiddenBefore = clonesHidden; + activeSortable._showClone(sortable); - if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + // Unfold animation for clones if showing from hidden + if ( + activeSortable.options.animation && + !clonesHidden && + clonesHiddenBefore + ) { + multiDragClones.forEach((clone) => { activeSortable.addAnimationState({ target: clone, - rect: clonesFromRect + rect: clonesFromRect, }); + clone.fromRect = clonesFromRect; clone.thisAnimationDuration = null; }); @@ -3353,66 +3699,81 @@ function MultiDragPlugin() { } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; }); - if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { - clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + if ( + activeSortable.options.animation && + !isOwner && + activeSortable.multiDrag.isMultiDrag + ) { + clonesFromRect = Object.assign({}, dragRect); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable, + }) { + let toSortable = putSortable || this.sortable; + if (!evt) return; - var options = this.options, - children = parentEl.children; // Multi-drag selection + let options = this.options, + children = parentEl.children; + + // Multi-drag selection if (!dragStarted) { if (options.multiDragKey && !this.multiDragKeyDown) { this._deselectMultiDrag(); } - - toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1)); + toggleClass( + dragEl$1, + options.selectedClass, + !~multiDragElements.indexOf(dragEl$1) + ); if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: dragEl$1, - originalEvt: evt - }); // Modifier activated, select from last to dragEl + originalEvt: evt, + }); - if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), - currentIndex = index(dragEl$1); + // Modifier activated, select from last to dragEl + if ( + evt.shiftKey && + lastMultiDragSelect && + sortable.el.contains(lastMultiDragSelect) + ) { + let lastIndex = index(lastMultiDragSelect), + currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; - + let n, i; if (currentIndex > lastIndex) { i = lastIndex; n = currentIndex; @@ -3425,12 +3786,13 @@ function MultiDragPlugin() { if (~multiDragElements.indexOf(children[i])) continue; toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); + dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'select', + sortable, + rootEl, + name: "select", targetEl: children[i], - originalEvt: evt + originalEvt: evt, }); } } @@ -3443,222 +3805,256 @@ function MultiDragPlugin() { multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, - name: 'deselect', + sortable, + rootEl, + name: "deselect", targetEl: dragEl$1, - originalEvt: evt + originalEvt: evt, }); } - } // Multi-drag drop - + } + // Multi-drag drop if (dragStarted && this.isMultiDrag) { // Do not "unfold" after around dragEl if reverted - if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), - multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); - if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; + if ( + (parentEl[expando].options.sort || parentEl !== rootEl) && + multiDragElements.length > 1 + ) { + let dragRect = getRect(dragEl$1), + multiDragIndex = index( + dragEl$1, + ":not(." + this.options.selectedClass + ")" + ); + + if (!initialFolding && options.animation) + dragEl$1.thisAnimationDuration = null; + toSortable.captureAnimationState(); if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { multiDragElement.thisAnimationDuration = null; - if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; - multiDragElement.fromRect = rect; // Prepare unfold animation + let rect = folding ? getRect(multiDragElement) : dragRect; + multiDragElement.fromRect = rect; + // Prepare unfold animation toSortable.addAnimationState({ target: multiDragElement, - rect: rect + rect: rect, }); } }); - } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert - // properly they must all be removed - + } + // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert + // properly they must all be removed removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + + multiDragElements.forEach((multiDragElement) => { if (children[multiDragIndex]) { - parentEl.insertBefore(multiDragElement, children[multiDragIndex]); + parentEl.insertBefore( + multiDragElement, + children[multiDragIndex] + ); } else { parentEl.appendChild(multiDragElement); } - multiDragIndex++; - }); // If initial folding is done, the elements may have changed position because they are now + }); + + // If initial folding is done, the elements may have changed position because they are now // unfolding around dragEl, even though dragEl may not have his index changed, so update event // must be fired here as Sortable will not. - if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { - if (multiDragElement.sortableIndex !== index(multiDragElement)) { + let update = false; + multiDragElements.forEach((multiDragElement) => { + if ( + multiDragElement.sortableIndex !== index(multiDragElement) + ) { update = true; return; } }); if (update) { - dispatchSortableEvent('update'); + dispatchSortableEvent("update"); } } - } // Must be done after capturing individual rects (scroll bar) - + } - multiDragElements.forEach(function (multiDragElement) { + // Must be done after capturing individual rects (scroll bar) + multiDragElements.forEach((multiDragElement) => { unsetRect(multiDragElement); }); + toSortable.animateAll(); } multiDragSortable = toSortable; - } // Remove clones if necessary - + } - if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + // Remove clones if necessary + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { + multiDragClones.forEach((clone) => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); + off(document, "pointerup", this._deselectMultiDrag); + off(document, "mouseup", this._deselectMultiDrag); + off(document, "touchend", this._deselectMultiDrag); - off(document, 'pointerup', this._deselectMultiDrag); - off(document, 'mouseup', this._deselectMultiDrag); - off(document, 'touchend', this._deselectMultiDrag); - off(document, 'keydown', this._checkKeyDown); - off(document, 'keyup', this._checkKeyUp); + off(document, "keydown", this._checkKeyDown); + off(document, "keyup", this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { - if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable - if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable + _deselectMultiDrag(evt) { + if (typeof dragStarted !== "undefined" && dragStarted) return; - if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click + // Only deselect if selection is in this sortable + if (multiDragSortable !== this.sortable) return; + // Only deselect if target is not item in this sortable + if ( + evt && + closest(evt.target, this.options.draggable, this.sortable.el, false) + ) + return; + + // Only deselect if left click if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ sortable: this.sortable, rootEl: this.sortable.el, - name: 'deselect', + name: "deselect", targetEl: el, - originalEvt: evt + originalEvt: evt, }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } - } + }, }; - return _extends(MultiDrag, { + + return Object.assign(MultiDrag, { // Static methods & properties - pluginName: 'multiDrag', + pluginName: "multiDrag", utils: { /** * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; - if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; - + select(el) { + let sortable = el.parentNode[expando]; + if ( + !sortable || + !sortable.options.multiDrag || + ~multiDragElements.indexOf(el) + ) + return; if (multiDragSortable && multiDragSortable !== sortable) { multiDragSortable.multiDrag._deselectMultiDrag(); - multiDragSortable = sortable; } - toggleClass(el, sortable.options.selectedClass, true); multiDragElements.push(el); }, - /** * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], - index = multiDragElements.indexOf(el); + deselect(el) { + let sortable = el.parentNode[expando], + index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); - } + }, }, - eventProperties: function eventProperties() { - var _this3 = this; + eventProperties() { + const oldIndicies = [], + newIndicies = []; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { oldIndicies.push({ - multiDragElement: multiDragElement, - index: multiDragElement.sortableIndex - }); // multiDragElements will already be sorted if folding - - var newIndex; + multiDragElement, + index: multiDragElement.sortableIndex, + }); + // multiDragElements will already be sorted if folding + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index( + multiDragElement, + ":not(." + this.options.selectedClass + ")" + ); } else { newIndex = index(multiDragElement); } - newIndicies.push({ - multiDragElement: multiDragElement, - index: newIndex + multiDragElement, + index: newIndex, }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies, }; }, optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); - - if (key === 'ctrl') { - key = 'Control'; + if (key === "ctrl") { + key = "Control"; } else if (key.length > 1) { key = key.charAt(0).toUpperCase() + key.substr(1); } - return key; - } - } + }, + }, }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; - + multiDragElements.forEach((multiDragElement, i) => { + let target = + rootEl.children[ + multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0) + ]; if (target) { rootEl.insertBefore(multiDragElement, target); } else { @@ -3666,17 +4062,16 @@ function insertMultiDragElements(clonesInserted, rootEl) { } }); } + /** * Insert multi-drag clones * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted * @param {HTMLElement} rootEl */ - - function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; - + multiDragClones.forEach((clone, i) => { + let target = + rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); } else { @@ -3686,9 +4081,10 @@ function insertMultiDragClones(elementsInserted, rootEl) { } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach((multiDragElement) => { if (multiDragElement === dragEl$1) return; - multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); + multiDragElement.parentNode && + multiDragElement.parentNode.removeChild(multiDragElement); }); } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index dbc696bd5..000000000 --- a/package-lock.json +++ /dev/null @@ -1,5704 +0,0 @@ -{ - "name": "sortablejs", - "version": "1.10.1", - "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==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "@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==", - "dev": true, - "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.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@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==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@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==", - "dev": true, - "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.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", - "dev": true, - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", - "dev": true - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", - "dev": true, - "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==", - "dev": true, - "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.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@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.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@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==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", - "dev": true, - "requires": { - "regexp-tree": "^0.1.6" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-assign": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz", - "integrity": "sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", - "dev": true, - "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.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^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.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.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.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@types/error-stack-parser": { - "version": "1.3.18", - "resolved": "https://registry.npmjs.org/@types/error-stack-parser/-/error-stack-parser-1.3.18.tgz", - "integrity": "sha1-4ByfjIXKg7YQMgxiJYsMkCat4Pc=", - "dev": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.135", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.135.tgz", - "integrity": "sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", - "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, - "acorn-hammerhead": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/acorn-hammerhead/-/acorn-hammerhead-0.2.0.tgz", - "integrity": "sha512-kbX1s/0ZikW0WEBY6IrooFgX3AP2D9ycTg0OhxRYLF0Tew/bDK2+8lTxFR4cDdoCZm6Ax8eVf8EV6gbTtr8EYQ==", - "dev": true, - "requires": { - "@types/estree": "^0.0.39" - } - }, - "adm-zip": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", - "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", - "dev": true - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.6.tgz", - "integrity": "sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg=", - "dev": true - }, - "async-exit-hook": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-1.1.2.tgz", - "integrity": "sha1-gJXXXkiMKazuBVH+hyUhadeJz7o=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - } - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-for-of-as-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-for-of-as-array/-/babel-plugin-transform-for-of-as-array-1.1.1.tgz", - "integrity": "sha512-eE4hZJhOUKpX0q/X3adR8B4hLox+t8oe4ZqmhANUmv4cds07AbWt6O0rtFXK7PKFPPnW4nz/5mpbkPMkflyGeg==", - "dev": true - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - }, - "dependencies": { - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - } - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - } - } - }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "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=", - "dev": true - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-v8-flags-filter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bin-v8-flags-filter/-/bin-v8-flags-filter-1.2.0.tgz", - "integrity": "sha512-g8aeYkY7GhyyKRvQMBsJQZjhm2iCX3dKYvfrMpwVR8IxmUGrkpCBFoKbB9Rh0o3sTLCjU/1tFpZ4C7j3f+D+3g==", - "dev": true - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bowser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.6.0.tgz", - "integrity": "sha1-N/w4e2Fstq7zcNq01r1AK3TFxU0=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brotli": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.2.tgz", - "integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=", - "dev": true, - "requires": { - "base64-js": "^1.1.2" - } - }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" - } - }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsite-record": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/callsite-record/-/callsite-record-4.1.3.tgz", - "integrity": "sha512-otAcPmu8TiHZ38cIL3NjQa1nGoSQRRe8WDDUgj5ZUwJWn1wzOYBwVSJbpVyzZ0sesQeKlYsPu9DG70fhh6AK9g==", - "dev": true, - "requires": { - "@types/error-stack-parser": "^1.3.18", - "@types/lodash": "^4.14.72", - "callsite": "^1.0.0", - "chalk": "^2.4.0", - "error-stack-parser": "^1.3.3", - "highlight-es": "^1.0.0", - "lodash": "4.6.1 || ^4.16.1", - "pinkie-promise": "^2.0.0" - } - }, - "caniuse-lite": { - "version": "1.0.30000971", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", - "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chrome-emulated-devices-list": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/chrome-emulated-devices-list/-/chrome-emulated-devices-list-0.1.1.tgz", - "integrity": "sha512-wQu6YKNTNGaUXovpkvXLnfeumVK47r2TKpOuCTwOKv/5SmRzfHual+E+oDIwS3KFWAcJPAhoNRAOLvXwzC6/pw==", - "dev": true - }, - "chrome-remote-interface": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.25.7.tgz", - "integrity": "sha512-6zI6LbR2IiGmduFZededaerEr9hHXabxT/L+fRrdq65a0CfyLMzpq0BKuZiqN0Upqcacsb6q2POj7fmobwBsEA==", - "dev": true, - "requires": { - "commander": "2.11.x", - "ws": "3.3.x" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - } - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "coffeescript": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.4.1.tgz", - "integrity": "sha512-34GV1aHrsMpTaO3KfMJL40ZNuvKDR/g98THHnE9bQj8HjMaZvSrLik99WWqyMhRtbe8V5hpx5iLgdcSvM/S2wg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", - "dev": true - }, - "core-js-compat": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.2.tgz", - "integrity": "sha512-X0Ch5f6itrHxhg5HSJucX6nNLNAGr+jq+biBh6nPGc3YAWz2a8p/ZIZY8cUkDzSRNG54omAuu3hoEF8qZbu/6Q==", - "dev": true, - "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.2", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", - "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.2.tgz", - "integrity": "sha512-5ckIdBF26B3ldK9PM177y2ZcATP2oweam9RskHSoqfZCrJ2As6wVg8zJ1zTriFsZf6clj/N1ThDFRGaomMsh9w==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - } - }, - "crypto-md5": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-md5/-/crypto-md5-1.0.0.tgz", - "integrity": "sha1-zMjadQx1PH7curxUKWdHKjhOhrs=", - "dev": true - }, - "css": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", - "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "source-map": "^0.1.38", - "source-map-resolve": "^0.5.1", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.4.0.tgz", - "integrity": "sha1-h979BAvUwVldljKC7FfzwqhSVkI=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "desired-capabilities": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/desired-capabilities/-/desired-capabilities-0.1.0.tgz", - "integrity": "sha1-84YNEu3g2sgZpHzJWaaMULqbqD4=", - "dev": true, - "requires": { - "extend": "^3.0.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz", - "integrity": "sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw==", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "emittery": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "endpoint-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/endpoint-utils/-/endpoint-utils-1.0.2.tgz", - "integrity": "sha1-CAjDNppyfNeWejn/NOvJJriBRqg=", - "dev": true, - "requires": { - "ip": "^1.1.3", - "pinkie-promise": "^1.0.0" - }, - "dependencies": { - "pinkie": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", - "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", - "dev": true - }, - "pinkie-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", - "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", - "dev": true, - "requires": { - "pinkie": "^1.0.0" - } - } - } - }, - "error-stack-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", - "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", - "dev": true, - "requires": { - "stackframe": "^0.3.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esotope-hammerhead": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/esotope-hammerhead/-/esotope-hammerhead-0.2.1.tgz", - "integrity": "sha512-IicdvCt1BIFTIM4nbjxGp98whIakOYZ4lA0UaDXnXpJpB11jYBX11Uv3x2f5ncSlFmxyZRdrN5skH5wK4TCWFQ==", - "dev": true, - "requires": { - "@types/estree": "^0.0.39" - } - }, - "estree-walker": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", - "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, - "graphlib": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.7.tgz", - "integrity": "sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==", - "dev": true, - "requires": { - "lodash": "^4.17.5" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "highlight-es": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", - "integrity": "sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==", - "dev": true, - "requires": { - "chalk": "^2.4.0", - "is-es2016-keyword": "^1.0.0", - "js-tokens": "^3.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "iconv-lite": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz", - "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4=", - "dev": true - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true - }, - "indent-string": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", - "integrity": "sha1-25m8xYPrarux5I3LsZmamGBBy2s=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0", - "repeating": "^1.1.0" - }, - "dependencies": { - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - } - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", - "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=", - "dev": true - }, - "is-es2016-keyword": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz", - "integrity": "sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } - } - }, - "is-jquery-obj": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-jquery-obj/-/is-jquery-obj-0.1.1.tgz", - "integrity": "sha512-18toSebUVF7y717dgw/Dzn6djOCqrkiDp3MhB8P6TdKyCVkbD1ZwE7Uz8Hwx6hUPTvKjbyYH9ncXT4ts4qLaSA==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "linux-platform-info": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/linux-platform-info/-/linux-platform-info-0.0.3.tgz", - "integrity": "sha1-La4yQ4Xmbj11W+yD+Gx77qYc64M=", - "dev": true, - "requires": { - "os-family": "^1.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "log-update-async-hook": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/log-update-async-hook/-/log-update-async-hook-2.0.2.tgz", - "integrity": "sha512-HQwkKFTZeUOrDi1Duf2CSUa/pSpcaCHKLdx3D/Z16DsipzByOBffcg5y0JZA1q0n80dYgLXe2hFM9JGNgBsTDw==", - "dev": true, - "requires": { - "ansi-escapes": "^2.0.0", - "async-exit-hook": "^1.1.2", - "onetime": "^2.0.1", - "wrap-ansi": "^2.1.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.3.tgz", - "integrity": "sha1-UczQtPwMhDWH16VwnOTTt2Kb7cU=", - "dev": true - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-reverse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-reverse/-/map-reverse-1.0.1.tgz", - "integrity": "sha1-J06fUAphEVMYO1uNhJCpwcI+4xA=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "match-url-wildcard": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/match-url-wildcard/-/match-url-wildcard-0.0.4.tgz", - "integrity": "sha512-R1XhQaamUZPWLOPtp4ig5j+3jctN+skhgRmEQTUamMzmNtRG69QEirQs0NZKLtHMR7tzWpmtnS4Eqv65DcgXUA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "dev": true - }, - "moment-duration-format-commonjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/moment-duration-format-commonjs/-/moment-duration-format-commonjs-1.0.0.tgz", - "integrity": "sha512-MVFR4hIh4jfuwSCPBEE5CCwn3refvTsxK/Yv/DpKJ6YcNnCimlVJ6DQeTJG1KVQPw1o8m3tkbHE9gVjivyv9iA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", - "dev": true - }, - "nanoid": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-1.3.4.tgz", - "integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "node-releases": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.21.tgz", - "integrity": "sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-version": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", - "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "os-family": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/os-family/-/os-family-1.1.0.tgz", - "integrity": "sha512-E3Orl5pvDJXnVmpaAA2TeNNpNhTMl4o5HghuWhOivBjEiTnJSrMYSa5uZMek1lBEvu8kKEsa2YgVcGFVDqX/9w==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promisify-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promisify-event/-/promisify-event-1.0.0.tgz", - "integrity": "sha1-vXUj6ga3AWLzcJeQFrU6aGxg6Q8=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", - "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "qrcode-terminal": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.10.0.tgz", - "integrity": "sha1-p2pI4mEKGPl/o6K9UytoKs/4bFM=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "read-file-relative": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/read-file-relative/-/read-file-relative-1.2.0.tgz", - "integrity": "sha1-mPfZbqoh0rTHov69Y9L8jPNen5s=", - "dev": true, - "requires": { - "callsite": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", - "dev": true, - "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==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replicator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/replicator/-/replicator-1.0.3.tgz", - "integrity": "sha512-WsKsraaM0x0QHy5CtzdgFXUxyowoBhyNkmPqmZShW6h+rOWnyT6Od3zRdTX9r616rAA6kDC9MKQGnSM/CJKfVQ==", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-1.0.0.tgz", - "integrity": "sha1-Tq7qQe0EDRcCRX32SkKysH0kb58=", - "dev": true, - "requires": { - "resolve-from": "^2.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.12.3.tgz", - "integrity": "sha512-ueWhPijWN+GaPgD3l77hXih/gcDXmYph6sWeQegwBYtaqAE834e8u+MC2wT6FKIUsz1DBOyOXAQXUZB+rjWDoQ==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "@types/node": "^12.0.2", - "acorn": "^6.1.1" - } - }, - "rollup-plugin-babel": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz", - "integrity": "sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.3.0" - } - }, - "rollup-plugin-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", - "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", - "dev": true, - "requires": { - "rollup-pluginutils": "^2.5.0" - } - }, - "rollup-plugin-node-resolve": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.0.0.tgz", - "integrity": "sha512-JUFr7DkFps3div9DYwpSg0O+s8zuSSRASUZUVNx6h6zhw2m8vcpToeS68JDPsFbmisMVSMYK0IxftngCRv7M9Q==", - "dev": true, - "requires": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.10.1", - "rollup-pluginutils": "^2.7.0" - } - }, - "rollup-pluginutils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.7.1.tgz", - "integrity": "sha512-3nRf3buQGR9qz/IsSzhZAJyoK663kzseps8itkYHr+Z7ESuaffEPfgRinxbCRA0pf0gzLqkNKkSb8aNVTq75NA==", - "dev": true, - "requires": { - "estree-walker": "^0.6.0", - "micromatch": "^3.1.10" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", - "dev": true, - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "sauce-connect-launcher": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.7.tgz", - "integrity": "sha512-v07+QhFrxgz3seMFuRSonu3gW1s6DbcLQlFhjsRrmKUauzPbbudHdnn91WYgEwhoZVdPNzeZpAEJwcQyd9xnTA==", - "dev": true, - "requires": { - "adm-zip": "~0.4.3", - "async": "^2.1.2", - "https-proxy-agent": "^2.2.1", - "lodash": "^4.16.6", - "rimraf": "^2.5.4" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - } - } - }, - "saucelabs-connector": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/saucelabs-connector/-/saucelabs-connector-0.3.0.tgz", - "integrity": "sha512-r0PWFUZeWMoWaKWhvnaHpro5VfpLbg+avKdjb0bs+xSTNh4S6sgjVJMhM8vSjOXog2DjZVe1Agv4Ta5GCMLMog==", - "dev": true, - "requires": { - "babel-runtime": "^5.8.20", - "lodash": "^4.13.1", - "os-family": "^1.0.0", - "pify": "^2.3.0", - "pinkie": "^2.0.4", - "read-file-relative": "^1.2.0", - "request": "^2.67.0", - "sauce-connect-launcher": "^1.2.5", - "wd": "^1.2.0" - }, - "dependencies": { - "babel-runtime": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", - "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", - "dev": true, - "requires": { - "core-js": "^1.0.0" - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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 - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stackframe": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", - "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "testcafe": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/testcafe/-/testcafe-1.3.1.tgz", - "integrity": "sha512-5IkyFxKBdrUut9JEmGR8lU4qbxL9N9F/3yNJqfLF29bpRfrmJY2FZdAYQ1iHEayfCcSTxQxcqRCEkVsmRTaI4g==", - "dev": true, - "requires": { - "@types/node": "^10.12.19", - "async-exit-hook": "^1.1.2", - "babel-core": "^6.22.1", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-for-of-as-array": "^1.1.1", - "babel-plugin-transform-runtime": "^6.22.0", - "babel-preset-env": "^1.1.8", - "babel-preset-flow": "^6.23.0", - "babel-preset-stage-2": "^6.22.0", - "babel-runtime": "^6.22.0", - "bin-v8-flags-filter": "^1.1.2", - "callsite": "^1.0.0", - "callsite-record": "^4.0.0", - "chai": "^4.1.2", - "chalk": "^1.1.0", - "chrome-emulated-devices-list": "^0.1.0", - "chrome-remote-interface": "^0.25.3", - "coffeescript": "^2.3.1", - "commander": "^2.8.1", - "debug": "^2.2.0", - "dedent": "^0.4.0", - "del": "^3.0.0", - "elegant-spinner": "^1.0.1", - "emittery": "^0.4.1", - "endpoint-utils": "^1.0.2", - "error-stack-parser": "^1.3.6", - "globby": "^9.2.0", - "graceful-fs": "^4.1.11", - "graphlib": "^2.1.5", - "import-lazy": "^3.1.0", - "indent-string": "^1.2.2", - "is-ci": "^1.0.10", - "is-docker": "^1.1.0", - "is-glob": "^2.0.1", - "is-stream": "^1.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "log-update-async-hook": "^2.0.2", - "make-dir": "^1.3.0", - "map-reverse": "^1.0.1", - "moment": "^2.10.3", - "moment-duration-format-commonjs": "^1.0.0", - "mustache": "^2.1.2", - "nanoid": "^1.0.1", - "node-version": "^1.0.0", - "os-family": "^1.0.0", - "parse5": "^1.5.0", - "pify": "^2.3.0", - "pinkie": "^2.0.4", - "pngjs": "^3.3.1", - "promisify-event": "^1.0.0", - "qrcode-terminal": "^0.10.0", - "read-file-relative": "^1.2.0", - "replicator": "^1.0.3", - "resolve-cwd": "^1.0.0", - "resolve-from": "^4.0.0", - "sanitize-filename": "^1.6.0", - "source-map-support": "^0.5.5", - "strip-bom": "^2.0.0", - "testcafe-browser-tools": "1.6.8", - "testcafe-hammerhead": "14.6.10", - "testcafe-legacy-api": "3.1.11", - "testcafe-reporter-json": "^2.1.0", - "testcafe-reporter-list": "^2.1.0", - "testcafe-reporter-minimal": "^2.1.0", - "testcafe-reporter-spec": "^2.1.1", - "testcafe-reporter-xunit": "^2.1.0", - "time-limit-promise": "^1.0.2", - "tmp": "0.0.28", - "tree-kill": "^1.1.0", - "typescript": "^3.3.3", - "useragent": "^2.1.7" - }, - "dependencies": { - "@types/node": { - "version": "10.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.12.tgz", - "integrity": "sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "testcafe-browser-provider-saucelabs": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/testcafe-browser-provider-saucelabs/-/testcafe-browser-provider-saucelabs-1.7.0.tgz", - "integrity": "sha512-M7sRL2MgWuFmnIUJi/sB7w39WP4zSHUl2pDLhTy0mSUwBahM65Berj5t+K5UkAbQFilfLgP4hnkt75c/9RaJ1g==", - "dev": true, - "requires": { - "babel-runtime": "^6.11.6", - "desired-capabilities": "^0.1.0", - "lodash": "^4.14.2", - "pify": "^2.3.0", - "pinkie": "^2.0.4", - "request": "^2.74.0", - "saucelabs-connector": "^0.3.0" - } - }, - "testcafe-browser-tools": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/testcafe-browser-tools/-/testcafe-browser-tools-1.6.8.tgz", - "integrity": "sha512-xFgwmcAOutSJR6goqO8uUFGF5IF2xRC/Ssh4pB5QZ+bTjYsN5amnjgM+813bDBLelC+HmXKqylviz7Dzxbtbcw==", - "dev": true, - "requires": { - "array-find": "^1.0.0", - "babel-runtime": "^5.6.15", - "graceful-fs": "^4.1.11", - "linux-platform-info": "^0.0.3", - "mkdirp": "^0.5.1", - "mustache": "^2.1.2", - "os-family": "^1.0.0", - "pify": "^2.3.0", - "pinkie": "^2.0.1", - "read-file-relative": "^1.2.0", - "which-promise": "^1.0.0" - }, - "dependencies": { - "babel-runtime": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", - "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", - "dev": true, - "requires": { - "core-js": "^1.0.0" - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, - "testcafe-hammerhead": { - "version": "14.6.10", - "resolved": "https://registry.npmjs.org/testcafe-hammerhead/-/testcafe-hammerhead-14.6.10.tgz", - "integrity": "sha512-fG/YTz7wKs6Fd0Fl9WlzO4j/ovDSAGxDLvLAz4ydzIKAdnZMZ22QbjYpfahCVpe9nzq/UHCQpSFdThQTmlFEmA==", - "dev": true, - "requires": { - "acorn-hammerhead": "^0.2.0", - "bowser": "1.6.0", - "brotli": "^1.3.1", - "crypto-md5": "^1.0.0", - "css": "2.2.3", - "esotope-hammerhead": "^0.2.1", - "iconv-lite": "0.4.11", - "lodash": "4.17.11", - "lru-cache": "2.6.3", - "match-url-wildcard": "0.0.4", - "merge-stream": "^1.0.1", - "mime": "~1.4.1", - "mustache": "^2.1.1", - "nanoid": "^0.2.2", - "os-family": "^1.0.0", - "parse5": "2.2.3", - "pify": "^2.3.0", - "pinkie": "1.0.0", - "read-file-relative": "^1.2.0", - "semver": "5.5.0", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "webauth": "^1.1.0" - }, - "dependencies": { - "nanoid": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-0.2.2.tgz", - "integrity": "sha512-GHoRrvNEKiwdkwQ/enKL8AhQkkrBC/2KxMZkDvQzp8OtkpX8ZAmoYJWFVl7l8F2+HcEJUfdg21Ab2wXXfrvACQ==", - "dev": true - }, - "parse5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz", - "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=", - "dev": true - }, - "pinkie": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", - "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", - "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, - "testcafe-legacy-api": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/testcafe-legacy-api/-/testcafe-legacy-api-3.1.11.tgz", - "integrity": "sha512-JWv8Exc9FAEBbKw+IP97Ebd+0FzA3nzgRv9iQCNh/+JlZyUox7NWiojs9BAXqgxIltl54rdo7TxPkNslxb+Ltw==", - "dev": true, - "requires": { - "async": "0.2.6", - "babel-runtime": "^5.8.34", - "dedent": "^0.6.0", - "highlight-es": "^1.0.0", - "is-jquery-obj": "^0.1.0", - "lodash": "^4.14.0", - "moment": "^2.14.1", - "mustache": "^2.2.1", - "os-family": "^1.0.0", - "parse5": "^2.1.5", - "pify": "^2.3.0", - "pinkie": "^2.0.1", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "babel-runtime": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", - "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", - "dev": true, - "requires": { - "core-js": "^1.0.0" - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "dedent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", - "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=", - "dev": true - }, - "parse5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz", - "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=", - "dev": true - } - } - }, - "testcafe-reporter-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/testcafe-reporter-json/-/testcafe-reporter-json-2.2.0.tgz", - "integrity": "sha512-wfpNaZgGP2WoqdmnIXOyxcpwSzdH1HvzXSN397lJkXOrQrwhuGUThPDvyzPnZqxZSzXdDUvIPJm55tCMWbfymQ==", - "dev": true - }, - "testcafe-reporter-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/testcafe-reporter-list/-/testcafe-reporter-list-2.1.0.tgz", - "integrity": "sha1-n6ifcbl9Pf5ktDAtXiJ97mmuxrk=", - "dev": true - }, - "testcafe-reporter-minimal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/testcafe-reporter-minimal/-/testcafe-reporter-minimal-2.1.0.tgz", - "integrity": "sha1-Z28DVHY0FDxurzq1KGgnOkvr9CE=", - "dev": true - }, - "testcafe-reporter-spec": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/testcafe-reporter-spec/-/testcafe-reporter-spec-2.1.1.tgz", - "integrity": "sha1-gVb87Q9RMkhlWa1WC8gGdkaSdew=", - "dev": true - }, - "testcafe-reporter-xunit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/testcafe-reporter-xunit/-/testcafe-reporter-xunit-2.1.0.tgz", - "integrity": "sha1-5tZsVyzhWvJmcGrw/WELKoQd1EM=", - "dev": true - }, - "time-limit-promise": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/time-limit-promise/-/time-limit-promise-1.0.4.tgz", - "integrity": "sha512-FLHDDsIDducw7MBcRWlFtW2Tm50DoKOSFf0Nzx17qwXj8REXCte0eUkHrJl9QU3Bl9arG3XNYX0PcHpZ9xyuLw==", - "dev": true - }, - "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tree-kill": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", - "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "dev": true, - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "typescript": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", - "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", - "dev": true - }, - "uglify-js": { - "version": "3.5.15", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.15.tgz", - "integrity": "sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg==", - "dev": true, - "requires": { - "commander": "~2.20.0", - "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 - } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - } - } - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "vargs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", - "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wd": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.11.2.tgz", - "integrity": "sha512-zXJY9ARjQQYN2LatLTRcW39EYzIVqKNhGpp4XWJmRgHBioG4FoenIOsoVbaO8lnFGgv31V99kAy5hB4eWGIwzA==", - "dev": true, - "requires": { - "archiver": "2.1.1", - "async": "2.0.1", - "lodash": "4.17.11", - "mkdirp": "^0.5.1", - "q": "1.4.1", - "request": "2.88.0", - "vargs": "0.1.0" - }, - "dependencies": { - "async": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", - "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", - "dev": true, - "requires": { - "lodash": "^4.8.0" - } - } - } - }, - "webauth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webauth/-/webauth-1.1.0.tgz", - "integrity": "sha1-ZHBPa4AmmGYFvDymKZUubib90QA=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-promise/-/which-promise-1.0.0.tgz", - "integrity": "sha1-ILch3wWzW3Bhdv+hCwkJq6RgMDU=", - "dev": true, - "requires": { - "pify": "^2.2.0", - "pinkie-promise": "^1.0.0", - "which": "^1.1.2" - }, - "dependencies": { - "pinkie": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", - "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", - "dev": true - }, - "pinkie-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", - "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", - "dev": true, - "requires": { - "pinkie": "^1.0.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - } - } - } -} diff --git a/package.json b/package.json index 434473690..de344df2e 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,21 @@ { - "name": "sortablejs", - "exportName": "Sortable", - "version": "1.10.2", - "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/plugin-transform-object-assign": "^7.2.0", - "@babel/preset-env": "^7.4.4", - "rollup": "^1.11.3", - "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-resolve": "^5.0.0", - "testcafe": "^1.3.1", - "testcafe-browser-provider-saucelabs": "^1.7.0", - "testcafe-reporter-xunit": "^2.1.0", - "uglify-js": "^3.5.12" - }, - "description": "JavaScript library for reorderable drag-and-drop lists on modern browsers and touch devices. No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.", - "main": "./Sortable.js", - "module": "modular/sortable.esm.js", - "scripts": { - "build:umd": "NODE_ENV=umd rollup -c ./scripts/umd-build.js", - "build:umd:watch": "set NODE_ENV=umd&& rollup -w -c ./scripts/umd-build.js", - "build:es": "set NODE_ENV=es&& rollup -c ./scripts/esm-build.js", - "build:es:watch": "set NODE_ENV=es&& rollup -w -c ./scripts/esm-build.js", - "minify": "node ./scripts/minify.js", - "build": "npm run build:es && npm run build:umd && npm run minify", - "test:compat": "node ./scripts/test-compat.js", - "test": "node ./scripts/test.js" - }, - "maintainers": [ - "Konstantin Lebedev ", - "Owen Mills " - ], - "repository": { - "type": "git", - "url": "git://github.com/SortableJS/Sortable.git" - }, - "files": [ - "Sortable.js", - "Sortable.min.js", - "modular/" - ], - "keywords": [ - "sortable", - "reorder", - "drag", - "meteor", - "angular", - "ng-sortable", - "react", - "vue", - "mixin" - ], - "license": "MIT" + "name": "@sortablejs/monorepo", + "private": true, + "scripts": { + "test:compat": "ts-node scripts/test-compat.ts", + "test": "ts-node scripts/test.ts", + "build:umd": "cd packages/sortablejs && npm run build:umd" + }, + "devDependencies": { + "lerna": "^3.22.1", + "@types/node": "^14.10.1", + "fp-ts": "^2.8.2", + "logging-ts": "^0.3.4", + "npm-run-all": "^4.1.5", + "testcafe": "^1.9.2", + "testcafe-browser-provider-saucelabs": "^1.8.0", + "testcafe-reporter-xunit": "^2.1.0", + "ts-node": "^8.10.2", + "typescript": "^3.9.7" + } } diff --git a/plugins/AutoScroll/README.md b/packages/plugins/auto-scroll/README.md similarity index 100% rename from plugins/AutoScroll/README.md rename to packages/plugins/auto-scroll/README.md diff --git a/packages/plugins/auto-scroll/package.json b/packages/plugins/auto-scroll/package.json new file mode 100644 index 000000000..e25e1bea8 --- /dev/null +++ b/packages/plugins/auto-scroll/package.json @@ -0,0 +1,4 @@ +{ + "name": "@sortablejs/plugin-auto-scroll", + "private": true +} diff --git a/packages/plugins/auto-scroll/src/index.ts b/packages/plugins/auto-scroll/src/index.ts new file mode 100644 index 000000000..4d421dcd6 --- /dev/null +++ b/packages/plugins/auto-scroll/src/index.ts @@ -0,0 +1,311 @@ +import { + on, + off, + css, + throttle, + cancelThrottle, + scrollBy, + getParentAutoScrollElement, + expando, + getRect, + getWindowScrollingElement, + Edge, + IE11OrLess, + Safari, +} from "../../../utils/src"; + +import Sortable from "../../../sortable/src/Sortable"; + +let autoScrolls = [], + scrollEl, + scrollRootEl, + scrolling = false, + lastAutoScrollX, + lastAutoScrollY, + touchEvt, + pointerElemChangedInterval; + +function AutoScrollPlugin() { + function AutoScroll() { + this.defaults = { + scroll: true, + scrollSensitivity: 30, + scrollSpeed: 10, + bubbleScroll: true, + }; + + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { + this[fn] = this[fn].bind(this); + } + } + } + + AutoScroll.prototype = { + dragStarted({ originalEvent }) { + if (this.sortable.nativeDraggable) { + on(document, "dragover", this._handleAutoScroll); + } else { + if (this.options.supportPointer) { + on(document, "pointermove", this._handleFallbackAutoScroll); + } else if (originalEvent.touches) { + on(document, "touchmove", this._handleFallbackAutoScroll); + } else { + on(document, "mousemove", this._handleFallbackAutoScroll); + } + } + }, + + dragOverCompleted({ originalEvent }) { + // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) + if (!this.options.dragOverBubble && !originalEvent.rootEl) { + this._handleAutoScroll(originalEvent); + } + }, + + drop() { + if (this.sortable.nativeDraggable) { + off(document, "dragover", this._handleAutoScroll); + } else { + off(document, "pointermove", this._handleFallbackAutoScroll); + off(document, "touchmove", this._handleFallbackAutoScroll); + off(document, "mousemove", this._handleFallbackAutoScroll); + } + + clearPointerElemChangedInterval(); + clearAutoScrolls(); + cancelThrottle(); + }, + + nulling() { + touchEvt = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; + + autoScrolls.length = 0; + }, + + _handleFallbackAutoScroll(evt) { + this._handleAutoScroll(evt, true); + }, + + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); + + touchEvt = evt; + + // IE does not seem to have native autoscroll, + // Edge's autoscroll seems too conditional, + // MACOS Safari does not have autoscroll, + // Firefox and Chrome are good + if (fallback || Edge || IE11OrLess || Safari) { + //@ts-ignore + autoScroll(evt, this.options, elem, fallback); + + // Listener for pointer element change + let ogElemScroller = getParentAutoScrollElement(elem, true); + if ( + scrolling && + (!pointerElemChangedInterval || + x !== lastAutoScrollX || + y !== lastAutoScrollY) + ) { + pointerElemChangedInterval && clearPointerElemChangedInterval(); + // Detect for pointer elem change, emulating native DnD behaviour + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement( + document.elementFromPoint(x, y), + true + ); + if (newElem !== ogElemScroller) { + ogElemScroller = newElem; + clearAutoScrolls(); + } + //@ts-ignore + autoScroll(evt, this.options, newElem, fallback); + }, 10); + lastAutoScrollX = x; + lastAutoScrollY = y; + } + } else { + // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll + if ( + !this.options.bubbleScroll || + getParentAutoScrollElement(elem, true) === getWindowScrollingElement() + ) { + clearAutoScrolls(); + return; + } + autoScroll( + //@ts-ignore + evt, + this.options, + getParentAutoScrollElement(elem, false), + false + ); + } + }, + }; + + return Object.assign(AutoScroll, { + pluginName: "scroll", + initializeByDefault: true, + }); +} + +function clearAutoScrolls() { + autoScrolls.forEach(function (autoScroll) { + clearInterval(autoScroll.pid); + }); + autoScrolls = []; +} + +function clearPointerElemChangedInterval() { + clearInterval(pointerElemChangedInterval); +} + +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 + if (!options.scroll) return; + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + + let scrollThisInstance = false, + scrollCustomFn; + + // New scroll root, set scrollEl + if (scrollRootEl !== rootEl) { + scrollRootEl = rootEl; + + clearAutoScrolls(); + + scrollEl = options.scroll; + scrollCustomFn = options.scrollFn; + + if (scrollEl === true) { + scrollEl = getParentAutoScrollElement(rootEl, true); + } + } + + let layersOut = 0; + let currentParent = scrollEl; + do { + let el = currentParent, + //@ts-ignore + rect = getRect(el), + top = rect.top, + bottom = rect.bottom, + left = rect.left, + right = rect.right, + width = rect.width, + height = rect.height, + canScrollX, + canScrollY, + scrollWidth = el.scrollWidth, + scrollHeight = el.scrollHeight, + //@ts-ignore + elCSS = css(el), + scrollPosX = el.scrollLeft, + scrollPosY = el.scrollTop; + + if (el === winScroller) { + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || + elCSS.overflowX === "scroll" || + elCSS.overflowX === "visible"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || + elCSS.overflowY === "scroll" || + elCSS.overflowY === "visible"); + } else { + canScrollX = + width < scrollWidth && + (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll"); + canScrollY = + height < scrollHeight && + (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll"); + } + + let vx = + canScrollX && + //@ts-ignore + (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - + //@ts-ignore + (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = + canScrollY && + //@ts-ignore + (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - + //@ts-ignore + (Math.abs(top - y) <= sens && !!scrollPosY); + + if (!autoScrolls[layersOut]) { + for (let i = 0; i <= layersOut; i++) { + if (!autoScrolls[i]) { + autoScrolls[i] = {}; + } + } + } + + if ( + autoScrolls[layersOut].vx != vx || + autoScrolls[layersOut].vy != vy || + autoScrolls[layersOut].el !== el + ) { + autoScrolls[layersOut].el = el; + autoScrolls[layersOut].vx = vx; + autoScrolls[layersOut].vy = vy; + + clearInterval(autoScrolls[layersOut].pid); + + if (vx != 0 || vy != 0) { + scrollThisInstance = true; + /* jshint loopfunc:true */ + autoScrolls[layersOut].pid = setInterval( + function () { + // emulate drag over during autoscroll (fallback), emulating native DnD behaviour + if (isFallback && this.layer === 0) { + //@ts-ignore + Sortable.active._onTouchMove(touchEvt); // To move ghost if it is positioned absolutely + } + let scrollOffsetY = autoScrolls[this.layer].vy + ? autoScrolls[this.layer].vy * speed + : 0; + let scrollOffsetX = autoScrolls[this.layer].vx + ? autoScrolls[this.layer].vx * speed + : 0; + + if (typeof scrollCustomFn === "function") { + if ( + scrollCustomFn.call( + //@ts-ignore + Sortable.dragged.parentNode[expando], + scrollOffsetX, + scrollOffsetY, + evt, + touchEvt, + autoScrolls[this.layer].el + ) !== "continue" + ) { + return; + } + } + + scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); + }.bind({ layer: layersOut }), + 24 + ); + } + } + layersOut++; + } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); + scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not +}, 30); + +export default AutoScrollPlugin; diff --git a/plugins/MultiDrag/README.md b/packages/plugins/multi-drag/README.md similarity index 100% rename from plugins/MultiDrag/README.md rename to packages/plugins/multi-drag/README.md diff --git a/packages/plugins/multi-drag/package.json b/packages/plugins/multi-drag/package.json new file mode 100644 index 000000000..76ef91e74 --- /dev/null +++ b/packages/plugins/multi-drag/package.json @@ -0,0 +1,4 @@ +{ + "name": "@sortablejs/plugin-multi-drag", + "private": true +} diff --git a/packages/plugins/multi-drag/src/index.ts b/packages/plugins/multi-drag/src/index.ts new file mode 100644 index 000000000..7ed65e4f2 --- /dev/null +++ b/packages/plugins/multi-drag/src/index.ts @@ -0,0 +1,701 @@ +import { + toggleClass, + getRect, + index, + closest, + on, + off, + clone, + css, + setRect, + unsetRect, + matrix, + expando, +} from "../../../utils/src"; + +import dispatchEvent from "../../../sortable/src/EventDispatcher"; + +let multiDragElements = [], + multiDragClones = [], + lastMultiDragSelect, // for selection with modifier key down (SHIFT) + multiDragSortable, + initialFolding = false, // Initial multi-drag fold when drag started + folding = false, // Folding any other time + dragStarted = false, + dragEl, + clonesFromRect, + clonesHidden; + +function MultiDragPlugin() { + function MultiDrag(sortable) { + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { + this[fn] = this[fn].bind(this); + } + } + + if (sortable.options.supportPointer) { + on(document, "pointerup", this._deselectMultiDrag); + } else { + on(document, "mouseup", this._deselectMultiDrag); + on(document, "touchend", this._deselectMultiDrag); + } + + on(document, "keydown", this._checkKeyDown); + on(document, "keyup", this._checkKeyUp); + + this.defaults = { + selectedClass: "sortable-selected", + multiDragKey: null, + setData(dataTransfer, dragEl) { + let data = ""; + if (multiDragElements.length && multiDragSortable === sortable) { + multiDragElements.forEach((multiDragElement, i) => { + data += (!i ? "" : ", ") + multiDragElement.textContent; + }); + } else { + data = dragEl.textContent; + } + dataTransfer.setData("Text", data); + }, + }; + } + + MultiDrag.prototype = { + multiDragKeyDown: false, + isMultiDrag: false, + + delayStartGlobal({ dragEl: dragged }) { + dragEl = dragged; + }, + + delayEnded() { + this.isMultiDrag = ~multiDragElements.indexOf(dragEl); + }, + + setupClone({ sortable, cancel }) { + if (!this.isMultiDrag) return; + for (let i = 0; i < multiDragElements.length; i++) { + multiDragClones.push(clone(multiDragElements[i])); + + multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; + + multiDragClones[i].draggable = false; + multiDragClones[i].style["will-change"] = ""; + + toggleClass(multiDragClones[i], this.options.selectedClass, false); + multiDragElements[i] === dragEl && + toggleClass(multiDragClones[i], this.options.chosenClass, false); + } + + sortable._hideClone(); + cancel(); + }, + + clone({ sortable, rootEl, dispatchSortableEvent, cancel }) { + if (!this.isMultiDrag) return; + if (!this.options.removeCloneOnHide) { + if (multiDragElements.length && multiDragSortable === sortable) { + insertMultiDragClones(true, rootEl); + dispatchSortableEvent("clone"); + + cancel(); + } + } + }, + + showClone({ cloneNowShown, rootEl, cancel }) { + if (!this.isMultiDrag) return; + insertMultiDragClones(false, rootEl); + multiDragClones.forEach((clone) => { + css(clone, "display", ""); + }); + + cloneNowShown(); + clonesHidden = false; + cancel(); + }, + + hideClone({ sortable, cloneNowHidden, cancel }) { + if (!this.isMultiDrag) return; + multiDragClones.forEach((clone) => { + css(clone, "display", "none"); + if (this.options.removeCloneOnHide && clone.parentNode) { + clone.parentNode.removeChild(clone); + } + }); + + cloneNowHidden(); + clonesHidden = true; + cancel(); + }, + + dragStartGlobal({ sortable }) { + if (!this.isMultiDrag && multiDragSortable) { + multiDragSortable.multiDrag._deselectMultiDrag(); + } + + multiDragElements.forEach((multiDragElement) => { + //@ts-ignore + multiDragElement.sortableIndex = index(multiDragElement); + }); + + // Sort multi-drag elements + multiDragElements = multiDragElements.sort(function (a, b) { + return a.sortableIndex - b.sortableIndex; + }); + dragStarted = true; + }, + + dragStarted({ sortable }) { + if (!this.isMultiDrag) return; + if (this.options.sort) { + // Capture rects, + // hide multi drag elements (by positioning them absolute), + // set multi drag elements rects to dragRect, + // show multi drag elements, + // animate to rects, + // unset rects & remove from DOM + + sortable.captureAnimationState(); + + if (this.options.animation) { + multiDragElements.forEach((multiDragElement) => { + if (multiDragElement === dragEl) return; + css(multiDragElement, "position", "absolute"); + }); + + //@ts-ignore + let dragRect = getRect(dragEl, false, true, true); + + multiDragElements.forEach((multiDragElement) => { + if (multiDragElement === dragEl) return; + setRect(multiDragElement, dragRect); + }); + + folding = true; + initialFolding = true; + } + } + + sortable.animateAll(() => { + folding = false; + initialFolding = false; + + if (this.options.animation) { + multiDragElements.forEach((multiDragElement) => { + unsetRect(multiDragElement); + }); + } + + // Remove all auxiliary multidrag items from el, if sorting enabled + if (this.options.sort) { + removeMultiDragElements(); + } + }); + }, + + dragOver({ target, completed, cancel }) { + if (folding && ~multiDragElements.indexOf(target)) { + completed(false); + cancel(); + } + }, + + revert({ fromSortable, rootEl, sortable, dragRect }) { + if (multiDragElements.length > 1) { + // Setup unfold animation + multiDragElements.forEach((multiDragElement) => { + sortable.addAnimationState({ + target: multiDragElement, + //@ts-ignore + rect: folding ? getRect(multiDragElement) : dragRect, + }); + + unsetRect(multiDragElement); + + multiDragElement.fromRect = dragRect; + + fromSortable.removeAnimationState(multiDragElement); + }); + folding = false; + insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); + } + }, + + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable, + }) { + let options = this.options; + if (insertion) { + // Clones must be hidden before folding animation to capture dragRectAbsolute properly + if (isOwner) { + activeSortable._hideClone(); + } + + initialFolding = false; + // If leaving sort:false root, or already folding - Fold to new location + if ( + options.animation && + multiDragElements.length > 1 && + (folding || + (!isOwner && !activeSortable.options.sort && !putSortable)) + ) { + //@ts-ignore + // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible + let dragRectAbsolute = getRect(dragEl, false, true, true); + + multiDragElements.forEach((multiDragElement) => { + if (multiDragElement === dragEl) return; + setRect(multiDragElement, dragRectAbsolute); + + // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted + // while folding, and so that we can capture them again because old sortable will no longer be fromSortable + parentEl.appendChild(multiDragElement); + }); + + folding = true; + } + + // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out + if (!isOwner) { + // Only remove if not folding (folding will remove them anyways) + if (!folding) { + removeMultiDragElements(); + } + + if (multiDragElements.length > 1) { + let clonesHiddenBefore = clonesHidden; + activeSortable._showClone(sortable); + + // Unfold animation for clones if showing from hidden + if ( + activeSortable.options.animation && + !clonesHidden && + clonesHiddenBefore + ) { + multiDragClones.forEach((clone) => { + activeSortable.addAnimationState({ + target: clone, + rect: clonesFromRect, + }); + + clone.fromRect = clonesFromRect; + clone.thisAnimationDuration = null; + }); + } + } else { + activeSortable._showClone(sortable); + } + } + } + }, + + dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) { + multiDragElements.forEach((multiDragElement) => { + multiDragElement.thisAnimationDuration = null; + }); + + if ( + activeSortable.options.animation && + !isOwner && + activeSortable.multiDrag.isMultiDrag + ) { + clonesFromRect = Object.assign({}, dragRect); + let dragMatrix = matrix(dragEl, true); + clonesFromRect.top -= dragMatrix.f; + clonesFromRect.left -= dragMatrix.e; + } + }, + + dragOverAnimationComplete() { + if (folding) { + folding = false; + removeMultiDragElements(); + } + }, + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable, + }) { + let toSortable = putSortable || this.sortable; + + if (!evt) return; + + let options = this.options, + children = parentEl.children; + + // Multi-drag selection + if (!dragStarted) { + if (options.multiDragKey && !this.multiDragKeyDown) { + this._deselectMultiDrag(); + } + toggleClass( + dragEl, + options.selectedClass, + !~multiDragElements.indexOf(dragEl) + ); + + if (!~multiDragElements.indexOf(dragEl)) { + multiDragElements.push(dragEl); + dispatchEvent({ + sortable, + rootEl, + name: "select", + targetEl: dragEl, + //@ts-ignore + originalEvt: evt, + }); + + // Modifier activated, select from last to dragEl + if ( + evt.shiftKey && + lastMultiDragSelect && + sortable.el.contains(lastMultiDragSelect) + ) { + //@ts-ignore + let lastIndex = index(lastMultiDragSelect), + //@ts-ignore + currentIndex = index(dragEl); + + if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { + // Must include lastMultiDragSelect (select it), in case modified selection from no selection + // (but previous selection existed) + let n, i; + if (currentIndex > lastIndex) { + i = lastIndex; + n = currentIndex; + } else { + i = currentIndex; + n = lastIndex + 1; + } + + for (; i < n; i++) { + if (~multiDragElements.indexOf(children[i])) continue; + toggleClass(children[i], options.selectedClass, true); + multiDragElements.push(children[i]); + + dispatchEvent({ + sortable, + rootEl, + name: "select", + targetEl: children[i], + //@ts-ignore + originalEvt: evt, + }); + } + } + } else { + lastMultiDragSelect = dragEl; + } + + multiDragSortable = toSortable; + } else { + multiDragElements.splice(multiDragElements.indexOf(dragEl), 1); + lastMultiDragSelect = null; + dispatchEvent({ + sortable, + rootEl, + name: "deselect", + targetEl: dragEl, + //@ts-ignore + originalEvt: evt, + }); + } + } + + // Multi-drag drop + if (dragStarted && this.isMultiDrag) { + // Do not "unfold" after around dragEl if reverted + if ( + (parentEl[expando].options.sort || parentEl !== rootEl) && + multiDragElements.length > 1 + ) { + //@ts-ignore + let dragRect = getRect(dragEl), + multiDragIndex = index( + dragEl, + ":not(." + this.options.selectedClass + ")" + ); + + if (!initialFolding && options.animation) + dragEl.thisAnimationDuration = null; + + toSortable.captureAnimationState(); + + if (!initialFolding) { + if (options.animation) { + dragEl.fromRect = dragRect; + multiDragElements.forEach((multiDragElement) => { + multiDragElement.thisAnimationDuration = null; + if (multiDragElement !== dragEl) { + //@ts-ignore + let rect = folding ? getRect(multiDragElement) : dragRect; + multiDragElement.fromRect = rect; + + // Prepare unfold animation + toSortable.addAnimationState({ + target: multiDragElement, + rect: rect, + }); + } + }); + } + + // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert + // properly they must all be removed + removeMultiDragElements(); + + multiDragElements.forEach((multiDragElement) => { + if (children[multiDragIndex]) { + parentEl.insertBefore( + multiDragElement, + children[multiDragIndex] + ); + } else { + parentEl.appendChild(multiDragElement); + } + multiDragIndex++; + }); + + // If initial folding is done, the elements may have changed position because they are now + // unfolding around dragEl, even though dragEl may not have his index changed, so update event + // must be fired here as Sortable will not. + //@ts-ignore + if (oldIndex === index(dragEl)) { + let update = false; + multiDragElements.forEach((multiDragElement) => { + //@ts-ignore + if ( + //@ts-ignore + multiDragElement.sortableIndex !== index(multiDragElement) + ) { + update = true; + return; + } + }); + + if (update) { + dispatchSortableEvent("update"); + } + } + } + + // Must be done after capturing individual rects (scroll bar) + multiDragElements.forEach((multiDragElement) => { + unsetRect(multiDragElement); + }); + + toSortable.animateAll(); + } + + multiDragSortable = toSortable; + } + + // Remove clones if necessary + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { + multiDragClones.forEach((clone) => { + clone.parentNode && clone.parentNode.removeChild(clone); + }); + } + }, + + nullingGlobal() { + this.isMultiDrag = dragStarted = false; + multiDragClones.length = 0; + }, + + destroyGlobal() { + this._deselectMultiDrag(); + off(document, "pointerup", this._deselectMultiDrag); + off(document, "mouseup", this._deselectMultiDrag); + off(document, "touchend", this._deselectMultiDrag); + + off(document, "keydown", this._checkKeyDown); + off(document, "keyup", this._checkKeyUp); + }, + + _deselectMultiDrag(evt) { + if (typeof dragStarted !== "undefined" && dragStarted) return; + + // Only deselect if selection is in this sortable + if (multiDragSortable !== this.sortable) return; + + // Only deselect if target is not item in this sortable + if ( + evt && + closest(evt.target, this.options.draggable, this.sortable.el, false) + ) + return; + + // Only deselect if left click + if (evt && evt.button !== 0) return; + + while (multiDragElements.length) { + let el = multiDragElements[0]; + toggleClass(el, this.options.selectedClass, false); + multiDragElements.shift(); + dispatchEvent({ + sortable: this.sortable, + rootEl: this.sortable.el, + name: "deselect", + //@ts-ignore + targetEl: el, + //@ts-ignore + originalEvt: evt, + }); + } + }, + + _checkKeyDown(evt) { + if (evt.key === this.options.multiDragKey) { + this.multiDragKeyDown = true; + } + }, + + _checkKeyUp(evt) { + if (evt.key === this.options.multiDragKey) { + this.multiDragKeyDown = false; + } + }, + }; + + return Object.assign(MultiDrag, { + // Static methods & properties + pluginName: "multiDrag", + utils: { + /** + * Selects the provided multi-drag item + * @param {HTMLElement} el The element to be selected + */ + select(el) { + let sortable = el.parentNode[expando]; + if ( + !sortable || + !sortable.options.multiDrag || + ~multiDragElements.indexOf(el) + ) + return; + if (multiDragSortable && multiDragSortable !== sortable) { + multiDragSortable.multiDrag._deselectMultiDrag(); + multiDragSortable = sortable; + } + toggleClass(el, sortable.options.selectedClass, true); + multiDragElements.push(el); + }, + /** + * Deselects the provided multi-drag item + * @param {HTMLElement} el The element to be deselected + */ + deselect(el) { + let sortable = el.parentNode[expando], + index = multiDragElements.indexOf(el); + if (!sortable || !sortable.options.multiDrag || !~index) return; + toggleClass(el, sortable.options.selectedClass, false); + multiDragElements.splice(index, 1); + }, + }, + eventProperties() { + const oldIndicies = [], + newIndicies = []; + + multiDragElements.forEach((multiDragElement) => { + oldIndicies.push({ + multiDragElement, + index: multiDragElement.sortableIndex, + }); + + // multiDragElements will already be sorted if folding + let newIndex; + if (folding && multiDragElement !== dragEl) { + newIndex = -1; + } else if (folding) { + newIndex = index( + multiDragElement, + ":not(." + this.options.selectedClass + ")" + ); + } else { + //@ts-ignore + newIndex = index(multiDragElement); + } + newIndicies.push({ + multiDragElement, + index: newIndex, + }); + }); + return { + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies, + }; + }, + optionListeners: { + multiDragKey(key) { + key = key.toLowerCase(); + if (key === "ctrl") { + key = "Control"; + } else if (key.length > 1) { + key = key.charAt(0).toUpperCase() + key.substr(1); + } + return key; + }, + }, + }); +} + +function insertMultiDragElements(clonesInserted, rootEl) { + multiDragElements.forEach((multiDragElement, i) => { + let target = + rootEl.children[ + multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0) + ]; + if (target) { + rootEl.insertBefore(multiDragElement, target); + } else { + rootEl.appendChild(multiDragElement); + } + }); +} + +/** + * Insert multi-drag clones + * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted + * @param {HTMLElement} rootEl + */ +function insertMultiDragClones(elementsInserted, rootEl) { + multiDragClones.forEach((clone, i) => { + let target = + rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; + if (target) { + rootEl.insertBefore(clone, target); + } else { + rootEl.appendChild(clone); + } + }); +} + +function removeMultiDragElements() { + multiDragElements.forEach((multiDragElement) => { + if (multiDragElement === dragEl) return; + multiDragElement.parentNode && + multiDragElement.parentNode.removeChild(multiDragElement); + }); +} + +export default MultiDragPlugin; diff --git a/plugins/OnSpill/README.md b/packages/plugins/on-spill/README.md similarity index 100% rename from plugins/OnSpill/README.md rename to packages/plugins/on-spill/README.md diff --git a/packages/plugins/on-spill/package.json b/packages/plugins/on-spill/package.json new file mode 100644 index 000000000..3840b9f2d --- /dev/null +++ b/packages/plugins/on-spill/package.json @@ -0,0 +1,4 @@ +{ + "name": "@sortablejs/plugin-on-spill", + "private": true +} diff --git a/packages/plugins/on-spill/src/index.ts b/packages/plugins/on-spill/src/index.ts new file mode 100644 index 000000000..24670c422 --- /dev/null +++ b/packages/plugins/on-spill/src/index.ts @@ -0,0 +1,76 @@ +import { getChild } from "../../../utils/src"; + +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget, +}) { + if (!originalEvent) return; + let toSortable = putSortable || activeSortable; + hideGhostForTarget(); + let touch = + originalEvent.changedTouches && originalEvent.changedTouches.length + ? originalEvent.changedTouches[0] + : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); + unhideGhostForTarget(); + if (toSortable && !toSortable.el.contains(target)) { + dispatchSortableEvent("spill"); + this.onSpill({ dragEl, putSortable }); + } +}; + +function Revert() {} + +Revert.prototype = { + startIndex: null, + dragStart({ oldDraggableIndex }) { + this.startIndex = oldDraggableIndex; + }, + onSpill({ dragEl, putSortable }) { + this.sortable.captureAnimationState(); + if (putSortable) { + putSortable.captureAnimationState(); + } + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + + if (nextSibling) { + this.sortable.el.insertBefore(dragEl, nextSibling); + } else { + this.sortable.el.appendChild(dragEl); + } + this.sortable.animateAll(); + if (putSortable) { + putSortable.animateAll(); + } + }, + drop, +}; + +Object.assign(Revert, { + pluginName: "revertOnSpill", +}); + +function Remove() {} + +Remove.prototype = { + onSpill({ dragEl, putSortable }) { + const parentSortable = putSortable || this.sortable; + parentSortable.captureAnimationState(); + dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); + parentSortable.animateAll(); + }, + drop, +}; + +Object.assign(Remove, { + pluginName: "removeOnSpill", +}); + +export default [Remove, Revert]; + +export { Remove as RemoveOnSpill, Revert as RevertOnSpill }; diff --git a/plugins/Swap/README.md b/packages/plugins/swap/README.md similarity index 100% rename from plugins/Swap/README.md rename to packages/plugins/swap/README.md diff --git a/packages/plugins/swap/package.json b/packages/plugins/swap/package.json new file mode 100644 index 000000000..9bf8c2796 --- /dev/null +++ b/packages/plugins/swap/package.json @@ -0,0 +1,4 @@ +{ + "name": "@sortablejs/plugin-swap", + "private": true +} diff --git a/packages/plugins/swap/src/index.ts b/packages/plugins/swap/src/index.ts new file mode 100644 index 000000000..d652ebdeb --- /dev/null +++ b/packages/plugins/swap/src/index.ts @@ -0,0 +1,99 @@ +import { toggleClass, index } from "../../../utils/src"; + +let lastSwapEl; + +function SwapPlugin() { + function Swap() { + this.defaults = { + swapClass: "sortable-swap-highlight", + }; + } + + Swap.prototype = { + dragStart({ dragEl }) { + lastSwapEl = dragEl; + }, + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel, + }) { + if (!activeSortable.options.swap) return; + let el = this.sortable.el, + options = this.options; + if (target && target !== el) { + let prevSwapEl = lastSwapEl; + if (onMove(target) !== false) { + toggleClass(target, options.swapClass, true); + lastSwapEl = target; + } else { + lastSwapEl = null; + } + + if (prevSwapEl && prevSwapEl !== lastSwapEl) { + toggleClass(prevSwapEl, options.swapClass, false); + } + } + changed(); + + completed(true); + cancel(); + }, + drop({ activeSortable, putSortable, dragEl }) { + let toSortable = putSortable || this.sortable; + let options = this.options; + lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); + if ( + lastSwapEl && + (options.swap || (putSortable && putSortable.options.swap)) + ) { + if (dragEl !== lastSwapEl) { + toSortable.captureAnimationState(); + if (toSortable !== activeSortable) + activeSortable.captureAnimationState(); + swapNodes(dragEl, lastSwapEl); + + toSortable.animateAll(); + if (toSortable !== activeSortable) activeSortable.animateAll(); + } + } + }, + nulling() { + lastSwapEl = null; + }, + }; + + return Object.assign(Swap, { + pluginName: "swap", + eventProperties() { + return { + swapItem: lastSwapEl, + }; + }, + }); +} + +function swapNodes(n1, n2) { + let p1 = n1.parentNode, + p2 = n2.parentNode, + i1, + i2; + + if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return; + + //@ts-ignore + i1 = index(n1); + //@ts-ignore + i2 = index(n2); + + if (p1.isEqualNode(p2) && i1 < i2) { + i2++; + } + p1.insertBefore(n2, p1.children[i1]); + p2.insertBefore(n1, p2.children[i2]); +} + +export default SwapPlugin; diff --git a/packages/sortable/README.md b/packages/sortable/README.md new file mode 100644 index 000000000..74262de8f --- /dev/null +++ b/packages/sortable/README.md @@ -0,0 +1,3 @@ +# sortable + +This is the primary class of sortablejs. This package is not the offical sortablejs, which can be found in packages/sortablejs. diff --git a/packages/sortable/package.json b/packages/sortable/package.json new file mode 100644 index 000000000..11a4d1c4f --- /dev/null +++ b/packages/sortable/package.json @@ -0,0 +1,5 @@ +{ + "name": "@sortablejs/core", + "version": "1.13.0", + "private": true +} diff --git a/packages/sortable/src/Animation.ts b/packages/sortable/src/Animation.ts new file mode 100644 index 000000000..2842e1cd0 --- /dev/null +++ b/packages/sortable/src/Animation.ts @@ -0,0 +1,200 @@ +import { + getRect, + css, + matrix, + isRectEqual, + indexOfObject, +} from "../../utils/src"; +import * as Sortable from "./Sortable"; + +export default function AnimationStateManager() { + let animationStates = [], + animationCallbackId; + + return { + captureAnimationState() { + animationStates = []; + if (!this.options.animation) return; + let children = [].slice.call(this.el.children); + + children.forEach((child) => { + //@ts-ignore + if (css(child, "display") === "none" || child === Sortable.ghost) + return; + animationStates.push({ + target: child, + //@ts-ignore + rect: getRect(child), + }); + let fromRect = { ...animationStates[animationStates.length - 1].rect }; + + // If animating: compensate for current animation + if (child.thisAnimationDuration) { + let childMatrix = matrix(child, true); + if (childMatrix) { + fromRect.top -= childMatrix.f; + fromRect.left -= childMatrix.e; + } + } + + child.fromRect = fromRect; + }); + }, + + addAnimationState(state) { + animationStates.push(state); + }, + + removeAnimationState(target) { + animationStates.splice(indexOfObject(animationStates, { target }), 1); + }, + + animateAll(callback) { + if (!this.options.animation) { + clearTimeout(animationCallbackId); + if (typeof callback === "function") callback(); + return; + } + + let animating = false, + animationTime = 0; + + animationStates.forEach((state) => { + let time = 0, + animatingThis = false, + target = state.target, + fromRect = target.fromRect, + //@ts-ignore + toRect = getRect(target), + prevFromRect = target.prevFromRect, + prevToRect = target.prevToRect, + animatingRect = state.rect, + targetMatrix = matrix(target, true); + + if (targetMatrix) { + // Compensate for current animation + toRect.top -= targetMatrix.f; + toRect.left -= targetMatrix.e; + } + + target.toRect = toRect; + + if (target.thisAnimationDuration) { + // Could also check if animatingRect is between fromRect and toRect + if ( + isRectEqual(prevFromRect, toRect) && + !isRectEqual(fromRect, toRect) && + // Make sure animatingRect is on line between toRect & fromRect + (animatingRect.top - toRect.top) / + (animatingRect.left - toRect.left) === + (fromRect.top - toRect.top) / (fromRect.left - toRect.left) + ) { + // If returning to same place as started from animation and on same axis + time = calculateRealTime( + animatingRect, + prevFromRect, + prevToRect, + this.options + ); + } + } + + // if fromRect != toRect: animate + if (!isRectEqual(toRect, fromRect)) { + target.prevFromRect = fromRect; + target.prevToRect = toRect; + + if (!time) { + time = this.options.animation; + } + this.animate(target, animatingRect, toRect, time); + } + + if (time) { + animating = true; + animationTime = Math.max(animationTime, time); + clearTimeout(target.animationResetTimer); + target.animationResetTimer = setTimeout(function () { + target.animationTime = 0; + target.prevFromRect = null; + target.fromRect = null; + target.prevToRect = null; + target.thisAnimationDuration = null; + }, time); + target.thisAnimationDuration = time; + } + }); + + clearTimeout(animationCallbackId); + if (!animating) { + if (typeof callback === "function") callback(); + } else { + animationCallbackId = setTimeout(function () { + if (typeof callback === "function") callback(); + }, animationTime); + } + animationStates = []; + }, + + animate(target, currentRect, toRect, duration) { + if (duration) { + css(target, "transition", ""); + css(target, "transform", ""); + //@ts-ignore + let elMatrix = matrix(this.el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d, + translateX = (currentRect.left - toRect.left) / (scaleX || 1), + translateY = (currentRect.top - toRect.top) / (scaleY || 1); + + target.animatingX = !!translateX; + target.animatingY = !!translateY; + + css( + target, + "transform", + "translate3d(" + translateX + "px," + translateY + "px,0)" + ); + + this.forRepaintDummy = repaint(target); // repaint + + css( + target, + "transition", + "transform " + + duration + + "ms" + + (this.options.easing ? " " + this.options.easing : "") + ); + css(target, "transform", "translate3d(0,0,0)"); + typeof target.animated === "number" && clearTimeout(target.animated); + target.animated = setTimeout(function () { + css(target, "transition", ""); + css(target, "transform", ""); + target.animated = false; + + target.animatingX = false; + target.animatingY = false; + }, duration); + } + }, + }; +} + +function repaint(target) { + return target.offsetWidth; +} + +function calculateRealTime(animatingRect, fromRect, toRect, options) { + return ( + (Math.sqrt( + Math.pow(fromRect.top - animatingRect.top, 2) + + Math.pow(fromRect.left - animatingRect.left, 2) + ) / + Math.sqrt( + Math.pow(fromRect.top - toRect.top, 2) + + Math.pow(fromRect.left - toRect.left, 2) + )) * + options.animation + ); +} diff --git a/packages/sortable/src/EventDispatcher.ts b/packages/sortable/src/EventDispatcher.ts new file mode 100644 index 000000000..16c64759e --- /dev/null +++ b/packages/sortable/src/EventDispatcher.ts @@ -0,0 +1,66 @@ +import { expando, IE11OrLess, Edge } from "../../utils/src"; +import PluginManager from "./PluginManager"; + +export default function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties, +}) { + sortable = sortable || (rootEl && rootEl[expando]); + if (!sortable) return; + + let evt, + options = sortable.options, + onName = "on" + name.charAt(0).toUpperCase() + name.substr(1); + // Support for new CustomEvent feature + if (window.CustomEvent && !IE11OrLess && !Edge) { + evt = new CustomEvent(name, { + bubbles: true, + cancelable: true, + }); + } else { + evt = document.createEvent("Event"); + evt.initEvent(name, true, true); + } + + evt.to = toEl || rootEl; + evt.from = fromEl || rootEl; + evt.item = targetEl || rootEl; + evt.clone = cloneEl; + + evt.oldIndex = oldIndex; + evt.newIndex = newIndex; + + evt.oldDraggableIndex = oldDraggableIndex; + evt.newDraggableIndex = newDraggableIndex; + + evt.originalEvent = originalEvent; + evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; + + let allEventProperties = { + ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable), + }; + for (let option in allEventProperties) { + evt[option] = allEventProperties[option]; + } + + if (rootEl) { + rootEl.dispatchEvent(evt); + } + + if (options[onName]) { + options[onName].call(sortable, evt); + } +} diff --git a/packages/sortable/src/PluginManager.ts b/packages/sortable/src/PluginManager.ts new file mode 100644 index 000000000..5e62d50ca --- /dev/null +++ b/packages/sortable/src/PluginManager.ts @@ -0,0 +1,104 @@ +let plugins = []; + +const defaults = { + initializeByDefault: true, +}; + +const pluginManager = { + mount(plugin) { + // Set default static properties + for (let option in defaults) { + if (defaults.hasOwnProperty(option) && !(option in plugin)) { + plugin[option] = defaults[option]; + } + } + + // only add plugins once, even if they're mounted multiple times + if (!plugins.map((p) => p.name).includes(plugin.name)) { + plugins.push(plugin); + } + }, + pluginEvent(eventName, sortable, evt) { + this.eventCanceled = false; + evt.cancel = () => { + this.eventCanceled = true; + }; + const eventNameGlobal = eventName + "Global"; + plugins.forEach((plugin) => { + if (!sortable[plugin.pluginName]) return; + // Fire global events if it exists in this sortable + if (sortable[plugin.pluginName][eventNameGlobal]) { + sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt }); + } + + // Only fire plugin event if plugin is enabled in this sortable, + // and plugin has event defined + if ( + sortable.options[plugin.pluginName] && + sortable[plugin.pluginName][eventName] + ) { + sortable[plugin.pluginName][eventName]({ sortable, ...evt }); + } + }); + }, + initializePlugins(sortable, el, defaults, options) { + plugins.forEach((plugin) => { + const pluginName = plugin.pluginName; + if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; + + let initialized = new plugin(sortable, el, sortable.options); + initialized.sortable = sortable; + initialized.options = sortable.options; + sortable[pluginName] = initialized; + + // Add default options from plugin + Object.assign(defaults, initialized.defaults); + }); + + for (let option in sortable.options) { + if (!sortable.options.hasOwnProperty(option)) continue; + let modified = this.modifyOption( + sortable, + option, + sortable.options[option] + ); + if (typeof modified !== "undefined") { + sortable.options[option] = modified; + } + } + }, + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach((plugin) => { + if (typeof plugin.eventProperties !== "function") return; + Object.assign( + eventProperties, + plugin.eventProperties.call(sortable[plugin.pluginName], name) + ); + }); + + return eventProperties; + }, + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach((plugin) => { + // Plugin must exist on the Sortable + if (!sortable[plugin.pluginName]) return; + + // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin + if ( + plugin.optionListeners && + typeof plugin.optionListeners[name] === "function" + ) { + modifiedValue = plugin.optionListeners[name].call( + sortable[plugin.pluginName], + value + ); + } + }); + + return modifiedValue; + }, +}; + +export default pluginManager; diff --git a/packages/sortable/src/Sortable.ts b/packages/sortable/src/Sortable.ts new file mode 100644 index 000000000..5899ea7f4 --- /dev/null +++ b/packages/sortable/src/Sortable.ts @@ -0,0 +1,2145 @@ +import { version } from "../package.json"; +import AnimationStateManager from "./Animation"; +import PluginManager from "./PluginManager"; +import dispatchEvent from "./EventDispatcher"; +/** + * @todo import as namespace: import * as utils from "../../utils/src" + */ +import { + on, + off, + closest, + toggleClass, + css, + matrix, + find, + getWindowScrollingElement, + getRect, + isScrolledPast, + getChild, + lastChild, + index, + getRelativeScrollOffset, + extend, + throttle, + scrollBy, + clone, + expando, + IE11OrLess, + Edge, + FireFox, + Safari, + IOS, + ChromeForAndroid, +} from "../../utils/src"; + +let pluginEvent = function ( + eventName, + sortable, + //@ts-ignore + { evt: originalEvent, ...data } = {} +) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, + dragStarted: moved, + putSortable, + //@ts-ignore + activeSortable: Sortable.active, + originalEvent, + + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + + hideGhostForTarget: _hideGhostForTarget, + unhideGhostForTarget: _unhideGhostForTarget, + + cloneNowHidden() { + cloneHidden = true; + }, + cloneNowShown() { + cloneHidden = false; + }, + + dispatchSortableEvent(name) { + _dispatchEvent({ sortable, name, originalEvent }); + }, + + ...data, + }); +}; + +function _dispatchEvent(info) { + dispatchEvent({ + putSortable, + cloneEl, + targetEl: dragEl, + rootEl, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + ...info, + }); +} + +let dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + activeGroup, + putSortable, + awaitingDragStarted = false, + ignoreNextClick = false, + sortables = [], + tapEvt, + touchEvt, + lastDx, + lastDy, + tapDistanceLeft, + tapDistanceTop, + moved, + lastTarget, + lastDirection, + pastFirstInvertThresh = false, + isCircumstantialInvert = false, + targetMoveDistance, + // For positioning ghost absolutely + ghostRelativeParent, + ghostRelativeParentInitialScroll = [], // (left, top) + _silent = false, + savedInputChecked = []; + +/** @const */ +const documentExists = typeof document !== "undefined", + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", + // This will not pass for IE9, because IE9 DnD only works on anchors + supportDraggable = + documentExists && + !ChromeForAndroid && + !IOS && + "draggable" in document.createElement("div"), + supportCssPointerEvents = (function () { + if (!documentExists) return; + // false when <= IE11 + if (IE11OrLess) { + return false; + } + let el = document.createElement("x"); + el.style.cssText = "pointer-events:auto"; + return el.style.pointerEvents === "auto"; + })(), + _detectDirection = function (el, options) { + //@ts-ignore + let elCSS = css(el), + elWidth = + parseInt(elCSS.width) - + parseInt(elCSS.paddingLeft) - + parseInt(elCSS.paddingRight) - + parseInt(elCSS.borderLeftWidth) - + parseInt(elCSS.borderRightWidth), + child1 = getChild(el, 0, options), + child2 = getChild(el, 1, options), + //@ts-ignore + firstChildCSS = child1 && css(child1), + //@ts-ignore + secondChildCSS = child2 && css(child2), + firstChildWidth = + firstChildCSS && + parseInt(firstChildCSS.marginLeft) + + parseInt(firstChildCSS.marginRight) + + //@ts-ignore + getRect(child1).width, + secondChildWidth = + secondChildCSS && + parseInt(secondChildCSS.marginLeft) + + parseInt(secondChildCSS.marginRight) + + //@ts-ignore + getRect(child2).width; + + if (elCSS.display === "flex") { + return elCSS.flexDirection === "column" || + elCSS.flexDirection === "column-reverse" + ? "vertical" + : "horizontal"; + } + + if (elCSS.display === "grid") { + return elCSS.gridTemplateColumns.split(" ").length <= 1 + ? "vertical" + : "horizontal"; + } + + if (child1 && firstChildCSS.float && firstChildCSS.float !== "none") { + let touchingSideChild2 = + firstChildCSS.float === "left" ? "left" : "right"; + + return child2 && + (secondChildCSS.clear === "both" || + secondChildCSS.clear === touchingSideChild2) + ? "vertical" + : "horizontal"; + } + + return child1 && + (firstChildCSS.display === "block" || + firstChildCSS.display === "flex" || + firstChildCSS.display === "table" || + firstChildCSS.display === "grid" || + (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none") || + (child2 && + elCSS[CSSFloatProperty] === "none" && + firstChildWidth + secondChildWidth > elWidth)) + ? "vertical" + : "horizontal"; + }, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, + dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, + dragElOppLength = vertical ? dragRect.width : dragRect.height, + targetS1Opp = vertical ? targetRect.left : targetRect.top, + targetS2Opp = vertical ? targetRect.right : targetRect.bottom, + targetOppLength = vertical ? targetRect.width : targetRect.height; + + return ( + dragElS1Opp === targetS1Opp || + dragElS2Opp === targetS2Opp || + dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2 + ); + }, + /** + * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. + * @param {Number} x X position + * @param {Number} y Y position + * @return {HTMLElement} Element of the first found nearest Sortable + */ + _detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some((sortable) => { + //@ts-ignore + if (lastChild(sortable)) return; + + //@ts-ignore + let rect = getRect(sortable), + threshold = sortable[expando].options.emptyInsertThreshold, + insideHorizontally = + x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = + y >= rect.top - threshold && y <= rect.bottom + threshold; + + if (threshold && insideHorizontally && insideVertically) { + return (ret = sortable); + } + }); + return ret; + }, + _prepareGroup = function (options) { + function toFn(value, pull) { + return function (to, from, dragEl, evt) { + let sameGroup = + to.options.group.name && + from.options.group.name && + to.options.group.name === from.options.group.name; + + if (value == null && (pull || sameGroup)) { + // Default pull value + // Default pull and put value if same group + return true; + } else if (value == null || value === false) { + return false; + } else if (pull && value === "clone") { + return value; + } else if (typeof value === "function") { + return toFn(value(to, from, dragEl, evt), pull)( + to, + from, + dragEl, + evt + ); + } else { + let otherGroup = (pull ? to : from).options.group.name; + + return ( + value === true || + (typeof value === "string" && value === otherGroup) || + (value.join && value.indexOf(otherGroup) > -1) + ); + } + }; + } + + let group = {}; + let originalGroup = options.group; + + if (!originalGroup || typeof originalGroup != "object") { + originalGroup = { name: originalGroup }; + } + + //@ts-ignore + group.name = originalGroup.name; + //@ts-ignore + group.checkPull = toFn(originalGroup.pull, true); + //@ts-ignore + group.checkPut = toFn(originalGroup.put); + //@ts-ignore + group.revertClone = originalGroup.revertClone; + + options.group = group; + }, + _hideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", "none"); + } + }, + _unhideGhostForTarget = function () { + if (!supportCssPointerEvents && ghostEl) { + css(ghostEl, "display", ""); + } + }; + +// #1184 fix - Prevent click event on fallback if dragged but item not changed position +if (documentExists) { + document.addEventListener( + "click", + function (evt) { + if (ignoreNextClick) { + evt.preventDefault(); + evt.stopPropagation && evt.stopPropagation(); + evt.stopImmediatePropagation && evt.stopImmediatePropagation(); + ignoreNextClick = false; + return false; + } + }, + true + ); +} + +let nearestEmptyInsertDetectEvent = function (evt) { + if (dragEl) { + evt = evt.touches ? evt.touches[0] : evt; + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + + if (nearest) { + // Create imitation event + let event = {}; + for (let i in evt) { + if (evt.hasOwnProperty(i)) { + event[i] = evt[i]; + } + } + //@ts-ignore + event.target = event.rootEl = nearest; + //@ts-ignore + event.preventDefault = void 0; + //@ts-ignore + event.stopPropagation = void 0; + nearest[expando]._onDragOver(event); + } + } +}; + +let _checkOutsideTargetEl = function (evt) { + if (dragEl) { + dragEl.parentNode[expando]._isOutsideThisEl(evt.target); + } +}; + +/** + * @class Sortable + * @param {HTMLElement} el + * @param {Object} [options] + */ +function Sortable(el, options) { + if (!(el && el.nodeType && el.nodeType === 1)) { + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call( + el + )}`; + } + + this.el = el; // root element + this.options = options = Object.assign({}, options); + + // Export instance + el[expando] = this; + + let defaults = { + group: null, + sort: true, + disabled: false, + store: null, + handle: null, + draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*", + swapThreshold: 1, // percentage; 0 <= x <= 1 + invertSwap: false, // invert always + invertedSwapThreshold: null, // will be set to same as swapThreshold if default + removeCloneOnHide: true, + direction: function () { + return _detectDirection(el, this.options); + }, + ghostClass: "sortable-ghost", + chosenClass: "sortable-chosen", + dragClass: "sortable-drag", + ignore: "a, img", + filter: null, + preventOnFilter: true, + animation: 0, + easing: null, + setData: function (dataTransfer, dragEl) { + dataTransfer.setData("Text", dragEl.textContent); + }, + dropBubble: false, + dragoverBubble: false, + dataIdAttr: "data-id", + delay: 0, + delayOnTouchOnly: false, + touchStartThreshold: + (Number.parseInt ? Number : window).parseInt( + //@ts-ignore + window.devicePixelRatio, + 10 + ) || 1, + forceFallback: false, + fallbackClass: "sortable-fallback", + fallbackOnBody: false, + fallbackTolerance: 0, + fallbackOffset: { x: 0, y: 0 }, + supportPointer: + //@ts-ignore + Sortable.supportPointer !== false && "PointerEvent" in window, + emptyInsertThreshold: 5, + }; + + //@ts-ignore + PluginManager.initializePlugins(this, el, defaults); + + // Set default options + for (let name in defaults) { + !(name in options) && (options[name] = defaults[name]); + } + + _prepareGroup(options); + + // Bind all private methods + for (let fn in this) { + if (fn.charAt(0) === "_" && typeof this[fn] === "function") { + this[fn] = this[fn].bind(this); + } + } + + // Setup drag mode + this.nativeDraggable = options.forceFallback ? false : supportDraggable; + + if (this.nativeDraggable) { + // Touch start threshold cannot be greater than the native dragstart threshold + this.options.touchStartThreshold = 1; + } + + // Bind events + if (options.supportPointer) { + on(el, "pointerdown", this._onTapStart); + } else { + on(el, "mousedown", this._onTapStart); + on(el, "touchstart", this._onTapStart); + } + + if (this.nativeDraggable) { + on(el, "dragover", this); + on(el, "dragenter", this); + } + + sortables.push(this.el); + + // Restore sorting + options.store && + options.store.get && + this.sort(options.store.get(this) || []); + + // Add animation state manager + Object.assign(this, AnimationStateManager()); +} + +Sortable.prototype = /** @lends Sortable.prototype */ { + constructor: Sortable, + + _isOutsideThisEl: function (target) { + if (!this.el.contains(target) && target !== this.el) { + lastTarget = null; + } + }, + + _getDirection: function (evt, target) { + return typeof this.options.direction === "function" + ? this.options.direction.call(this, evt, target, dragEl) + : this.options.direction; + }, + + _onTapStart: function (/** Event|TouchEvent */ evt) { + if (!evt.cancelable) return; + let _this = this, + el = this.el, + options = this.options, + preventOnFilter = options.preventOnFilter, + type = evt.type, + touch = + (evt.touches && evt.touches[0]) || + (evt.pointerType && evt.pointerType === "touch" && evt), + target = (touch || evt).target, + originalTarget = + (evt.target.shadowRoot && + ((evt.path && evt.path[0]) || + (evt.composedPath && evt.composedPath()[0]))) || + target, + filter = options.filter; + + _saveInputCheckedState(el); + + // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. + if (dragEl) { + return; + } + + if ( + (/mousedown|pointerdown/.test(type) && evt.button !== 0) || + options.disabled + ) { + return; // only left button and enabled + } + + // cancel dnd if original target is content editable + if (originalTarget.isContentEditable) { + return; + } + + // Safari ignores further event handling after mousedown + if ( + !this.nativeDraggable && + Safari && + target && + target.tagName.toUpperCase() === "SELECT" + ) { + return; + } + + target = closest(target, options.draggable, el, false); + + if (target && target.animated) { + return; + } + + if (lastDownEl === target) { + // Ignoring duplicate `down` + return; + } + + // Get the index of the dragged element within its parent + //@ts-ignore + oldIndex = index(target); + oldDraggableIndex = index(target, options.draggable); + + // Check filter + if (typeof filter === "function") { + if (filter.call(this, evt, target, this)) { + _dispatchEvent({ + sortable: _this, + rootEl: originalTarget, + name: "filter", + targetEl: target, + toEl: el, + fromEl: el, + }); + pluginEvent("filter", _this, { evt }); + preventOnFilter && evt.cancelable && evt.preventDefault(); + return; // cancel dnd + } + } else if (filter) { + filter = filter.split(",").some(function (criteria) { + criteria = closest(originalTarget, criteria.trim(), el, false); + + if (criteria) { + _dispatchEvent({ + sortable: _this, + rootEl: criteria, + name: "filter", + targetEl: target, + fromEl: el, + toEl: el, + }); + pluginEvent("filter", _this, { evt }); + return true; + } + }); + + if (filter) { + preventOnFilter && evt.cancelable && evt.preventDefault(); + return; // cancel dnd + } + } + + if (options.handle && !closest(originalTarget, options.handle, el, false)) { + return; + } + + // Prepare `dragstart` + this._prepareDragStart(evt, touch, target); + }, + + _prepareDragStart: function ( + /** Event */ evt, + /** Touch */ touch, + /** HTMLElement */ target + ) { + let _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; + + if (target && !dragEl && target.parentNode === el) { + //@ts-ignore + let dragRect = getRect(target); + rootEl = el; + dragEl = target; + parentEl = dragEl.parentNode; + nextEl = dragEl.nextSibling; + lastDownEl = target; + activeGroup = options.group; + + //@ts-ignore + Sortable.dragged = dragEl; + + tapEvt = { + target: dragEl, + clientX: (touch || evt).clientX, + clientY: (touch || evt).clientY, + }; + + tapDistanceLeft = tapEvt.clientX - dragRect.left; + tapDistanceTop = tapEvt.clientY - dragRect.top; + + this._lastX = (touch || evt).clientX; + this._lastY = (touch || evt).clientY; + + dragEl.style["will-change"] = "all"; + + dragStartFn = function () { + pluginEvent("delayEnded", _this, { evt }); + //@ts-ignore + if (Sortable.eventCanceled) { + _this._onDrop(); + return; + } + // Delayed drag has been triggered + // we can re-enable the events: touchmove/mousemove + _this._disableDelayedDragEvents(); + + if (!FireFox && _this.nativeDraggable) { + dragEl.draggable = true; + } + + // Bind the events: dragstart/dragend + _this._triggerDragStart(evt, touch); + + // Drag start event + _dispatchEvent({ + sortable: _this, + name: "choose", + originalEvent: evt, + }); + + // Chosen item + toggleClass(dragEl, options.chosenClass, true); + }; + + // Disable "draggable" + options.ignore.split(",").forEach(function (criteria) { + find(dragEl, criteria.trim(), _disableDraggable); + }); + + on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent); + on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent); + on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent); + + on(ownerDocument, "mouseup", _this._onDrop); + on(ownerDocument, "touchend", _this._onDrop); + on(ownerDocument, "touchcancel", _this._onDrop); + + // Make dragEl draggable (must be before delay for FireFox) + if (FireFox && this.nativeDraggable) { + this.options.touchStartThreshold = 4; + dragEl.draggable = true; + } + + pluginEvent("delayStart", this, { evt }); + + // Delay is impossible for native DnD in Edge or IE + if ( + options.delay && + (!options.delayOnTouchOnly || touch) && + (!this.nativeDraggable || !(Edge || IE11OrLess)) + ) { + //@ts-ignore + if (Sortable.eventCanceled) { + this._onDrop(); + return; + } + // If the user moves the pointer or let go the click or touch + // before the delay has been reached: + // disable the delayed drag + on(ownerDocument, "mouseup", _this._disableDelayedDrag); + on(ownerDocument, "touchend", _this._disableDelayedDrag); + on(ownerDocument, "touchcancel", _this._disableDelayedDrag); + on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler); + on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler); + options.supportPointer && + on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler); + + _this._dragStartTimer = setTimeout(dragStartFn, options.delay); + } else { + dragStartFn(); + } + } + }, + + _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) { + let touch = e.touches ? e.touches[0] : e; + if ( + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) >= + Math.floor( + this.options.touchStartThreshold / + ((this.nativeDraggable && window.devicePixelRatio) || 1) + ) + ) { + this._disableDelayedDrag(); + } + }, + + _disableDelayedDrag: function () { + dragEl && _disableDraggable(dragEl); + clearTimeout(this._dragStartTimer); + + this._disableDelayedDragEvents(); + }, + + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; + off(ownerDocument, "mouseup", this._disableDelayedDrag); + off(ownerDocument, "touchend", this._disableDelayedDrag); + off(ownerDocument, "touchcancel", this._disableDelayedDrag); + off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler); + off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler); + }, + + _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) { + touch = touch || (evt.pointerType == "touch" && evt); + + if (!this.nativeDraggable || touch) { + if (this.options.supportPointer) { + on(document, "pointermove", this._onTouchMove); + } else if (touch) { + on(document, "touchmove", this._onTouchMove); + } else { + on(document, "mousemove", this._onTouchMove); + } + } else { + on(dragEl, "dragend", this); + on(rootEl, "dragstart", this._onDragStart); + } + + try { + //@ts-ignore + if (document.selection) { + // Timeout neccessary for IE9 + _nextTick(function () { + //@ts-ignore + document.selection.empty(); + }); + } else { + window.getSelection().removeAllRanges(); + } + } catch (err) {} + }, + + _dragStarted: function (fallback, evt) { + let _this = this; + awaitingDragStarted = false; + if (rootEl && dragEl) { + pluginEvent("dragStarted", this, { evt }); + + if (this.nativeDraggable) { + on(document, "dragover", _checkOutsideTargetEl); + } + let options = this.options; + + // Apply effect + !fallback && toggleClass(dragEl, options.dragClass, false); + toggleClass(dragEl, options.ghostClass, true); + + //@ts-ignore + Sortable.active = this; + + fallback && this._appendGhost(); + + // Drag start event + _dispatchEvent({ + sortable: this, + name: "start", + originalEvent: evt, + }); + } else { + this._nulling(); + } + }, + + _emulateDragOver: function () { + if (touchEvt) { + this._lastX = touchEvt.clientX; + this._lastY = touchEvt.clientY; + + _hideGhostForTarget(); + + let target = document.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); + let parent = target; + + while (target && target.shadowRoot) { + target = target.shadowRoot.elementFromPoint( + touchEvt.clientX, + touchEvt.clientY + ); + if (target === parent) break; + parent = target; + } + + dragEl.parentNode[expando]._isOutsideThisEl(target); + + if (parent) { + do { + if (parent[expando]) { + let inserted; + + inserted = parent[expando]._onDragOver({ + clientX: touchEvt.clientX, + clientY: touchEvt.clientY, + target: target, + rootEl: parent, + }); + + if (inserted && !this.options.dragoverBubble) { + break; + } + } + + target = parent; // store last element + } while ( + /* jshint boss:true */ + //@ts-ignore + (parent = parent.parentNode) + ); + } + + _unhideGhostForTarget(); + } + }, + + _onTouchMove: function (/**TouchEvent*/ evt) { + if (tapEvt) { + let options = this.options, + fallbackTolerance = options.fallbackTolerance, + fallbackOffset = options.fallbackOffset, + touch = evt.touches ? evt.touches[0] : evt, + ghostMatrix = ghostEl && matrix(ghostEl, true), + scaleX = ghostEl && ghostMatrix && ghostMatrix.a, + scaleY = ghostEl && ghostMatrix && ghostMatrix.d, + relativeScrollOffset = + PositionGhostAbsolutely && + ghostRelativeParent && + getRelativeScrollOffset(ghostRelativeParent), + dx = + (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + + (relativeScrollOffset + ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] + : 0) / + (scaleX || 1), + dy = + (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + + (relativeScrollOffset + ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] + : 0) / + (scaleY || 1); + + // only set the status to dragging, when we are actually dragging + //@ts-ignore + if (!Sortable.active && !awaitingDragStarted) { + if ( + fallbackTolerance && + Math.max( + Math.abs(touch.clientX - this._lastX), + Math.abs(touch.clientY - this._lastY) + ) < fallbackTolerance + ) { + return; + } + this._onDragStart(evt, true); + } + + if (ghostEl) { + if (ghostMatrix) { + ghostMatrix.e += dx - (lastDx || 0); + ghostMatrix.f += dy - (lastDy || 0); + } else { + ghostMatrix = { + a: 1, + b: 0, + c: 0, + d: 1, + e: dx, + f: dy, + }; + } + + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; + + css(ghostEl, "webkitTransform", cssMatrix); + css(ghostEl, "mozTransform", cssMatrix); + css(ghostEl, "msTransform", cssMatrix); + css(ghostEl, "transform", cssMatrix); + + lastDx = dx; + lastDy = dy; + + touchEvt = touch; + } + + evt.cancelable && evt.preventDefault(); + } + }, + + _appendGhost: function () { + // Bug if using scale(): https://stackoverflow.com/questions/2637058 + // Not being adjusted for + if (!ghostEl) { + let container = this.options.fallbackOnBody ? document.body : rootEl, + rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), + options = this.options; + + // Position absolutely + if (PositionGhostAbsolutely) { + // Get relatively positioned parent + ghostRelativeParent = container; + + while ( + //@ts-ignore + css(ghostRelativeParent, "position") === "static" && + //@ts-ignore + css(ghostRelativeParent, "transform") === "none" && + ghostRelativeParent !== document + ) { + ghostRelativeParent = ghostRelativeParent.parentNode; + } + + if ( + ghostRelativeParent !== document.body && + ghostRelativeParent !== document.documentElement + ) { + if (ghostRelativeParent === document) + ghostRelativeParent = getWindowScrollingElement(); + + rect.top += ghostRelativeParent.scrollTop; + rect.left += ghostRelativeParent.scrollLeft; + } else { + ghostRelativeParent = getWindowScrollingElement(); + } + ghostRelativeParentInitialScroll = getRelativeScrollOffset( + ghostRelativeParent + ); + } + + ghostEl = dragEl.cloneNode(true); + + toggleClass(ghostEl, options.ghostClass, false); + toggleClass(ghostEl, options.fallbackClass, true); + toggleClass(ghostEl, options.dragClass, true); + + css(ghostEl, "transition", ""); + css(ghostEl, "transform", ""); + + css(ghostEl, "box-sizing", "border-box"); + css(ghostEl, "margin", 0); + css(ghostEl, "top", rect.top); + css(ghostEl, "left", rect.left); + css(ghostEl, "width", rect.width); + css(ghostEl, "height", rect.height); + css(ghostEl, "opacity", "0.8"); + css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed"); + css(ghostEl, "zIndex", "100000"); + css(ghostEl, "pointerEvents", "none"); + + //@ts-ignore + Sortable.ghost = ghostEl; + + container.appendChild(ghostEl); + + // Set transform-origin + css( + ghostEl, + "transform-origin", + (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 + + "% " + + (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 + + "%" + ); + } + }, + + _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) { + let _this = this; + let dataTransfer = evt.dataTransfer; + let options = _this.options; + + pluginEvent("dragStart", this, { evt }); + //@ts-ignore + if (Sortable.eventCanceled) { + this._onDrop(); + return; + } + + pluginEvent("setupClone", this); + //@ts-ignore + if (!Sortable.eventCanceled) { + cloneEl = clone(dragEl); + + cloneEl.draggable = false; + cloneEl.style["will-change"] = ""; + + this._hideClone(); + + toggleClass(cloneEl, this.options.chosenClass, false); + //@ts-ignore + Sortable.clone = cloneEl; + } + + // #1143: IFrame support workaround + _this.cloneId = _nextTick(function () { + pluginEvent("clone", _this); + //@ts-ignore + if (Sortable.eventCanceled) return; + + if (!_this.options.removeCloneOnHide) { + rootEl.insertBefore(cloneEl, dragEl); + } + _this._hideClone(); + + _dispatchEvent({ + sortable: _this, + name: "clone", + }); + }); + + !fallback && toggleClass(dragEl, options.dragClass, true); + + // Set proper drop events + if (fallback) { + ignoreNextClick = true; + _this._loopId = setInterval(_this._emulateDragOver, 50); + } else { + // Undo what was set in _prepareDragStart before drag started + off(document, "mouseup", _this._onDrop); + off(document, "touchend", _this._onDrop); + off(document, "touchcancel", _this._onDrop); + + if (dataTransfer) { + dataTransfer.effectAllowed = "move"; + options.setData && options.setData.call(_this, dataTransfer, dragEl); + } + + on(document, "drop", _this); + + // #1276 fix: + css(dragEl, "transform", "translateZ(0)"); + } + + awaitingDragStarted = true; + + _this._dragStartId = _nextTick( + _this._dragStarted.bind(_this, fallback, evt) + ); + on(document, "selectstart", _this); + + moved = true; + + if (Safari) { + css(document.body, "user-select", "none"); + } + }, + + // Returns true - if no further action is needed (either inserted or another condition) + _onDragOver: function (/**Event*/ evt) { + let el = this.el, + target = evt.target, + dragRect, + targetRect, + revert, + options = this.options, + group = options.group, + //@ts-ignore + activeSortable = Sortable.active, + isOwner = activeGroup === group, + canSort = options.sort, + fromSortable = putSortable || activeSortable, + vertical, + _this = this, + completedFired = false; + + if (_silent) return; + + function dragOverEvent(name, extra) { + pluginEvent(name, _this, { + evt, + isOwner, + axis: vertical ? "vertical" : "horizontal", + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + onMove(target, after) { + return onMove( + rootEl, + el, + dragEl, + dragRect, + target, + //@ts-ignore + getRect(target), + evt, + after + ); + }, + changed, + ...extra, + }); + } + + // Capture animation state + function capture() { + //@ts-ignore + dragOverEvent("dragOverAnimationCapture"); + + _this.captureAnimationState(); + if (_this !== fromSortable) { + fromSortable.captureAnimationState(); + } + } + + // Return invocation when dragEl is inserted (or completed) + function completed(insertion) { + dragOverEvent("dragOverCompleted", { insertion }); + + if (insertion) { + // Clones must be hidden before folding animation to capture dragRectAbsolute properly + if (isOwner) { + activeSortable._hideClone(); + } else { + activeSortable._showClone(_this); + } + + if (_this !== fromSortable) { + // Set ghost class to new sortable's ghost class + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : activeSortable.options.ghostClass, + false + ); + toggleClass(dragEl, options.ghostClass, true); + } + + //@ts-ignore + if (putSortable !== _this && _this !== Sortable.active) { + putSortable = _this; + //@ts-ignore + } else if (_this === Sortable.active && putSortable) { + putSortable = null; + } + + // Animation + if (fromSortable === _this) { + _this._ignoreWhileAnimating = target; + } + _this.animateAll(function () { + //@ts-ignore + dragOverEvent("dragOverAnimationComplete"); + _this._ignoreWhileAnimating = null; + }); + if (_this !== fromSortable) { + fromSortable.animateAll(); + fromSortable._ignoreWhileAnimating = null; + } + } + + // Null lastTarget if it is not inside a previously swapped element + if ( + (target === dragEl && !dragEl.animated) || + (target === el && !target.animated) + ) { + lastTarget = null; + } + + // no bubbling and not fallback + if (!options.dragoverBubble && !evt.rootEl && target !== document) { + dragEl.parentNode[expando]._isOutsideThisEl(evt.target); + + // Do not detect for empty insert if already inserted + !insertion && nearestEmptyInsertDetectEvent(evt); + } + + !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); + + return (completedFired = true); + } + + // Call when dragEl has been inserted + function changed() { + //@ts-ignore + newIndex = index(dragEl); + newDraggableIndex = index(dragEl, options.draggable); + _dispatchEvent({ + sortable: _this, + name: "change", + toEl: el, + newIndex, + newDraggableIndex, + originalEvent: evt, + }); + } + + if (evt.preventDefault !== void 0) { + evt.cancelable && evt.preventDefault(); + } + + target = closest(target, options.draggable, el, true); + + //@ts-ignore + dragOverEvent("dragOver"); + //@ts-ignore + if (Sortable.eventCanceled) return completedFired; + + if ( + dragEl.contains(evt.target) || + (target.animated && target.animatingX && target.animatingY) || + _this._ignoreWhileAnimating === target + ) { + return completed(false); + } + + ignoreNextClick = false; + + if ( + activeSortable && + !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : putSortable === this || + ((this.lastPutMode = activeGroup.checkPull( + this, + activeSortable, + dragEl, + evt + )) && + group.checkPut(this, activeSortable, dragEl, evt))) + ) { + vertical = this._getDirection(evt, target) === "vertical"; + + //@ts-ignore + dragRect = getRect(dragEl); + + //@ts-ignore + dragOverEvent("dragOverValid"); + //@ts-ignore + if (Sortable.eventCanceled) return completedFired; + + if (revert) { + parentEl = rootEl; // actualization + capture(); + + this._hideClone(); + + //@ts-ignore + dragOverEvent("revert"); + + //@ts-ignore + if (!Sortable.eventCanceled) { + if (nextEl) { + rootEl.insertBefore(dragEl, nextEl); + } else { + rootEl.appendChild(dragEl); + } + } + + return completed(true); + } + + let elLastChild = lastChild(el, options.draggable); + + if ( + !elLastChild || + (_ghostIsLast(evt, vertical, this) && !elLastChild.animated) + ) { + // If already at end of list: Do not insert + if (elLastChild === dragEl) { + return completed(false); + } + + // assign target only if condition is true + if (elLastChild && el === evt.target) { + target = elLastChild; + } + + if (target) { + //@ts-ignore + targetRect = getRect(target); + } + + if ( + onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + !!target + ) !== false + ) { + capture(); + el.appendChild(dragEl); + parentEl = el; // actualization + + changed(); + return completed(true); + } + } else if (target.parentNode === el) { + //@ts-ignore + targetRect = getRect(target); + let direction = 0, + targetBeforeFirstSwap, + differentLevel = dragEl.parentNode !== el, + differentRowCol = !_dragElInRowColumn( + (dragEl.animated && dragEl.toRect) || dragRect, + (target.animated && target.toRect) || targetRect, + vertical + ), + side1 = vertical ? "top" : "left", + scrolledPastTop = + isScrolledPast(target, "top", "top") || + isScrolledPast(dragEl, "top", "top"), + scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; + + if (lastTarget !== target) { + targetBeforeFirstSwap = targetRect[side1]; + pastFirstInvertThresh = false; + isCircumstantialInvert = + (!differentRowCol && options.invertSwap) || differentLevel; + } + + direction = _getSwapDirection( + evt, + target, + targetRect, + vertical, + differentRowCol ? 1 : options.swapThreshold, + options.invertedSwapThreshold == null + ? options.swapThreshold + : options.invertedSwapThreshold, + isCircumstantialInvert, + lastTarget === target + ); + + let sibling; + + if (direction !== 0) { + // Check if target is beside dragEl in respective direction (ignoring hidden elements) + //@ts-ignore + let dragIndex = index(dragEl); + + do { + dragIndex -= direction; + sibling = parentEl.children[dragIndex]; + } while ( + sibling && + //@ts-ignore + (css(sibling, "display") === "none" || sibling === ghostEl) + ); + } + // If dragEl is already beside target: Do not insert + if (direction === 0 || sibling === target) { + return completed(false); + } + + lastTarget = target; + + lastDirection = direction; + + let nextSibling = target.nextElementSibling, + after = false; + + after = direction === 1; + + let moveVector = onMove( + rootEl, + el, + dragEl, + dragRect, + target, + targetRect, + evt, + after + ); + + if (moveVector !== false) { + if (moveVector === 1 || moveVector === -1) { + after = moveVector === 1; + } + + _silent = true; + setTimeout(_unsilent, 30); + + capture(); + + if (after && !nextSibling) { + el.appendChild(dragEl); + } else { + target.parentNode.insertBefore( + dragEl, + after ? nextSibling : target + ); + } + + // Undo chrome's scroll adjustment (has no effect on other browsers) + if (scrolledPastTop) { + scrollBy( + scrolledPastTop, + 0, + scrollBefore - scrolledPastTop.scrollTop + ); + } + + parentEl = dragEl.parentNode; // actualization + + // must be done before animation + if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { + targetMoveDistance = Math.abs( + //@ts-ignore + targetBeforeFirstSwap - getRect(target)[side1] + ); + } + changed(); + + return completed(true); + } + } + + if (el.contains(dragEl)) { + return completed(false); + } + } + + return false; + }, + + _ignoreWhileAnimating: null, + + _offMoveEvents: function () { + off(document, "mousemove", this._onTouchMove); + off(document, "touchmove", this._onTouchMove); + off(document, "pointermove", this._onTouchMove); + off(document, "dragover", nearestEmptyInsertDetectEvent); + off(document, "mousemove", nearestEmptyInsertDetectEvent); + off(document, "touchmove", nearestEmptyInsertDetectEvent); + }, + + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; + + off(ownerDocument, "mouseup", this._onDrop); + off(ownerDocument, "touchend", this._onDrop); + off(ownerDocument, "pointerup", this._onDrop); + off(ownerDocument, "touchcancel", this._onDrop); + off(document, "selectstart", this); + }, + + _onDrop: function (/**Event*/ evt) { + let el = this.el, + options = this.options; + + // Get the index of the dragged element within its parent + //@ts-ignore + newIndex = index(dragEl); + newDraggableIndex = index(dragEl, options.draggable); + + pluginEvent("drop", this, { + evt, + }); + + parentEl = dragEl && dragEl.parentNode; + + // Get again after plugin event + //@ts-ignore + newIndex = index(dragEl); + newDraggableIndex = index(dragEl, options.draggable); + + //@ts-ignore + if (Sortable.eventCanceled) { + this._nulling(); + return; + } + + awaitingDragStarted = false; + isCircumstantialInvert = false; + pastFirstInvertThresh = false; + + clearInterval(this._loopId); + + clearTimeout(this._dragStartTimer); + + _cancelNextTick(this.cloneId); + _cancelNextTick(this._dragStartId); + + // Unbind events + if (this.nativeDraggable) { + off(document, "drop", this); + off(el, "dragstart", this._onDragStart); + } + this._offMoveEvents(); + this._offUpEvents(); + + if (Safari) { + css(document.body, "user-select", ""); + } + + css(dragEl, "transform", ""); + + if (evt) { + if (moved) { + evt.cancelable && evt.preventDefault(); + !options.dropBubble && evt.stopPropagation(); + } + + ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); + + if ( + rootEl === parentEl || + (putSortable && putSortable.lastPutMode !== "clone") + ) { + // Remove clone(s) + cloneEl && + cloneEl.parentNode && + cloneEl.parentNode.removeChild(cloneEl); + } + + if (dragEl) { + if (this.nativeDraggable) { + off(dragEl, "dragend", this); + } + + _disableDraggable(dragEl); + dragEl.style["will-change"] = ""; + + // Remove classes + // ghostClass is added in dragStarted + if (moved && !awaitingDragStarted) { + toggleClass( + dragEl, + putSortable + ? putSortable.options.ghostClass + : this.options.ghostClass, + false + ); + } + toggleClass(dragEl, this.options.chosenClass, false); + + // Drag stop event + _dispatchEvent({ + sortable: this, + name: "unchoose", + toEl: parentEl, + newIndex: null, + newDraggableIndex: null, + originalEvent: evt, + }); + + if (rootEl !== parentEl) { + if (newIndex >= 0) { + // Add event + _dispatchEvent({ + rootEl: parentEl, + name: "add", + toEl: parentEl, + fromEl: rootEl, + originalEvent: evt, + }); + + // Remove event + _dispatchEvent({ + sortable: this, + name: "remove", + toEl: parentEl, + originalEvent: evt, + }); + + // drag from one list and drop into another + _dispatchEvent({ + rootEl: parentEl, + name: "sort", + toEl: parentEl, + fromEl: rootEl, + originalEvent: evt, + }); + + _dispatchEvent({ + sortable: this, + name: "sort", + toEl: parentEl, + originalEvent: evt, + }); + } + + putSortable && putSortable.save(); + } else { + if (newIndex !== oldIndex) { + if (newIndex >= 0) { + // drag & drop within the same list + _dispatchEvent({ + sortable: this, + name: "update", + toEl: parentEl, + originalEvent: evt, + }); + + _dispatchEvent({ + sortable: this, + name: "sort", + toEl: parentEl, + originalEvent: evt, + }); + } + } + } + + //@ts-ignore + if (Sortable.active) { + /* jshint eqnull:true */ + if (newIndex == null || newIndex === -1) { + newIndex = oldIndex; + newDraggableIndex = oldDraggableIndex; + } + + _dispatchEvent({ + sortable: this, + name: "end", + toEl: parentEl, + originalEvent: evt, + }); + + // Save sorting + this.save(); + } + } + } + this._nulling(); + }, + + _nulling: function () { + pluginEvent("nulling", this); + //@ts-ignore + rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; + + savedInputChecked.forEach(function (el) { + el.checked = true; + }); + + savedInputChecked.length = lastDx = lastDy = 0; + }, + + handleEvent: function (/**Event*/ evt) { + switch (evt.type) { + case "drop": + case "dragend": + this._onDrop(evt); + break; + + case "dragenter": + case "dragover": + if (dragEl) { + this._onDragOver(evt); + _globalDragOver(evt); + } + break; + + case "selectstart": + evt.preventDefault(); + break; + } + }, + + /** + * Serializes the item into an array of string. + * @returns {String[]} + */ + toArray: function () { + let order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; + + for (; i < n; i++) { + el = children[i]; + if (closest(el, options.draggable, this.el, false)) { + order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); + } + } + + return order; + }, + + /** + * Sorts the elements according to the array. + * @param {String[]} order order of the items + */ + sort: function (order) { + let items = {}, + rootEl = this.el; + + this.toArray().forEach(function (id, i) { + let el = rootEl.children[i]; + + if (closest(el, this.options.draggable, rootEl, false)) { + items[id] = el; + } + }, this); + + order.forEach(function (id) { + if (items[id]) { + rootEl.removeChild(items[id]); + rootEl.appendChild(items[id]); + } + }); + }, + + /** + * Save the current sorting + */ + save: function () { + let store = this.options.store; + store && store.set && store.set(this); + }, + + /** + * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + * @param {HTMLElement} el + * @param {String} [selector] default: `options.draggable` + * @returns {HTMLElement|null} + */ + closest: function (el, selector) { + return closest(el, selector || this.options.draggable, this.el, false); + }, + + /** + * Set/get option + * @param {string} name + * @param {*} [value] + * @returns {*} + */ + option: function (name, value) { + let options = this.options; + + if (value === void 0) { + return options[name]; + } else { + let modifiedValue = PluginManager.modifyOption(this, name, value); + if (typeof modifiedValue !== "undefined") { + options[name] = modifiedValue; + } else { + options[name] = value; + } + + if (name === "group") { + _prepareGroup(options); + } + } + }, + + /** + * Destroy + */ + destroy: function () { + pluginEvent("destroy", this); + let el = this.el; + + el[expando] = null; + + off(el, "mousedown", this._onTapStart); + off(el, "touchstart", this._onTapStart); + off(el, "pointerdown", this._onTapStart); + + if (this.nativeDraggable) { + off(el, "dragover", this); + off(el, "dragenter", this); + } + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function ( + el + ) { + el.removeAttribute("draggable"); + }); + + this._onDrop(); + + this._disableDelayedDragEvents(); + + sortables.splice(sortables.indexOf(this.el), 1); + + this.el = el = null; + }, + + _hideClone: function () { + if (!cloneHidden) { + pluginEvent("hideClone", this); + //@ts-ignore + if (Sortable.eventCanceled) return; + + css(cloneEl, "display", "none"); + if (this.options.removeCloneOnHide && cloneEl.parentNode) { + cloneEl.parentNode.removeChild(cloneEl); + } + cloneHidden = true; + } + }, + + _showClone: function (putSortable) { + if (putSortable.lastPutMode !== "clone") { + this._hideClone(); + return; + } + + if (cloneHidden) { + pluginEvent("showClone", this); + //@ts-ignore + if (Sortable.eventCanceled) return; + + // show clone at dragEl or original position + if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { + rootEl.insertBefore(cloneEl, dragEl); + } else if (nextEl) { + rootEl.insertBefore(cloneEl, nextEl); + } else { + rootEl.appendChild(cloneEl); + } + + if (this.options.group.revertClone) { + this.animate(dragEl, cloneEl); + } + + css(cloneEl, "display", ""); + cloneHidden = false; + } + }, +}; + +function _globalDragOver(/**Event*/ evt) { + if (evt.dataTransfer) { + evt.dataTransfer.dropEffect = "move"; + } + evt.cancelable && evt.preventDefault(); +} + +function onMove( + fromEl, + toEl, + dragEl, + dragRect, + targetEl, + targetRect, + originalEvent, + willInsertAfter +) { + let evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + // Support for new CustomEvent feature + if (window.CustomEvent && !IE11OrLess && !Edge) { + evt = new CustomEvent("move", { + bubbles: true, + cancelable: true, + }); + } else { + evt = document.createEvent("Event"); + evt.initEvent("move", true, true); + } + + evt.to = toEl; + evt.from = fromEl; + evt.dragged = dragEl; + evt.draggedRect = dragRect; + evt.related = targetEl || toEl; + //@ts-ignore + evt.relatedRect = targetRect || getRect(toEl); + evt.willInsertAfter = willInsertAfter; + + evt.originalEvent = originalEvent; + + fromEl.dispatchEvent(evt); + + if (onMoveFn) { + retVal = onMoveFn.call(sortable, evt, originalEvent); + } + + return retVal; +} + +function _disableDraggable(el) { + el.draggable = false; +} + +function _unsilent() { + _silent = false; +} + +function _ghostIsLast(evt, vertical, sortable) { + //@ts-ignore + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; + + return vertical + ? evt.clientX > rect.right + spacer || + (evt.clientX <= rect.right && + evt.clientY > rect.bottom && + evt.clientX >= rect.left) + : (evt.clientX > rect.right && evt.clientY > rect.top) || + (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer); +} + +function _getSwapDirection( + evt, + target, + targetRect, + vertical, + swapThreshold, + invertedSwapThreshold, + invertSwap, + isLastTarget +) { + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, + targetLength = vertical ? targetRect.height : targetRect.width, + targetS1 = vertical ? targetRect.top : targetRect.left, + targetS2 = vertical ? targetRect.bottom : targetRect.right, + invert = false; + + if (!invertSwap) { + // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold + if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { + // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 + // check if past first invert threshold on side opposite of lastDirection + if ( + !pastFirstInvertThresh && + (lastDirection === 1 + ? mouseOnAxis > targetS1 + (targetLength * invertedSwapThreshold) / 2 + : mouseOnAxis < targetS2 - (targetLength * invertedSwapThreshold) / 2) + ) { + // past first invert threshold, do not restrict inverted threshold to dragEl shadow + pastFirstInvertThresh = true; + } + + if (!pastFirstInvertThresh) { + // dragEl shadow (target move distance shadow) + if ( + lastDirection === 1 + ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow + : mouseOnAxis > targetS2 - targetMoveDistance + ) { + return -lastDirection; + } + } else { + invert = true; + } + } else { + // Regular + if ( + mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 && + mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2 + ) { + return _getInsertDirection(target); + } + } + } + + invert = invert || invertSwap; + + if (invert) { + // Invert of regular + if ( + mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 || + mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2 + ) { + return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1; + } + } + + return 0; +} + +/** + * Gets the direction dragEl must be swapped relative to target in order to make it + * seem that dragEl has been "inserted" into that element's position + * @param {HTMLElement} target The target whose position dragEl is being inserted at + * @return {Number} Direction dragEl must be swapped + */ +function _getInsertDirection(target) { + //@ts-ignore + if (index(dragEl) < index(target)) { + return 1; + } else { + return -1; + } +} + +/** + * Generate id + * @param {HTMLElement} el + * @returns {String} + * @private + */ +function _generateId(el) { + let str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; + + while (i--) { + sum += str.charCodeAt(i); + } + + return sum.toString(36); +} + +function _saveInputCheckedState(root) { + savedInputChecked.length = 0; + + let inputs = root.getElementsByTagName("input"); + let idx = inputs.length; + + while (idx--) { + let el = inputs[idx]; + el.checked && savedInputChecked.push(el); + } +} + +function _nextTick(fn) { + return setTimeout(fn, 0); +} + +function _cancelNextTick(id) { + return clearTimeout(id); +} + +// Fixed #973: +if (documentExists) { + on(document, "touchmove", function (evt) { + //@ts-ignore + if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { + evt.preventDefault(); + } + }); +} + +// Export utils +Sortable.utils = { + on: on, + off: off, + css: css, + find: find, + is: function (el, selector) { + return !!closest(el, selector, el, false); + }, + extend: extend, + throttle: throttle, + closest: closest, + toggleClass: toggleClass, + clone: clone, + index: index, + nextTick: _nextTick, + cancelNextTick: _cancelNextTick, + detectDirection: _detectDirection, + getChild: getChild, +}; + +/** + * Get the Sortable instance of an element + * @param {HTMLElement} element The element + * @return {Sortable|undefined} The instance of Sortable + */ +Sortable.get = function (element) { + return element[expando]; +}; + +/** + * Mount a plugin to Sortable + * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted + */ +Sortable.mount = function (...plugins) { + if (plugins[0].constructor === Array) plugins = plugins[0]; + + plugins.forEach((plugin) => { + if (!plugin.prototype || !plugin.prototype.constructor) { + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call( + plugin + )}`; + } + if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils }; + + PluginManager.mount(plugin); + }); +}; + +/** + * Create sortable instance + * @param {HTMLElement} el + * @param {Object} [options] + */ +Sortable.create = function (el, options) { + return new Sortable(el, options); +}; + +// Export +Sortable.version = version; + +export default Sortable; diff --git a/packages/sortable/tsconfig.json b/packages/sortable/tsconfig.json new file mode 100644 index 000000000..5b94e731b --- /dev/null +++ b/packages/sortable/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "resolveJsonModule": true + }, + "include": ["src"] +} diff --git a/packages/sortablejs/.gitignore b/packages/sortablejs/.gitignore new file mode 100644 index 000000000..0754915fd --- /dev/null +++ b/packages/sortablejs/.gitignore @@ -0,0 +1,2 @@ +dist/ +modular/ diff --git a/packages/sortablejs/CONTRIBUTE.md b/packages/sortablejs/CONTRIBUTE.md new file mode 100644 index 000000000..f2c261653 --- /dev/null +++ b/packages/sortablejs/CONTRIBUTE.md @@ -0,0 +1,63 @@ +# Contribute to SortableJS + +## Entry points + +todo: fix + +All files in `src` are points of entry. + +A plugin is either exported or mounted. + +The plugins are mounted as follows: + +### Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Mounted or Exported
plugincoredefaultcomplete
AutoScrollExportedMountedMounted
RevertOnSpillExportedMountedMounted
RemoveonSpillExportedMountedMounted
MultiDragExportedExportedMounted
SwapExportedExportedMounted
+ +This may be deprecated in the future, in favour of setting an option in the constructor. +It looks like this was done so bundle sizes could be controlled. +We now have treeshaking when bundling apps with NodeJS, so I feel we should have all plugins mounted via cdn and then no plugins mounted on nodejs imports. diff --git a/packages/sortablejs/package.json b/packages/sortablejs/package.json new file mode 100644 index 000000000..47f6d9e88 --- /dev/null +++ b/packages/sortablejs/package.json @@ -0,0 +1,45 @@ +{ + "name": "sortablejs", + "version": "1.12.0", + "description": "JavaScript library for reorderable drag-and-drop lists on modern browsers and touch devices", + "main": "dist/sortable.umd.js", + "scripts": { + "build": "npm-run-all --parallel build:*", + "build:umd": "microbundle -f umd -i src/umd.ts -o dist/sortable.umd.js --name Sortable", + "build:modular-core": "microbundle -f esm -i src/modular-core.ts -o modular/sortable.core.esm.js", + "build:modular-default": "microbundle -f esm -i src/modular-default.ts -o modular/sortable.esm.js", + "build:modular-complete": "microbundle -f esm -i src/modular-complete.ts -o modular/sortable.complete.esm.js", + "prepublishOnly": "yarn build" + }, + "files": [ + "dist", + "modular" + ], + "repository": { + "type": "git", + "url": "git://github.com/SortableJS/Sortable.git" + }, + "maintainers": [ + "Konstantin Lebedev ", + "Owen Mills ", + "Wayne Van Son " + ], + "keywords": [ + "sortable", + "reorder", + "drag", + "meteor", + "angular", + "ng-sortable", + "react", + "vue", + "mixin" + ], + "license": "MIT", + "devDependencies": { + "colorette": "^1.2.1", + "microbundle": "^0.12.3", + "npm-run-all": "^4.1.5", + "typescript": "^3.9.7" + } +} diff --git a/packages/sortablejs/src/modular-complete.ts b/packages/sortablejs/src/modular-complete.ts new file mode 100644 index 000000000..39ea8e4de --- /dev/null +++ b/packages/sortablejs/src/modular-complete.ts @@ -0,0 +1,16 @@ +import Sortable from "../../sortable/src/Sortable"; +import Swap from "../../plugins/swap/src"; +import MultiDrag from "../../plugins/multi-drag/src"; +import { RemoveOnSpill, RevertOnSpill } from "../../plugins/on-spill/src"; +import AutoScroll from "../../plugins/auto-scroll/src"; + +//@ts-ignore +Sortable.mount(new AutoScroll()); +Sortable.mount(RemoveOnSpill, RevertOnSpill); +//@ts-ignore +Sortable.mount(new Swap()); +//@ts-ignore +Sortable.mount(new MultiDrag()); + +export default Sortable; +export { Sortable }; diff --git a/packages/sortablejs/src/modular-core.ts b/packages/sortablejs/src/modular-core.ts new file mode 100644 index 000000000..fc9afa4e3 --- /dev/null +++ b/packages/sortablejs/src/modular-core.ts @@ -0,0 +1,9 @@ +import Sortable from "../../sortable/src/Sortable"; +import Swap from "../../plugins/swap/src"; +import MultiDrag from "../../plugins/multi-drag/src"; +import OnSpill from "../../plugins/on-spill/src"; +import AutoScroll from "../../plugins/auto-scroll/src"; + +export default Sortable; +//@ts-ignore +export { Sortable, AutoScroll, OnSpill, Swap, MultiDrag }; diff --git a/packages/sortablejs/src/modular-default.ts b/packages/sortablejs/src/modular-default.ts new file mode 100644 index 000000000..307f3656b --- /dev/null +++ b/packages/sortablejs/src/modular-default.ts @@ -0,0 +1,13 @@ +import Sortable from "../../sortable/src/Sortable"; +import Swap from "../../plugins/swap/src"; +import MultiDrag from "../../plugins/multi-drag/src"; +import AutoScroll from "../../plugins/auto-scroll/src"; + +import { RemoveOnSpill, RevertOnSpill } from "../../plugins/on-spill/src"; + +//@ts-ignore +Sortable.mount(new AutoScroll()); +Sortable.mount(RemoveOnSpill, RevertOnSpill); + +export default Sortable; +export { Sortable, Swap, MultiDrag }; diff --git a/packages/sortablejs/src/umd.ts b/packages/sortablejs/src/umd.ts new file mode 100644 index 000000000..abebfff36 --- /dev/null +++ b/packages/sortablejs/src/umd.ts @@ -0,0 +1,15 @@ +import Sortable from "../../sortable/src/Sortable"; +import Swap from "../../plugins/swap/src"; +import MultiDrag from "../../plugins/multi-drag/src"; +import { RemoveOnSpill, RevertOnSpill } from "../../plugins/on-spill/src"; +import AutoScroll from "../../plugins/auto-scroll/src"; + +//@ts-ignore +Sortable.mount(new AutoScroll()); +Sortable.mount(RemoveOnSpill, RevertOnSpill); +//@ts-ignore +Sortable.mount(new Swap()); +//@ts-ignore +Sortable.mount(new MultiDrag()); + +export default Sortable; diff --git a/packages/sortablejs/tsconfig.json b/packages/sortablejs/tsconfig.json new file mode 100644 index 000000000..1b59db93a --- /dev/null +++ b/packages/sortablejs/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "strict": false, + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "declaration": false + }, + "include": ["src", "../sortable", "../plugins", "../utils"] +} diff --git a/packages/sortablejs/yarn.lock b/packages/sortablejs/yarn.lock new file mode 100644 index 000000000..6872bad85 --- /dev/null +++ b/packages/sortablejs/yarn.lock @@ -0,0 +1,3429 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.10.2": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" + integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.6" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.5" + "@babel/types" "^7.11.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== + dependencies: + "@babel/types" "^7.11.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-builder-react-jsx-experimental@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz#4ea43dd63857b0a35cd1f1b161dc29b43414e79f" + integrity sha512-Vc4aPJnRZKWfzeCBsqTBnzulVNjABVdahSPhtdMD3Vs80ykx4a87jTHtF/VR+alSrDmNvat7l13yrRHauGcHVw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/types" "^7.11.5" + +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.7.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" + integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" + integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.3.3": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" + integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" + integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-import-meta@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.10.1", "@babel/plugin-syntax-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-flow-strip-types@^7.10.1", "@babel/plugin-transform-flow-strip-types@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" + integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" + integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.1", "@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.10.2": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" + integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.5" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-flow@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" + integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-flow-strip-types" "^7.10.4" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@rollup/plugin-alias@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.1.tgz#bb96cf37fefeb0a953a6566c284855c7d1cd290c" + integrity sha512-hNcQY4bpBUIvxekd26DBPgF7BT4mKVNDF5tBG4Zi+3IgwLxGYRY0itHs9D0oLVwXM5pvJDWJlBQro+au8WaUWw== + dependencies: + slash "^3.0.0" + +"@rollup/plugin-babel@^5.0.3": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.2.1.tgz#20fc8f8864dc0eaa1c5578408459606808f72924" + integrity sha512-Jd7oqFR2dzZJ3NWANDyBjwTtX/lYbZpVcmkHrfQcpvawHs9E4c0nYk5U2mfZ6I/DZcIvy506KZJi54XK/jxH7A== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-commonjs@^13.0.0": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-13.0.2.tgz#b7783f0db049450c72d60bc06cf48d4951515e58" + integrity sha512-9JXf2k8xqvMYfqmhgtB6eCgMN9fbxwF1XDF3mGKJc6pkAmt0jnsqurxQ0tC1akQKNSXCm7c3unQxa3zuxtZ7mQ== + dependencies: + "@rollup/pluginutils" "^3.0.8" + commondir "^1.0.1" + estree-walker "^1.0.1" + glob "^7.1.2" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-json@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== + dependencies: + "@rollup/pluginutils" "^3.0.8" + +"@rollup/plugin-node-resolve@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-6.1.0.tgz#0d2909f4bf606ae34d43a9bc8be06a9b0c850cf0" + integrity sha512-Cv7PDIvxdE40SWilY5WgZpqfIUEaDxFxs89zCAHjqyRwlTSuql4M5hjIuc5QYJkOH0/vyiyNXKD72O+LhRipGA== + dependencies: + "@rollup/pluginutils" "^3.0.0" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.11.1" + +"@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/node@*": + version "14.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.1.tgz#56af902ad157e763f9ba63d671c39cda3193c835" + integrity sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +acorn@^7.1.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +asyncro@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" + integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== + +autoprefixer@^9.8.0: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-macros@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-transform-async-to-promises@^0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz#13b6d8ef13676b4e3c576d3600b85344bb1ba346" + integrity sha512-fDXP68ZqcinZO2WCiimCL9zhGjGXOnn3D33zvbh+yheZ/qOrNVVDDIBtAaM3Faz8TRvQzHiRKsu3hfrBAhEncQ== + +babel-plugin-transform-replace-expressions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-replace-expressions/-/babel-plugin-transform-replace-expressions-0.2.0.tgz#59cba8df4b4a675e7c78cd21548f8e7685bbc30d" + integrity sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA== + dependencies: + "@babel/parser" "^7.3.3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brotli-size@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e" + integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== + dependencies: + duplexer "0.1.1" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: + version "4.14.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" + integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== + dependencies: + caniuse-lite "^1.0.30001131" + electron-to-chromium "^1.3.570" + escalade "^3.1.0" + node-releases "^1.1.61" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: + version "1.0.30001131" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001131.tgz#afad8a28fc2b7a0d3ae9407e71085a0ead905d54" + integrity sha512-4QYi6Mal4MMfQMSqGIRPGbKIbZygeN83QsWq1ixpUwvtfgAZot5BrCKzGygvZaV+CnELdTwD0S4cqUNozq7/Cw== + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + 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" + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-with-sourcemaps@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-modules-loader-core@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" + integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= + dependencies: + icss-replace-symbols "1.1.0" + postcss "6.0.1" + postcss-modules-extract-imports "1.1.0" + postcss-modules-local-by-default "1.2.0" + postcss-modules-scope "1.1.0" + postcss-modules-values "1.3.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-tokenizer@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +electron-to-chromium@^1.3.570: + version "1.3.570" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" + integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0: + version "1.18.0-next.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" + integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promisify@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-6.1.1.tgz#46837651b7b06bf6fff893d03f29393668d01621" + integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== + +escalade@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" + integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +figures@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +filesize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +find-cache-dir@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs-extra@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +generic-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" + integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ== + dependencies: + loader-utils "^1.1.0" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +glob@^7.1.2: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globalyzer@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" + integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== + +globrex@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= + dependencies: + duplexer "^0.1.1" + +gzip-size@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" + integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== + dependencies: + import-from "^3.0.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== + dependencies: + resolve-from "^5.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" + integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + 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-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-reference@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-regex@^1.1.0, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +magic-string@^0.22.4: + version "0.22.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== + dependencies: + vlq "^0.2.2" + +magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +maxmin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + integrity sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY= + dependencies: + chalk "^1.0.0" + figures "^1.0.1" + gzip-size "^3.0.0" + pretty-bytes "^3.0.0" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +microbundle@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.12.3.tgz#6f43f1a7d0ad6258f4406e390340db4ad0312e1f" + integrity sha512-OcpBYPytJXOJsTfPjhL5p3nR0JXt0O9dH97K2k6gJ9etokmuRE4qoAfdnYfsUYLRHftCMJu/BkbQySAPnQ87PQ== + dependencies: + "@babel/core" "^7.10.2" + "@babel/plugin-proposal-class-properties" "7.7.4" + "@babel/plugin-syntax-import-meta" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + "@babel/plugin-transform-flow-strip-types" "^7.10.1" + "@babel/plugin-transform-react-jsx" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/preset-env" "^7.10.2" + "@babel/preset-flow" "^7.10.1" + "@babel/preset-modules" "^0.1.3" + "@rollup/plugin-alias" "^3.1.1" + "@rollup/plugin-babel" "^5.0.3" + "@rollup/plugin-commonjs" "^13.0.0" + "@rollup/plugin-json" "^4.1.0" + "@rollup/plugin-node-resolve" "^6.1.0" + asyncro "^3.0.0" + autoprefixer "^9.8.0" + babel-plugin-macros "^2.8.0" + babel-plugin-transform-async-to-promises "^0.8.15" + babel-plugin-transform-replace-expressions "^0.2.0" + brotli-size "^4.0.0" + camelcase "^5.3.1" + cssnano "^4.1.10" + es6-promisify "^6.1.1" + escape-string-regexp "^4.0.0" + filesize "^6.1.0" + gzip-size "^5.1.1" + kleur "^3.0.3" + lodash.merge "^4.6.2" + module-details-from-path "^1.0.3" + pretty-bytes "^5.3.0" + rollup "^1.32.1" + rollup-plugin-bundle-size "^1.0.1" + rollup-plugin-es3 "^1.1.0" + rollup-plugin-postcss "^2.9.0" + rollup-plugin-terser "^5.3.0" + rollup-plugin-typescript2 "^0.25.3" + sade "^1.7.3" + tiny-glob "^0.2.6" + tslib "^1.13.0" + typescript "^3.9.5" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= + +mri@^1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" + integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-releases@^1.1.61: + version "1.1.61" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" + integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.7.0, object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-queue@^6.3.0: + version "6.6.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.1.tgz#578891ada028a61371ec2692b26614d1b7d2b10a" + integrity sha512-miQiSxLYPYBxGkrldecZC18OTLjdUqnlRebGzPRiVxB8mco7usCmm7hFuxiTvp93K18JnLtE4KMMycjAu/cQQg== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.1.0" + +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postcss-calc@^7.0.1: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.4.tgz#5e177ddb417341e6d4a193c5d9fd8ada79094f8b" + integrity sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + 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@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-load-config@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.1.tgz#0a684bb8beb05e55baf922f7ab44c3edb17cf78e" + integrity sha512-D2ENobdoZsW0+BHy4x1CAkXtbXtYWYRIxL/JbtRBqrRGOPtJ2zoga/bEZWhV/ShWB5saVxJMzbMdSyA/vv4tXw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + 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" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + 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@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + 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@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-2.0.0.tgz#473d0d7326651d8408585c2a154115d5cb36cce0" + integrity sha512-eqp+Bva+U2cwQO7dECJ8/V+X+uH1HduNeITB0CPPFAu6d/8LKQ32/j+p9rQ2YL1QytVcrNU0X+fBqgGmQIA1Rw== + dependencies: + css-modules-loader-core "^1.1.0" + generic-names "^2.0.1" + lodash.camelcase "^4.3.0" + postcss "^7.0.1" + string-hash "^1.1.1" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + 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@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + 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@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" + integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: + version "7.0.34" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" + integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +pretty-bytes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + integrity sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8= + dependencies: + number-is-nan "^1.0.0" + +pretty-bytes@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" + integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA== + +promise.series@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" + integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^4.7.0: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.16.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rollup-plugin-bundle-size@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz#d245cd988486b4040279f9fd33f357f61673e90f" + integrity sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ== + dependencies: + chalk "^1.1.3" + maxmin "^2.1.0" + +rollup-plugin-es3@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz#f866f91b4db839e5b475d8e4a7b9d4c77ecade14" + integrity sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA== + dependencies: + magic-string "^0.22.4" + +rollup-plugin-postcss@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-2.9.0.tgz#e6ea0a1b8fdc4a49fc0385da58804e332750c282" + integrity sha512-Y7qDwlqjZMBexbB1kRJf+jKIQL8HR6C+ay53YzN+nNJ64hn1PNZfBE3c61hFUhD//zrMwmm7uBW30RuTi+CD0w== + dependencies: + chalk "^4.0.0" + concat-with-sourcemaps "^1.1.0" + cssnano "^4.1.10" + import-cwd "^3.0.0" + p-queue "^6.3.0" + pify "^5.0.0" + postcss "^7.0.27" + postcss-load-config "^2.1.0" + postcss-modules "^2.0.0" + promise.series "^0.2.0" + resolve "^1.16.0" + rollup-pluginutils "^2.8.2" + safe-identifier "^0.4.1" + style-inject "^0.3.0" + +rollup-plugin-terser@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^4.0.0" + terser "^4.6.2" + +rollup-plugin-typescript2@^0.25.3: + version "0.25.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.25.3.tgz#a5fb2f0f85488789334ce540abe6c7011cbdf40f" + integrity sha512-ADkSaidKBovJmf5VBnZBZe+WzaZwofuvYdzGAKTN/J4hN7QJCFYAq7IrH9caxlru6T5qhX41PNFS1S4HqhsGQg== + dependencies: + find-cache-dir "^3.0.0" + fs-extra "8.1.0" + resolve "1.12.0" + rollup-pluginutils "2.8.1" + tslib "1.10.0" + +rollup-pluginutils@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" + integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== + dependencies: + estree-walker "^0.6.1" + +rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^1.32.1: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +sade@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.3.tgz#a217ccc4fb4abb2d271648bf48f6628b2636fa1b" + integrity sha512-m4BctppMvJ60W1dXnHq7jMmFe3hPJZDAH85kQ3ACTo7XZNVUuTItCQ+2HfyaMeV5cKrbw7l4vD/6We3GBxvdJw== + dependencies: + mri "^1.1.0" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-identifier@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" + integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +style-inject@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" + integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +terser@^4.6.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-glob@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" + integrity sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw== + dependencies: + globalyzer "^0.1.0" + globrex "^0.1.1" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +tslib@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tslib@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +typescript@^3.9.5, typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +vlq@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== diff --git a/packages/utils/package.json b/packages/utils/package.json new file mode 100644 index 000000000..3ab17ae0e --- /dev/null +++ b/packages/utils/package.json @@ -0,0 +1,4 @@ +{ + "name": "@sortablejs/utils", + "private": true +} diff --git a/packages/utils/src/browser-info.ts b/packages/utils/src/browser-info.ts new file mode 100644 index 000000000..a67715b24 --- /dev/null +++ b/packages/utils/src/browser-info.ts @@ -0,0 +1,15 @@ +function userAgent(pattern) { + if (typeof window !== "undefined" && window.navigator) { + return !!(/*@__PURE__*/ navigator.userAgent.match(pattern)); + } +} + +export const IE11OrLess = userAgent( + /(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i +); +export const Edge = userAgent(/Edge/i); +export const FireFox = userAgent(/firefox/i); +export const Safari = + userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +export const IOS = userAgent(/iP(ad|od|hone)/i); +export const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts new file mode 100644 index 000000000..e95be7b14 --- /dev/null +++ b/packages/utils/src/index.ts @@ -0,0 +1,2 @@ +export * from "./browser-info"; +export * from "./utils"; diff --git a/packages/utils/src/utils.ts b/packages/utils/src/utils.ts new file mode 100644 index 000000000..f1c4c8e1d --- /dev/null +++ b/packages/utils/src/utils.ts @@ -0,0 +1,581 @@ +import { IE11OrLess } from "./browser-info"; +import Sortable from "../../sortable/src/Sortable"; + +const captureMode = { + capture: false, + passive: false, +}; + +function on(el, event, fn) { + el.addEventListener(event, fn, !IE11OrLess && captureMode); +} + +function off(el, event, fn) { + el.removeEventListener(event, fn, !IE11OrLess && captureMode); +} + +function matches(/**HTMLElement*/ el, /**String*/ selector) { + if (!selector) return; + + selector[0] === ">" && (selector = selector.substring(1)); + + if (el) { + try { + if (el.matches) { + return el.matches(selector); + } else if (el.msMatchesSelector) { + return el.msMatchesSelector(selector); + } else if (el.webkitMatchesSelector) { + return el.webkitMatchesSelector(selector); + } + } catch (_) { + return false; + } + } + + return false; +} + +function getParentOrHost(el) { + return el.host && el !== document && el.host.nodeType + ? el.host + : el.parentNode; +} + +function closest( + /**HTMLElement*/ el, + /**String*/ selector, + /**HTMLElement*/ ctx, + includeCTX +) { + if (el) { + ctx = ctx || document; + + do { + if ( + (selector != null && + (selector[0] === ">" + ? el.parentNode === ctx && matches(el, selector) + : matches(el, selector))) || + (includeCTX && el === ctx) + ) { + return el; + } + + if (el === ctx) break; + /* jshint boss:true */ + } while ((el = getParentOrHost(el))); + } + + return null; +} + +const R_SPACE = /\s+/g; + +function toggleClass(el, name, state) { + if (el && name) { + if (el.classList) { + el.classList[state ? "add" : "remove"](name); + } else { + let className = (" " + el.className + " ") + .replace(R_SPACE, " ") + .replace(" " + name + " ", " "); + el.className = (className + (state ? " " + name : "")).replace( + R_SPACE, + " " + ); + } + } +} + +function css(el, prop, val) { + let style = el && el.style; + + if (style) { + if (val === void 0) { + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(el, ""); + } else if (el.currentStyle) { + val = el.currentStyle; + } + + return prop === void 0 ? val : val[prop]; + } else { + if (!(prop in style) && prop.indexOf("webkit") === -1) { + prop = "-webkit-" + prop; + } + + style[prop] = val + (typeof val === "string" ? "" : "px"); + } + } +} + +function matrix(el, selfOnly) { + let appliedTransforms = ""; + if (typeof el === "string") { + appliedTransforms = el; + } else { + do { + //@ts-ignore + let transform = css(el, "transform"); + + if (transform && transform !== "none") { + appliedTransforms = transform + " " + appliedTransforms; + } + /* jshint boss:true */ + } while (!selfOnly && (el = el.parentNode)); + } + + const matrixFn = + window.DOMMatrix || + window.WebKitCSSMatrix || + //@ts-ignore + window.CSSMatrix || + //@ts-ignore + window.MSCSSMatrix; + /*jshint -W056 */ + return matrixFn && new matrixFn(appliedTransforms); +} + +function find(ctx, tagName, iterator) { + if (ctx) { + let list = ctx.getElementsByTagName(tagName), + i = 0, + n = list.length; + + if (iterator) { + for (; i < n; i++) { + iterator(list[i], i); + } + } + + return list; + } + + return []; +} + +function getWindowScrollingElement() { + let scrollingElement = document.scrollingElement; + + if (scrollingElement) { + return scrollingElement; + } else { + return document.documentElement; + } +} + +/** + * Returns the "bounding client rect" of given element + * @param {HTMLElement} el The element whose boundingClientRect is wanted + * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container + * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr + * @param {[Boolean]} undoScale Whether the container's scale() should be undone + * @param {[HTMLElement]} container The parent the element will be placed in + * @return {Object} The boundingClientRect of el, with specified adjustments + */ +function getRect( + el, + relativeToContainingBlock, + relativeToNonStaticParent, + undoScale, + container +) { + if (!el.getBoundingClientRect && el !== window) return; + + let elRect, top, left, bottom, right, height, width; + + // Fix IE11 "SCRIPT16389: Unspecified error." when dragging element #1904 + // submitted by laukstein + if (el !== window && el.parentNode && el !== getWindowScrollingElement()) { + elRect = el.getBoundingClientRect(); + top = elRect.top; + left = elRect.left; + bottom = elRect.bottom; + right = elRect.right; + height = elRect.height; + width = elRect.width; + } else { + top = 0; + left = 0; + bottom = window.innerHeight; + right = window.innerWidth; + height = window.innerHeight; + width = window.innerWidth; + } + + if ( + (relativeToContainingBlock || relativeToNonStaticParent) && + el !== window + ) { + // Adjust for translate() + container = container || el.parentNode; + + // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) + // Not needed on <= IE11 + if (!IE11OrLess) { + do { + if ( + container && + container.getBoundingClientRect && + //@ts-ignore + (css(container, "transform") !== "none" || + (relativeToNonStaticParent && + //@ts-ignore + css(container, "position") !== "static")) + ) { + let containerRect = container.getBoundingClientRect(); + + // Set relative to edges of padding box of container + top -= + //@ts-ignore + containerRect.top + parseInt(css(container, "border-top-width")); + left -= + //@ts-ignore + containerRect.left + parseInt(css(container, "border-left-width")); + bottom = top + elRect.height; + right = left + elRect.width; + + break; + } + /* jshint boss:true */ + } while ((container = container.parentNode)); + } + } + + if (undoScale && el !== window) { + // Adjust for scale() + //@ts-ignore + let elMatrix = matrix(container || el), + scaleX = elMatrix && elMatrix.a, + scaleY = elMatrix && elMatrix.d; + + if (elMatrix) { + top /= scaleY; + left /= scaleX; + + width /= scaleX; + height /= scaleY; + + bottom = top + height; + right = left + width; + } + } + + return { + top: top, + left: left, + bottom: bottom, + right: right, + width: width, + height: height, + }; +} + +/** + * Checks if a side of an element is scrolled past a side of its parents + * @param {HTMLElement} el The element who's side being scrolled out of view is in question + * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom') + * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom') + * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element + */ +function isScrolledPast(el, elSide, parentSide) { + let parent = getParentAutoScrollElement(el, true), + //@ts-ignore + elSideVal = getRect(el)[elSide]; + + /* jshint boss:true */ + while (parent) { + //@ts-ignore + let parentSideVal = getRect(parent)[parentSide], + visible; + + if (parentSide === "top" || parentSide === "left") { + visible = elSideVal >= parentSideVal; + } else { + visible = elSideVal <= parentSideVal; + } + + if (!visible) return parent; + + if (parent === getWindowScrollingElement()) break; + + parent = getParentAutoScrollElement(parent, false); + } + + return false; +} + +/** + * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) + * and non-draggable elements + * @param {HTMLElement} el The parent element + * @param {Number} childNum The index of the child + * @param {Object} options Parent Sortable's options + * @return {HTMLElement} The child at index childNum, or null if not found + */ +function getChild(el, childNum, options) { + let currentChild = 0, + i = 0, + children = el.children; + + while (i < children.length) { + if ( + children[i].style.display !== "none" && + //@ts-ignore + children[i] !== Sortable.ghost && + //@ts-ignore + children[i] !== Sortable.dragged && + closest(children[i], options.draggable, el, false) + ) { + if (currentChild === childNum) { + return children[i]; + } + currentChild++; + } + + i++; + } + return null; +} + +/** + * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) + * @param {HTMLElement} el Parent element + * @param {selector} selector Any other elements that should be ignored + * @return {HTMLElement} The last child, ignoring ghostEl + */ +function lastChild(el, selector) { + let last = el.lastElementChild; + + while ( + last && + //@ts-ignore + (last === Sortable.ghost || + //@ts-ignore + css(last, "display") === "none" || + (selector && !matches(last, selector))) + ) { + last = last.previousElementSibling; + } + + return last || null; +} + +/** + * Returns the index of an element within its parent for a selected set of + * elements + * @param {HTMLElement} el + * @param {selector} selector + * @return {number} + */ +function index(el, selector) { + let index = 0; + + if (!el || !el.parentNode) { + return -1; + } + + /* jshint boss:true */ + while ((el = el.previousElementSibling)) { + if ( + el.nodeName.toUpperCase() !== "TEMPLATE" && + //@ts-ignore + el !== Sortable.clone && + (!selector || matches(el, selector)) + ) { + index++; + } + } + + return index; +} + +/** + * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements. + * The value is returned in real pixels. + * @param {HTMLElement} el + * @return {Array} Offsets in the format of [left, top] + */ +function getRelativeScrollOffset(el) { + let offsetLeft = 0, + offsetTop = 0, + winScroller = getWindowScrollingElement(); + + if (el) { + do { + //@ts-ignore + let elMatrix = matrix(el), + scaleX = elMatrix.a, + scaleY = elMatrix.d; + + offsetLeft += el.scrollLeft * scaleX; + offsetTop += el.scrollTop * scaleY; + } while (el !== winScroller && (el = el.parentNode)); + } + + return [offsetLeft, offsetTop]; +} + +/** + * Returns the index of the object within the given array + * @param {Array} arr Array that may or may not hold the object + * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find + * @return {Number} The index of the object in the array, or -1 + */ +function indexOfObject(arr, obj) { + for (let i in arr) { + if (!arr.hasOwnProperty(i)) continue; + for (let key in obj) { + if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); + } + } + return -1; +} + +function getParentAutoScrollElement(el, includeSelf) { + // skip to window + if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); + + let elem = el; + let gotSelf = false; + do { + // we don't need to get elem css if it isn't even overflowing in the first place (performance) + if ( + elem.clientWidth < elem.scrollWidth || + elem.clientHeight < elem.scrollHeight + ) { + //@ts-ignore + let elemCSS = css(elem); + if ( + (elem.clientWidth < elem.scrollWidth && + (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll")) || + (elem.clientHeight < elem.scrollHeight && + (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) + ) { + if (!elem.getBoundingClientRect || elem === document.body) + return getWindowScrollingElement(); + + if (gotSelf || includeSelf) return elem; + gotSelf = true; + } + } + /* jshint boss:true */ + } while ((elem = elem.parentNode)); + + return getWindowScrollingElement(); +} + +function extend(dst, src) { + if (dst && src) { + for (let key in src) { + if (src.hasOwnProperty(key)) { + dst[key] = src[key]; + } + } + } + + return dst; +} + +function isRectEqual(rect1, rect2) { + return ( + Math.round(rect1.top) === Math.round(rect2.top) && + Math.round(rect1.left) === Math.round(rect2.left) && + Math.round(rect1.height) === Math.round(rect2.height) && + Math.round(rect1.width) === Math.round(rect2.width) + ); +} + +let _throttleTimeout; +function throttle(callback, ms) { + return function () { + if (!_throttleTimeout) { + let args = arguments, + _this = this; + + if (args.length === 1) { + callback.call(_this, args[0]); + } else { + callback.apply(_this, args); + } + + _throttleTimeout = setTimeout(function () { + _throttleTimeout = void 0; + }, ms); + } + }; +} + +function cancelThrottle() { + clearTimeout(_throttleTimeout); + _throttleTimeout = void 0; +} + +function scrollBy(el, x, y) { + el.scrollLeft += x; + el.scrollTop += y; +} + +function clone(el) { + //@ts-ignore + let Polymer = window.Polymer; + //@ts-ignore + let $ = window.jQuery || window.Zepto; + + if (Polymer && Polymer.dom) { + return Polymer.dom(el).cloneNode(true); + } else if ($) { + return $(el).clone(true)[0]; + } else { + return el.cloneNode(true); + } +} + +function setRect(el, rect) { + css(el, "position", "absolute"); + css(el, "top", rect.top); + css(el, "left", rect.left); + css(el, "width", rect.width); + css(el, "height", rect.height); +} + +function unsetRect(el) { + css(el, "position", ""); + css(el, "top", ""); + css(el, "left", ""); + css(el, "width", ""); + css(el, "height", ""); +} + +const expando = "Sortable" + new Date().getTime(); + +export { + on, + off, + matches, + getParentOrHost, + closest, + toggleClass, + css, + matrix, + find, + getWindowScrollingElement, + getRect, + isScrolledPast, + getChild, + lastChild, + index, + getRelativeScrollOffset, + indexOfObject, + getParentAutoScrollElement, + extend, + isRectEqual, + throttle, + cancelThrottle, + scrollBy, + clone, + setRect, + unsetRect, + expando, +}; diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 000000000..a91e7aa67 --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,4 @@ +{ + "compilerOptions": {}, + "include": ["src"] +} diff --git a/plugins/AutoScroll/AutoScroll.js b/plugins/AutoScroll/AutoScroll.js deleted file mode 100644 index 3027bb351..000000000 --- a/plugins/AutoScroll/AutoScroll.js +++ /dev/null @@ -1,270 +0,0 @@ -import { - on, - off, - css, - throttle, - cancelThrottle, - scrollBy, - getParentAutoScrollElement, - expando, - getRect, - getWindowScrollingElement -} from '../../src/utils.js'; - -import Sortable from '../../src/Sortable.js'; - -import { Edge, IE11OrLess, Safari } from '../../src/BrowserInfo.js'; - -let autoScrolls = [], - scrollEl, - scrollRootEl, - scrolling = false, - lastAutoScrollX, - lastAutoScrollY, - touchEvt, - pointerElemChangedInterval; - -function AutoScrollPlugin() { - - function AutoScroll() { - this.defaults = { - scroll: true, - scrollSensitivity: 30, - scrollSpeed: 10, - bubbleScroll: true - }; - - // Bind all private methods - for (let fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { - this[fn] = this[fn].bind(this); - } - } - } - - AutoScroll.prototype = { - dragStarted({ originalEvent }) { - if (this.sortable.nativeDraggable) { - on(document, 'dragover', this._handleAutoScroll); - } else { - if (this.options.supportPointer) { - on(document, 'pointermove', this._handleFallbackAutoScroll); - } else if (originalEvent.touches) { - on(document, 'touchmove', this._handleFallbackAutoScroll); - } else { - on(document, 'mousemove', this._handleFallbackAutoScroll); - } - } - }, - - dragOverCompleted({ originalEvent }) { - // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) - if (!this.options.dragOverBubble && !originalEvent.rootEl) { - this._handleAutoScroll(originalEvent); - } - }, - - drop() { - if (this.sortable.nativeDraggable) { - off(document, 'dragover', this._handleAutoScroll); - } else { - off(document, 'pointermove', this._handleFallbackAutoScroll); - off(document, 'touchmove', this._handleFallbackAutoScroll); - off(document, 'mousemove', this._handleFallbackAutoScroll); - } - - clearPointerElemChangedInterval(); - clearAutoScrolls(); - cancelThrottle(); - }, - - nulling() { - touchEvt = - scrollRootEl = - scrollEl = - scrolling = - pointerElemChangedInterval = - lastAutoScrollX = - lastAutoScrollY = null; - - autoScrolls.length = 0; - }, - - _handleFallbackAutoScroll(evt) { - this._handleAutoScroll(evt, true); - }, - - _handleAutoScroll(evt, fallback) { - const x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - - elem = document.elementFromPoint(x, y); - - touchEvt = evt; - - // IE does not seem to have native autoscroll, - // Edge's autoscroll seems too conditional, - // MACOS Safari does not have autoscroll, - // Firefox and Chrome are good - if (fallback || Edge || IE11OrLess || Safari) { - autoScroll(evt, this.options, elem, fallback); - - // Listener for pointer element change - let ogElemScroller = getParentAutoScrollElement(elem, true); - if ( - scrolling && - ( - !pointerElemChangedInterval || - x !== lastAutoScrollX || - y !== lastAutoScrollY - ) - ) { - pointerElemChangedInterval && clearPointerElemChangedInterval(); - // Detect for pointer elem change, emulating native DnD behaviour - pointerElemChangedInterval = setInterval(() => { - let newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); - if (newElem !== ogElemScroller) { - ogElemScroller = newElem; - clearAutoScrolls(); - } - autoScroll(evt, this.options, newElem, fallback); - }, 10); - lastAutoScrollX = x; - lastAutoScrollY = y; - } - } else { - // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll - if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) { - clearAutoScrolls(); - return; - } - autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); - } - } - }; - - return Object.assign(AutoScroll, { - pluginName: 'scroll', - initializeByDefault: true - }); -} - -function clearAutoScrolls() { - autoScrolls.forEach(function(autoScroll) { - clearInterval(autoScroll.pid); - }); - autoScrolls = []; -} - -function clearPointerElemChangedInterval() { - clearInterval(pointerElemChangedInterval); -} - - -const autoScroll = throttle(function(evt, options, rootEl, isFallback) { - // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 - if (!options.scroll) return; - const x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - - let scrollThisInstance = false, - scrollCustomFn; - - // New scroll root, set scrollEl - if (scrollRootEl !== rootEl) { - scrollRootEl = rootEl; - - clearAutoScrolls(); - - scrollEl = options.scroll; - scrollCustomFn = options.scrollFn; - - if (scrollEl === true) { - scrollEl = getParentAutoScrollElement(rootEl, true); - } - } - - - let layersOut = 0; - let currentParent = scrollEl; - do { - let el = currentParent, - rect = getRect(el), - - top = rect.top, - bottom = rect.bottom, - left = rect.left, - right = rect.right, - - width = rect.width, - height = rect.height, - - canScrollX, - canScrollY, - - scrollWidth = el.scrollWidth, - scrollHeight = el.scrollHeight, - - elCSS = css(el), - - scrollPosX = el.scrollLeft, - scrollPosY = el.scrollTop; - - - if (el === winScroller) { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible'); - } else { - canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll'); - canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); - } - - let vx = canScrollX && (Math.abs(right - x) <= sens && (scrollPosX + width) < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - let vy = canScrollY && (Math.abs(bottom - y) <= sens && (scrollPosY + height) < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); - - - if (!autoScrolls[layersOut]) { - for (let i = 0; i <= layersOut; i++) { - if (!autoScrolls[i]) { - autoScrolls[i] = {}; - } - } - } - - if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { - autoScrolls[layersOut].el = el; - autoScrolls[layersOut].vx = vx; - autoScrolls[layersOut].vy = vy; - - clearInterval(autoScrolls[layersOut].pid); - - if (vx != 0 || vy != 0) { - scrollThisInstance = true; - /* jshint loopfunc:true */ - autoScrolls[layersOut].pid = setInterval((function () { - // emulate drag over during autoscroll (fallback), emulating native DnD behaviour - if (isFallback && this.layer === 0) { - Sortable.active._onTouchMove(touchEvt); // To move ghost if it is positioned absolutely - } - let scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - let scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; - - if (typeof(scrollCustomFn) === 'function') { - if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt, autoScrolls[this.layer].el) !== 'continue') { - return; - } - } - - scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); - }).bind({layer: layersOut}), 24); - } - } - layersOut++; - } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); - scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not -}, 30); - -export default AutoScrollPlugin; diff --git a/plugins/AutoScroll/index.js b/plugins/AutoScroll/index.js deleted file mode 100644 index cc79f7e24..000000000 --- a/plugins/AutoScroll/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './AutoScroll.js'; diff --git a/plugins/MultiDrag/MultiDrag.js b/plugins/MultiDrag/MultiDrag.js deleted file mode 100644 index 61f690137..000000000 --- a/plugins/MultiDrag/MultiDrag.js +++ /dev/null @@ -1,617 +0,0 @@ -import { - toggleClass, - getRect, - index, - closest, - on, - off, - clone, - css, - setRect, - unsetRect, - matrix, - expando -} from '../../src/utils.js'; - -import dispatchEvent from '../../src/EventDispatcher.js'; - -let multiDragElements = [], - multiDragClones = [], - lastMultiDragSelect, // for selection with modifier key down (SHIFT) - multiDragSortable, - initialFolding = false, // Initial multi-drag fold when drag started - folding = false, // Folding any other time - dragStarted = false, - dragEl, - clonesFromRect, - clonesHidden; - -function MultiDragPlugin() { - function MultiDrag(sortable) { - // Bind all private methods - for (let fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { - this[fn] = this[fn].bind(this); - } - } - - if (sortable.options.supportPointer) { - on(document, 'pointerup', this._deselectMultiDrag); - } else { - on(document, 'mouseup', this._deselectMultiDrag); - on(document, 'touchend', this._deselectMultiDrag); - } - - on(document, 'keydown', this._checkKeyDown); - on(document, 'keyup', this._checkKeyUp); - - this.defaults = { - selectedClass: 'sortable-selected', - multiDragKey: null, - setData(dataTransfer, dragEl) { - let data = ''; - if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach((multiDragElement, i) => { - data += (!i ? '' : ', ') + multiDragElement.textContent; - }); - } else { - data = dragEl.textContent; - } - dataTransfer.setData('Text', data); - } - }; - } - - MultiDrag.prototype = { - multiDragKeyDown: false, - isMultiDrag: false, - - - delayStartGlobal({ dragEl: dragged }) { - dragEl = dragged; - }, - - delayEnded() { - this.isMultiDrag = ~multiDragElements.indexOf(dragEl); - }, - - setupClone({ sortable, cancel }) { - if (!this.isMultiDrag) return; - for (let i = 0; i < multiDragElements.length; i++) { - multiDragClones.push(clone(multiDragElements[i])); - - multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; - - multiDragClones[i].draggable = false; - multiDragClones[i].style['will-change'] = ''; - - toggleClass(multiDragClones[i], this.options.selectedClass, false); - multiDragElements[i] === dragEl && toggleClass(multiDragClones[i], this.options.chosenClass, false); - } - - sortable._hideClone(); - cancel(); - }, - - clone({ sortable, rootEl, dispatchSortableEvent, cancel }) { - if (!this.isMultiDrag) return; - if (!this.options.removeCloneOnHide) { - if (multiDragElements.length && multiDragSortable === sortable) { - insertMultiDragClones(true, rootEl); - dispatchSortableEvent('clone'); - - cancel(); - } - } - }, - - showClone({ cloneNowShown, rootEl, cancel }) { - if (!this.isMultiDrag) return; - insertMultiDragClones(false, rootEl); - multiDragClones.forEach(clone => { - css(clone, 'display', ''); - }); - - cloneNowShown(); - clonesHidden = false; - cancel(); - }, - - hideClone({ sortable, cloneNowHidden, cancel }) { - if (!this.isMultiDrag) return; - multiDragClones.forEach(clone => { - css(clone, 'display', 'none'); - if (this.options.removeCloneOnHide && clone.parentNode) { - clone.parentNode.removeChild(clone); - } - }); - - cloneNowHidden(); - clonesHidden = true; - cancel(); - }, - - dragStartGlobal({ sortable }) { - if (!this.isMultiDrag && multiDragSortable) { - multiDragSortable.multiDrag._deselectMultiDrag(); - } - - multiDragElements.forEach(multiDragElement => { - multiDragElement.sortableIndex = index(multiDragElement); - }); - - // Sort multi-drag elements - multiDragElements = multiDragElements.sort(function(a, b) { - return a.sortableIndex - b.sortableIndex; - }); - dragStarted = true; - }, - - dragStarted({ sortable }) { - if (!this.isMultiDrag) return; - if (this.options.sort) { - // Capture rects, - // hide multi drag elements (by positioning them absolute), - // set multi drag elements rects to dragRect, - // show multi drag elements, - // animate to rects, - // unset rects & remove from DOM - - sortable.captureAnimationState(); - - if (this.options.animation) { - multiDragElements.forEach(multiDragElement => { - if (multiDragElement === dragEl) return; - css(multiDragElement, 'position', 'absolute'); - }); - - let dragRect = getRect(dragEl, false, true, true); - - multiDragElements.forEach(multiDragElement => { - if (multiDragElement === dragEl) return; - setRect(multiDragElement, dragRect); - }); - - folding = true; - initialFolding = true; - } - } - - sortable.animateAll(() => { - folding = false; - initialFolding = false; - - if (this.options.animation) { - multiDragElements.forEach(multiDragElement => { - unsetRect(multiDragElement); - }); - } - - // Remove all auxiliary multidrag items from el, if sorting enabled - if (this.options.sort) { - removeMultiDragElements(); - } - }); - }, - - dragOver({ target, completed, cancel }) { - if (folding && ~multiDragElements.indexOf(target)) { - completed(false); - cancel(); - } - }, - - revert({ fromSortable, rootEl, sortable, dragRect }) { - if (multiDragElements.length > 1) { - // Setup unfold animation - multiDragElements.forEach(multiDragElement => { - sortable.addAnimationState({ - target: multiDragElement, - rect: folding ? getRect(multiDragElement) : dragRect - }); - - unsetRect(multiDragElement); - - multiDragElement.fromRect = dragRect; - - fromSortable.removeAnimationState(multiDragElement); - }); - folding = false; - insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); - } - }, - - dragOverCompleted({ sortable, isOwner, insertion, activeSortable, parentEl, putSortable }) { - let options = this.options; - if (insertion) { - // Clones must be hidden before folding animation to capture dragRectAbsolute properly - if (isOwner) { - activeSortable._hideClone(); - } - - initialFolding = false; - // If leaving sort:false root, or already folding - Fold to new location - if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { - // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - let dragRectAbsolute = getRect(dragEl, false, true, true); - - multiDragElements.forEach(multiDragElement => { - if (multiDragElement === dragEl) return; - setRect(multiDragElement, dragRectAbsolute); - - // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted - // while folding, and so that we can capture them again because old sortable will no longer be fromSortable - parentEl.appendChild(multiDragElement); - }); - - folding = true; - } - - // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out - if (!isOwner) { - // Only remove if not folding (folding will remove them anyways) - if (!folding) { - removeMultiDragElements(); - } - - if (multiDragElements.length > 1) { - let clonesHiddenBefore = clonesHidden; - activeSortable._showClone(sortable); - - // Unfold animation for clones if showing from hidden - if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(clone => { - activeSortable.addAnimationState({ - target: clone, - rect: clonesFromRect - }); - - clone.fromRect = clonesFromRect; - clone.thisAnimationDuration = null; - }); - } - } else { - activeSortable._showClone(sortable); - } - } - } - }, - - dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) { - multiDragElements.forEach(multiDragElement => { - multiDragElement.thisAnimationDuration = null; - }); - - if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { - clonesFromRect = Object.assign({}, dragRect); - let dragMatrix = matrix(dragEl, true); - clonesFromRect.top -= dragMatrix.f; - clonesFromRect.left -= dragMatrix.e; - } - }, - - dragOverAnimationComplete() { - if (folding) { - folding = false; - removeMultiDragElements(); - } - }, - - drop({ originalEvent: evt, rootEl, parentEl, sortable, dispatchSortableEvent, oldIndex, putSortable }) { - let toSortable = (putSortable || this.sortable); - - if (!evt) return; - - let options = this.options, - children = parentEl.children; - - // Multi-drag selection - if (!dragStarted) { - if (options.multiDragKey && !this.multiDragKeyDown) { - this._deselectMultiDrag(); - } - toggleClass(dragEl, options.selectedClass, !~multiDragElements.indexOf(dragEl)); - - if (!~multiDragElements.indexOf(dragEl)) { - multiDragElements.push(dragEl); - dispatchEvent({ - sortable, - rootEl, - name: 'select', - targetEl: dragEl, - originalEvt: evt - }); - - // Modifier activated, select from last to dragEl - if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - let lastIndex = index(lastMultiDragSelect), - currentIndex = index(dragEl); - - if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { - // Must include lastMultiDragSelect (select it), in case modified selection from no selection - // (but previous selection existed) - let n, i; - if (currentIndex > lastIndex) { - i = lastIndex; - n = currentIndex; - } else { - i = currentIndex; - n = lastIndex + 1; - } - - for (; i < n; i++) { - if (~multiDragElements.indexOf(children[i])) continue; - toggleClass(children[i], options.selectedClass, true); - multiDragElements.push(children[i]); - - dispatchEvent({ - sortable, - rootEl, - name: 'select', - targetEl: children[i], - originalEvt: evt - }); - } - } - } else { - lastMultiDragSelect = dragEl; - } - - multiDragSortable = toSortable; - } else { - multiDragElements.splice(multiDragElements.indexOf(dragEl), 1); - lastMultiDragSelect = null; - dispatchEvent({ - sortable, - rootEl, - name: 'deselect', - targetEl: dragEl, - originalEvt: evt - }); - } - } - - // Multi-drag drop - if (dragStarted && this.isMultiDrag) { - // Do not "unfold" after around dragEl if reverted - if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - let dragRect = getRect(dragEl), - multiDragIndex = index(dragEl, ':not(.' + this.options.selectedClass + ')'); - - if (!initialFolding && options.animation) dragEl.thisAnimationDuration = null; - - toSortable.captureAnimationState(); - - if (!initialFolding) { - if (options.animation) { - dragEl.fromRect = dragRect; - multiDragElements.forEach(multiDragElement => { - multiDragElement.thisAnimationDuration = null; - if (multiDragElement !== dragEl) { - let rect = folding ? getRect(multiDragElement) : dragRect; - multiDragElement.fromRect = rect; - - // Prepare unfold animation - toSortable.addAnimationState({ - target: multiDragElement, - rect: rect - }); - } - }); - } - - // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert - // properly they must all be removed - removeMultiDragElements(); - - multiDragElements.forEach(multiDragElement => { - if (children[multiDragIndex]) { - parentEl.insertBefore(multiDragElement, children[multiDragIndex]); - } else { - parentEl.appendChild(multiDragElement); - } - multiDragIndex++; - }); - - // If initial folding is done, the elements may have changed position because they are now - // unfolding around dragEl, even though dragEl may not have his index changed, so update event - // must be fired here as Sortable will not. - if (oldIndex === index(dragEl)) { - let update = false; - multiDragElements.forEach(multiDragElement => { - if (multiDragElement.sortableIndex !== index(multiDragElement)) { - update = true; - return; - } - }); - - if (update) { - dispatchSortableEvent('update'); - } - } - } - - // Must be done after capturing individual rects (scroll bar) - multiDragElements.forEach(multiDragElement => { - unsetRect(multiDragElement); - }); - - toSortable.animateAll(); - } - - multiDragSortable = toSortable; - } - - // Remove clones if necessary - if (rootEl === parentEl || (putSortable && putSortable.lastPutMode !== 'clone')) { - multiDragClones.forEach(clone => { - clone.parentNode && clone.parentNode.removeChild(clone); - }); - } - }, - - nullingGlobal() { - this.isMultiDrag = - dragStarted = false; - multiDragClones.length = 0; - }, - - destroyGlobal() { - this._deselectMultiDrag(); - off(document, 'pointerup', this._deselectMultiDrag); - off(document, 'mouseup', this._deselectMultiDrag); - off(document, 'touchend', this._deselectMultiDrag); - - off(document, 'keydown', this._checkKeyDown); - off(document, 'keyup', this._checkKeyUp); - }, - - _deselectMultiDrag(evt) { - if (typeof dragStarted !== "undefined" && dragStarted) return; - - // Only deselect if selection is in this sortable - if (multiDragSortable !== this.sortable) return; - - // Only deselect if target is not item in this sortable - if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; - - // Only deselect if left click - if (evt && evt.button !== 0) return; - - while (multiDragElements.length) { - let el = multiDragElements[0]; - toggleClass(el, this.options.selectedClass, false); - multiDragElements.shift(); - dispatchEvent({ - sortable: this.sortable, - rootEl: this.sortable.el, - name: 'deselect', - targetEl: el, - originalEvt: evt - }); - } - }, - - _checkKeyDown(evt) { - if (evt.key === this.options.multiDragKey) { - this.multiDragKeyDown = true; - } - }, - - _checkKeyUp(evt) { - if (evt.key === this.options.multiDragKey) { - this.multiDragKeyDown = false; - } - } - }; - - return Object.assign(MultiDrag, { - // Static methods & properties - pluginName: 'multiDrag', - utils: { - /** - * Selects the provided multi-drag item - * @param {HTMLElement} el The element to be selected - */ - select(el) { - let sortable = el.parentNode[expando]; - if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; - if (multiDragSortable && multiDragSortable !== sortable) { - multiDragSortable.multiDrag._deselectMultiDrag(); - multiDragSortable = sortable; - } - toggleClass(el, sortable.options.selectedClass, true); - multiDragElements.push(el); - }, - /** - * Deselects the provided multi-drag item - * @param {HTMLElement} el The element to be deselected - */ - deselect(el) { - let sortable = el.parentNode[expando], - index = multiDragElements.indexOf(el); - if (!sortable || !sortable.options.multiDrag || !~index) return; - toggleClass(el, sortable.options.selectedClass, false); - multiDragElements.splice(index, 1); - } - }, - eventProperties() { - const oldIndicies = [], - newIndicies = []; - - multiDragElements.forEach(multiDragElement => { - oldIndicies.push({ - multiDragElement, - index: multiDragElement.sortableIndex - }); - - // multiDragElements will already be sorted if folding - let newIndex; - if (folding && multiDragElement !== dragEl) { - newIndex = -1; - } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + this.options.selectedClass + ')'); - } else { - newIndex = index(multiDragElement); - } - newIndicies.push({ - multiDragElement, - index: newIndex - }); - }); - return { - items: [...multiDragElements], - clones: [...multiDragClones], - oldIndicies, - newIndicies - }; - }, - optionListeners: { - multiDragKey(key) { - key = key.toLowerCase(); - if (key === 'ctrl') { - key = 'Control'; - } else if (key.length > 1) { - key = key.charAt(0).toUpperCase() + key.substr(1); - } - return key; - } - } - }); -} - -function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach((multiDragElement, i) => { - let target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; - if (target) { - rootEl.insertBefore(multiDragElement, target); - } else { - rootEl.appendChild(multiDragElement); - } - }); -} - -/** - * Insert multi-drag clones - * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted - * @param {HTMLElement} rootEl - */ -function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach((clone, i) => { - let target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; - if (target) { - rootEl.insertBefore(clone, target); - } else { - rootEl.appendChild(clone); - } - }); -} - -function removeMultiDragElements() { - multiDragElements.forEach(multiDragElement => { - if (multiDragElement === dragEl) return; - multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); - }); -} - -export default MultiDragPlugin; diff --git a/plugins/MultiDrag/index.js b/plugins/MultiDrag/index.js deleted file mode 100644 index 2507117e0..000000000 --- a/plugins/MultiDrag/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './MultiDrag.js'; diff --git a/plugins/OnSpill/OnSpill.js b/plugins/OnSpill/OnSpill.js deleted file mode 100644 index e8c6439d9..000000000 --- a/plugins/OnSpill/OnSpill.js +++ /dev/null @@ -1,79 +0,0 @@ -import { getChild } from '../../src/utils.js'; - - -const drop = function({ - originalEvent, - putSortable, - dragEl, - activeSortable, - dispatchSortableEvent, - hideGhostForTarget, - unhideGhostForTarget -}) { - if (!originalEvent) return; - let toSortable = putSortable || activeSortable; - hideGhostForTarget(); - let touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - let target = document.elementFromPoint(touch.clientX, touch.clientY); - unhideGhostForTarget(); - if (toSortable && !toSortable.el.contains(target)) { - dispatchSortableEvent('spill'); - this.onSpill({ dragEl, putSortable }); - } -}; - -function Revert() {} - -Revert.prototype = { - startIndex: null, - dragStart({ oldDraggableIndex }) { - this.startIndex = oldDraggableIndex; - }, - onSpill({ dragEl, putSortable }) { - this.sortable.captureAnimationState(); - if (putSortable) { - putSortable.captureAnimationState(); - } - let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); - - if (nextSibling) { - this.sortable.el.insertBefore(dragEl, nextSibling); - } else { - this.sortable.el.appendChild(dragEl); - } - this.sortable.animateAll(); - if (putSortable) { - putSortable.animateAll(); - } - }, - drop -}; - -Object.assign(Revert, { - pluginName: 'revertOnSpill' -}); - - -function Remove() {} - -Remove.prototype = { - onSpill({ dragEl, putSortable }) { - const parentSortable = putSortable || this.sortable; - parentSortable.captureAnimationState(); - dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); - parentSortable.animateAll(); - }, - drop -}; - -Object.assign(Remove, { - pluginName: 'removeOnSpill' -}); - - -export default [Remove, Revert]; - -export { - Remove as RemoveOnSpill, - Revert as RevertOnSpill -}; diff --git a/plugins/OnSpill/index.js b/plugins/OnSpill/index.js deleted file mode 100644 index 4023b0f60..000000000 --- a/plugins/OnSpill/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default, RemoveOnSpill, RevertOnSpill } from './OnSpill.js'; diff --git a/plugins/Swap/Swap.js b/plugins/Swap/Swap.js deleted file mode 100644 index 3f0feb7dc..000000000 --- a/plugins/Swap/Swap.js +++ /dev/null @@ -1,90 +0,0 @@ -import { - toggleClass, - index -} from '../../src/utils.js'; - -let lastSwapEl; - - -function SwapPlugin() { - function Swap() { - this.defaults = { - swapClass: 'sortable-swap-highlight' - }; - } - - Swap.prototype = { - dragStart({ dragEl }) { - lastSwapEl = dragEl; - }, - dragOverValid({ completed, target, onMove, activeSortable, changed, cancel }) { - if (!activeSortable.options.swap) return; - let el = this.sortable.el, - options = this.options; - if (target && target !== el) { - let prevSwapEl = lastSwapEl; - if (onMove(target) !== false) { - toggleClass(target, options.swapClass, true); - lastSwapEl = target; - } else { - lastSwapEl = null; - } - - if (prevSwapEl && prevSwapEl !== lastSwapEl) { - toggleClass(prevSwapEl, options.swapClass, false); - } - } - changed(); - - completed(true); - cancel(); - }, - drop({ activeSortable, putSortable, dragEl }) { - let toSortable = (putSortable || this.sortable); - let options = this.options; - lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); - if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { - if (dragEl !== lastSwapEl) { - toSortable.captureAnimationState(); - if (toSortable !== activeSortable) activeSortable.captureAnimationState(); - swapNodes(dragEl, lastSwapEl); - - toSortable.animateAll(); - if (toSortable !== activeSortable) activeSortable.animateAll(); - } - } - }, - nulling() { - lastSwapEl = null; - } - }; - - return Object.assign(Swap, { - pluginName: 'swap', - eventProperties() { - return { - swapItem: lastSwapEl - }; - } - }); -} - - -function swapNodes(n1, n2) { - let p1 = n1.parentNode, - p2 = n2.parentNode, - i1, i2; - - if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return; - - i1 = index(n1); - i2 = index(n2); - - if (p1.isEqualNode(p2) && i1 < i2) { - i2++; - } - p1.insertBefore(n2, p1.children[i1]); - p2.insertBefore(n1, p2.children[i2]); -} - -export default SwapPlugin; diff --git a/plugins/Swap/index.js b/plugins/Swap/index.js deleted file mode 100644 index 9799bc72c..000000000 --- a/plugins/Swap/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Swap.js'; diff --git a/scripts/banner.js b/scripts/banner.js deleted file mode 100644 index 337928bff..000000000 --- a/scripts/banner.js +++ /dev/null @@ -1,8 +0,0 @@ -import { version } from '../package.json'; - -export default `/**! - * Sortable ${ version } - * @author RubaXa - * @author owenm - * @license MIT - */`; diff --git a/scripts/build.js b/scripts/build.js deleted file mode 100644 index 11cf99d35..000000000 --- a/scripts/build.js +++ /dev/null @@ -1,17 +0,0 @@ -import babel from 'rollup-plugin-babel'; -import json from 'rollup-plugin-json'; -import resolve from 'rollup-plugin-node-resolve'; -import banner from './banner.js'; - - -export default { - output: { - banner, - name: 'Sortable' - }, - plugins: [ - json(), - babel(), - resolve() - ] -}; diff --git a/scripts/esm-build.js b/scripts/esm-build.js deleted file mode 100644 index 9caff74d0..000000000 --- a/scripts/esm-build.js +++ /dev/null @@ -1,28 +0,0 @@ -import build from './build.js'; - -export default ([ - { - input: 'entry/entry-core.js', - output: Object.assign({}, build.output, { - file: 'modular/sortable.core.esm.js', - format: 'esm' - }) - }, - { - input: 'entry/entry-defaults.js', - output: Object.assign({}, build.output, { - file: 'modular/sortable.esm.js', - format: 'esm' - }) - }, - { - input: 'entry/entry-complete.js', - output: Object.assign({}, build.output, { - file: 'modular/sortable.complete.esm.js', - format: 'esm' - }) - } -]).map(config => { - let buildCopy = { ...build }; - return Object.assign(buildCopy, config); -}); diff --git a/scripts/minify.js b/scripts/minify.js deleted file mode 100644 index e2051a2c2..000000000 --- a/scripts/minify.js +++ /dev/null @@ -1,11 +0,0 @@ -const UglifyJS = require('uglify-js'), - fs = require('fs'), - package = require('../package.json'); - -const banner = `/*! Sortable ${ package.version } - ${ package.license } | ${ package.repository.url } */\n`; - -fs.writeFileSync( - `./Sortable.min.js`, - banner + UglifyJS.minify(fs.readFileSync(`./Sortable.js`, 'utf8')).code, - 'utf8' -); diff --git a/scripts/test-compat.js b/scripts/test-compat.js deleted file mode 100644 index f7408c77f..000000000 --- a/scripts/test-compat.js +++ /dev/null @@ -1,30 +0,0 @@ -const createTestCafe = require('testcafe'); -// Testcafe cannot test on IE < 11 -// Testcafe testing on Chrome Android is currently broken (https://github.com/DevExpress/testcafe/issues/3948) -const browsers = [ - 'saucelabs:Internet Explorer@11.285:Windows 10', - 'saucelabs:MicrosoftEdge@16.16299:Windows 10', - 'saucelabs:iPhone XS Simulator@12.2', - 'saucelabs:Safari@12.0:macOS 10.14', - 'chrome:headless', - 'firefox:headless' -]; - -let testcafe; -let runner; -let failedCount; - -createTestCafe(null, 8000, 8001).then((tc) => { - testcafe = tc; - runner = tc.createRunner(); - return runner - .src('./tests/Sortable.compat.test.js') - .browsers(browsers) - .run(); -}).then((actualFailedCount) => { - // https://testcafe-discuss.devexpress.com/t/why-circleci-marked-build-as-green-even-if-this-build-contain-failed-test/726/2 - failedCount = actualFailedCount; - return testcafe.close(); -}).then(() => process.exit(failedCount)); - - diff --git a/scripts/test-compat.ts b/scripts/test-compat.ts new file mode 100644 index 000000000..24967fd8d --- /dev/null +++ b/scripts/test-compat.ts @@ -0,0 +1,75 @@ +import { + console as C, + either as E, + reader as R, + readerTaskEither as RTE, + task as T, + taskEither as TE, +} from "fp-ts"; +import { flow, pipe } from "fp-ts/lib/function"; +// es-module-interop must be set to true in ts-config +// some types for testcafe are in global namespace +import createTestCafe from "testcafe"; + +const browsers = [ + "saucelabs:Internet Explorer@11.285:Windows 10", + "saucelabs:MicrosoftEdge@16.16299:Windows 10", + "saucelabs:iPhone XS Simulator@12.2", + "saucelabs:Safari@12.0:macOS 10.14", + "chrome:headless", + "firefox:headless", +]; + +export const makeTestCafe = TE.tryCatchK(createTestCafe, (e) => e); + +// run test and clean up with testcafe.close() +const runTests = (settings: (runner: Runner) => Runner) => + TE.bracket( + makeTestCafe(null, 8000, 8001), + (testcafe) => + TE.tryCatch( + () => pipe(testcafe.createRunner(), settings, (runner) => runner.run()), + (e) => e + ), + (testcafe) => + TE.tryCatch( + () => testcafe.close(), + (e) => e + ) + ); + +// if failed count is 0, it passes +const makeTestResults = flow( + E.fromPredicate( + (n: number) => n === 0, + (n) => `Tests did not all pass, with a total of "${n}" failing.` + ), + E.map((n) => `All tests passed: a total of "${n}" failed`) +); + +// console error/log the result. +// return the error code, 0 for success, 1 for fail +const teLog = TE.fold( + flow( + T.fromIOK(C.error), + T.map(() => 1) + ), + flow( + T.fromIOK(C.log), + T.map(() => 0) + ) +); + +// settings used for these tests +const settings = (runner: Runner): Runner => + runner + .src("./tests/e2e-saucelabs/Sortable.compat.test.js") + .browsers(browsers); + +export const program = pipe( + runTests, + RTE.chain((n) => RTE.fromEitherK(makeTestResults)(n)), + R.map(teLog) +); + +program(settings)().then(process.exit); diff --git a/scripts/test.js b/scripts/test.js deleted file mode 100644 index 6c62b75ad..000000000 --- a/scripts/test.js +++ /dev/null @@ -1,21 +0,0 @@ -const createTestCafe = require('testcafe'); - -let testcafe; -let runner; -let failedCount; - - -createTestCafe().then((tc) => { - testcafe = tc; - runner = tc.createRunner(); - return runner - .src('./tests/Sortable.test.js') - .browsers('chrome:headless') - .concurrency(3) - .run(); -}).then((actualFailedCount) => { - failedCount = actualFailedCount; - console.log('FAILED COUNT', actualFailedCount) - return testcafe.close(); -}).then(() => process.exit(failedCount)); - diff --git a/scripts/test.ts b/scripts/test.ts new file mode 100644 index 000000000..aa802ea06 --- /dev/null +++ b/scripts/test.ts @@ -0,0 +1,67 @@ +import { + console as C, + either as E, + reader as R, + readerTaskEither as RTE, + task as T, + taskEither as TE, +} from "fp-ts"; +import { flow, pipe } from "fp-ts/lib/function"; +// es-module-interop must be set to true in ts-config +// some types for testcafe are in global namespace +import createTestCafe from "testcafe"; + +export const makeTestCafe = TE.tryCatchK(createTestCafe, (e) => e); + +// run test and clean up with testcafe.close() +const runTests = (settings: (runner: Runner) => Runner) => + TE.bracket( + makeTestCafe(), + (testcafe) => + TE.tryCatch( + () => pipe(testcafe.createRunner(), settings, (runner) => runner.run()), + (e) => e + ), + (testcafe) => + TE.tryCatch( + () => testcafe.close(), + (e) => e + ) + ); + +// if failed count is 0, it passes +const makeTestResults = flow( + E.fromPredicate( + (n: number) => n === 0, + (n) => `Tests did not all pass, with a total of "${n}" failing.` + ), + E.map((n) => `All tests passed: a total of "${n}" failed`) +); + +// console error/log the result. +// return the error code, 0 for success, 1 for fail +const teLog = TE.fold( + flow( + T.fromIOK(C.error), + T.map(() => 1) + ), + flow( + T.fromIOK(C.log), + T.map(() => 0) + ) +); + +// settings used for these tests +const settings = (runner: Runner): Runner => + runner + .src("./tests/e2e-local/Sortable.test.js") + .browsers("firefox:headless") + .concurrency(3); + +export const program = pipe( + runTests, + RTE.chain((n) => RTE.fromEitherK(makeTestResults)(n)), + R.map(teLog) +); + +program(settings)().then(process.exit); diff --git a/scripts/umd-build.js b/scripts/umd-build.js deleted file mode 100644 index ec179fdb9..000000000 --- a/scripts/umd-build.js +++ /dev/null @@ -1,15 +0,0 @@ -import build from './build.js'; - - -export default ([ - { - input: 'entry/entry-complete.js', - output: Object.assign({}, build.output, { - file: './Sortable.js', - format: 'umd' - }) - } -]).map(config => { - let buildCopy = { ...build }; - return Object.assign(buildCopy, config); -}); diff --git a/src/Animation.js b/src/Animation.js deleted file mode 100644 index 6aa8e3ef8..000000000 --- a/src/Animation.js +++ /dev/null @@ -1,175 +0,0 @@ -import { getRect, css, matrix, isRectEqual, indexOfObject } from './utils.js'; -import Sortable from './Sortable.js'; - -export default function AnimationStateManager() { - let animationStates = [], - animationCallbackId; - - return { - captureAnimationState() { - animationStates = []; - if (!this.options.animation) return; - let children = [].slice.call(this.el.children); - - children.forEach(child => { - if (css(child, 'display') === 'none' || child === Sortable.ghost) return; - animationStates.push({ - target: child, - rect: getRect(child) - }); - let fromRect = { ...animationStates[animationStates.length - 1].rect }; - - // If animating: compensate for current animation - if (child.thisAnimationDuration) { - let childMatrix = matrix(child, true); - if (childMatrix) { - fromRect.top -= childMatrix.f; - fromRect.left -= childMatrix.e; - } - } - - child.fromRect = fromRect; - }); - }, - - addAnimationState(state) { - animationStates.push(state); - }, - - removeAnimationState(target) { - animationStates.splice(indexOfObject(animationStates, { target }), 1); - }, - - animateAll(callback) { - if (!this.options.animation) { - clearTimeout(animationCallbackId); - if (typeof(callback) === 'function') callback(); - return; - } - - let animating = false, - animationTime = 0; - - animationStates.forEach((state) => { - let time = 0, - animatingThis = false, - target = state.target, - fromRect = target.fromRect, - toRect = getRect(target), - prevFromRect = target.prevFromRect, - prevToRect = target.prevToRect, - animatingRect = state.rect, - targetMatrix = matrix(target, true); - - - if (targetMatrix) { - // Compensate for current animation - toRect.top -= targetMatrix.f; - toRect.left -= targetMatrix.e; - } - - target.toRect = toRect; - - if (target.thisAnimationDuration) { - // Could also check if animatingRect is between fromRect and toRect - if ( - isRectEqual(prevFromRect, toRect) && - !isRectEqual(fromRect, toRect) && - // Make sure animatingRect is on line between toRect & fromRect - (animatingRect.top - toRect.top) / - (animatingRect.left - toRect.left) === - (fromRect.top - toRect.top) / - (fromRect.left - toRect.left) - ) { - // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, this.options); - } - } - - // if fromRect != toRect: animate - if (!isRectEqual(toRect, fromRect)) { - target.prevFromRect = fromRect; - target.prevToRect = toRect; - - if (!time) { - time = this.options.animation; - } - this.animate( - target, - animatingRect, - toRect, - time - ); - } - - if (time) { - animating = true; - animationTime = Math.max(animationTime, time); - clearTimeout(target.animationResetTimer); - target.animationResetTimer = setTimeout(function() { - target.animationTime = 0; - target.prevFromRect = null; - target.fromRect = null; - target.prevToRect = null; - target.thisAnimationDuration = null; - }, time); - target.thisAnimationDuration = time; - } - }); - - - clearTimeout(animationCallbackId); - if (!animating) { - if (typeof(callback) === 'function') callback(); - } else { - animationCallbackId = setTimeout(function() { - if (typeof(callback) === 'function') callback(); - }, animationTime); - } - animationStates = []; - }, - - animate(target, currentRect, toRect, duration) { - if (duration) { - css(target, 'transition', ''); - css(target, 'transform', ''); - let elMatrix = matrix(this.el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d, - translateX = (currentRect.left - toRect.left) / (scaleX || 1), - translateY = (currentRect.top - toRect.top) / (scaleY || 1); - - target.animatingX = !!translateX; - target.animatingY = !!translateY; - - css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)'); - - this.forRepaintDummy = repaint(target); // repaint - - css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : '')); - css(target, 'transform', 'translate3d(0,0,0)'); - (typeof target.animated === 'number') && clearTimeout(target.animated); - target.animated = setTimeout(function () { - css(target, 'transition', ''); - css(target, 'transform', ''); - target.animated = false; - - target.animatingX = false; - target.animatingY = false; - }, duration); - } - } - }; -} - -function repaint(target) { - return target.offsetWidth; -} - - -function calculateRealTime(animatingRect, fromRect, toRect, options) { - return ( - Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / - Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) - ) * options.animation; -} diff --git a/src/BrowserInfo.js b/src/BrowserInfo.js deleted file mode 100644 index 304a853a2..000000000 --- a/src/BrowserInfo.js +++ /dev/null @@ -1,12 +0,0 @@ -function userAgent(pattern) { - if (typeof window !== 'undefined' && window.navigator) { - return !!/*@__PURE__*/navigator.userAgent.match(pattern); - } -} - -export const IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -export const Edge = userAgent(/Edge/i); -export const FireFox = userAgent(/firefox/i); -export const Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -export const IOS = userAgent(/iP(ad|od|hone)/i); -export const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); diff --git a/src/EventDispatcher.js b/src/EventDispatcher.js deleted file mode 100644 index e47cb5809..000000000 --- a/src/EventDispatcher.js +++ /dev/null @@ -1,57 +0,0 @@ -import { IE11OrLess, Edge } from './BrowserInfo.js'; -import { expando } from './utils.js'; -import PluginManager from './PluginManager.js'; - -export default function dispatchEvent( - { - sortable, rootEl, name, - targetEl, cloneEl, toEl, fromEl, - oldIndex, newIndex, - oldDraggableIndex, newDraggableIndex, - originalEvent, putSortable, extraEventProperties - } -) { - sortable = (sortable || (rootEl && rootEl[expando])); - if (!sortable) return; - - let evt, - options = sortable.options, - onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); - // Support for new CustomEvent feature - if (window.CustomEvent && !IE11OrLess && !Edge) { - evt = new CustomEvent(name, { - bubbles: true, - cancelable: true - }); - } else { - evt = document.createEvent('Event'); - evt.initEvent(name, true, true); - } - - evt.to = toEl || rootEl; - evt.from = fromEl || rootEl; - evt.item = targetEl || rootEl; - evt.clone = cloneEl; - - evt.oldIndex = oldIndex; - evt.newIndex = newIndex; - - evt.oldDraggableIndex = oldDraggableIndex; - evt.newDraggableIndex = newDraggableIndex; - - evt.originalEvent = originalEvent; - evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; - - let allEventProperties = { ...extraEventProperties, ...PluginManager.getEventProperties(name, sortable) }; - for (let option in allEventProperties) { - evt[option] = allEventProperties[option]; - } - - if (rootEl) { - rootEl.dispatchEvent(evt); - } - - if (options[onName]) { - options[onName].call(sortable, evt); - } -} diff --git a/src/PluginManager.js b/src/PluginManager.js deleted file mode 100644 index 623c26f62..000000000 --- a/src/PluginManager.js +++ /dev/null @@ -1,87 +0,0 @@ -let plugins = []; - -const defaults = { - initializeByDefault: true -}; - -export default { - mount(plugin) { - // Set default static properties - for (let option in defaults) { - if (defaults.hasOwnProperty(option) && !(option in plugin)) { - plugin[option] = defaults[option]; - } - } - plugins.push(plugin); - }, - pluginEvent(eventName, sortable, evt) { - this.eventCanceled = false; - evt.cancel = () => { - this.eventCanceled = true; - }; - const eventNameGlobal = eventName + 'Global'; - plugins.forEach(plugin => { - if (!sortable[plugin.pluginName]) return; - // Fire global events if it exists in this sortable - if ( - sortable[plugin.pluginName][eventNameGlobal] - ) { - sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt }); - } - - // Only fire plugin event if plugin is enabled in this sortable, - // and plugin has event defined - if ( - sortable.options[plugin.pluginName] && - sortable[plugin.pluginName][eventName] - ) { - sortable[plugin.pluginName][eventName]({ sortable, ...evt }); - } - }); - }, - initializePlugins(sortable, el, defaults, options) { - plugins.forEach(plugin => { - const pluginName = plugin.pluginName; - if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - - let initialized = new plugin(sortable, el, sortable.options); - initialized.sortable = sortable; - initialized.options = sortable.options; - sortable[pluginName] = initialized; - - // Add default options from plugin - Object.assign(defaults, initialized.defaults); - }); - - for (let option in sortable.options) { - if (!sortable.options.hasOwnProperty(option)) continue; - let modified = this.modifyOption(sortable, option, sortable.options[option]); - if (typeof(modified) !== 'undefined') { - sortable.options[option] = modified; - } - } - }, - getEventProperties(name, sortable) { - let eventProperties = {}; - plugins.forEach(plugin => { - if (typeof(plugin.eventProperties) !== 'function') return; - Object.assign(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); - }); - - return eventProperties; - }, - modifyOption(sortable, name, value) { - let modifiedValue; - plugins.forEach(plugin => { - // Plugin must exist on the Sortable - if (!sortable[plugin.pluginName]) return; - - // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin - if (plugin.optionListeners && typeof(plugin.optionListeners[name]) === 'function') { - modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value); - } - }); - - return modifiedValue; - } -}; diff --git a/src/Sortable.js b/src/Sortable.js deleted file mode 100644 index 89b3a20e4..000000000 --- a/src/Sortable.js +++ /dev/null @@ -1,1971 +0,0 @@ -/**! - * Sortable - * @author RubaXa - * @author owenm - * @license MIT - */ - -import { version } from '../package.json'; - -import { IE11OrLess, Edge, FireFox, Safari, IOS, ChromeForAndroid } from './BrowserInfo.js'; - -import AnimationStateManager from './Animation.js'; - -import PluginManager from './PluginManager.js'; - -import dispatchEvent from './EventDispatcher.js'; - -import { - on, - off, - closest, - toggleClass, - css, - matrix, - find, - getWindowScrollingElement, - getRect, - isScrolledPast, - getChild, - lastChild, - index, - getRelativeScrollOffset, - extend, - throttle, - scrollBy, - clone, - expando -} from './utils.js'; - - -let pluginEvent = function(eventName, sortable, { evt: originalEvent, ...data } = {}) { - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { - dragEl, - parentEl, - ghostEl, - rootEl, - nextEl, - lastDownEl, - cloneEl, - cloneHidden, - dragStarted: moved, - putSortable, - activeSortable: Sortable.active, - originalEvent, - - oldIndex, - oldDraggableIndex, - newIndex, - newDraggableIndex, - - hideGhostForTarget: _hideGhostForTarget, - unhideGhostForTarget: _unhideGhostForTarget, - - - cloneNowHidden() { - cloneHidden = true; - }, - cloneNowShown() { - cloneHidden = false; - }, - - dispatchSortableEvent(name) { - _dispatchEvent({ sortable, name, originalEvent }); - }, - - ...data - }); -}; - -function _dispatchEvent(info) { - dispatchEvent({ - putSortable, - cloneEl, - targetEl: dragEl, - rootEl, - oldIndex, - oldDraggableIndex, - newIndex, - newDraggableIndex, - ...info - }); -} - - -let dragEl, - parentEl, - ghostEl, - rootEl, - nextEl, - lastDownEl, - - cloneEl, - cloneHidden, - - oldIndex, - newIndex, - oldDraggableIndex, - newDraggableIndex, - - activeGroup, - putSortable, - - awaitingDragStarted = false, - ignoreNextClick = false, - sortables = [], - - tapEvt, - touchEvt, - lastDx, - lastDy, - tapDistanceLeft, - tapDistanceTop, - - moved, - - lastTarget, - lastDirection, - pastFirstInvertThresh = false, - isCircumstantialInvert = false, - - targetMoveDistance, - - // For positioning ghost absolutely - ghostRelativeParent, - ghostRelativeParentInitialScroll = [], // (left, top) - - _silent = false, - savedInputChecked = []; - - /** @const */ - const documentExists = typeof document !== 'undefined', - - PositionGhostAbsolutely = IOS, - - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - - // This will not pass for IE9, because IE9 DnD only works on anchors - supportDraggable = documentExists && !ChromeForAndroid && !IOS && ('draggable' in document.createElement('div')), - - supportCssPointerEvents = (function() { - if (!documentExists) return; - // false when <= IE11 - if (IE11OrLess) { - return false; - } - let el = document.createElement('x'); - el.style.cssText = 'pointer-events:auto'; - return el.style.pointerEvents === 'auto'; - })(), - - _detectDirection = function(el, options) { - let elCSS = css(el), - elWidth = parseInt(elCSS.width) - - parseInt(elCSS.paddingLeft) - - parseInt(elCSS.paddingRight) - - parseInt(elCSS.borderLeftWidth) - - parseInt(elCSS.borderRightWidth), - child1 = getChild(el, 0, options), - child2 = getChild(el, 1, options), - firstChildCSS = child1 && css(child1), - secondChildCSS = child2 && css(child2), - firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, - secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width; - - if (elCSS.display === 'flex') { - return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' - ? 'vertical' : 'horizontal'; - } - - if (elCSS.display === 'grid') { - return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; - } - - if (child1 && firstChildCSS.float && firstChildCSS.float !== 'none') { - let touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right'; - - return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? - 'vertical' : 'horizontal'; - } - - return (child1 && - ( - firstChildCSS.display === 'block' || - firstChildCSS.display === 'flex' || - firstChildCSS.display === 'table' || - firstChildCSS.display === 'grid' || - firstChildWidth >= elWidth && - elCSS[CSSFloatProperty] === 'none' || - child2 && - elCSS[CSSFloatProperty] === 'none' && - firstChildWidth + secondChildWidth > elWidth - ) ? - 'vertical' : 'horizontal' - ); - }, - - _dragElInRowColumn = function(dragRect, targetRect, vertical) { - let dragElS1Opp = vertical ? dragRect.left : dragRect.top, - dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, - dragElOppLength = vertical ? dragRect.width : dragRect.height, - targetS1Opp = vertical ? targetRect.left : targetRect.top, - targetS2Opp = vertical ? targetRect.right : targetRect.bottom, - targetOppLength = vertical ? targetRect.width : targetRect.height; - - return ( - dragElS1Opp === targetS1Opp || - dragElS2Opp === targetS2Opp || - (dragElS1Opp + dragElOppLength / 2) === (targetS1Opp + targetOppLength / 2) - ); - }, - - /** - * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. - * @param {Number} x X position - * @param {Number} y Y position - * @return {HTMLElement} Element of the first found nearest Sortable - */ - _detectNearestEmptySortable = function(x, y) { - let ret; - sortables.some((sortable) => { - if (lastChild(sortable)) return; - - let rect = getRect(sortable), - threshold = sortable[expando].options.emptyInsertThreshold, - insideHorizontally = x >= (rect.left - threshold) && x <= (rect.right + threshold), - insideVertically = y >= (rect.top - threshold) && y <= (rect.bottom + threshold); - - if (threshold && insideHorizontally && insideVertically) { - return (ret = sortable); - } - }); - return ret; - }, - - _prepareGroup = function (options) { - function toFn(value, pull) { - return function(to, from, dragEl, evt) { - let sameGroup = to.options.group.name && - from.options.group.name && - to.options.group.name === from.options.group.name; - - if (value == null && (pull || sameGroup)) { - // Default pull value - // Default pull and put value if same group - return true; - } else if (value == null || value === false) { - return false; - } else if (pull && value === 'clone') { - return value; - } else if (typeof value === 'function') { - return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); - } else { - let otherGroup = (pull ? to : from).options.group.name; - - return (value === true || - (typeof value === 'string' && value === otherGroup) || - (value.join && value.indexOf(otherGroup) > -1)); - } - }; - } - - let group = {}; - let originalGroup = options.group; - - if (!originalGroup || typeof originalGroup != 'object') { - originalGroup = {name: originalGroup}; - } - - group.name = originalGroup.name; - group.checkPull = toFn(originalGroup.pull, true); - group.checkPut = toFn(originalGroup.put); - group.revertClone = originalGroup.revertClone; - - options.group = group; - }, - - _hideGhostForTarget = function() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', 'none'); - } - }, - - _unhideGhostForTarget = function() { - if (!supportCssPointerEvents && ghostEl) { - css(ghostEl, 'display', ''); - } - }; - - -// #1184 fix - Prevent click event on fallback if dragged but item not changed position -if (documentExists) { - document.addEventListener('click', function(evt) { - if (ignoreNextClick) { - evt.preventDefault(); - evt.stopPropagation && evt.stopPropagation(); - evt.stopImmediatePropagation && evt.stopImmediatePropagation(); - ignoreNextClick = false; - return false; - } - }, true); -} - -let nearestEmptyInsertDetectEvent = function(evt) { - if (dragEl) { - evt = evt.touches ? evt.touches[0] : evt; - let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); - - if (nearest) { - // Create imitation event - let event = {}; - for (let i in evt) { - if (evt.hasOwnProperty(i)) { - event[i] = evt[i]; - } - } - event.target = event.rootEl = nearest; - event.preventDefault = void 0; - event.stopPropagation = void 0; - nearest[expando]._onDragOver(event); - } - } -}; - - -let _checkOutsideTargetEl = function(evt) { - if (dragEl) { - dragEl.parentNode[expando]._isOutsideThisEl(evt.target); - } -}; - - -/** - * @class Sortable - * @param {HTMLElement} el - * @param {Object} [options] - */ -function Sortable(el, options) { - if (!(el && el.nodeType && el.nodeType === 1)) { - throw `Sortable: \`el\` must be an HTMLElement, not ${ {}.toString.call(el) }`; - } - - this.el = el; // root element - this.options = options = Object.assign({}, options); - - - // Export instance - el[expando] = this; - - let defaults = { - group: null, - sort: true, - disabled: false, - store: null, - handle: null, - draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*', - swapThreshold: 1, // percentage; 0 <= x <= 1 - invertSwap: false, // invert always - invertedSwapThreshold: null, // will be set to same as swapThreshold if default - removeCloneOnHide: true, - direction: function() { - return _detectDirection(el, this.options); - }, - ghostClass: 'sortable-ghost', - chosenClass: 'sortable-chosen', - dragClass: 'sortable-drag', - ignore: 'a, img', - filter: null, - preventOnFilter: true, - animation: 0, - easing: null, - setData: function (dataTransfer, dragEl) { - dataTransfer.setData('Text', dragEl.textContent); - }, - dropBubble: false, - dragoverBubble: false, - dataIdAttr: 'data-id', - delay: 0, - delayOnTouchOnly: false, - touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, - forceFallback: false, - fallbackClass: 'sortable-fallback', - fallbackOnBody: false, - fallbackTolerance: 0, - fallbackOffset: {x: 0, y: 0}, - supportPointer: Sortable.supportPointer !== false && ('PointerEvent' in window), - emptyInsertThreshold: 5 - }; - - PluginManager.initializePlugins(this, el, defaults); - - // Set default options - for (let name in defaults) { - !(name in options) && (options[name] = defaults[name]); - } - - _prepareGroup(options); - - // Bind all private methods - for (let fn in this) { - if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { - this[fn] = this[fn].bind(this); - } - } - - // Setup drag mode - this.nativeDraggable = options.forceFallback ? false : supportDraggable; - - if (this.nativeDraggable) { - // Touch start threshold cannot be greater than the native dragstart threshold - this.options.touchStartThreshold = 1; - } - - // Bind events - if (options.supportPointer) { - on(el, 'pointerdown', this._onTapStart); - } else { - on(el, 'mousedown', this._onTapStart); - on(el, 'touchstart', this._onTapStart); - } - - if (this.nativeDraggable) { - on(el, 'dragover', this); - on(el, 'dragenter', this); - } - - sortables.push(this.el); - - // Restore sorting - options.store && options.store.get && this.sort(options.store.get(this) || []); - - // Add animation state manager - Object.assign(this, AnimationStateManager()); -} - -Sortable.prototype = /** @lends Sortable.prototype */ { - constructor: Sortable, - - _isOutsideThisEl: function(target) { - if (!this.el.contains(target) && target !== this.el) { - lastTarget = null; - } - }, - - _getDirection: function(evt, target) { - return (typeof this.options.direction === 'function') ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; - }, - - _onTapStart: function (/** Event|TouchEvent */evt) { - if (!evt.cancelable) return; - let _this = this, - el = this.el, - options = this.options, - preventOnFilter = options.preventOnFilter, - type = evt.type, - touch = (evt.touches && evt.touches[0]) || (evt.pointerType && evt.pointerType === 'touch' && evt), - target = (touch || evt).target, - originalTarget = evt.target.shadowRoot && ((evt.path && evt.path[0]) || (evt.composedPath && evt.composedPath()[0])) || target, - filter = options.filter; - - _saveInputCheckedState(el); - - - // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. - if (dragEl) { - return; - } - - if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { - return; // only left button and enabled - } - - // cancel dnd if original target is content editable - if (originalTarget.isContentEditable) { - return; - } - - // Safari ignores further event handling after mousedown - if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') { - return; - } - - target = closest(target, options.draggable, el, false); - - - if (target && target.animated) { - return; - } - - if (lastDownEl === target) { - // Ignoring duplicate `down` - return; - } - - // Get the index of the dragged element within its parent - oldIndex = index(target); - oldDraggableIndex = index(target, options.draggable); - - // Check filter - if (typeof filter === 'function') { - if (filter.call(this, evt, target, this)) { - _dispatchEvent({ - sortable: _this, - rootEl: originalTarget, - name: 'filter', - targetEl: target, - toEl: el, - fromEl: el - }); - pluginEvent('filter', _this, { evt }); - preventOnFilter && evt.cancelable && evt.preventDefault(); - return; // cancel dnd - } - } - else if (filter) { - filter = filter.split(',').some(function (criteria) { - criteria = closest(originalTarget, criteria.trim(), el, false); - - if (criteria) { - _dispatchEvent({ - sortable: _this, - rootEl: criteria, - name: 'filter', - targetEl: target, - fromEl: el, - toEl: el - }); - pluginEvent('filter', _this, { evt }); - return true; - } - }); - - if (filter) { - preventOnFilter && evt.cancelable && evt.preventDefault(); - return; // cancel dnd - } - } - - if (options.handle && !closest(originalTarget, options.handle, el, false)) { - return; - } - - // Prepare `dragstart` - this._prepareDragStart(evt, touch, target); - }, - - _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) { - let _this = this, - el = _this.el, - options = _this.options, - ownerDocument = el.ownerDocument, - dragStartFn; - - if (target && !dragEl && (target.parentNode === el)) { - let dragRect = getRect(target); - rootEl = el; - dragEl = target; - parentEl = dragEl.parentNode; - nextEl = dragEl.nextSibling; - lastDownEl = target; - activeGroup = options.group; - - Sortable.dragged = dragEl; - - tapEvt = { - target: dragEl, - clientX: (touch || evt).clientX, - clientY: (touch || evt).clientY - }; - - tapDistanceLeft = tapEvt.clientX - dragRect.left; - tapDistanceTop = tapEvt.clientY - dragRect.top; - - this._lastX = (touch || evt).clientX; - this._lastY = (touch || evt).clientY; - - dragEl.style['will-change'] = 'all'; - - dragStartFn = function () { - pluginEvent('delayEnded', _this, { evt }); - if (Sortable.eventCanceled) { - _this._onDrop(); - return; - } - // Delayed drag has been triggered - // we can re-enable the events: touchmove/mousemove - _this._disableDelayedDragEvents(); - - if (!FireFox && _this.nativeDraggable) { - dragEl.draggable = true; - } - - // Bind the events: dragstart/dragend - _this._triggerDragStart(evt, touch); - - // Drag start event - _dispatchEvent({ - sortable: _this, - name: 'choose', - originalEvent: evt - }); - - // Chosen item - toggleClass(dragEl, options.chosenClass, true); - }; - - // Disable "draggable" - options.ignore.split(',').forEach(function (criteria) { - find(dragEl, criteria.trim(), _disableDraggable); - }); - - on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent); - on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent); - - on(ownerDocument, 'mouseup', _this._onDrop); - on(ownerDocument, 'touchend', _this._onDrop); - on(ownerDocument, 'touchcancel', _this._onDrop); - - // Make dragEl draggable (must be before delay for FireFox) - if (FireFox && this.nativeDraggable) { - this.options.touchStartThreshold = 4; - dragEl.draggable = true; - } - - pluginEvent('delayStart', this, { evt }); - - // Delay is impossible for native DnD in Edge or IE - if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { - if (Sortable.eventCanceled) { - this._onDrop(); - return; - } - // If the user moves the pointer or let go the click or touch - // before the delay has been reached: - // disable the delayed drag - on(ownerDocument, 'mouseup', _this._disableDelayedDrag); - on(ownerDocument, 'touchend', _this._disableDelayedDrag); - on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); - on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler); - on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler); - options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler); - - _this._dragStartTimer = setTimeout(dragStartFn, options.delay); - } else { - dragStartFn(); - } - } - }, - - _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/e) { - let touch = e.touches ? e.touches[0] : e; - if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) - >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) - ) { - this._disableDelayedDrag(); - } - }, - - _disableDelayedDrag: function () { - dragEl && _disableDraggable(dragEl); - clearTimeout(this._dragStartTimer); - - this._disableDelayedDragEvents(); - }, - - _disableDelayedDragEvents: function () { - let ownerDocument = this.el.ownerDocument; - off(ownerDocument, 'mouseup', this._disableDelayedDrag); - off(ownerDocument, 'touchend', this._disableDelayedDrag); - off(ownerDocument, 'touchcancel', this._disableDelayedDrag); - off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); - off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); - }, - - _triggerDragStart: function (/** Event */evt, /** Touch */touch) { - touch = touch || (evt.pointerType == 'touch' && evt); - - if (!this.nativeDraggable || touch) { - if (this.options.supportPointer) { - on(document, 'pointermove', this._onTouchMove); - } else if (touch) { - on(document, 'touchmove', this._onTouchMove); - } else { - on(document, 'mousemove', this._onTouchMove); - } - } else { - on(dragEl, 'dragend', this); - on(rootEl, 'dragstart', this._onDragStart); - } - - try { - if (document.selection) { - // Timeout neccessary for IE9 - _nextTick(function () { - document.selection.empty(); - }); - } else { - window.getSelection().removeAllRanges(); - } - } catch (err) { - } - }, - - _dragStarted: function (fallback, evt) { - let _this = this; - awaitingDragStarted = false; - if (rootEl && dragEl) { - pluginEvent('dragStarted', this, { evt }); - - if (this.nativeDraggable) { - on(document, 'dragover', _checkOutsideTargetEl); - } - let options = this.options; - - // Apply effect - !fallback && toggleClass(dragEl, options.dragClass, false); - toggleClass(dragEl, options.ghostClass, true); - - Sortable.active = this; - - fallback && this._appendGhost(); - - // Drag start event - _dispatchEvent({ - sortable: this, - name: 'start', - originalEvent: evt - }); - } else { - this._nulling(); - } - }, - - _emulateDragOver: function () { - if (touchEvt) { - this._lastX = touchEvt.clientX; - this._lastY = touchEvt.clientY; - - _hideGhostForTarget(); - - let target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - let parent = target; - - while (target && target.shadowRoot) { - target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - if (target === parent) break; - parent = target; - } - - dragEl.parentNode[expando]._isOutsideThisEl(target); - - if (parent) { - do { - if (parent[expando]) { - let inserted; - - inserted = parent[expando]._onDragOver({ - clientX: touchEvt.clientX, - clientY: touchEvt.clientY, - target: target, - rootEl: parent - }); - - if (inserted && !this.options.dragoverBubble) { - break; - } - } - - target = parent; // store last element - } - /* jshint boss:true */ - while (parent = parent.parentNode); - } - - _unhideGhostForTarget(); - } - }, - - - _onTouchMove: function (/**TouchEvent*/evt) { - if (tapEvt) { - let options = this.options, - fallbackTolerance = options.fallbackTolerance, - fallbackOffset = options.fallbackOffset, - touch = evt.touches ? evt.touches[0] : evt, - ghostMatrix = ghostEl && matrix(ghostEl, true), - scaleX = ghostEl && ghostMatrix && ghostMatrix.a, - scaleY = ghostEl && ghostMatrix && ghostMatrix.d, - relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), - dx = ((touch.clientX - tapEvt.clientX) - + fallbackOffset.x) / (scaleX || 1) - + (relativeScrollOffset ? (relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0]) : 0) / (scaleX || 1), - dy = ((touch.clientY - tapEvt.clientY) - + fallbackOffset.y) / (scaleY || 1) - + (relativeScrollOffset ? (relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1]) : 0) / (scaleY || 1); - - // only set the status to dragging, when we are actually dragging - if (!Sortable.active && !awaitingDragStarted) { - if (fallbackTolerance && - Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance - ) { - return; - } - this._onDragStart(evt, true); - } - - if (ghostEl) { - if (ghostMatrix) { - ghostMatrix.e += dx - (lastDx || 0); - ghostMatrix.f += dy - (lastDy || 0); - } else { - ghostMatrix = { - a: 1, - b: 0, - c: 0, - d: 1, - e: dx, - f: dy - }; - } - - let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; - - css(ghostEl, 'webkitTransform', cssMatrix); - css(ghostEl, 'mozTransform', cssMatrix); - css(ghostEl, 'msTransform', cssMatrix); - css(ghostEl, 'transform', cssMatrix); - - lastDx = dx; - lastDy = dy; - - touchEvt = touch; - } - - evt.cancelable && evt.preventDefault(); - } - }, - - _appendGhost: function () { - // Bug if using scale(): https://stackoverflow.com/questions/2637058 - // Not being adjusted for - if (!ghostEl) { - let container = this.options.fallbackOnBody ? document.body : rootEl, - rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), - options = this.options; - - // Position absolutely - if (PositionGhostAbsolutely) { - // Get relatively positioned parent - ghostRelativeParent = container; - - while ( - css(ghostRelativeParent, 'position') === 'static' && - css(ghostRelativeParent, 'transform') === 'none' && - ghostRelativeParent !== document - ) { - ghostRelativeParent = ghostRelativeParent.parentNode; - } - - if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) { - if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement(); - - rect.top += ghostRelativeParent.scrollTop; - rect.left += ghostRelativeParent.scrollLeft; - } else { - ghostRelativeParent = getWindowScrollingElement(); - } - ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent); - } - - - ghostEl = dragEl.cloneNode(true); - - toggleClass(ghostEl, options.ghostClass, false); - toggleClass(ghostEl, options.fallbackClass, true); - toggleClass(ghostEl, options.dragClass, true); - - css(ghostEl, 'transition', ''); - css(ghostEl, 'transform', ''); - - css(ghostEl, 'box-sizing', 'border-box'); - css(ghostEl, 'margin', 0); - css(ghostEl, 'top', rect.top); - css(ghostEl, 'left', rect.left); - css(ghostEl, 'width', rect.width); - css(ghostEl, 'height', rect.height); - css(ghostEl, 'opacity', '0.8'); - css(ghostEl, 'position', (PositionGhostAbsolutely ? 'absolute' : 'fixed')); - css(ghostEl, 'zIndex', '100000'); - css(ghostEl, 'pointerEvents', 'none'); - - - Sortable.ghost = ghostEl; - - container.appendChild(ghostEl); - - // Set transform-origin - css(ghostEl, 'transform-origin', (tapDistanceLeft / parseInt(ghostEl.style.width) * 100) + '% ' + (tapDistanceTop / parseInt(ghostEl.style.height) * 100) + '%'); - } - }, - - _onDragStart: function (/**Event*/evt, /**boolean*/fallback) { - let _this = this; - let dataTransfer = evt.dataTransfer; - let options = _this.options; - - pluginEvent('dragStart', this, { evt }); - if (Sortable.eventCanceled) { - this._onDrop(); - return; - } - - pluginEvent('setupClone', this); - if (!Sortable.eventCanceled) { - cloneEl = clone(dragEl); - - cloneEl.draggable = false; - cloneEl.style['will-change'] = ''; - - this._hideClone(); - - toggleClass(cloneEl, this.options.chosenClass, false); - Sortable.clone = cloneEl; - } - - - // #1143: IFrame support workaround - _this.cloneId = _nextTick(function() { - pluginEvent('clone', _this); - if (Sortable.eventCanceled) return; - - if (!_this.options.removeCloneOnHide) { - rootEl.insertBefore(cloneEl, dragEl); - } - _this._hideClone(); - - _dispatchEvent({ - sortable: _this, - name: 'clone' - }); - }); - - - !fallback && toggleClass(dragEl, options.dragClass, true); - - // Set proper drop events - if (fallback) { - ignoreNextClick = true; - _this._loopId = setInterval(_this._emulateDragOver, 50); - } else { - // Undo what was set in _prepareDragStart before drag started - off(document, 'mouseup', _this._onDrop); - off(document, 'touchend', _this._onDrop); - off(document, 'touchcancel', _this._onDrop); - - if (dataTransfer) { - dataTransfer.effectAllowed = 'move'; - options.setData && options.setData.call(_this, dataTransfer, dragEl); - } - - on(document, 'drop', _this); - - // #1276 fix: - css(dragEl, 'transform', 'translateZ(0)'); - } - - awaitingDragStarted = true; - - _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt)); - on(document, 'selectstart', _this); - - moved = true; - - if (Safari) { - css(document.body, 'user-select', 'none'); - } - }, - - - // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function (/**Event*/evt) { - let el = this.el, - target = evt.target, - dragRect, - targetRect, - revert, - options = this.options, - group = options.group, - activeSortable = Sortable.active, - isOwner = (activeGroup === group), - canSort = options.sort, - fromSortable = (putSortable || activeSortable), - vertical, - _this = this, - completedFired = false; - - if (_silent) return; - - function dragOverEvent(name, extra) { - pluginEvent(name, _this, { - evt, - isOwner, - axis: vertical ? 'vertical' : 'horizontal', - revert, - dragRect, - targetRect, - canSort, - fromSortable, - target, - completed, - onMove(target, after) { - return onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); - }, - changed, - ...extra - }); - } - - // Capture animation state - function capture() { - dragOverEvent('dragOverAnimationCapture'); - - _this.captureAnimationState(); - if (_this !== fromSortable) { - fromSortable.captureAnimationState(); - } - } - - // Return invocation when dragEl is inserted (or completed) - function completed(insertion) { - dragOverEvent('dragOverCompleted', { insertion }); - - if (insertion) { - // Clones must be hidden before folding animation to capture dragRectAbsolute properly - if (isOwner) { - activeSortable._hideClone(); - } else { - activeSortable._showClone(_this); - } - - if (_this !== fromSortable) { - // Set ghost class to new sortable's ghost class - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); - toggleClass(dragEl, options.ghostClass, true); - } - - if (putSortable !== _this && _this !== Sortable.active) { - putSortable = _this; - } else if (_this === Sortable.active && putSortable) { - putSortable = null; - } - - // Animation - if (fromSortable === _this) { - _this._ignoreWhileAnimating = target; - } - _this.animateAll(function() { - dragOverEvent('dragOverAnimationComplete'); - _this._ignoreWhileAnimating = null; - }); - if (_this !== fromSortable) { - fromSortable.animateAll(); - fromSortable._ignoreWhileAnimating = null; - } - } - - - // Null lastTarget if it is not inside a previously swapped element - if ((target === dragEl && !dragEl.animated) || (target === el && !target.animated)) { - lastTarget = null; - } - - // no bubbling and not fallback - if (!options.dragoverBubble && !evt.rootEl && target !== document) { - dragEl.parentNode[expando]._isOutsideThisEl(evt.target); - - // Do not detect for empty insert if already inserted - !insertion && nearestEmptyInsertDetectEvent(evt); - } - - !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); - - return (completedFired = true); - } - - // Call when dragEl has been inserted - function changed() { - newIndex = index(dragEl); - newDraggableIndex = index(dragEl, options.draggable); - _dispatchEvent({ - sortable: _this, - name: 'change', - toEl: el, - newIndex, - newDraggableIndex, - originalEvent: evt - }); - } - - - if (evt.preventDefault !== void 0) { - evt.cancelable && evt.preventDefault(); - } - - - target = closest(target, options.draggable, el, true); - - dragOverEvent('dragOver'); - if (Sortable.eventCanceled) return completedFired; - - if ( - dragEl.contains(evt.target) || - target.animated && target.animatingX && target.animatingY || - _this._ignoreWhileAnimating === target - ) { - return completed(false); - } - - ignoreNextClick = false; - - if (activeSortable && !options.disabled && - (isOwner - ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list - : ( - putSortable === this || - ( - (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && - group.checkPut(this, activeSortable, dragEl, evt) - ) - ) - ) - ) { - vertical = this._getDirection(evt, target) === 'vertical'; - - dragRect = getRect(dragEl); - - dragOverEvent('dragOverValid'); - if (Sortable.eventCanceled) return completedFired; - - if (revert) { - parentEl = rootEl; // actualization - capture(); - - this._hideClone(); - - dragOverEvent('revert'); - - if (!Sortable.eventCanceled) { - if (nextEl) { - rootEl.insertBefore(dragEl, nextEl); - } else { - rootEl.appendChild(dragEl); - } - } - - return completed(true); - } - - let elLastChild = lastChild(el, options.draggable); - - if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { - // If already at end of list: Do not insert - if (elLastChild === dragEl) { - return completed(false); - } - - // assign target only if condition is true - if (elLastChild && el === evt.target) { - target = elLastChild; - } - - if (target) { - targetRect = getRect(target); - } - - if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { - capture(); - el.appendChild(dragEl); - parentEl = el; // actualization - - changed(); - return completed(true); - } - } - else if (target.parentNode === el) { - targetRect = getRect(target); - let direction = 0, - targetBeforeFirstSwap, - differentLevel = dragEl.parentNode !== el, - differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), - side1 = vertical ? 'top' : 'left', - scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'), - scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; - - - if (lastTarget !== target) { - targetBeforeFirstSwap = targetRect[side1]; - pastFirstInvertThresh = false; - isCircumstantialInvert = (!differentRowCol && options.invertSwap) || differentLevel; - } - - direction = _getSwapDirection( - evt, target, targetRect, vertical, - differentRowCol ? 1 : options.swapThreshold, - options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, - isCircumstantialInvert, - lastTarget === target - ); - - let sibling; - - if (direction !== 0) { - // Check if target is beside dragEl in respective direction (ignoring hidden elements) - let dragIndex = index(dragEl); - - do { - dragIndex -= direction; - sibling = parentEl.children[dragIndex]; - } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl)); - } - // If dragEl is already beside target: Do not insert - if ( - direction === 0 || - sibling === target - ) { - return completed(false); - } - - lastTarget = target; - - lastDirection = direction; - - let nextSibling = target.nextElementSibling, - after = false; - - after = direction === 1; - - let moveVector = onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); - - if (moveVector !== false) { - if (moveVector === 1 || moveVector === -1) { - after = (moveVector === 1); - } - - _silent = true; - setTimeout(_unsilent, 30); - - capture(); - - if (after && !nextSibling) { - el.appendChild(dragEl); - } else { - target.parentNode.insertBefore(dragEl, after ? nextSibling : target); - } - - // Undo chrome's scroll adjustment (has no effect on other browsers) - if (scrolledPastTop) { - scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop); - } - - parentEl = dragEl.parentNode; // actualization - - // must be done before animation - if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { - targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]); - } - changed(); - - return completed(true); - } - } - - if (el.contains(dragEl)) { - return completed(false); - } - } - - return false; - }, - - _ignoreWhileAnimating: null, - - _offMoveEvents: function() { - off(document, 'mousemove', this._onTouchMove); - off(document, 'touchmove', this._onTouchMove); - off(document, 'pointermove', this._onTouchMove); - off(document, 'dragover', nearestEmptyInsertDetectEvent); - off(document, 'mousemove', nearestEmptyInsertDetectEvent); - off(document, 'touchmove', nearestEmptyInsertDetectEvent); - }, - - _offUpEvents: function () { - let ownerDocument = this.el.ownerDocument; - - off(ownerDocument, 'mouseup', this._onDrop); - off(ownerDocument, 'touchend', this._onDrop); - off(ownerDocument, 'pointerup', this._onDrop); - off(ownerDocument, 'touchcancel', this._onDrop); - off(document, 'selectstart', this); - }, - - _onDrop: function (/**Event*/evt) { - let el = this.el, - options = this.options; - - // Get the index of the dragged element within its parent - newIndex = index(dragEl); - newDraggableIndex = index(dragEl, options.draggable); - - pluginEvent('drop', this, { - evt - }); - - parentEl = dragEl && dragEl.parentNode; - - // Get again after plugin event - newIndex = index(dragEl); - newDraggableIndex = index(dragEl, options.draggable); - - if (Sortable.eventCanceled) { - this._nulling(); - return; - } - - awaitingDragStarted = false; - isCircumstantialInvert = false; - pastFirstInvertThresh = false; - - clearInterval(this._loopId); - - clearTimeout(this._dragStartTimer); - - _cancelNextTick(this.cloneId); - _cancelNextTick(this._dragStartId); - - // Unbind events - if (this.nativeDraggable) { - off(document, 'drop', this); - off(el, 'dragstart', this._onDragStart); - } - this._offMoveEvents(); - this._offUpEvents(); - - - if (Safari) { - css(document.body, 'user-select', ''); - } - - css(dragEl, 'transform', ''); - - if (evt) { - if (moved) { - evt.cancelable && evt.preventDefault(); - !options.dropBubble && evt.stopPropagation(); - } - - ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); - - if (rootEl === parentEl || (putSortable && putSortable.lastPutMode !== 'clone')) { - // Remove clone(s) - cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); - } - - if (dragEl) { - if (this.nativeDraggable) { - off(dragEl, 'dragend', this); - } - - _disableDraggable(dragEl); - dragEl.style['will-change'] = ''; - - // Remove classes - // ghostClass is added in dragStarted - if (moved && !awaitingDragStarted) { - toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); - } - toggleClass(dragEl, this.options.chosenClass, false); - - // Drag stop event - _dispatchEvent({ - sortable: this, - name: 'unchoose', - toEl: parentEl, - newIndex: null, - newDraggableIndex: null, - originalEvent: evt - }); - - - if (rootEl !== parentEl) { - - if (newIndex >= 0) { - // Add event - _dispatchEvent({ - rootEl: parentEl, - name: 'add', - toEl: parentEl, - fromEl: rootEl, - originalEvent: evt - }); - - // Remove event - _dispatchEvent({ - sortable: this, - name: 'remove', - toEl: parentEl, - originalEvent: evt - }); - - // drag from one list and drop into another - _dispatchEvent({ - rootEl: parentEl, - name: 'sort', - toEl: parentEl, - fromEl: rootEl, - originalEvent: evt - }); - - _dispatchEvent({ - sortable: this, - name: 'sort', - toEl: parentEl, - originalEvent: evt - }); - } - - putSortable && putSortable.save(); - } else { - if (newIndex !== oldIndex) { - if (newIndex >= 0) { - // drag & drop within the same list - _dispatchEvent({ - sortable: this, - name: 'update', - toEl: parentEl, - originalEvent: evt - }); - - _dispatchEvent({ - sortable: this, - name: 'sort', - toEl: parentEl, - originalEvent: evt - }); - } - } - } - - if (Sortable.active) { - /* jshint eqnull:true */ - if (newIndex == null || newIndex === -1) { - newIndex = oldIndex; - newDraggableIndex = oldDraggableIndex; - } - - _dispatchEvent({ - sortable: this, - name: 'end', - toEl: parentEl, - originalEvent: evt - }); - - // Save sorting - this.save(); - } - } - - } - this._nulling(); - }, - - _nulling: function() { - pluginEvent('nulling', this); - - rootEl = - dragEl = - parentEl = - ghostEl = - nextEl = - cloneEl = - lastDownEl = - cloneHidden = - - tapEvt = - touchEvt = - - moved = - newIndex = - newDraggableIndex = - oldIndex = - oldDraggableIndex = - - lastTarget = - lastDirection = - - putSortable = - activeGroup = - Sortable.dragged = - Sortable.ghost = - Sortable.clone = - Sortable.active = null; - - savedInputChecked.forEach(function (el) { - el.checked = true; - }); - - savedInputChecked.length = - lastDx = - lastDy = 0; - }, - - handleEvent: function (/**Event*/evt) { - switch (evt.type) { - case 'drop': - case 'dragend': - this._onDrop(evt); - break; - - case 'dragenter': - case 'dragover': - if (dragEl) { - this._onDragOver(evt); - _globalDragOver(evt); - } - break; - - case 'selectstart': - evt.preventDefault(); - break; - } - }, - - - /** - * Serializes the item into an array of string. - * @returns {String[]} - */ - toArray: function () { - let order = [], - el, - children = this.el.children, - i = 0, - n = children.length, - options = this.options; - - for (; i < n; i++) { - el = children[i]; - if (closest(el, options.draggable, this.el, false)) { - order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); - } - } - - return order; - }, - - - /** - * Sorts the elements according to the array. - * @param {String[]} order order of the items - */ - sort: function (order) { - let items = {}, rootEl = this.el; - - this.toArray().forEach(function (id, i) { - let el = rootEl.children[i]; - - if (closest(el, this.options.draggable, rootEl, false)) { - items[id] = el; - } - }, this); - - order.forEach(function (id) { - if (items[id]) { - rootEl.removeChild(items[id]); - rootEl.appendChild(items[id]); - } - }); - }, - - - /** - * Save the current sorting - */ - save: function () { - let store = this.options.store; - store && store.set && store.set(this); - }, - - - /** - * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - * @param {HTMLElement} el - * @param {String} [selector] default: `options.draggable` - * @returns {HTMLElement|null} - */ - closest: function (el, selector) { - return closest(el, selector || this.options.draggable, this.el, false); - }, - - - /** - * Set/get option - * @param {string} name - * @param {*} [value] - * @returns {*} - */ - option: function (name, value) { - let options = this.options; - - if (value === void 0) { - return options[name]; - } else { - let modifiedValue = PluginManager.modifyOption(this, name, value); - if (typeof modifiedValue !== 'undefined') { - options[name] = modifiedValue; - } else { - options[name] = value; - } - - if (name === 'group') { - _prepareGroup(options); - } - } - }, - - - /** - * Destroy - */ - destroy: function () { - pluginEvent('destroy', this); - let el = this.el; - - el[expando] = null; - - off(el, 'mousedown', this._onTapStart); - off(el, 'touchstart', this._onTapStart); - off(el, 'pointerdown', this._onTapStart); - - if (this.nativeDraggable) { - off(el, 'dragover', this); - off(el, 'dragenter', this); - } - // Remove draggable attributes - Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { - el.removeAttribute('draggable'); - }); - - this._onDrop(); - - this._disableDelayedDragEvents(); - - sortables.splice(sortables.indexOf(this.el), 1); - - this.el = el = null; - }, - - _hideClone: function() { - if (!cloneHidden) { - pluginEvent('hideClone', this); - if (Sortable.eventCanceled) return; - - - css(cloneEl, 'display', 'none'); - if (this.options.removeCloneOnHide && cloneEl.parentNode) { - cloneEl.parentNode.removeChild(cloneEl); - } - cloneHidden = true; - } - }, - - _showClone: function(putSortable) { - if (putSortable.lastPutMode !== 'clone') { - this._hideClone(); - return; - } - - - if (cloneHidden) { - pluginEvent('showClone', this); - if (Sortable.eventCanceled) return; - - // show clone at dragEl or original position - if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { - rootEl.insertBefore(cloneEl, dragEl); - } else if (nextEl) { - rootEl.insertBefore(cloneEl, nextEl); - } else { - rootEl.appendChild(cloneEl); - } - - if (this.options.group.revertClone) { - this.animate(dragEl, cloneEl); - } - - css(cloneEl, 'display', ''); - cloneHidden = false; - } - } -}; - -function _globalDragOver(/**Event*/evt) { - if (evt.dataTransfer) { - evt.dataTransfer.dropEffect = 'move'; - } - evt.cancelable && evt.preventDefault(); -} - -function onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - let evt, - sortable = fromEl[expando], - onMoveFn = sortable.options.onMove, - retVal; - // Support for new CustomEvent feature - if (window.CustomEvent && !IE11OrLess && !Edge) { - evt = new CustomEvent('move', { - bubbles: true, - cancelable: true - }); - } else { - evt = document.createEvent('Event'); - evt.initEvent('move', true, true); - } - - evt.to = toEl; - evt.from = fromEl; - evt.dragged = dragEl; - evt.draggedRect = dragRect; - evt.related = targetEl || toEl; - evt.relatedRect = targetRect || getRect(toEl); - evt.willInsertAfter = willInsertAfter; - - evt.originalEvent = originalEvent; - - fromEl.dispatchEvent(evt); - - if (onMoveFn) { - retVal = onMoveFn.call(sortable, evt, originalEvent); - } - - return retVal; -} - -function _disableDraggable(el) { - el.draggable = false; -} - -function _unsilent() { - _silent = false; -} - - -function _ghostIsLast(evt, vertical, sortable) { - let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - const spacer = 10; - - return vertical ? - (evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left) : - (evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer); -} - -function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - let mouseOnAxis = vertical ? evt.clientY : evt.clientX, - targetLength = vertical ? targetRect.height : targetRect.width, - targetS1 = vertical ? targetRect.top : targetRect.left, - targetS2 = vertical ? targetRect.bottom : targetRect.right, - invert = false; - - - if (!invertSwap) { - // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold - if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 - // check if past first invert threshold on side opposite of lastDirection - if (!pastFirstInvertThresh && - (lastDirection === 1 ? - ( - mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 - ) : - ( - mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2 - ) - ) - ) - { - // past first invert threshold, do not restrict inverted threshold to dragEl shadow - pastFirstInvertThresh = true; - } - - if (!pastFirstInvertThresh) { - // dragEl shadow (target move distance shadow) - if ( - lastDirection === 1 ? - ( - mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow - ) : - ( - mouseOnAxis > targetS2 - targetMoveDistance - ) - ) - { - return -lastDirection; - } - } else { - invert = true; - } - } else { - // Regular - if ( - mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold) / 2) && - mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold) / 2) - ) { - return _getInsertDirection(target); - } - } - } - - invert = invert || invertSwap; - - if (invert) { - // Invert of regular - if ( - mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold / 2) || - mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold / 2) - ) - { - return ((mouseOnAxis > targetS1 + targetLength / 2) ? 1 : -1); - } - } - - return 0; -} - -/** - * Gets the direction dragEl must be swapped relative to target in order to make it - * seem that dragEl has been "inserted" into that element's position - * @param {HTMLElement} target The target whose position dragEl is being inserted at - * @return {Number} Direction dragEl must be swapped - */ -function _getInsertDirection(target) { - if (index(dragEl) < index(target)) { - return 1; - } else { - return -1; - } -} - - -/** - * Generate id - * @param {HTMLElement} el - * @returns {String} - * @private - */ -function _generateId(el) { - let str = el.tagName + el.className + el.src + el.href + el.textContent, - i = str.length, - sum = 0; - - while (i--) { - sum += str.charCodeAt(i); - } - - return sum.toString(36); -} - -function _saveInputCheckedState(root) { - savedInputChecked.length = 0; - - let inputs = root.getElementsByTagName('input'); - let idx = inputs.length; - - while (idx--) { - let el = inputs[idx]; - el.checked && savedInputChecked.push(el); - } -} - -function _nextTick(fn) { - return setTimeout(fn, 0); -} - -function _cancelNextTick(id) { - return clearTimeout(id); -} - -// Fixed #973: -if (documentExists) { - on(document, 'touchmove', function(evt) { - if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { - evt.preventDefault(); - } - }); -} - - -// Export utils -Sortable.utils = { - on: on, - off: off, - css: css, - find: find, - is: function (el, selector) { - return !!closest(el, selector, el, false); - }, - extend: extend, - throttle: throttle, - closest: closest, - toggleClass: toggleClass, - clone: clone, - index: index, - nextTick: _nextTick, - cancelNextTick: _cancelNextTick, - detectDirection: _detectDirection, - getChild: getChild -}; - - -/** - * Get the Sortable instance of an element - * @param {HTMLElement} element The element - * @return {Sortable|undefined} The instance of Sortable - */ -Sortable.get = function(element) { - return element[expando]; -}; - -/** - * Mount a plugin to Sortable - * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted - */ -Sortable.mount = function(...plugins) { - if (plugins[0].constructor === Array) plugins = plugins[0]; - - plugins.forEach((plugin) => { - if (!plugin.prototype || !plugin.prototype.constructor) { - throw `Sortable: Mounted plugin must be a constructor function, not ${ {}.toString.call(plugin) }`; - } - if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils }; - - PluginManager.mount(plugin); - }); -}; - - - -/** - * Create sortable instance - * @param {HTMLElement} el - * @param {Object} [options] - */ -Sortable.create = function (el, options) { - return new Sortable(el, options); -}; - - -// Export -Sortable.version = version; - - -export default Sortable; diff --git a/src/utils.js b/src/utils.js deleted file mode 100644 index 5dcc81e6f..000000000 --- a/src/utils.js +++ /dev/null @@ -1,556 +0,0 @@ -import { IE11OrLess } from './BrowserInfo.js'; -import Sortable from './Sortable.js'; - -const captureMode = { - capture: false, - passive: false -}; - -function on(el, event, fn) { - el.addEventListener(event, fn, !IE11OrLess && captureMode); -} - - -function off(el, event, fn) { - el.removeEventListener(event, fn, !IE11OrLess && captureMode); -} - -function matches(/**HTMLElement*/el, /**String*/selector) { - if (!selector) return; - - selector[0] === '>' && (selector = selector.substring(1)); - - if (el) { - try { - if (el.matches) { - return el.matches(selector); - } else if (el.msMatchesSelector) { - return el.msMatchesSelector(selector); - } else if (el.webkitMatchesSelector) { - return el.webkitMatchesSelector(selector); - } - } catch(_) { - return false; - } - } - - return false; -} - -function getParentOrHost(el) { - return (el.host && el !== document && el.host.nodeType) - ? el.host - : el.parentNode; -} - -function closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) { - if (el) { - ctx = ctx || document; - - do { - if ( - selector != null && - ( - selector[0] === '>' ? - el.parentNode === ctx && matches(el, selector) : - matches(el, selector) - ) || - includeCTX && el === ctx - ) { - return el; - } - - if (el === ctx) break; - /* jshint boss:true */ - } while (el = getParentOrHost(el)); - } - - return null; -} - -const R_SPACE = /\s+/g; - -function toggleClass(el, name, state) { - if (el && name) { - if (el.classList) { - el.classList[state ? 'add' : 'remove'](name); - } - else { - let className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); - el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); - } - } -} - - -function css(el, prop, val) { - let style = el && el.style; - - if (style) { - if (val === void 0) { - if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(el, ''); - } - else if (el.currentStyle) { - val = el.currentStyle; - } - - return prop === void 0 ? val : val[prop]; - } - else { - if (!(prop in style) && prop.indexOf('webkit') === -1) { - prop = '-webkit-' + prop; - } - - style[prop] = val + (typeof val === 'string' ? '' : 'px'); - } - } -} - -function matrix(el, selfOnly) { - let appliedTransforms = ''; - if (typeof(el) === 'string') { - appliedTransforms = el; - } else { - do { - let transform = css(el, 'transform'); - - if (transform && transform !== 'none') { - appliedTransforms = transform + ' ' + appliedTransforms; - } - /* jshint boss:true */ - } while (!selfOnly && (el = el.parentNode)); - } - - const matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; - /*jshint -W056 */ - return matrixFn && (new matrixFn(appliedTransforms)); -} - - -function find(ctx, tagName, iterator) { - if (ctx) { - let list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; - - if (iterator) { - for (; i < n; i++) { - iterator(list[i], i); - } - } - - return list; - } - - return []; -} - - - -function getWindowScrollingElement() { - let scrollingElement = document.scrollingElement; - - if (scrollingElement) { - return scrollingElement - } else { - return document.documentElement - } -} - - -/** - * Returns the "bounding client rect" of given element - * @param {HTMLElement} el The element whose boundingClientRect is wanted - * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container - * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr - * @param {[Boolean]} undoScale Whether the container's scale() should be undone - * @param {[HTMLElement]} container The parent the element will be placed in - * @return {Object} The boundingClientRect of el, with specified adjustments - */ -function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { - if (!el.getBoundingClientRect && el !== window) return; - - let elRect, - top, - left, - bottom, - right, - height, - width; - - if (el !== window && el !== getWindowScrollingElement()) { - elRect = el.getBoundingClientRect(); - top = elRect.top; - left = elRect.left; - bottom = elRect.bottom; - right = elRect.right; - height = elRect.height; - width = elRect.width; - } else { - top = 0; - left = 0; - bottom = window.innerHeight; - right = window.innerWidth; - height = window.innerHeight; - width = window.innerWidth; - } - - if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) { - // Adjust for translate() - container = container || el.parentNode; - - // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) - // Not needed on <= IE11 - if (!IE11OrLess) { - do { - if ( - container && - container.getBoundingClientRect && - ( - css(container, 'transform') !== 'none' || - relativeToNonStaticParent && - css(container, 'position') !== 'static' - ) - ) { - let containerRect = container.getBoundingClientRect(); - - // Set relative to edges of padding box of container - top -= containerRect.top + parseInt(css(container, 'border-top-width')); - left -= containerRect.left + parseInt(css(container, 'border-left-width')); - bottom = top + elRect.height; - right = left + elRect.width; - - break; - } - /* jshint boss:true */ - } while (container = container.parentNode); - } - } - - if (undoScale && el !== window) { - // Adjust for scale() - let elMatrix = matrix(container || el), - scaleX = elMatrix && elMatrix.a, - scaleY = elMatrix && elMatrix.d; - - if (elMatrix) { - top /= scaleY; - left /= scaleX; - - width /= scaleX; - height /= scaleY; - - bottom = top + height; - right = left + width; - } - } - - return { - top: top, - left: left, - bottom: bottom, - right: right, - width: width, - height: height - }; -} - -/** - * Checks if a side of an element is scrolled past a side of its parents - * @param {HTMLElement} el The element who's side being scrolled out of view is in question - * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom') - * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom') - * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element - */ -function isScrolledPast(el, elSide, parentSide) { - let parent = getParentAutoScrollElement(el, true), - elSideVal = getRect(el)[elSide]; - - /* jshint boss:true */ - while (parent) { - let parentSideVal = getRect(parent)[parentSide], - visible; - - if (parentSide === 'top' || parentSide === 'left') { - visible = elSideVal >= parentSideVal; - } else { - visible = elSideVal <= parentSideVal; - } - - if (!visible) return parent; - - if (parent === getWindowScrollingElement()) break; - - parent = getParentAutoScrollElement(parent, false); - } - - return false; -} - - - -/** - * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) - * and non-draggable elements - * @param {HTMLElement} el The parent element - * @param {Number} childNum The index of the child - * @param {Object} options Parent Sortable's options - * @return {HTMLElement} The child at index childNum, or null if not found - */ -function getChild(el, childNum, options) { - let currentChild = 0, - i = 0, - children = el.children; - - while (i < children.length) { - if ( - children[i].style.display !== 'none' && - children[i] !== Sortable.ghost && - children[i] !== Sortable.dragged && - closest(children[i], options.draggable, el, false) - ) { - if (currentChild === childNum) { - return children[i]; - } - currentChild++; - } - - i++; - } - return null; -} - -/** - * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) - * @param {HTMLElement} el Parent element - * @param {selector} selector Any other elements that should be ignored - * @return {HTMLElement} The last child, ignoring ghostEl - */ -function lastChild(el, selector) { - let last = el.lastElementChild; - - while ( - last && - ( - last === Sortable.ghost || - css(last, 'display') === 'none' || - selector && !matches(last, selector) - ) - ) { - last = last.previousElementSibling; - } - - return last || null; -} - - -/** - * Returns the index of an element within its parent for a selected set of - * elements - * @param {HTMLElement} el - * @param {selector} selector - * @return {number} - */ -function index(el, selector) { - let index = 0; - - if (!el || !el.parentNode) { - return -1; - } - - /* jshint boss:true */ - while (el = el.previousElementSibling) { - if ((el.nodeName.toUpperCase() !== 'TEMPLATE') && el !== Sortable.clone && (!selector || matches(el, selector))) { - index++; - } - } - - return index; -} - -/** - * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements. - * The value is returned in real pixels. - * @param {HTMLElement} el - * @return {Array} Offsets in the format of [left, top] - */ -function getRelativeScrollOffset(el) { - let offsetLeft = 0, - offsetTop = 0, - winScroller = getWindowScrollingElement(); - - if (el) { - do { - let elMatrix = matrix(el), - scaleX = elMatrix.a, - scaleY = elMatrix.d; - - offsetLeft += el.scrollLeft * scaleX; - offsetTop += el.scrollTop * scaleY; - } while (el !== winScroller && (el = el.parentNode)); - } - - return [offsetLeft, offsetTop]; -} - -/** - * Returns the index of the object within the given array - * @param {Array} arr Array that may or may not hold the object - * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find - * @return {Number} The index of the object in the array, or -1 - */ -function indexOfObject(arr, obj) { - for (let i in arr) { - if (!arr.hasOwnProperty(i)) continue; - for (let key in obj) { - if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); - } - } - return -1; -} - - -function getParentAutoScrollElement(el, includeSelf) { - // skip to window - if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - - let elem = el; - let gotSelf = false; - do { - // we don't need to get elem css if it isn't even overflowing in the first place (performance) - if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - let elemCSS = css(elem); - if ( - elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || - elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll') - ) { - if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); - - if (gotSelf || includeSelf) return elem; - gotSelf = true; - } - } - /* jshint boss:true */ - } while (elem = elem.parentNode); - - return getWindowScrollingElement(); -} - -function extend(dst, src) { - if (dst && src) { - for (let key in src) { - if (src.hasOwnProperty(key)) { - dst[key] = src[key]; - } - } - } - - return dst; -} - - -function isRectEqual(rect1, rect2) { - return Math.round(rect1.top) === Math.round(rect2.top) && - Math.round(rect1.left) === Math.round(rect2.left) && - Math.round(rect1.height) === Math.round(rect2.height) && - Math.round(rect1.width) === Math.round(rect2.width); -} - - -let _throttleTimeout; -function throttle(callback, ms) { - return function () { - if (!_throttleTimeout) { - let args = arguments, - _this = this; - - if (args.length === 1) { - callback.call(_this, args[0]); - } else { - callback.apply(_this, args); - } - - _throttleTimeout = setTimeout(function () { - _throttleTimeout = void 0; - }, ms); - } - }; -} - - -function cancelThrottle() { - clearTimeout(_throttleTimeout); - _throttleTimeout = void 0; -} - - -function scrollBy(el, x, y) { - el.scrollLeft += x; - el.scrollTop += y; -} - - -function clone(el) { - let Polymer = window.Polymer; - let $ = window.jQuery || window.Zepto; - - if (Polymer && Polymer.dom) { - return Polymer.dom(el).cloneNode(true); - } - else if ($) { - return $(el).clone(true)[0]; - } - else { - return el.cloneNode(true); - } -} - - -function setRect(el, rect) { - css(el, 'position', 'absolute'); - css(el, 'top', rect.top); - css(el, 'left', rect.left); - css(el, 'width', rect.width); - css(el, 'height', rect.height); -} - -function unsetRect(el) { - css(el, 'position', ''); - css(el, 'top', ''); - css(el, 'left', ''); - css(el, 'width', ''); - css(el, 'height', ''); -} - - -const expando = 'Sortable' + (new Date).getTime(); - - -export { - on, - off, - matches, - getParentOrHost, - closest, - toggleClass, - css, - matrix, - find, - getWindowScrollingElement, - getRect, - isScrolledPast, - getChild, - lastChild, - index, - getRelativeScrollOffset, - indexOfObject, - getParentAutoScrollElement, - extend, - isRectEqual, - throttle, - cancelThrottle, - scrollBy, - clone, - setRect, - unsetRect, - expando -}; diff --git a/st/iframe/index.html b/st/iframe/index.html index fcd089857..08f5fa282 100644 --- a/st/iframe/index.html +++ b/st/iframe/index.html @@ -1,49 +1,47 @@ - - - IFrame playground - - - - - - - - - - - - - -
-
This is Sortable
-
It works with Bootstrap...
-
...out of the box.
-
It has support for touch devices.
-
Just drag some elements around.
-
- - - - + + + IFrame playground + + + + + + + + + +
+
+ This is Sortable +
+
It works with Bootstrap...
+
...out of the box.
+
It has support for touch devices.
+
Just drag some elements around.
+
+ + + diff --git a/tests/Sortable.compat.test.js b/tests/Sortable.compat.test.js deleted file mode 100644 index 7c00396b9..000000000 --- a/tests/Sortable.compat.test.js +++ /dev/null @@ -1,39 +0,0 @@ -import { Selector } from 'testcafe'; - - -fixture `Simple Sorting` - .page `./single-list.html`; - -let list1 = Selector('#list1'); - -test('Sort down list', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(2); - const targetStartPosition = list1.child(2); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(1); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - -test('Sort up list', async browser => { - const dragStartPosition = list1.child(2); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(0); - const targetStartPosition = list1.child(0); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(1); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); diff --git a/tests/Sortable.test.js b/tests/Sortable.test.js deleted file mode 100644 index 59ce11f46..000000000 --- a/tests/Sortable.test.js +++ /dev/null @@ -1,386 +0,0 @@ -import { Selector } from 'testcafe'; -const itemHeight = 54; // px -const leeway = 1; - - -fixture `Simple Sorting` - .page `./single-list.html`; - -let list1 = Selector('#list1'); - -test('Sort down list', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(2); - const targetStartPosition = list1.child(2); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(1); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - -test('Sort up list', async browser => { - const dragStartPosition = list1.child(2); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(0); - const targetStartPosition = list1.child(0); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(1); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - -test('Swap threshold', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(1); - const targetStartPosition = list1.child(1); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(0); - - await browser.eval(() => { - Sortable.get(document.getElementById('list1')).option('swapThreshold', 0.6); - }); - - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { - destinationOffsetY: Math.round(itemHeight / 2 * 0.4 - leeway) - }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { - destinationOffsetY: Math.round(itemHeight / 2 * 0.4 + leeway) - }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - -test('Invert swap', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(1); - const targetStartPosition = list1.child(1); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(0); - - await browser.eval(() => { - Sortable.get(document.getElementById('list1')).option('invertSwap', true); - }); - - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { - destinationOffsetY: Math.round(itemHeight / 2 - leeway) - }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { - destinationOffsetY: Math.round(itemHeight / 2 + leeway) - }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - -test('Inverted swap threshold', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(1); - const targetStartPosition = list1.child(1); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(0); - - await browser.eval(() => { - Sortable.get(document.getElementById('list1')).option('invertSwap', true); - Sortable.get(document.getElementById('list1')).option('invertedSwapThreshold', 0.5); - }); - - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { - destinationOffsetY: Math.round(itemHeight - (itemHeight / 2 * 0.5) - leeway) - }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { - destinationOffsetY: Math.round(itemHeight - (itemHeight / 2 * 0.5) + leeway) - }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - -fixture `Grouping` - .page `./dual-list.html`; - -let list2 = Selector('#list2'); - -test('Move to list of the same group', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list2.child(0); - const targetStartPosition = list2.child(0); - const target = await targetStartPosition(); - const targetEndPosition = list2.child(1); - - await browser.eval(() => { - Sortable.get(document.getElementById('list2')).option('group', 'shared'); - }); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - -test('Do not move to list of different group', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const targetStartPosition = list2.child(0); - const target = await targetStartPosition(); - - await browser.eval(() => { - Sortable.get(document.getElementById('list2')).option('group', null); - }); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText); -}); - - -test('Move to list with put:true', async browser => { - // Should allow insert, since pull defaults to `true` - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list2.child(0); - const targetStartPosition = list2.child(0); - const target = await targetStartPosition(); - const targetEndPosition = list2.child(1); - - await browser.eval(() => { - Sortable.get(document.getElementById('list2')).option('group', { put: true }); - }); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - -test('Do not move from list with pull:false', async browser => { - // Should not allow insert, since put defaults to `false` - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const targetStartPosition = list2.child(0); - const target = await targetStartPosition(); - - await browser.eval(() => { - Sortable.get(document.getElementById('list1')).option('group', { pull: false }); - }); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText); -}); - -test('Clone element if pull:"clone"', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list2.child(0); - const targetStartPosition = list2.child(0); - const target = await targetStartPosition(); - const targetEndPosition = list2.child(1); - - await browser.eval(() => { - Sortable.get(document.getElementById('list1')).option('group', { pull: 'clone' }); - Sortable.get(document.getElementById('list2')).option('group', { put: true }); - }); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) // clone check - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - - -fixture `Handles` - .page `./handles.html`; - -test('Do not allow dragging not using handle', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const targetStartPosition = list1.child(1); - const target = await targetStartPosition(); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText); -}); - - -test('Allow dragging using handle', async browser => { - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(1); - const targetStartPosition = list1.child(1); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(0); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(await dragStartPosition.child('.handle'), target) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - -fixture `Filter` - .page `./filter.html`; - -test('Do not allow dragging of filtered element', async browser => { - const dragStartPosition = list1.child('.filtered'); - const dragEl = await dragStartPosition(); - const targetStartPosition = dragStartPosition.nextSibling(1); - const target = await targetStartPosition(); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText); -}); - - -test('Allow dragging of non-filtered element', async browser => { - const dragStartPosition = list1.child(':not(.filtered)'); - const dragEl = await dragStartPosition(); - const dragEndPosition = dragStartPosition.nextSibling(1); - const targetStartPosition = dragStartPosition.nextSibling(1); - const target = await targetStartPosition(); - const targetEndPosition = dragStartPosition.nextSibling(0); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - - -fixture `Nested` - .page `./nested.html`; - -let list1n1 = Selector('.n1'); -let list1n2 = Selector('.n2'); -let list2n1 = Selector('.n1:nth-of-type(2)'); - -test('Dragging from level 1 to level 0', async browser => { - const dragStartPosition = list1n1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1.child(2); - const targetStartPosition = list1.child(2); - const target = await targetStartPosition(); - const targetEndPosition = list1.child(3); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { destinationOffsetY: 0 }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - -test('Dragging from level 0 to level 2', async browser => { - const dragStartPosition = list1.child(1); - const dragEl = await dragStartPosition(); - const dragEndPosition = list1n2.child(2); - const targetStartPosition = list1n2.child(2); - const target = await targetStartPosition(); - const targetEndPosition = list1n2.child(3); - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .expect(targetStartPosition.innerText).eql(target.innerText) - .dragToElement(dragEl, target, { destinationOffsetY: 0 }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText) - .expect(targetEndPosition.innerText).eql(target.innerText); -}); - - -fixture `Empty Insert` - .page `./empty-list.html`; - -test('Insert into empty list if within emptyInsertThreshold', async browser => { - const threshold = await browser.eval(() => Sortable.get(document.getElementById('list2')).option('emptyInsertThreshold')); - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragEndPosition = list2.child(0); - // Must use rects since testcafe won't drag to element that is "not visible" - const dragRect = dragEl.boundingClientRect; - const list2Rect = await list2.boundingClientRect; - - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .drag(dragEl, Math.round(list2Rect.left - dragRect.left) - (threshold - 1), -(threshold - 1), { - offsetY: 0, - offsetX: 0 - }) - .expect(dragEndPosition.innerText).eql(dragEl.innerText); -}); - -test('Do not insert into empty list if outside emptyInsertThreshold', async browser => { - const threshold = await browser.eval(() => Sortable.get(document.getElementById('list2')).option('emptyInsertThreshold')); - const dragStartPosition = list1.child(0); - const dragEl = await dragStartPosition(); - const dragRect = dragEl.boundingClientRect; - const list2Rect = await list2.boundingClientRect; - - await browser - .expect(dragStartPosition.innerText).eql(dragEl.innerText) - .drag(dragEl, Math.round(list2Rect.left - dragRect.left) - (threshold + 1), -(threshold + 1), { - offsetY: 0, - offsetX: 0 - }) - .expect(dragStartPosition.innerText).eql(dragEl.innerText); -}); diff --git a/tests/dual-list.html b/tests/dual-list.html deleted file mode 100644 index 6d7e15b9b..000000000 --- a/tests/dual-list.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - -
-
Item 1.1
-
Item 1.2
-
Item 1.3
-
Item 1.4
-
Item 1.5
-
- -
-
Item 2.1
-
Item 2.2
-
Item 2.3
-
Item 2.4
-
Item 2.5
-
- - - - - - - - diff --git a/tests/e2e-fixtures/dual-list.html b/tests/e2e-fixtures/dual-list.html new file mode 100644 index 000000000..eb38d0cc0 --- /dev/null +++ b/tests/e2e-fixtures/dual-list.html @@ -0,0 +1,31 @@ + + + + + + + +
+
Item 1.1
+
Item 1.2
+
Item 1.3
+
Item 1.4
+
Item 1.5
+
+ +
+
Item 2.1
+
Item 2.2
+
Item 2.3
+
Item 2.4
+
Item 2.5
+
+ + + + + + diff --git a/tests/e2e-fixtures/empty-list.html b/tests/e2e-fixtures/empty-list.html new file mode 100644 index 000000000..e196d40ba --- /dev/null +++ b/tests/e2e-fixtures/empty-list.html @@ -0,0 +1,25 @@ + + + + + + + +
+
Item 1.1
+
Item 1.2
+
Item 1.3
+
Item 1.4
+
Item 1.5
+
+ +
+ + + + + + diff --git a/tests/e2e-fixtures/filter.html b/tests/e2e-fixtures/filter.html new file mode 100644 index 000000000..41ef8192f --- /dev/null +++ b/tests/e2e-fixtures/filter.html @@ -0,0 +1,22 @@ + + + + + + + +
+
Item 1.1
+
Item 1.2
+
Item 1.3
+
Item 1.4
+
Item 1.5
+
+ + + + + + diff --git a/tests/e2e-fixtures/handles.html b/tests/e2e-fixtures/handles.html new file mode 100644 index 000000000..e303666aa --- /dev/null +++ b/tests/e2e-fixtures/handles.html @@ -0,0 +1,22 @@ + + + + + + + +
+
::Item 1.1
+
::Item 1.2
+
::Item 1.3
+
::Item 1.4
+
::Item 1.5
+
+ + + + + + diff --git a/tests/e2e-fixtures/nested.html b/tests/e2e-fixtures/nested.html new file mode 100644 index 000000000..64fe64fa4 --- /dev/null +++ b/tests/e2e-fixtures/nested.html @@ -0,0 +1,67 @@ + + + + + + + +
+
+ Item 1.1 +
+
Item 2.1
+
+ Item 2.2 +
+
Item 3.1
+
Item 3.2
+
Item 3.3
+
Item 3.4
+
+
+
Item 2.3
+
Item 2.4
+
+
+
Item 1.2
+
Item 1.3
+
+ Item 1.4 +
+
Item 2.1
+
Item 2.2
+
Item 2.3
+
Item 2.4
+
+
+
Item 1.5
+
+ + + + + + + + diff --git a/tests/e2e-fixtures/single-list.html b/tests/e2e-fixtures/single-list.html new file mode 100644 index 000000000..002baa419 --- /dev/null +++ b/tests/e2e-fixtures/single-list.html @@ -0,0 +1,22 @@ + + + + + + + +
+
Item 1.1
+
Item 1.2
+
Item 1.3
+
Item 1.4
+
Item 1.5
+
+ + + + + + diff --git a/tests/style.css b/tests/e2e-fixtures/style.css similarity index 100% rename from tests/style.css rename to tests/e2e-fixtures/style.css diff --git a/tests/e2e-local/Sortable.test.js b/tests/e2e-local/Sortable.test.js new file mode 100644 index 000000000..8fdc3211d --- /dev/null +++ b/tests/e2e-local/Sortable.test.js @@ -0,0 +1,471 @@ +import { Selector } from "testcafe"; +const itemHeight = 54; // px +const leeway = 1; + +fixture`Simple Sorting`.page`../e2e-fixtures/single-list.html`; + +let list1 = Selector("#list1"); + +test("Sort down list", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(2); + const targetStartPosition = list1.child(2); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(1); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Sort up list", async (browser) => { + const dragStartPosition = list1.child(2); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(0); + const targetStartPosition = list1.child(0); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(1); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Swap threshold", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(1); + const targetStartPosition = list1.child(1); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(0); + + await browser.eval(() => { + Sortable.get(document.getElementById("list1")).option("swapThreshold", 0.6); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { + destinationOffsetY: Math.round((itemHeight / 2) * 0.4 - leeway), + }) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { + destinationOffsetY: Math.round((itemHeight / 2) * 0.4 + leeway), + }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Invert swap", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(1); + const targetStartPosition = list1.child(1); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(0); + + await browser.eval(() => { + Sortable.get(document.getElementById("list1")).option("invertSwap", true); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { + destinationOffsetY: Math.round(itemHeight / 2 - leeway), + }) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { + destinationOffsetY: Math.round(itemHeight / 2 + leeway), + }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Inverted swap threshold", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(1); + const targetStartPosition = list1.child(1); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(0); + + await browser.eval(() => { + Sortable.get(document.getElementById("list1")).option("invertSwap", true); + Sortable.get(document.getElementById("list1")).option( + "invertedSwapThreshold", + 0.5 + ); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { + destinationOffsetY: Math.round( + itemHeight - (itemHeight / 2) * 0.5 - leeway + ), + }) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { + destinationOffsetY: Math.round( + itemHeight - (itemHeight / 2) * 0.5 + leeway + ), + }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +fixture`Grouping`.page`../e2e-fixtures/dual-list.html`; + +let list2 = Selector("#list2"); + +test("Move to list of the same group", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list2.child(0); + const targetStartPosition = list2.child(0); + const target = await targetStartPosition(); + const targetEndPosition = list2.child(1); + + await browser.eval(() => { + Sortable.get(document.getElementById("list2")).option("group", "shared"); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Do not move to list of different group", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const targetStartPosition = list2.child(0); + const target = await targetStartPosition(); + + await browser.eval(() => { + Sortable.get(document.getElementById("list2")).option("group", null); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText); +}); + +test("Move to list with put:true", async (browser) => { + // Should allow insert, since pull defaults to `true` + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list2.child(0); + const targetStartPosition = list2.child(0); + const target = await targetStartPosition(); + const targetEndPosition = list2.child(1); + + await browser.eval(() => { + Sortable.get(document.getElementById("list2")).option("group", { + put: true, + }); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Do not move from list with pull:false", async (browser) => { + // Should not allow insert, since put defaults to `false` + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const targetStartPosition = list2.child(0); + const target = await targetStartPosition(); + + await browser.eval(() => { + Sortable.get(document.getElementById("list1")).option("group", { + pull: false, + }); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText); +}); + +test('Clone element if pull:"clone"', async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list2.child(0); + const targetStartPosition = list2.child(0); + const target = await targetStartPosition(); + const targetEndPosition = list2.child(1); + + await browser.eval(() => { + Sortable.get(document.getElementById("list1")).option("group", { + pull: "clone", + }); + Sortable.get(document.getElementById("list2")).option("group", { + put: true, + }); + }); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { offsetY: 0, destinationOffsetY: 0 }) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) // clone check + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +fixture`Handles`.page`../e2e-fixtures/handles.html`; + +test("Do not allow dragging not using handle", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const targetStartPosition = list1.child(1); + const target = await targetStartPosition(); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText); +}); + +test("Allow dragging using handle", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(1); + const targetStartPosition = list1.child(1); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(0); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(await dragStartPosition.child(".handle"), target) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +fixture`Filter`.page`../e2e-fixtures/filter.html`; + +test("Do not allow dragging of filtered element", async (browser) => { + const dragStartPosition = list1.child(".filtered"); + const dragEl = await dragStartPosition(); + const targetStartPosition = dragStartPosition.nextSibling(1); + const target = await targetStartPosition(); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText); +}); + +test("Allow dragging of non-filtered element", async (browser) => { + const dragStartPosition = list1.child(":not(.filtered)"); + const dragEl = await dragStartPosition(); + const dragEndPosition = dragStartPosition.nextSibling(1); + const targetStartPosition = dragStartPosition.nextSibling(1); + const target = await targetStartPosition(); + const targetEndPosition = dragStartPosition.nextSibling(0); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +fixture`Nested`.page`../e2e-fixtures/nested.html`; + +let list1n1 = Selector(".n1"); +let list1n2 = Selector(".n2"); +let list2n1 = Selector(".n1:nth-of-type(2)"); + +test("Dragging from level 1 to level 0", async (browser) => { + const dragStartPosition = list1n1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(2); + const targetStartPosition = list1.child(2); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(3); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { destinationOffsetY: 0 }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Dragging from level 0 to level 2", async (browser) => { + const dragStartPosition = list1.child(1); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1n2.child(2); + const targetStartPosition = list1n2.child(2); + const target = await targetStartPosition(); + const targetEndPosition = list1n2.child(3); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target, { destinationOffsetY: 0 }) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +fixture`Empty Insert`.page`../e2e-fixtures/empty-list.html`; + +test("Insert into empty list if within emptyInsertThreshold", async (browser) => { + const threshold = await browser.eval(() => + Sortable.get(document.getElementById("list2")).option( + "emptyInsertThreshold" + ) + ); + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list2.child(0); + // Must use rects since testcafe won't drag to element that is "not visible" + const dragRect = dragEl.boundingClientRect; + const list2Rect = await list2.boundingClientRect; + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .drag( + dragEl, + Math.round(list2Rect.left - dragRect.left) - (threshold - 1), + -(threshold - 1), + { + offsetY: 0, + offsetX: 0, + } + ) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText); +}); + +test("Do not insert into empty list if outside emptyInsertThreshold", async (browser) => { + const threshold = await browser.eval(() => + Sortable.get(document.getElementById("list2")).option( + "emptyInsertThreshold" + ) + ); + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragRect = dragEl.boundingClientRect; + const list2Rect = await list2.boundingClientRect; + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .drag( + dragEl, + Math.round(list2Rect.left - dragRect.left) - (threshold + 1), + -(threshold + 1), + { + offsetY: 0, + offsetX: 0, + } + ) + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText); +}); diff --git a/tests/e2e-saucelabs/Sortable.compat.test.js b/tests/e2e-saucelabs/Sortable.compat.test.js new file mode 100644 index 000000000..0db23e639 --- /dev/null +++ b/tests/e2e-saucelabs/Sortable.compat.test.js @@ -0,0 +1,45 @@ +import { Selector } from "testcafe"; + +fixture`Simple Sorting`.page`../e2e-fixtures/single-list.html`; + +let list1 = Selector("#list1"); + +test("Sort down list", async (browser) => { + const dragStartPosition = list1.child(0); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(2); + const targetStartPosition = list1.child(2); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(1); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); + +test("Sort up list", async (browser) => { + const dragStartPosition = list1.child(2); + const dragEl = await dragStartPosition(); + const dragEndPosition = list1.child(0); + const targetStartPosition = list1.child(0); + const target = await targetStartPosition(); + const targetEndPosition = list1.child(1); + + await browser + .expect(dragStartPosition.innerText) + .eql(dragEl.innerText) + .expect(targetStartPosition.innerText) + .eql(target.innerText) + .dragToElement(dragEl, target) + .expect(dragEndPosition.innerText) + .eql(dragEl.innerText) + .expect(targetEndPosition.innerText) + .eql(target.innerText); +}); diff --git a/tests/empty-list.html b/tests/empty-list.html deleted file mode 100644 index 3e2064154..000000000 --- a/tests/empty-list.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - -
-
Item 1.1
-
Item 1.2
-
Item 1.3
-
Item 1.4
-
Item 1.5
-
- -
- -
- - - - - - - - diff --git a/tests/filter.html b/tests/filter.html deleted file mode 100644 index 49b40dd1d..000000000 --- a/tests/filter.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -
-
Item 1.1
-
Item 1.2
-
Item 1.3
-
Item 1.4
-
Item 1.5
-
- - - - - - - - - - diff --git a/tests/handles.html b/tests/handles.html deleted file mode 100644 index 037e272d0..000000000 --- a/tests/handles.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -
-
::Item 1.1
-
::Item 1.2
-
::Item 1.3
-
::Item 1.4
-
::Item 1.5
-
- - - - - - - - - - diff --git a/tests/nested.html b/tests/nested.html deleted file mode 100644 index f9dd15778..000000000 --- a/tests/nested.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - -
-
Item 1.1 -
-
Item 2.1
-
Item 2.2 -
-
Item 3.1
-
Item 3.2
-
Item 3.3
-
Item 3.4
-
-
-
Item 2.3
-
Item 2.4
-
-
-
Item 1.2
-
Item 1.3
-
Item 1.4 -
-
Item 2.1
-
Item 2.2
-
Item 2.3
-
Item 2.4
-
-
-
Item 1.5
-
- - - - - - - - - diff --git a/tests/single-list.html b/tests/single-list.html deleted file mode 100644 index 30b984b0d..000000000 --- a/tests/single-list.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
-
Item 1.1
-
Item 1.2
-
Item 1.3
-
Item 1.4
-
Item 1.5
-
- - - - - - - - diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..d42bae823 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "es5", + "allowJs": false, + "esModuleInterop": true + }, + "include": ["scripts"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..9fbbf1b2b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7494 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@evocateur/libnpmaccess@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + +"@evocateur/libnpmpublish@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + semver "^5.5.1" + ssri "^6.0.1" + +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" + +"@evocateur/pacote@^9.6.3": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + bluebird "^3.5.3" + cacache "^12.0.3" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.5.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.4.4" + npm-pick-manifest "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +"@lerna/add@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" + integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/bootstrap" "3.21.0" + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + npm-package-arg "^6.1.0" + p-map "^2.1.0" + semver "^6.2.0" + +"@lerna/bootstrap@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6" + integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/has-npm-version" "3.16.5" + "@lerna/npm-install" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/symlink-binary" "3.17.0" + "@lerna/symlink-dependencies" "3.17.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + get-port "^4.2.0" + multimatch "^3.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^6.2.0" + +"@lerna/changed@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b" + integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/check-working-tree@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" + integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== + dependencies: + "@lerna/collect-uncommitted" "3.16.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/validation-error" "3.13.0" + +"@lerna/child-process@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" + integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== + dependencies: + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d" + integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" + integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== + dependencies: + "@lerna/global-options" "3.13.0" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^14.2.2" + +"@lerna/collect-uncommitted@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" + integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== + dependencies: + "@lerna/child-process" "3.16.5" + chalk "^2.3.1" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/collect-updates@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" + integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/describe-ref" "3.16.5" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^2.0.0" + +"@lerna/command@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7" + integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/project" "3.21.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^2.0.0" + npmlog "^4.1.2" + +"@lerna/conventional-commits@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" + integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== + dependencies: + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" + conventional-recommended-bump "^5.0.0" + fs-extra "^8.1.0" + get-stream "^4.0.0" + lodash.template "^4.5.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + semver "^6.2.0" + +"@lerna/create-symlink@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" + integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== + dependencies: + "@zkochan/cmd-shim" "^3.1.0" + fs-extra "^8.1.0" + npmlog "^4.1.2" + +"@lerna/create@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" + integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + globby "^9.2.0" + init-package-json "^1.10.3" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pify "^4.0.1" + semver "^6.2.0" + slash "^2.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" + integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + +"@lerna/diff@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d" + integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/validation-error" "3.13.0" + npmlog "^4.1.2" + +"@lerna/exec@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26" + integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/filter-options@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" + integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/filter-packages" "3.18.0" + dedent "^0.7.0" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/filter-packages@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" + integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== + dependencies: + "@lerna/validation-error" "3.13.0" + multimatch "^3.0.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== + dependencies: + npmlog "^4.1.2" + +"@lerna/get-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" + integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== + dependencies: + fs-extra "^8.1.0" + ssri "^6.0.1" + tar "^4.4.8" + +"@lerna/github-client@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" + integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== + dependencies: + "@lerna/child-process" "3.16.5" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^16.28.4" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/gitlab-client@3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" + integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== + dependencies: + node-fetch "^2.5.0" + npmlog "^4.1.2" + whatwg-url "^7.0.0" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" + integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== + dependencies: + "@lerna/child-process" "3.16.5" + semver "^6.2.0" + +"@lerna/import@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" + integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + p-map-series "^1.0.0" + +"@lerna/info@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f" + integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/output" "3.13.0" + envinfo "^7.3.1" + +"@lerna/init@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c" + integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + write-json-file "^3.2.0" + +"@lerna/link@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b" + integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/package-graph" "3.18.5" + "@lerna/symlink-dependencies" "3.17.0" + p-map "^2.1.0" + slash "^2.0.0" + +"@lerna/list@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2" + integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/listable@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" + integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== + dependencies: + "@lerna/query-graph" "3.18.5" + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" + integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== + dependencies: + byte-size "^5.0.1" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" + integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== + dependencies: + config-chain "^1.1.11" + pify "^4.0.1" + +"@lerna/npm-dist-tag@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" + integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + "@lerna/otplease" "3.18.5" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + +"@lerna/npm-install@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" + integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" + integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== + dependencies: + "@evocateur/libnpmpublish" "^1.2.2" + "@lerna/otplease" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + read-package-json "^2.0.13" + +"@lerna/npm-run-script@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" + integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + npmlog "^4.1.2" + +"@lerna/otplease@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" + integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== + dependencies: + "@lerna/prompt" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== + dependencies: + npmlog "^4.1.2" + +"@lerna/pack-directory@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" + integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== + dependencies: + "@lerna/get-packed" "3.16.0" + "@lerna/package" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + npm-packlist "^1.4.4" + npmlog "^4.1.2" + tar "^4.4.10" + temp-write "^3.4.0" + +"@lerna/package-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" + integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== + dependencies: + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + semver "^6.2.0" + +"@lerna/package@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" + integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== + dependencies: + load-json-file "^5.3.0" + npm-package-arg "^6.1.0" + write-pkg "^3.1.0" + +"@lerna/prerelease-id-from-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" + integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== + dependencies: + semver "^6.2.0" + +"@lerna/profiler@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" + integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== + dependencies: + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npmlog "^4.1.2" + upath "^1.2.0" + +"@lerna/project@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d" + integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A== + dependencies: + "@lerna/package" "3.16.0" + "@lerna/validation-error" "3.13.0" + cosmiconfig "^5.1.0" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^5.0.0" + globby "^9.2.0" + load-json-file "^5.3.0" + npmlog "^4.1.2" + p-map "^2.1.0" + resolve-from "^4.0.0" + write-json-file "^3.2.0" + +"@lerna/prompt@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" + integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@3.22.1": + version "3.22.1" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519" + integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw== + dependencies: + "@evocateur/libnpmaccess" "^3.1.2" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@evocateur/pacote" "^9.6.3" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/describe-ref" "3.16.5" + "@lerna/log-packed" "3.16.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/npm-dist-tag" "3.18.5" + "@lerna/npm-publish" "3.18.5" + "@lerna/otplease" "3.18.5" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.16.4" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.22.1" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-pipe "^1.2.0" + semver "^6.2.0" + +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== + dependencies: + npmlog "^4.1.2" + +"@lerna/query-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" + integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== + dependencies: + "@lerna/package-graph" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/resolve-symlink@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" + integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== + dependencies: + fs-extra "^8.1.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" + integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" + integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== + dependencies: + "@lerna/npm-conf" "3.16.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^3.1.2" + npmlog "^4.1.2" + +"@lerna/run-topologically@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" + integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== + dependencies: + "@lerna/query-graph" "3.18.5" + figgy-pudding "^3.5.1" + p-queue "^4.0.0" + +"@lerna/run@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891" + integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-run-script" "3.16.5" + "@lerna/output" "3.13.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/symlink-binary@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" + integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/package" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + +"@lerna/symlink-dependencies@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" + integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/resolve-symlink" "3.16.0" + "@lerna/symlink-binary" "3.17.0" + fs-extra "^8.1.0" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== + +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== + dependencies: + npmlog "^4.1.2" + +"@lerna/version@3.22.1": + version "3.22.1" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2" + integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g== + dependencies: + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/conventional-commits" "3.22.0" + "@lerna/github-client" "3.22.0" + "@lerna/gitlab-client" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + chalk "^2.3.1" + dedent "^0.7.0" + load-json-file "^5.3.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^2.1.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^6.2.0" + slash "^2.0.0" + temp-write "^3.4.0" + write-json-file "^3.2.0" + +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@octokit/auth-token@^2.4.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" + integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== + dependencies: + "@octokit/types" "^5.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.6.tgz#4f09f2b468976b444742a1d5069f6fa45826d999" + integrity sha512-7Cc8olaCoL/mtquB7j/HTbPM+sY6Ebr4k2X2y4JoXpVKQ7r5xB4iGQE0IoO58wIPsUk4AzoT65AMEpymSbWTgQ== + dependencies: + "@octokit/types" "^5.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" + integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" + integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== + dependencies: + "@octokit/types" "^5.0.1" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.4.9" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.9.tgz#0a46f11b82351b3416d3157261ad9b1558c43365" + integrity sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^5.0.0" + deprecation "^2.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + once "^1.4.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.28.4": + version "16.43.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== + dependencies: + "@types/node" ">= 8" + +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" + integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== + dependencies: + "@types/node" ">= 8" + +"@types/error-stack-parser@^1.3.18": + version "1.3.18" + resolved "https://registry.yarnpkg.com/@types/error-stack-parser/-/error-stack-parser-1.3.18.tgz#e01c9f8c85ca83b610320c62258b0c9026ade0f7" + integrity sha1-4ByfjIXKg7YQMgxiJYsMkCat4Pc= + +"@types/estree@^0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/lodash@^4.14.72": + version "4.14.161" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18" + integrity sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/minimist@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" + integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= + +"@types/node@*", "@types/node@>= 8", "@types/node@^14.10.1": + version "14.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.10.1.tgz#cc323bad8e8a533d4822f45ce4e5326f36e42177" + integrity sha512-aYNbO+FZ/3KGeQCEkNhHFRIzBOUgc7QvcVNKXbfnhDkSfwUv91JsQQa10rDgKSTSLkXZ1UIyPe4FJJNVgw1xWQ== + +"@types/node@^10.12.19": + version "10.17.32" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.32.tgz#4ef6ff8b842ea0eb3fcbc4331489f4ae64036fa8" + integrity sha512-EUq+cjH/3KCzQHikGnNbWAGe548IFLSm93Vl8xA7EuYEEATiyOVDyEVuGkowL7c9V69FF/RiZSAOCFPApMs/ig== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@zkochan/cmd-shim@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" + integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== + dependencies: + is-windows "^1.0.0" + mkdirp-promise "^5.0.1" + mz "^2.5.0" + +JSONStream@^1.0.4, JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-hammerhead@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/acorn-hammerhead/-/acorn-hammerhead-0.3.0.tgz#2f83730f15e8450169c3dfd88af3ea9405ea973d" + integrity sha512-Izrr9mXONhWc7q8fqUe6ijQy+KjmyQlgdWARgaCVjds+nPpoSS298FY8uSVN/to8nKVTtkJpafNUlACWxwZS5w== + dependencies: + "@types/estree" "^0.0.39" + +adm-zip@~0.4.3: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@6: + version "6.0.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" + integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + dependencies: + debug "4" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.3: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + integrity sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs= + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" + integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== + dependencies: + archiver-utils "^2.1.0" + async "^2.6.3" + buffer-crc32 "^0.2.1" + glob "^7.1.4" + readable-stream "^3.4.0" + tar-stream "^2.1.0" + zip-stream "^2.1.2" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asar@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-2.1.0.tgz#97c6a570408c4e38a18d4a3fb748a621b5a7844e" + integrity sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^2.20.0" + cuint "^0.2.2" + glob "^7.1.3" + minimatch "^3.0.4" + mkdirp "^0.5.1" + tmp-promise "^1.0.5" + optionalDependencies: + "@types/glob" "^7.1.1" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-exit-hook@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-1.1.2.tgz#8095d75e488c29acee0551fe87252169d789cfba" + integrity sha1-gJXXXkiMKazuBVH+hyUhadeJz7o= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.6.tgz#ad3f373d9249ae324881565582bc90e152abbd68" + integrity sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg= + +async@^2.0.0, async@^2.1.2, async@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.22.1, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-for-of-as-array@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-for-of-as-array/-/babel-plugin-transform-for-of-as-array-1.1.1.tgz#f18fcbcbfa2b8caed1445c3153893d37439a6537" + integrity sha512-eE4hZJhOUKpX0q/X3adR8B4hLox+t8oe4ZqmhANUmv4cds07AbWt6O0rtFXK7PKFPPnW4nz/5mpbkPMkflyGeg== + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-display-name@^6.23.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24= + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.1.8: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-preset-stage-2@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^5.8.20, babel-runtime@^5.8.34: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" + integrity sha1-HAsC62MxL18If/IEUIJ7QlydTBk= + dependencies: + core-js "^1.0.0" + +babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2, base64-js@^1.1.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + 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" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + +bin-v8-flags-filter@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bin-v8-flags-filter/-/bin-v8-flags-filter-1.2.0.tgz#023fc4ee22999b2b1f6dd1b7253621366841537e" + integrity sha512-g8aeYkY7GhyyKRvQMBsJQZjhm2iCX3dKYvfrMpwVR8IxmUGrkpCBFoKbB9Rh0o3sTLCjU/1tFpZ4C7j3f+D+3g== + +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bowser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d" + integrity sha1-N/w4e2Fstq7zcNq01r1AK3TFxU0= + +bowser@^2.8.1: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + 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" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brotli@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.2.tgz#525a9cad4fcba96475d7d388f6aecb13eed52f46" + integrity sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y= + dependencies: + base64-js "^1.1.2" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer@^5.1.0, buffer@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + +cacache@^12.0.0, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + 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@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsite-record@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/callsite-record/-/callsite-record-4.1.3.tgz#3041d2a1c72aff86b00b151e47d25566520c4207" + integrity sha512-otAcPmu8TiHZ38cIL3NjQa1nGoSQRRe8WDDUgj5ZUwJWn1wzOYBwVSJbpVyzZ0sesQeKlYsPu9DG70fhh6AK9g== + dependencies: + "@types/error-stack-parser" "^1.3.18" + "@types/lodash" "^4.14.72" + callsite "^1.0.0" + chalk "^2.4.0" + error-stack-parser "^1.3.3" + highlight-es "^1.0.0" + lodash "4.6.1 || ^4.16.1" + pinkie-promise "^2.0.0" + +callsite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30000844: + version "1.0.30001129" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001129.tgz#e6514b94c0ef50f98cf7476daa91228ddd2ef7bc" + integrity sha512-9945fTVKS810DZITpsAbuhQG7Lam0tEfVbZlsBaCFZaszepbryrArS05PWmJSBQ6mta+v9iz0pUIAbW1eBILIg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chai@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + 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" + +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-remote-interface@^0.25.3: + version "0.25.7" + resolved "https://registry.yarnpkg.com/chrome-remote-interface/-/chrome-remote-interface-0.25.7.tgz#827e85fbef3cc561a9ef2404eb7eee355968c5bc" + integrity sha512-6zI6LbR2IiGmduFZededaerEr9hHXabxT/L+fRrdq65a0CfyLMzpq0BKuZiqN0Upqcacsb6q2POj7fmobwBsEA== + dependencies: + commander "2.11.x" + ws "3.3.x" + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +coffeescript@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.5.1.tgz#b2442a1f2c806139669534a54adc35010559d16a" + integrity sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.11.x: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== + +commander@^2.20.0, commander@^2.8.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compress-commons@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" + integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^3.0.1" + normalize-path "^3.0.0" + readable-stream "^2.3.6" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +conventional-changelog-angular@^5.0.3: + version "5.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb" + integrity sha512-nSLypht/1yEflhuTogC03i7DX7sOrXGsRn14g131Potqi6cbGbGEE9PSDEHKldabB6N76HiSyw9Ph+kLmC04Qw== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@^3.1.6: + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== + dependencies: + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.3" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-preset-loader@^2.1.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^4.0.6: + version "4.0.17" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.17.tgz#4753aaa138bf5aa59c0b274cb5937efcd2722e21" + integrity sha512-IKQuK3bib/n032KWaSb8YlBFds+aLmzENtnKtxJy3+HqDq5kohu3g/UdNbIHeJWygfnEbZjnCKFxAW0y7ArZAw== + dependencies: + compare-func "^2.0.0" + conventional-commits-filter "^2.0.6" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^7.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c" + integrity sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4" + integrity sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^7.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" + integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.1.1" + conventional-commits-filter "^2.0.2" + conventional-commits-parser "^3.0.3" + git-raw-commits "2.0.0" + git-semver-tags "^2.0.3" + meow "^4.0.0" + q "^1.5.1" + +convert-source-map@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +crc32-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" + integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== + dependencies: + crc "^3.4.4" + readable-stream "^3.4.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-md5@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-md5/-/crypto-md5-1.0.0.tgz#ccc8da750c753c7edcbabc542967472a384e86bb" + integrity sha1-zMjadQx1PH7curxUKWdHKjhOhrs= + +css@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" + integrity sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ== + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.5.1" + urix "^0.1.0" + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.4.0.tgz#87defd040bd4c1595d963282ec57f3c2a8525642" + integrity sha1-h979BAvUwVldljKC7FfzwqhSVkI= + +dedent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.6.0.tgz#0e6da8f0ce52838ef5cec5c8f9396b0c1b64a3cb" + integrity sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +desired-capabilities@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/desired-capabilities/-/desired-capabilities-0.1.0.tgz#f3860d12ede0dac819a47cc959a68c50ba9ba83e" + integrity sha1-84YNEu3g2sgZpHzJWaaMULqbqD4= + dependencies: + extend "^3.0.0" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +device-specs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/device-specs/-/device-specs-1.0.0.tgz#47b54577b9b159118bbb0a175177d0aa9c50a9c9" + integrity sha512-fYXbFSeilT7bnKWFi4OERSPHdtaEoDGn4aUhV5Nly6/I+Tp6JZ/6Icmd7LVIF5euyodGpxz2e/bfUmDnIdSIDw== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +diff@^4.0.1, diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dot-prop@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.3.47: + version "1.3.567" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.567.tgz#7a404288952ac990e447a7a86470d460ea953b8f" + integrity sha512-1aKkw0Hha1Bw9JA5K5PT5eFXC/TXbkJvUfNSNEciPUMgSIsRJZM1hF2GUEAGZpAbgvd8En21EA+Lv820KOhvqA== + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +emittery@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" + integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +endpoint-utils@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/endpoint-utils/-/endpoint-utils-1.0.2.tgz#0808c3369a727cd7967a39ff34ebc926b88146a8" + integrity sha1-CAjDNppyfNeWejn/NOvJJriBRqg= + dependencies: + ip "^1.1.3" + pinkie-promise "^1.0.0" + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +envinfo@^7.3.1: + version "7.7.3" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" + integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^1.3.3, error-stack-parser@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" + integrity sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI= + dependencies: + stackframe "^0.3.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0: + version "1.18.0-next.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" + integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esotope-hammerhead@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/esotope-hammerhead/-/esotope-hammerhead-0.5.5.tgz#dccae8ffe588238c3c3db9b78df45fe95add498a" + integrity sha512-EuSYJDtF8gLMB24lzjHw2KotauPsVJybFrtGfQyMm48oC7sTkspA26DqcqcbnRl4GC6sPVKWEx+ex72eqopX9Q== + dependencies: + "@types/estree" "^0.0.39" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + 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" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + 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" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@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-glob@^3.0.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastq@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + dependencies: + reusify "^1.0.4" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fp-ts@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.8.2.tgz#7948dea1ceef32e487d7f7f47bd2d3c4fcccfc0d" + integrity sha512-YKLBW75Rp+L9DuY1jr7QO6mZLTmJjy7tOqSAMcB2q2kBomqLjBMyV7dotpcnZmUYY6khMsfgYWtPbUDOFcNmkA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + 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" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" + integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.2.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.2.0.tgz#2955fd51befd6d96ea1389bbe2ef57e8e6042b04" + integrity sha512-KPoHZg8v+plarZvto4ruIzzJLFQoRx+sUs5DQSr07By9IBKguVd+e6jwrFR6/TP6xrCJlNV1tPqLO1aREc7O2g== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +graphlib@^2.1.5: + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + +handlebars@^4.7.6: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0, har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +highlight-es@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/highlight-es/-/highlight-es-1.0.3.tgz#12abc300a27e686f6f18010134e3a5c6d2fe6930" + integrity sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg== + dependencies: + chalk "^2.4.0" + is-es2016-keyword "^1.0.0" + js-tokens "^3.0.0" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.1.tgz#b2425d3c7b18f7219f2ca663d103bddb91718d64" + integrity sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.3: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b" + integrity sha1-25m8xYPrarux5I3LsZmamGBBy2s= + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@^6.2.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip@1.1.5, ip@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" + integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-es2016-keyword@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz#f6e54e110c5e4f8d265e69d2ed0eaf8cf5f47718" + integrity sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-jquery-obj@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-jquery-obj/-/is-jquery-obj-0.1.1.tgz#e8d9cc9737b1ab0733b50303e33a38ed7cc2f60b" + integrity sha512-18toSebUVF7y717dgw/Dzn6djOCqrkiDp3MhB8P6TdKyCVkbD1ZwE7Uz8Hwx6hUPTvKjbyYH9ncXT4ts4qLaSA== + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-regex@^1.1.0, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-ssh@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" + integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== + dependencies: + protocols "^1.1.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.0, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lerna@^3.22.1: + version "3.22.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" + integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg== + dependencies: + "@lerna/add" "3.21.0" + "@lerna/bootstrap" "3.21.0" + "@lerna/changed" "3.21.0" + "@lerna/clean" "3.21.0" + "@lerna/cli" "3.18.5" + "@lerna/create" "3.22.0" + "@lerna/diff" "3.21.0" + "@lerna/exec" "3.21.0" + "@lerna/import" "3.22.0" + "@lerna/info" "3.21.0" + "@lerna/init" "3.21.0" + "@lerna/link" "3.21.0" + "@lerna/list" "3.21.0" + "@lerna/publish" "3.22.1" + "@lerna/run" "3.21.0" + "@lerna/version" "3.22.1" + import-local "^2.0.0" + npmlog "^4.1.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +linux-platform-info@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/linux-platform-info/-/linux-platform-info-0.0.3.tgz#2dae324385e66e3d755bec83f86c7beea61ceb83" + integrity sha1-La4yQ4Xmbj11W+yD+Gx77qYc64M= + dependencies: + os-family "^1.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.0.2, lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +"lodash@4.6.1 || ^4.16.1", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.14.2, lodash@^4.16.6, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.1: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +log-update-async-hook@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/log-update-async-hook/-/log-update-async-hook-2.0.2.tgz#6eba89dbe67fa12d0b20ac47df7942947af1fcd1" + integrity sha512-HQwkKFTZeUOrDi1Duf2CSUa/pSpcaCHKLdx3D/Z16DsipzByOBffcg5y0JZA1q0n80dYgLXe2hFM9JGNgBsTDw== + dependencies: + ansi-escapes "^2.0.0" + async-exit-hook "^1.1.2" + onetime "^2.0.1" + wrap-ansi "^2.1.0" + +logging-ts@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/logging-ts/-/logging-ts-0.3.4.tgz#0aa61b07970b1d74a829f6b945b4c51977f0c8a3" + integrity sha512-TJYaSB88h8N9/ojruoGZgJeQEwpLmDNWpGf03hDgjPNo5QnwO28vkSH/H8/9aMoX8zeShVJUOnKRM6zs5ifR0A== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.3.tgz#51ccd0b4fc0c843587d7a5709ce4d3b7629bedc5" + integrity sha1-UczQtPwMhDWH16VwnOTTt2Kb7cU= + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +macos-release@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" + integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + +map-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-reverse/-/map-reverse-1.0.1.tgz#274e9f500a611153183b5b8d8490a9c1c23ee310" + integrity sha1-J06fUAphEVMYO1uNhJCpwcI+4xA= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +match-url-wildcard@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/match-url-wildcard/-/match-url-wildcard-0.0.4.tgz#c8533da7ec0901eddf01fc0893effa68d4e727d6" + integrity sha512-R1XhQaamUZPWLOPtp4ig5j+3jctN+skhgRmEQTUamMzmNtRG69QEirQs0NZKLtHMR7tzWpmtnS4Eqv65DcgXUA== + dependencies: + escape-string-regexp "^1.0.5" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +meow@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" + integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + 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" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +mime-db@1.44.0, mime-db@^1.41.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@~1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +moment-duration-format-commonjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/moment-duration-format-commonjs/-/moment-duration-format-commonjs-1.0.0.tgz#dc5de612e6d6ff41f774d03772a139a363563bc3" + integrity sha512-MVFR4hIh4jfuwSCPBEE5CCwn3refvTsxK/Yv/DpKJ6YcNnCimlVJ6DQeTJG1KVQPw1o8m3tkbHE9gVjivyv9iA== + +moment@^2.10.3, moment@^2.14.1: + version "2.28.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.28.0.tgz#cdfe73ce01327cee6537b0fafac2e0f21a237d75" + integrity sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +mustache@^2.1.1, mustache@^2.1.2, mustache@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" + integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^1.0.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-1.3.4.tgz#ad89f62c9d1f4fd69710d4a90953d2893d2d31f4" + integrity sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ== + +nanoid@^2.1.3: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanoid@^3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + 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" + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.5.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +node-version@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" + integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ== + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-lifecycle@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0, object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0, onetime@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +os-family@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/os-family/-/os-family-1.1.0.tgz#8a89cb617dd1631b8ef9506be830144f626c214e" + integrity sha512-E3Orl5pvDJXnVmpaAA2TeNNpNhTMl4o5HghuWhOivBjEiTnJSrMYSa5uZMek1lBEvu8kKEsa2YgVcGFVDqX/9w== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= + +p-queue@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" + integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== + dependencies: + eventemitter3 "^3.1.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= + dependencies: + p-reduce "^1.0.0" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-path@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" + integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" + integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +parse5@2.2.3, parse5@^2.1.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-2.2.3.tgz#0c4fc41c1000c5e6b93d48b03f8083837834e9f6" + integrity sha1-DE/EHBAAxea5PUiwP4CDg3g06fY= + +parse5@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670" + integrity sha1-0dpn9UglY7t89X8oauKCLs+/NnA= + dependencies: + pinkie "^1.0.0" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@2.0.4, pinkie@^2.0.0, pinkie@^2.0.1, pinkie@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pinkie@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4" + integrity sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pngjs@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promisify-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promisify-event/-/promisify-event-1.0.0.tgz#bd7523ea06b70162f370979016b53a686c60e90f" + integrity sha1-vXUj6ga3AWLzcJeQFrU6aGxg6Q8= + dependencies: + pinkie-promise "^2.0.0" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +psl@^1.1.24, psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qrcode-terminal@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.10.0.tgz#a76a48e2610a18f97fa3a2bd532b682acff86c53" + integrity sha1-p2pI4mEKGPl/o6K9UytoKs/4bFM= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +read-cmd-shim@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +read-file-relative@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/read-file-relative/-/read-file-relative-1.2.0.tgz#98f7d96eaa21d2b4c7a2febd63d2fc8cf35e9f9b" + integrity sha1-mPfZbqoh0rTHov69Y9L8jPNen5s= + dependencies: + callsite "^1.0.0" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@^5.1.6: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate@^1.2.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + integrity sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw= + dependencies: + is-finite "^1.0.0" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +replicator@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/replicator/-/replicator-1.0.3.tgz#c0b3ea31e749015bae5d52273f2ae35d541b87ef" + integrity sha512-WsKsraaM0x0QHy5CtzdgFXUxyowoBhyNkmPqmZShW6h+rOWnyT6Od3zRdTX9r616rAA6kDC9MKQGnSM/CJKfVQ== + +request@2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +request@^2.67.0, request@^2.74.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f" + integrity sha1-Tq7qQe0EDRcCRX32SkKysH0kb58= + dependencies: + resolve-from "^2.0.0" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.4.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-filename@^1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sauce-connect-launcher@^1.2.5: + version "1.3.2" + resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.3.2.tgz#dfc675a258550809a8eaf457eb9162b943ddbaf0" + integrity sha512-wf0coUlidJ7rmeClgVVBh6Kw55/yalZCY/Un5RgjSnTXRAeGqagnTsTYpZaqC4dCtrY4myuYpOAZXCdbO7lHfQ== + dependencies: + adm-zip "~0.4.3" + async "^2.1.2" + https-proxy-agent "^5.0.0" + lodash "^4.16.6" + rimraf "^2.5.4" + +saucelabs-connector@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/saucelabs-connector/-/saucelabs-connector-0.3.0.tgz#8b1610fa473e142bc3caebaf73d47e19fe3159d6" + integrity sha512-r0PWFUZeWMoWaKWhvnaHpro5VfpLbg+avKdjb0bs+xSTNh4S6sgjVJMhM8vSjOXog2DjZVe1Agv4Ta5GCMLMog== + dependencies: + babel-runtime "^5.8.20" + lodash "^4.13.1" + os-family "^1.0.0" + pify "^2.3.0" + pinkie "^2.0.4" + read-file-relative "^1.2.0" + request "^2.67.0" + sauce-connect-launcher "^1.2.5" + wd "^1.2.0" + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^6.0.0, semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slide@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + 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" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.16, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stackframe@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" + integrity sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strong-log-transformer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tar-stream@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +temp-write@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +testcafe-browser-provider-saucelabs@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/testcafe-browser-provider-saucelabs/-/testcafe-browser-provider-saucelabs-1.8.0.tgz#37a0b734feaafd5e83a80bd6762a17ce2f11ee95" + integrity sha512-aDjkYAJdi1G/HLOqVoKOftSidagElVtKmH7+eneGoRNp85ZcWo8gHdIJW5m0Mr3wDhplafCWNfGBimTQ3fYtQA== + dependencies: + babel-runtime "^6.11.6" + desired-capabilities "^0.1.0" + lodash "^4.14.2" + pify "^2.3.0" + pinkie "^2.0.4" + request "^2.74.0" + saucelabs-connector "^0.3.0" + +testcafe-browser-tools@2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/testcafe-browser-tools/-/testcafe-browser-tools-2.0.13.tgz#1b185539d64991ad0a4da11992beeb6b4bd5ba9d" + integrity sha512-r0AfCNsOJWXHAR+KADumfCffsH3LYoEbJXfmGOG47uEt1FBEw8cWTSWRBp5As+DaAmh9pi75P+ZF6K09WudM/g== + dependencies: + array-find "^1.0.0" + dedent "^0.7.0" + del "^5.1.0" + execa "^3.3.0" + graceful-fs "^4.1.11" + linux-platform-info "^0.0.3" + lodash "^4.17.15" + mkdirp "^0.5.1" + mustache "^2.1.2" + nanoid "^2.1.3" + os-family "^1.0.0" + pify "^2.3.0" + pinkie "^2.0.1" + read-file-relative "^1.2.0" + which-promise "^1.0.0" + +testcafe-hammerhead@17.1.15: + version "17.1.15" + resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-17.1.15.tgz#2855db1d795f598ee331eda4ff7b0ca0309255d9" + integrity sha512-FvuaODbFUkoqyzH0OapiMO3/ISCB/v+0kKi0+5DhcIz1tRBishzyfLbHFyKXUf6rm0IhGJlME93uKFOM9NNOMw== + dependencies: + acorn-hammerhead "^0.3.0" + asar "^2.0.1" + bowser "1.6.0" + brotli "^1.3.1" + crypto-md5 "^1.0.0" + css "2.2.3" + debug "4.1.1" + esotope-hammerhead "0.5.5" + iconv-lite "0.5.1" + lodash "^4.17.19" + lru-cache "2.6.3" + match-url-wildcard "0.0.4" + merge-stream "^1.0.1" + mime "~1.4.1" + mustache "^2.1.1" + nanoid "^3.1.12" + os-family "^1.0.0" + parse5 "2.2.3" + pinkie "2.0.4" + read-file-relative "^1.2.0" + semver "5.5.0" + tough-cookie "2.3.3" + tunnel-agent "0.6.0" + webauth "^1.1.0" + +testcafe-legacy-api@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/testcafe-legacy-api/-/testcafe-legacy-api-4.0.0.tgz#700bacce8d16028250d41b643051645b4cfe7cd5" + integrity sha512-Tn+YEH8hqDPQs/1/d+A9G+FdfejougtoWX0wRxrLq5ECYy2qxwH8p9EGDUNatLm0IFIumVpcz2tSZkvRpfKLSg== + dependencies: + async "0.2.6" + babel-runtime "^5.8.34" + dedent "^0.6.0" + highlight-es "^1.0.0" + is-jquery-obj "^0.1.0" + lodash "^4.14.0" + moment "^2.14.1" + mustache "^2.2.1" + os-family "^1.0.0" + parse5 "^2.1.5" + pify "^2.3.0" + pinkie "^2.0.1" + strip-bom "^2.0.0" + +testcafe-reporter-json@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-json/-/testcafe-reporter-json-2.2.0.tgz#bb061e054489abdb62add745dd979896b618ea91" + integrity sha512-wfpNaZgGP2WoqdmnIXOyxcpwSzdH1HvzXSN397lJkXOrQrwhuGUThPDvyzPnZqxZSzXdDUvIPJm55tCMWbfymQ== + +testcafe-reporter-list@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-list/-/testcafe-reporter-list-2.1.0.tgz#9fa89f71b97d3dfe64b4302d5e227dee69aec6b9" + integrity sha1-n6ifcbl9Pf5ktDAtXiJ97mmuxrk= + +testcafe-reporter-minimal@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-minimal/-/testcafe-reporter-minimal-2.1.0.tgz#676f03547634143c6eaf3ab52868273a4bebf421" + integrity sha1-Z28DVHY0FDxurzq1KGgnOkvr9CE= + +testcafe-reporter-spec@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/testcafe-reporter-spec/-/testcafe-reporter-spec-2.1.1.tgz#8156fced0f5132486559ad560bc80676469275ec" + integrity sha1-gVb87Q9RMkhlWa1WC8gGdkaSdew= + +testcafe-reporter-xunit@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-xunit/-/testcafe-reporter-xunit-2.1.0.tgz#e6d66c572ce15af266706af0fd610b2a841dd443" + integrity sha1-5tZsVyzhWvJmcGrw/WELKoQd1EM= + +testcafe@^1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/testcafe/-/testcafe-1.9.2.tgz#35f3603bdc5241033eda9ad55d600d8c005a2801" + integrity sha512-85du0zDvzFWleVqRTTsAr8Lo+3gn4yETs9qFZBIEufk6oN1fLzgv6Q14GeaH3/IaKi+/smv55umTce/OXX0mbA== + dependencies: + "@types/node" "^10.12.19" + async-exit-hook "^1.1.2" + babel-core "^6.22.1" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-for-of-as-array "^1.1.1" + babel-plugin-transform-runtime "^6.22.0" + babel-preset-env "^1.1.8" + babel-preset-flow "^6.23.0" + babel-preset-react "^6.24.1" + babel-preset-stage-2 "^6.22.0" + babel-runtime "^6.22.0" + bin-v8-flags-filter "^1.1.2" + bowser "^2.8.1" + callsite "^1.0.0" + callsite-record "^4.0.0" + chai "^4.1.2" + chalk "^2.3.0" + chrome-remote-interface "^0.25.3" + coffeescript "^2.3.1" + commander "^2.8.1" + debug "^2.2.0" + dedent "^0.4.0" + del "^3.0.0" + device-specs "^1.0.0" + diff "^4.0.2" + elegant-spinner "^1.0.1" + emittery "^0.4.1" + endpoint-utils "^1.0.2" + error-stack-parser "^1.3.6" + execa "^4.0.3" + globby "^9.2.0" + graceful-fs "^4.1.11" + graphlib "^2.1.5" + import-lazy "^3.1.0" + indent-string "^1.2.2" + is-ci "^1.0.10" + is-docker "^2.0.0" + is-glob "^2.0.1" + is-stream "^1.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + log-update-async-hook "^2.0.2" + make-dir "^3.0.0" + map-reverse "^1.0.1" + mime-db "^1.41.0" + moment "^2.10.3" + moment-duration-format-commonjs "^1.0.0" + mustache "^2.1.2" + nanoid "^1.0.1" + node-version "^1.0.0" + os-family "^1.0.0" + parse5 "^1.5.0" + pify "^2.3.0" + pinkie "^2.0.4" + pngjs "^3.3.1" + promisify-event "^1.0.0" + qrcode-terminal "^0.10.0" + read-file-relative "^1.2.0" + replicator "^1.0.3" + resolve-cwd "^1.0.0" + resolve-from "^4.0.0" + sanitize-filename "^1.6.0" + source-map-support "^0.5.16" + strip-bom "^2.0.0" + testcafe-browser-tools "2.0.13" + testcafe-hammerhead "17.1.15" + testcafe-legacy-api "4.0.0" + testcafe-reporter-json "^2.1.0" + testcafe-reporter-list "^2.1.0" + testcafe-reporter-minimal "^2.1.0" + testcafe-reporter-spec "^2.1.1" + testcafe-reporter-xunit "^2.1.0" + time-limit-promise "^1.0.2" + tmp "0.0.28" + tree-kill "^1.1.0" + typescript "^3.3.3" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0, through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +time-limit-promise@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/time-limit-promise/-/time-limit-promise-1.0.4.tgz#33e928212273c70d52153c28ad2a7e3319b975f9" + integrity sha512-FLHDDsIDducw7MBcRWlFtW2Tm50DoKOSFf0Nzx17qwXj8REXCte0eUkHrJl9QU3Bl9arG3XNYX0PcHpZ9xyuLw== + +tmp-promise@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz#bb924d239029157b9bc1d506a6aa341f8b13e64c" + integrity sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw== + dependencies: + bluebird "^3.5.0" + tmp "0.1.0" + +tmp@0.0.28: + version "0.0.28" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" + integrity sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE= + dependencies: + punycode "^1.4.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tree-kill@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= + dependencies: + utf8-byte-length "^1.0.1" + +ts-node@^8.10.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tunnel-agent@0.6.0, tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.3.3, typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +uglify-js@^3.1.4: + version "3.10.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.4.tgz#dd680f5687bc0d7a93b14a3482d16db6eba2bfbb" + integrity sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw== + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +vargs@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" + integrity sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +wd@^1.2.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/wd/-/wd-1.13.0.tgz#79d82c57e0bb7fcca2f291ed87f51cf6b7701ff0" + integrity sha512-Y73EADwIrz1AAmy5G70r/fIM2tzSTdLWjIgCqGlQOr2/k2cC2nho4kWacZdO3xmdsegeQvUkcsGOB74+gC9Wxg== + dependencies: + archiver "^3.0.0" + async "^2.0.0" + lodash "^4.0.0" + mkdirp "^0.5.1" + q "^1.5.1" + request "2.88.0" + vargs "^0.1.0" + +webauth@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webauth/-/webauth-1.1.0.tgz#64704f6b8026986605bc3ca629952e6e26fdd100" + integrity sha1-ZHBPa4AmmGYFvDymKZUubib90QA= + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-promise/-/which-promise-1.0.0.tgz#20b721df05b35b706176ffa10b0909aba4603035" + integrity sha1-ILch3wWzW3Bhdv+hCwkJq6RgMDU= + dependencies: + pify "^2.2.0" + pinkie-promise "^1.0.0" + which "^1.1.2" + +which@^1.1.2, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +windows-release@^3.1.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== + dependencies: + execa "^1.0.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-json-file@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + +ws@3.3.x: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^14.2.2: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +zip-stream@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" + integrity sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^2.1.1" + readable-stream "^3.4.0"