[
  {
    "path": ".circleci/config.yml",
    "content": "# Javascript Node CircleCI 2.0 configuration file\n#\n# Check https://circleci.com/docs/2.0/language-javascript/ for more details\n#\nversion: 2\njobs:\n  build:\n    docker:\n      # specify the version you desire here\n      - image: circleci/node:10-browsers\n      \n      # Specify service dependencies here if necessary\n      # CircleCI maintains a library of pre-built images\n      # documented at https://circleci.com/docs/2.0/circleci-images/\n      # - image: circleci/mongo:3.4.4\n\n    working_directory: ~/repo\n\n    steps:\n      - checkout\n\n      # Download and cache dependencies\n      - restore_cache:\n          keys:\n          - v1-dependencies-{{ checksum \"package.json\" }}\n          # fallback to using the latest cache if no exact match is found\n          - v1-dependencies-\n\n      - run: yarn install\n\n      - save_cache:\n          paths:\n            - node_modules\n          key: v1-dependencies-{{ checksum \"package.json\" }}\n        \n      # run tests!\n      - run: yarn test:coverage\n\n\n"
  },
  {
    "path": ".codebeatignore",
    "content": "docs/**"
  },
  {
    "path": ".github/issue_template.md",
    "content": "First check https://github.com/SortableJS/Vue.Draggable/blob/master/CONTRIBUTING.md\n\n### Jsfiddle link\n\n### Step by step scenario\n\n### Actual Solution\n\n### Expected Solution\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\n.tmp\n.sass-cache\napp/bower_components\ntest/bower_components\nbower_components\nexamples/src\ntest/tmp\n/test/tmp\n/examples/src\n/examples/libs/\n/coverage\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Jest All\",\n      \"program\": \"${workspaceFolder}/node_modules/.bin/jest\",\n      \"args\": [\"--runInBand\"],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"disableOptimisticBPs\": true,\n      \"windows\": {\n        \"program\": \"${workspaceFolder}/node_modules/jest/bin/jest\",\n      }\n    },\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Jest Current File\",\n      \"program\": \"${workspaceFolder}/node_modules/.bin/jest\",\n      \"args\": [\n        \"${relativeFile}\",\n        \"--config\",\n        \"jest.config.js\"\n      ],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"disableOptimisticBPs\": true,\n      \"windows\": {\n        \"program\": \"${workspaceFolder}/node_modules/jest/bin/jest\",\n      }\n    },\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Jest Vue Current File\",\n      \"program\": \"${workspaceFolder}/node_modules/@vue/cli-service/bin/vue-cli-service\",\n      \"args\": [\n        \"test:unit\",\n        \"${relativeFile}\",\n      ],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"disableOptimisticBPs\": true,\n      \"windows\": {\n        \"program\": \"${workspaceFolder}/node_modules/@vue/cli-service/bin/vue-cli-service\",\n      }\n    }\n  ]\n}"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "## How to contribute\n\n#### **Did you find a bug?**\n\n* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/SortableJS/Vue.Draggable/issues).\n\n* **Check if you are using the last version of vue.draggable and a compatible version of Sortable** (as indicated in the [README section](./README.md))\n\n* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/SortableJS/Vue.Draggable/issues/new). Be sure to respect issue template including a **title and clear description**, as much relevant information as possible, and a [**jsfiddle**](http://jsfiddle.net/) (or similar online tool) containing an sample demonstrating the bug. Explain the **step by step scenario** as well as the **actual result** as opposed as the **expected result**.\n\n#### **Do you have questions about how to use vue.draggable?**\n\n* Check [README section](./README.md) section as well as [Issues](https://github.com/SortableJS/Vue.Draggable/issues) to see if a similar question has been asked and answered.\n\n* Check [Sortable](https://github.com/RubaXa/Sortable) documentation.\n\n* DO NOT OPEN ISSUE. Ask a question on [stackoverflow](https://stackoverflow.com) instead to get answer from the vue fantastic community.\n\n#### **Did you write a correction that fixes a bug?**\n\n* Open a new GitHub pull request with the code.\n\n* Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.\n\n#### **Do you intend to add a new feature or change an existing one?**\n\n* Open an issue proposing the enhancement explaining the rational and the added value.\n\n* Once agreed you may submit the corresponding PR.\n\nThanks!\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016-2019 David Desmaisons\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\"><img width=\"140\"src=\"https://raw.githubusercontent.com/SortableJS/Vue.Draggable/master/logo.svg?sanitize=true\"></p>\n<h1 align=\"center\">Vue.Draggable</h1>\n\n[![CircleCI](https://circleci.com/gh/SortableJS/Vue.Draggable.svg?style=shield)](https://circleci.com/gh/SortableJS/Vue.Draggable)\n[![Coverage](https://codecov.io/gh/SortableJS/Vue.Draggable/branch/master/graph/badge.svg)](https://codecov.io/gh/SortableJS/Vue.Draggable)\n[![codebeat badge](https://codebeat.co/badges/7a6c27c8-2d0b-47b9-af55-c2eea966e713)](https://codebeat.co/projects/github-com-sortablejs-vue-draggable-master)\n[![GitHub open issues](https://img.shields.io/github/issues/SortableJS/Vue.Draggable.svg)](https://github.com/SortableJS/Vue.Draggable/issues?q=is%3Aopen+is%3Aissue)\n[![npm download](https://img.shields.io/npm/dt/vuedraggable.svg)](https://www.npmjs.com/package/vuedraggable)\n[![npm download per month](https://img.shields.io/npm/dm/vuedraggable.svg)](https://www.npmjs.com/package/vuedraggable)\n[![npm version](https://img.shields.io/npm/v/vuedraggable.svg)](https://www.npmjs.com/package/vuedraggable)\n[![MIT License](https://img.shields.io/github/license/SortableJS/Vue.Draggable.svg)](https://github.com/SortableJS/Vue.Draggable/blob/master/LICENSE)\n\n\nVue component (Vue.js 2.0) or directive (Vue.js 1.0) allowing drag-and-drop and synchronization with view model array.\n\nBased on and offering all features of [Sortable.js](https://github.com/RubaXa/Sortable)\n\n\n## For Vue 3\n   See [vue.draggable.next](https://github.com/SortableJS/vue.draggable.next)\n\n## Demo\n\n![demo gif](https://raw.githubusercontent.com/SortableJS/Vue.Draggable/master/example.gif)\n\n## Live Demos\n\nhttps://sortablejs.github.io/Vue.Draggable/\n\nhttps://david-desmaisons.github.io/draggable-example/\n\n## Features\n\n* Full support of [Sortable.js](https://github.com/RubaXa/Sortable) features:\n    * Supports touch devices\n    * Supports drag handles and selectable text\n    * Smart auto-scrolling\n    * Support drag and drop between different lists\n    * No jQuery dependency\n* Keeps in sync HTML and view model list\n* Compatible with Vue.js 2.0 transition-group\n* Cancellation support\n* Events reporting any changes when full control is needed\n* Reuse existing UI library components (such as [vuetify](https://vuetifyjs.com), [element](http://element.eleme.io/), or [vue material](https://vuematerial.io) etc...) and make them draggable using `tag` and `componentData` props\n\n## Backers\n\nLooking for backers!\n\n## Donate\n\nFind this project useful? You can buy me a :coffee: or a :beer:\n\n[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=GYAEKQZJ4FQT2&currency_code=USD&source=url)\n\n\n## Installation\n\n### With npm or yarn \n\n```bash\nyarn add vuedraggable\n\nnpm i -S vuedraggable\n```\n\n**Beware it is vuedraggable for Vue 2.0 and not vue-draggable which is for version 1.0**\n\n### with direct link \n```html\n\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js\"></script>\n<!-- CDNJS :: Sortable (https://cdnjs.com/) -->\n<script src=\"//cdn.jsdelivr.net/npm/sortablejs@1.8.4/Sortable.min.js\"></script>\n<!-- CDNJS :: Vue.Draggable (https://cdnjs.com/) -->\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.20.0/vuedraggable.umd.min.js\"></script>\n\n```\n\n[cf example section](https://github.com/SortableJS/Vue.Draggable/tree/master/example)\n\n## For Vue.js 2.0\n\nUse draggable component:\n\n### Typical use:\n``` html\n<draggable v-model=\"myArray\" group=\"people\" @start=\"drag=true\" @end=\"drag=false\">\n   <div v-for=\"element in myArray\" :key=\"element.id\">{{element.name}}</div>\n</draggable>\n```\n.vue file:\n``` js\n  import draggable from 'vuedraggable'\n  ...\n  export default {\n        components: {\n            draggable,\n        },\n  ...\n```\n\n### With `transition-group`:\n``` html\n<draggable v-model=\"myArray\">\n    <transition-group>\n        <div v-for=\"element in myArray\" :key=\"element.id\">\n            {{element.name}}\n        </div>\n    </transition-group>\n</draggable>\n```\n\nDraggable component should directly wrap the draggable elements, or a `transition-component` containing the draggable elements.\n\n\n### With footer slot:\n``` html\n<draggable v-model=\"myArray\" draggable=\".item\">\n    <div v-for=\"element in myArray\" :key=\"element.id\" class=\"item\">\n        {{element.name}}\n    </div>\n    <button slot=\"footer\" @click=\"addPeople\">Add</button>\n</draggable>\n```\n### With header slot:\n``` html\n<draggable v-model=\"myArray\" draggable=\".item\">\n    <div v-for=\"element in myArray\" :key=\"element.id\" class=\"item\">\n        {{element.name}}\n    </div>\n    <button slot=\"header\" @click=\"addPeople\">Add</button>\n</draggable>\n```\n\n### With Vuex:\n\n```html\n<draggable v-model='myList'>\n``` \n\n```javascript\ncomputed: {\n    myList: {\n        get() {\n            return this.$store.state.myList\n        },\n        set(value) {\n            this.$store.commit('updateList', value)\n        }\n    }\n}\n```\n\n\n### Props\n#### value\nType: `Array`<br>\nRequired: `false`<br>\nDefault: `null`\n\nInput array to draggable component. Typically same array as referenced by inner element v-for directive.<br>\nThis is the preferred way to use Vue.draggable as it is compatible with Vuex.<br>\nIt should not be used directly but only though the `v-model` directive:\n```html\n<draggable v-model=\"myArray\">\n```\n\n#### list\nType: `Array`<br>\nRequired: `false`<br>\nDefault: `null`\n\nAlternative to the `value` prop, list is an array to be synchronized with drag-and-drop.<br>\nThe main difference is that `list` prop is updated by draggable component using splice method, whereas `value` is immutable.<br>\n**Do not use in conjunction with value prop.**\n\n#### All sortable options\nNew in version 2.19\n\nSortable options can be set directly as vue.draggable props since version 2.19.\n\nThis means that all [sortable option](https://github.com/RubaXa/Sortable#options) are valid sortable props with the notable exception of all the method starting by \"on\" as draggable component expose the same API via events.\n\nkebab-case propery are supported: for example `ghost-class` props will be converted to `ghostClass` sortable option.\n\nExample setting handle, sortable and a group option:\n```HTML\n<draggable\n        v-model=\"list\"\n        handle=\".handle\"\n        :group=\"{ name: 'people', pull: 'clone', put: false }\"\n        ghost-class=\"ghost\"\n        :sort=\"false\"\n        @change=\"log\"\n      >\n      <!-- -->\n</draggable>\n```\n\n#### tag\nType: `String`<br>\nDefault: `'div'`\n\nHTML node type of the element that draggable component create as outer element for the included slot.<br>\nIt is also possible to pass the name of vue component as element. In this case, draggable attribute will be passed to the create component.<br>\nSee also [componentData](#componentdata) if you need to set props or event to the created component.\n\n#### clone\nType: `Function`<br>\nRequired: `false`<br>\nDefault: `(original) => { return original;}`<br>\n\nFunction called on the source component to clone element when clone option is true. The unique argument is the viewModel element to be cloned and the returned value is its cloned version.<br>\nBy default vue.draggable reuses the viewModel element, so you have to use this hook if you want to clone or deep clone it.\n\n#### move\nType: `Function`<br>\nRequired: `false`<br>\nDefault: `null`<br>\n\nIf not null this function will be called in a similar way as [Sortable onMove callback](https://github.com/RubaXa/Sortable#move-event-object).\nReturning false will cancel the drag operation.\n\n```javascript\nfunction onMoveCallback(evt, originalEvent){\n   ...\n    // return false; — for cancel\n}\n```\nevt object has same property as [Sortable onMove event](https://github.com/RubaXa/Sortable#move-event-object), and 3 additional properties:\n - `draggedContext`:  context linked to dragged element\n   - `index`: dragged element index\n   - `element`: dragged element underlying view model element\n   - `futureIndex`:  potential index of the dragged element if the drop operation is accepted\n - `relatedContext`: context linked to current drag operation\n   - `index`: target element index\n   - `element`: target element view model element\n   - `list`: target list\n   - `component`: target VueComponent\n\nHTML:\n```HTML\n<draggable :list=\"list\" :move=\"checkMove\">\n```\njavascript:\n```javascript\ncheckMove: function(evt){\n    return (evt.draggedContext.element.name!=='apple');\n}\n```\nSee complete example: [Cancel.html](https://github.com/SortableJS/Vue.Draggable/blob/master/examples/Cancel.html), [cancel.js](https://github.com/SortableJS/Vue.Draggable/blob/master/examples/script/cancel.js)\n\n#### componentData\nType: `Object`<br>\nRequired: `false`<br>\nDefault: `null`<br>\n\nThis props is used to pass additional information to child component declared by [tag props](#tag).<br>\nValue:\n* `props`: props to be passed to the child component\n* `attrs`: attrs to be passed to the child component\n* `on`: events to be subscribe in the child component\n\nExample (using [element UI library](http://element.eleme.io/#/en-US)):\n```HTML\n<draggable tag=\"el-collapse\" :list=\"list\" :component-data=\"getComponentData()\">\n    <el-collapse-item v-for=\"e in list\" :title=\"e.title\" :name=\"e.name\" :key=\"e.name\">\n        <div>{{e.description}}</div>\n     </el-collapse-item>\n</draggable>\n```\n```javascript\nmethods: {\n    handleChange() {\n      console.log('changed');\n    },\n    inputChanged(value) {\n      this.activeNames = value;\n    },\n    getComponentData() {\n      return {\n        on: {\n          change: this.handleChange,\n          input: this.inputChanged\n        },\n        attrs:{\n          wrap: true\n        },\n        props: {\n          value: this.activeNames\n        }\n      };\n    }\n  }\n```\n\n### Events\n\n* Support for Sortable events:\n\n  `start`, `add`, `remove`, `update`, `end`, `choose`, `unchoose`, `sort`, `filter`, `clone`<br>\n  Events are called whenever onStart, onAdd, onRemove, onUpdate, onEnd, onChoose, onUnchoose, onSort, onClone are fired by Sortable.js with the same argument.<br>\n  [See here for reference](https://github.com/RubaXa/Sortable#event-object-demo)\n\n  Note that SortableJS OnMove callback is mapped with the [move prop](https://github.com/SortableJS/Vue.Draggable/blob/master/README.md#move)\n\nHTML:\n```HTML\n<draggable :list=\"list\" @end=\"onEnd\">\n```\n\n* change event\n\n  `change` event is triggered when list prop is not null and the corresponding array is altered due to drag-and-drop operation.<br>\n  This event is called with one argument containing one of the following properties:\n  - `added`:  contains information of an element added to the array\n    - `newIndex`: the index of the added element\n    - `element`: the added element\n  - `removed`:  contains information of an element removed from to the array\n    - `oldIndex`: the index of the element before remove\n    - `element`: the removed element\n  - `moved`:  contains information of an element moved within the array\n    - `newIndex`: the current index of the moved element\n    - `oldIndex`: the old index of the moved element\n    - `element`: the moved element\n\n### Slots\n\nLimitation: neither header or footer slot works in conjunction with transition-group.\n\n#### Header\nUse the `header` slot to add none-draggable element inside the vuedraggable component.\nImportant: it should be used in conjunction with draggable option to tag draggable element.\nNote that header slot will always be added before the default slot regardless its position in the template.\nEx:\n\n``` html\n<draggable v-model=\"myArray\" draggable=\".item\">\n    <div v-for=\"element in myArray\" :key=\"element.id\" class=\"item\">\n        {{element.name}}\n    </div>\n    <button slot=\"header\" @click=\"addPeople\">Add</button>\n</draggable>\n```\n\n#### Footer\nUse the `footer` slot to add none-draggable element inside the vuedraggable component.\nImportant: it should be used in conjunction with draggable option to tag draggable elements.\nNote that footer slot will always be added after the default slot regardless its position in the template.\nEx:\n\n``` html\n<draggable v-model=\"myArray\" draggable=\".item\">\n    <div v-for=\"element in myArray\" :key=\"element.id\" class=\"item\">\n        {{element.name}}\n    </div>\n    <button slot=\"footer\" @click=\"addPeople\">Add</button>\n</draggable>\n```\n ### Gotchas\n \n - Vue.draggable children should always map the list or value prop using a v-for directive\n   * You may use [header](https://github.com/SortableJS/Vue.Draggable#header) and [footer](https://github.com/SortableJS/Vue.Draggable#footer) slot to by-pass this limitation.\n \n - Children elements inside v-for should be keyed as any element in Vue.js. Be carefull to provide revelant key values in particular:\n    * typically providing array index as keys won't work as key should be linked to the items content\n    * cloned elements should provide updated keys, it is doable using the [clone props](#clone) for example\n\n\n ### Example \n  * [Clone](https://sortablejs.github.io/Vue.Draggable/#/custom-clone)\n  * [Handle](https://sortablejs.github.io/Vue.Draggable/#/handle)\n  * [Transition](https://sortablejs.github.io/Vue.Draggable/#/transition-example-2)\n  * [Nested](https://sortablejs.github.io/Vue.Draggable/#/nested-example)\n  * [Table](https://sortablejs.github.io/Vue.Draggable/#/table-example)\n \n ### Full demo example\n\n[draggable-example](https://github.com/David-Desmaisons/draggable-example)\n\n## For Vue.js 1.0\n\n[See here](documentation/Vue.draggable.for.ReadME.md)\n\n```\n"
  },
  {
    "path": "babel.config.js",
    "content": "module.exports = {\n  presets: [[\"@vue/app\", {\n    useBuiltIns: \"usage\"\n  }]\n  ]\n};\n"
  },
  {
    "path": "dist/demo.html",
    "content": "<meta charset=\"utf-8\">\n<title>vuedraggable demo</title>\n<script src=\"./vuedraggable.umd.js\"></script>\n\n<link rel=\"stylesheet\" href=\"./vuedraggable.css\">\n\n\n<script>\nconsole.log(vuedraggable)\n</script>\n"
  },
  {
    "path": "dist/vuedraggable.common.js",
    "content": "module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"01f9\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(\"2d00\");\nvar $export = __webpack_require__(\"5ca1\");\nvar redefine = __webpack_require__(\"2aba\");\nvar hide = __webpack_require__(\"32e9\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar $iterCreate = __webpack_require__(\"41a0\");\nvar setToStringTag = __webpack_require__(\"7f20\");\nvar getPrototypeOf = __webpack_require__(\"38fd\");\nvar ITERATOR = __webpack_require__(\"2b4c\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/***/ }),\n\n/***/ \"02f4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"4588\");\nvar defined = __webpack_require__(\"be13\");\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/***/ }),\n\n/***/ \"0390\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar at = __webpack_require__(\"02f4\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ \"0bfb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(\"cb7c\");\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n\n/***/ \"0d58\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(\"ce10\");\nvar enumBugKeys = __webpack_require__(\"e11e\");\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ \"1495\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(\"86cc\");\nvar anObject = __webpack_require__(\"cb7c\");\nvar getKeys = __webpack_require__(\"0d58\");\n\nmodule.exports = __webpack_require__(\"9e1e\") ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/***/ }),\n\n/***/ \"214f\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n__webpack_require__(\"b0c5\");\nvar redefine = __webpack_require__(\"2aba\");\nvar hide = __webpack_require__(\"32e9\");\nvar fails = __webpack_require__(\"79e5\");\nvar defined = __webpack_require__(\"be13\");\nvar wks = __webpack_require__(\"2b4c\");\nvar regexpExec = __webpack_require__(\"520a\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n\n\n/***/ }),\n\n/***/ \"230e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"d3f4\");\nvar document = __webpack_require__(\"7726\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ \"23c6\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(\"2d95\");\nvar TAG = __webpack_require__(\"2b4c\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n\n/***/ \"2621\":\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ \"2aba\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"7726\");\nvar hide = __webpack_require__(\"32e9\");\nvar has = __webpack_require__(\"69a8\");\nvar SRC = __webpack_require__(\"ca5a\")('src');\nvar $toString = __webpack_require__(\"fa5b\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(\"8378\").inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n/***/ }),\n\n/***/ \"2aeb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(\"cb7c\");\nvar dPs = __webpack_require__(\"1495\");\nvar enumBugKeys = __webpack_require__(\"e11e\");\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(\"230e\")('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(\"fab2\").appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ \"2b4c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(\"5537\")('wks');\nvar uid = __webpack_require__(\"ca5a\");\nvar Symbol = __webpack_require__(\"7726\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n\n/***/ \"2d00\":\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ \"2d95\":\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ \"2fdb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(\"5ca1\");\nvar context = __webpack_require__(\"d2c8\");\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(\"5147\")(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ \"32e9\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(\"86cc\");\nvar createDesc = __webpack_require__(\"4630\");\nmodule.exports = __webpack_require__(\"9e1e\") ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n\n/***/ \"38fd\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(\"69a8\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n\n/***/ \"41a0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(\"2aeb\");\nvar descriptor = __webpack_require__(\"4630\");\nvar setToStringTag = __webpack_require__(\"7f20\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(\"32e9\")(IteratorPrototype, __webpack_require__(\"2b4c\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n\n/***/ \"456d\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(\"4bf8\");\nvar $keys = __webpack_require__(\"0d58\");\n\n__webpack_require__(\"5eda\")('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n/***/ }),\n\n/***/ \"4588\":\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n\n/***/ \"4630\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ \"4bf8\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(\"be13\");\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n/***/ }),\n\n/***/ \"5147\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar MATCH = __webpack_require__(\"2b4c\")('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n\n\n/***/ }),\n\n/***/ \"520a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar regexpFlags = __webpack_require__(\"0bfb\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ \"52a7\":\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ \"5537\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar core = __webpack_require__(\"8378\");\nvar global = __webpack_require__(\"7726\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(\"2d00\") ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ \"5ca1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"7726\");\nvar core = __webpack_require__(\"8378\");\nvar hide = __webpack_require__(\"32e9\");\nvar redefine = __webpack_require__(\"2aba\");\nvar ctx = __webpack_require__(\"9b43\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n\n/***/ \"5eda\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(\"5ca1\");\nvar core = __webpack_require__(\"8378\");\nvar fails = __webpack_require__(\"79e5\");\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n/***/ }),\n\n/***/ \"5f1b\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar classof = __webpack_require__(\"23c6\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n\n\n/***/ }),\n\n/***/ \"613b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(\"5537\")('keys');\nvar uid = __webpack_require__(\"ca5a\");\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ \"626a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(\"2d95\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n\n/***/ \"6762\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(\"5ca1\");\nvar $includes = __webpack_require__(\"c366\")(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n__webpack_require__(\"9c6c\")('includes');\n\n\n/***/ }),\n\n/***/ \"6821\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(\"626a\");\nvar defined = __webpack_require__(\"be13\");\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n/***/ }),\n\n/***/ \"69a8\":\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ \"6a99\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(\"d3f4\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ \"7333\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(\"0d58\");\nvar gOPS = __webpack_require__(\"2621\");\nvar pIE = __webpack_require__(\"52a7\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar IObject = __webpack_require__(\"626a\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(\"79e5\")(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/***/ }),\n\n/***/ \"7726\":\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n\n/***/ \"77f1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"4588\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n\n/***/ \"79e5\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ \"7f20\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(\"86cc\").f;\nvar has = __webpack_require__(\"69a8\");\nvar TAG = __webpack_require__(\"2b4c\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n\n/***/ \"8378\":\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n\n/***/ \"84f2\":\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"86cc\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"cb7c\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"c69a\");\nvar toPrimitive = __webpack_require__(\"6a99\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(\"9e1e\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ \"9b43\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(\"d8e8\");\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ \"9c6c\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(\"2b4c\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(\"32e9\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ \"9def\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(\"4588\");\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ \"9e1e\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(\"79e5\")(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"a352\":\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"sortablejs\");\n\n/***/ }),\n\n/***/ \"a481\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar anObject = __webpack_require__(\"cb7c\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar toLength = __webpack_require__(\"9def\");\nvar toInteger = __webpack_require__(\"4588\");\nvar advanceStringIndex = __webpack_require__(\"0390\");\nvar regExpExec = __webpack_require__(\"5f1b\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(\"214f\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n\n\n/***/ }),\n\n/***/ \"aae3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(\"d3f4\");\nvar cof = __webpack_require__(\"2d95\");\nvar MATCH = __webpack_require__(\"2b4c\")('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ \"ac6a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $iterators = __webpack_require__(\"cadf\");\nvar getKeys = __webpack_require__(\"0d58\");\nvar redefine = __webpack_require__(\"2aba\");\nvar global = __webpack_require__(\"7726\");\nvar hide = __webpack_require__(\"32e9\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar wks = __webpack_require__(\"2b4c\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n\n\n/***/ }),\n\n/***/ \"b0c5\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpExec = __webpack_require__(\"520a\");\n__webpack_require__(\"5ca1\")({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n\n\n/***/ }),\n\n/***/ \"be13\":\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"c366\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(\"6821\");\nvar toLength = __webpack_require__(\"9def\");\nvar toAbsoluteIndex = __webpack_require__(\"77f1\");\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/***/ }),\n\n/***/ \"c649\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return insertNodeAt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return camelize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return console; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return removeNode; });\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"a481\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction getConsole() {\n  if (typeof window !== \"undefined\") {\n    return window.console;\n  }\n\n  return global.console;\n}\n\nvar console = getConsole();\n\nfunction cached(fn) {\n  var cache = Object.create(null);\n  return function cachedFn(str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\n\nvar regex = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(regex, function (_, c) {\n    return c ? c.toUpperCase() : \"\";\n  });\n});\n\nfunction removeNode(node) {\n  if (node.parentElement !== null) {\n    node.parentElement.removeChild(node);\n  }\n}\n\nfunction insertNodeAt(fatherNode, node, position) {\n  var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n  fatherNode.insertBefore(node, refNode);\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(\"c8ba\")))\n\n/***/ }),\n\n/***/ \"c69a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(\"9e1e\") && !__webpack_require__(\"79e5\")(function () {\n  return Object.defineProperty(__webpack_require__(\"230e\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"c8ba\":\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"ca5a\":\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n\n/***/ \"cadf\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(\"9c6c\");\nvar step = __webpack_require__(\"d53b\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar toIObject = __webpack_require__(\"6821\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(\"01f9\")(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ \"cb7c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"d3f4\");\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"ce10\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(\"69a8\");\nvar toIObject = __webpack_require__(\"6821\");\nvar arrayIndexOf = __webpack_require__(\"c366\")(false);\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ \"d2c8\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(\"aae3\");\nvar defined = __webpack_require__(\"be13\");\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n\n\n/***/ }),\n\n/***/ \"d3f4\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ \"d53b\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n/***/ }),\n\n/***/ \"d8e8\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"e11e\":\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n\n/***/ \"f559\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(\"5ca1\");\nvar toLength = __webpack_require__(\"9def\");\nvar context = __webpack_require__(\"d2c8\");\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(\"5147\")(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n\n\n/***/ }),\n\n/***/ \"f6fd\":\n/***/ (function(module, exports) {\n\n// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n\n\n/***/ }),\n\n/***/ \"f751\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(\"5ca1\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(\"7333\") });\n\n\n/***/ }),\n\n/***/ \"fa5b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(\"5537\")('native-function-to-string', Function.toString);\n\n\n/***/ }),\n\n/***/ \"fab2\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(\"7726\").document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n\n/***/ \"fb15\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (true) {\n    __webpack_require__(\"f6fd\")\n  }\n\n  var setPublicPath_i\n  if ((setPublicPath_i = window.document.currentScript) && (setPublicPath_i = setPublicPath_i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_require__.p = setPublicPath_i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.assign.js\nvar es6_object_assign = __webpack_require__(\"f751\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.starts-with.js\nvar es6_string_starts_with = __webpack_require__(\"f559\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js\nvar web_dom_iterable = __webpack_require__(\"ac6a\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js\nvar es6_array_iterator = __webpack_require__(\"cadf\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js\nvar es6_object_keys = __webpack_require__(\"456d\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.array.includes.js\nvar es7_array_includes = __webpack_require__(\"6762\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.includes.js\nvar es6_string_includes = __webpack_require__(\"2fdb\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n// EXTERNAL MODULE: external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_ = __webpack_require__(\"a352\");\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_);\n\n// EXTERNAL MODULE: ./src/util/helper.js\nvar helper = __webpack_require__(\"c649\");\n\n// CONCATENATED MODULE: ./src/vuedraggable.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction buildAttribute(object, propName, value) {\n  if (value === undefined) {\n    return object;\n  }\n\n  object = object || {};\n  object[propName] = value;\n  return object;\n}\n\nfunction computeVmIndex(vnodes, element) {\n  return vnodes.map(function (elt) {\n    return elt.elm;\n  }).indexOf(element);\n}\n\nfunction _computeIndexes(slots, children, isTransition, footerOffset) {\n  if (!slots) {\n    return [];\n  }\n\n  var elmFromNodes = slots.map(function (elt) {\n    return elt.elm;\n  });\n  var footerIndex = children.length - footerOffset;\n\n  var rawIndexes = _toConsumableArray(children).map(function (elt, idx) {\n    return idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt);\n  });\n\n  return isTransition ? rawIndexes.filter(function (ind) {\n    return ind !== -1;\n  }) : rawIndexes;\n}\n\nfunction emit(evtName, evtData) {\n  var _this = this;\n\n  this.$nextTick(function () {\n    return _this.$emit(evtName.toLowerCase(), evtData);\n  });\n}\n\nfunction delegateAndEmit(evtName) {\n  var _this2 = this;\n\n  return function (evtData) {\n    if (_this2.realList !== null) {\n      _this2[\"onDrag\" + evtName](evtData);\n    }\n\n    emit.call(_this2, evtName, evtData);\n  };\n}\n\nfunction isTransitionName(name) {\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\n}\n\nfunction vuedraggable_isTransition(slots) {\n  if (!slots || slots.length !== 1) {\n    return false;\n  }\n\n  var _slots = _slicedToArray(slots, 1),\n      componentOptions = _slots[0].componentOptions;\n\n  if (!componentOptions) {\n    return false;\n  }\n\n  return isTransitionName(componentOptions.tag);\n}\n\nfunction getSlot(slot, scopedSlot, key) {\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\n}\n\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\n  var headerOffset = 0;\n  var footerOffset = 0;\n  var header = getSlot(slot, scopedSlot, \"header\");\n\n  if (header) {\n    headerOffset = header.length;\n    children = children ? [].concat(_toConsumableArray(header), _toConsumableArray(children)) : _toConsumableArray(header);\n  }\n\n  var footer = getSlot(slot, scopedSlot, \"footer\");\n\n  if (footer) {\n    footerOffset = footer.length;\n    children = children ? [].concat(_toConsumableArray(children), _toConsumableArray(footer)) : _toConsumableArray(footer);\n  }\n\n  return {\n    children: children,\n    headerOffset: headerOffset,\n    footerOffset: footerOffset\n  };\n}\n\nfunction getComponentAttributes($attrs, componentData) {\n  var attributes = null;\n\n  var update = function update(name, value) {\n    attributes = buildAttribute(attributes, name, value);\n  };\n\n  var attrs = Object.keys($attrs).filter(function (key) {\n    return key === \"id\" || key.startsWith(\"data-\");\n  }).reduce(function (res, key) {\n    res[key] = $attrs[key];\n    return res;\n  }, {});\n  update(\"attrs\", attrs);\n\n  if (!componentData) {\n    return attributes;\n  }\n\n  var on = componentData.on,\n      props = componentData.props,\n      componentDataAttrs = componentData.attrs;\n  update(\"on\", on);\n  update(\"props\", props);\n  Object.assign(attributes.attrs, componentDataAttrs);\n  return attributes;\n}\n\nvar eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\nvar eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\nvar readonlyProperties = [\"Move\"].concat(eventsListened, eventsToEmit).map(function (evt) {\n  return \"on\" + evt;\n});\nvar draggingElement = null;\nvar props = {\n  options: Object,\n  list: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  value: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  noTransitionOnDrag: {\n    type: Boolean,\n    default: false\n  },\n  clone: {\n    type: Function,\n    default: function _default(original) {\n      return original;\n    }\n  },\n  element: {\n    type: String,\n    default: \"div\"\n  },\n  tag: {\n    type: String,\n    default: null\n  },\n  move: {\n    type: Function,\n    default: null\n  },\n  componentData: {\n    type: Object,\n    required: false,\n    default: null\n  }\n};\nvar draggableComponent = {\n  name: \"draggable\",\n  inheritAttrs: false,\n  props: props,\n  data: function data() {\n    return {\n      transitionMode: false,\n      noneFunctionalComponentMode: false\n    };\n  },\n  render: function render(h) {\n    var slots = this.$slots.default;\n    this.transitionMode = vuedraggable_isTransition(slots);\n\n    var _computeChildrenAndOf = computeChildrenAndOffsets(slots, this.$slots, this.$scopedSlots),\n        children = _computeChildrenAndOf.children,\n        headerOffset = _computeChildrenAndOf.headerOffset,\n        footerOffset = _computeChildrenAndOf.footerOffset;\n\n    this.headerOffset = headerOffset;\n    this.footerOffset = footerOffset;\n    var attributes = getComponentAttributes(this.$attrs, this.componentData);\n    return h(this.getTag(), attributes, children);\n  },\n  created: function created() {\n    if (this.list !== null && this.value !== null) {\n      helper[\"b\" /* console */].error(\"Value and list props are mutually exclusive! Please set one or another.\");\n    }\n\n    if (this.element !== \"div\") {\n      helper[\"b\" /* console */].warn(\"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\");\n    }\n\n    if (this.options !== undefined) {\n      helper[\"b\" /* console */].warn(\"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\");\n    }\n  },\n  mounted: function mounted() {\n    var _this3 = this;\n\n    this.noneFunctionalComponentMode = this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() && !this.getIsFunctional();\n\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\n      throw new Error(\"Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: \".concat(this.getTag()));\n    }\n\n    var optionsAdded = {};\n    eventsListened.forEach(function (elt) {\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(_this3, elt);\n    });\n    eventsToEmit.forEach(function (elt) {\n      optionsAdded[\"on\" + elt] = emit.bind(_this3, elt);\n    });\n    var attributes = Object.keys(this.$attrs).reduce(function (res, key) {\n      res[Object(helper[\"a\" /* camelize */])(key)] = _this3.$attrs[key];\n      return res;\n    }, {});\n    var options = Object.assign({}, this.options, attributes, optionsAdded, {\n      onMove: function onMove(evt, originalEvent) {\n        return _this3.onDragMove(evt, originalEvent);\n      }\n    });\n    !(\"draggable\" in options) && (options.draggable = \">*\");\n    this._sortable = new external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default.a(this.rootContainer, options);\n    this.computeIndexes();\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this._sortable !== undefined) this._sortable.destroy();\n  },\n  computed: {\n    rootContainer: function rootContainer() {\n      return this.transitionMode ? this.$el.children[0] : this.$el;\n    },\n    realList: function realList() {\n      return this.list ? this.list : this.value;\n    }\n  },\n  watch: {\n    options: {\n      handler: function handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n    $attrs: {\n      handler: function handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n    realList: function realList() {\n      this.computeIndexes();\n    }\n  },\n  methods: {\n    getIsFunctional: function getIsFunctional() {\n      var fnOptions = this._vnode.fnOptions;\n      return fnOptions && fnOptions.functional;\n    },\n    getTag: function getTag() {\n      return this.tag || this.element;\n    },\n    updateOptions: function updateOptions(newOptionValue) {\n      for (var property in newOptionValue) {\n        var value = Object(helper[\"a\" /* camelize */])(property);\n\n        if (readonlyProperties.indexOf(value) === -1) {\n          this._sortable.option(value, newOptionValue[property]);\n        }\n      }\n    },\n    getChildrenNodes: function getChildrenNodes() {\n      if (this.noneFunctionalComponentMode) {\n        return this.$children[0].$slots.default;\n      }\n\n      var rawNodes = this.$slots.default;\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n    },\n    computeIndexes: function computeIndexes() {\n      var _this4 = this;\n\n      this.$nextTick(function () {\n        _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode, _this4.footerOffset);\n      });\n    },\n    getUnderlyingVm: function getUnderlyingVm(htmlElt) {\n      var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n\n      if (index === -1) {\n        //Edge case during move callback: related element might be\n        //an element different from collection\n        return null;\n      }\n\n      var element = this.realList[index];\n      return {\n        index: index,\n        element: element\n      };\n    },\n    getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\n      var vue = _ref.__vue__;\n\n      if (!vue || !vue.$options || !isTransitionName(vue.$options._componentTag)) {\n        if (!(\"realList\" in vue) && vue.$children.length === 1 && \"realList\" in vue.$children[0]) return vue.$children[0];\n        return vue;\n      }\n\n      return vue.$parent;\n    },\n    emitChanges: function emitChanges(evt) {\n      var _this5 = this;\n\n      this.$nextTick(function () {\n        _this5.$emit(\"change\", evt);\n      });\n    },\n    alterList: function alterList(onList) {\n      if (this.list) {\n        onList(this.list);\n        return;\n      }\n\n      var newList = _toConsumableArray(this.value);\n\n      onList(newList);\n      this.$emit(\"input\", newList);\n    },\n    spliceList: function spliceList() {\n      var _arguments = arguments;\n\n      var spliceList = function spliceList(list) {\n        return list.splice.apply(list, _toConsumableArray(_arguments));\n      };\n\n      this.alterList(spliceList);\n    },\n    updatePosition: function updatePosition(oldIndex, newIndex) {\n      var updatePosition = function updatePosition(list) {\n        return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n      };\n\n      this.alterList(updatePosition);\n    },\n    getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\n      var to = _ref2.to,\n          related = _ref2.related;\n      var component = this.getUnderlyingPotencialDraggableComponent(to);\n\n      if (!component) {\n        return {\n          component: component\n        };\n      }\n\n      var list = component.realList;\n      var context = {\n        list: list,\n        component: component\n      };\n\n      if (to !== related && list && component.getUnderlyingVm) {\n        var destination = component.getUnderlyingVm(related);\n\n        if (destination) {\n          return Object.assign(destination, context);\n        }\n      }\n\n      return context;\n    },\n    getVmIndex: function getVmIndex(domIndex) {\n      var indexes = this.visibleIndexes;\n      var numberIndexes = indexes.length;\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n    },\n    getComponent: function getComponent() {\n      return this.$slots.default[0].componentInstance;\n    },\n    resetTransitionData: function resetTransitionData(index) {\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\n        return;\n      }\n\n      var nodes = this.getChildrenNodes();\n      nodes[index].data = null;\n      var transitionContainer = this.getComponent();\n      transitionContainer.children = [];\n      transitionContainer.kept = undefined;\n    },\n    onDragStart: function onDragStart(evt) {\n      this.context = this.getUnderlyingVm(evt.item);\n      evt.item._underlying_vm_ = this.clone(this.context.element);\n      draggingElement = evt.item;\n    },\n    onDragAdd: function onDragAdd(evt) {\n      var element = evt.item._underlying_vm_;\n\n      if (element === undefined) {\n        return;\n      }\n\n      Object(helper[\"d\" /* removeNode */])(evt.item);\n      var newIndex = this.getVmIndex(evt.newIndex);\n      this.spliceList(newIndex, 0, element);\n      this.computeIndexes();\n      var added = {\n        element: element,\n        newIndex: newIndex\n      };\n      this.emitChanges({\n        added: added\n      });\n    },\n    onDragRemove: function onDragRemove(evt) {\n      Object(helper[\"c\" /* insertNodeAt */])(this.rootContainer, evt.item, evt.oldIndex);\n\n      if (evt.pullMode === \"clone\") {\n        Object(helper[\"d\" /* removeNode */])(evt.clone);\n        return;\n      }\n\n      var oldIndex = this.context.index;\n      this.spliceList(oldIndex, 1);\n      var removed = {\n        element: this.context.element,\n        oldIndex: oldIndex\n      };\n      this.resetTransitionData(oldIndex);\n      this.emitChanges({\n        removed: removed\n      });\n    },\n    onDragUpdate: function onDragUpdate(evt) {\n      Object(helper[\"d\" /* removeNode */])(evt.item);\n      Object(helper[\"c\" /* insertNodeAt */])(evt.from, evt.item, evt.oldIndex);\n      var oldIndex = this.context.index;\n      var newIndex = this.getVmIndex(evt.newIndex);\n      this.updatePosition(oldIndex, newIndex);\n      var moved = {\n        element: this.context.element,\n        oldIndex: oldIndex,\n        newIndex: newIndex\n      };\n      this.emitChanges({\n        moved: moved\n      });\n    },\n    updateProperty: function updateProperty(evt, propertyName) {\n      evt.hasOwnProperty(propertyName) && (evt[propertyName] += this.headerOffset);\n    },\n    computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n      if (!relatedContext.element) {\n        return 0;\n      }\n\n      var domChildren = _toConsumableArray(evt.to.children).filter(function (el) {\n        return el.style[\"display\"] !== \"none\";\n      });\n\n      var currentDOMIndex = domChildren.indexOf(evt.related);\n      var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n      var draggedInList = domChildren.indexOf(draggingElement) !== -1;\n      return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n    },\n    onDragMove: function onDragMove(evt, originalEvent) {\n      var onMove = this.move;\n\n      if (!onMove || !this.realList) {\n        return true;\n      }\n\n      var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n      var draggedContext = this.context;\n      var futureIndex = this.computeFutureIndex(relatedContext, evt);\n      Object.assign(draggedContext, {\n        futureIndex: futureIndex\n      });\n      var sendEvt = Object.assign({}, evt, {\n        relatedContext: relatedContext,\n        draggedContext: draggedContext\n      });\n      return onMove(sendEvt, originalEvent);\n    },\n    onDragEnd: function onDragEnd() {\n      this.computeIndexes();\n      draggingElement = null;\n    }\n  }\n};\n\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\n  window.Vue.component(\"draggable\", draggableComponent);\n}\n\n/* harmony default export */ var vuedraggable = (draggableComponent);\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = __webpack_exports__[\"default\"] = (vuedraggable);\n\n\n\n/***/ })\n\n/******/ })[\"default\"];\n//# sourceMappingURL=vuedraggable.common.js.map"
  },
  {
    "path": "dist/vuedraggable.umd.js",
    "content": "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"sortablejs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"sortablejs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vuedraggable\"] = factory(require(\"sortablejs\"));\n\telse\n\t\troot[\"vuedraggable\"] = factory(root[\"Sortable\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE_a352__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"01f9\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(\"2d00\");\nvar $export = __webpack_require__(\"5ca1\");\nvar redefine = __webpack_require__(\"2aba\");\nvar hide = __webpack_require__(\"32e9\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar $iterCreate = __webpack_require__(\"41a0\");\nvar setToStringTag = __webpack_require__(\"7f20\");\nvar getPrototypeOf = __webpack_require__(\"38fd\");\nvar ITERATOR = __webpack_require__(\"2b4c\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/***/ }),\n\n/***/ \"02f4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"4588\");\nvar defined = __webpack_require__(\"be13\");\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/***/ }),\n\n/***/ \"0390\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar at = __webpack_require__(\"02f4\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ \"0bfb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(\"cb7c\");\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n\n/***/ \"0d58\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(\"ce10\");\nvar enumBugKeys = __webpack_require__(\"e11e\");\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ \"1495\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(\"86cc\");\nvar anObject = __webpack_require__(\"cb7c\");\nvar getKeys = __webpack_require__(\"0d58\");\n\nmodule.exports = __webpack_require__(\"9e1e\") ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/***/ }),\n\n/***/ \"214f\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n__webpack_require__(\"b0c5\");\nvar redefine = __webpack_require__(\"2aba\");\nvar hide = __webpack_require__(\"32e9\");\nvar fails = __webpack_require__(\"79e5\");\nvar defined = __webpack_require__(\"be13\");\nvar wks = __webpack_require__(\"2b4c\");\nvar regexpExec = __webpack_require__(\"520a\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n\n\n/***/ }),\n\n/***/ \"230e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"d3f4\");\nvar document = __webpack_require__(\"7726\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ \"23c6\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(\"2d95\");\nvar TAG = __webpack_require__(\"2b4c\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n\n/***/ \"2621\":\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ \"2aba\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"7726\");\nvar hide = __webpack_require__(\"32e9\");\nvar has = __webpack_require__(\"69a8\");\nvar SRC = __webpack_require__(\"ca5a\")('src');\nvar $toString = __webpack_require__(\"fa5b\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(\"8378\").inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n/***/ }),\n\n/***/ \"2aeb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(\"cb7c\");\nvar dPs = __webpack_require__(\"1495\");\nvar enumBugKeys = __webpack_require__(\"e11e\");\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(\"230e\")('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(\"fab2\").appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ \"2b4c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(\"5537\")('wks');\nvar uid = __webpack_require__(\"ca5a\");\nvar Symbol = __webpack_require__(\"7726\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n\n/***/ \"2d00\":\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ \"2d95\":\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ \"2fdb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(\"5ca1\");\nvar context = __webpack_require__(\"d2c8\");\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(\"5147\")(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ \"32e9\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(\"86cc\");\nvar createDesc = __webpack_require__(\"4630\");\nmodule.exports = __webpack_require__(\"9e1e\") ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n\n/***/ \"38fd\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(\"69a8\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n\n/***/ \"41a0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(\"2aeb\");\nvar descriptor = __webpack_require__(\"4630\");\nvar setToStringTag = __webpack_require__(\"7f20\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(\"32e9\")(IteratorPrototype, __webpack_require__(\"2b4c\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n\n/***/ \"456d\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(\"4bf8\");\nvar $keys = __webpack_require__(\"0d58\");\n\n__webpack_require__(\"5eda\")('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n/***/ }),\n\n/***/ \"4588\":\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n\n/***/ \"4630\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ \"4bf8\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(\"be13\");\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n/***/ }),\n\n/***/ \"5147\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar MATCH = __webpack_require__(\"2b4c\")('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n\n\n/***/ }),\n\n/***/ \"520a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar regexpFlags = __webpack_require__(\"0bfb\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ \"52a7\":\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ \"5537\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar core = __webpack_require__(\"8378\");\nvar global = __webpack_require__(\"7726\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(\"2d00\") ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ \"5ca1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"7726\");\nvar core = __webpack_require__(\"8378\");\nvar hide = __webpack_require__(\"32e9\");\nvar redefine = __webpack_require__(\"2aba\");\nvar ctx = __webpack_require__(\"9b43\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n\n/***/ \"5eda\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(\"5ca1\");\nvar core = __webpack_require__(\"8378\");\nvar fails = __webpack_require__(\"79e5\");\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n/***/ }),\n\n/***/ \"5f1b\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar classof = __webpack_require__(\"23c6\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n\n\n/***/ }),\n\n/***/ \"613b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(\"5537\")('keys');\nvar uid = __webpack_require__(\"ca5a\");\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ \"626a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(\"2d95\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n\n/***/ \"6762\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(\"5ca1\");\nvar $includes = __webpack_require__(\"c366\")(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n__webpack_require__(\"9c6c\")('includes');\n\n\n/***/ }),\n\n/***/ \"6821\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(\"626a\");\nvar defined = __webpack_require__(\"be13\");\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n/***/ }),\n\n/***/ \"69a8\":\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ \"6a99\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(\"d3f4\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ \"7333\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(\"0d58\");\nvar gOPS = __webpack_require__(\"2621\");\nvar pIE = __webpack_require__(\"52a7\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar IObject = __webpack_require__(\"626a\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(\"79e5\")(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/***/ }),\n\n/***/ \"7726\":\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n\n/***/ \"77f1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"4588\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n\n/***/ \"79e5\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ \"7f20\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(\"86cc\").f;\nvar has = __webpack_require__(\"69a8\");\nvar TAG = __webpack_require__(\"2b4c\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n\n/***/ \"8378\":\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n\n/***/ \"84f2\":\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"86cc\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"cb7c\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"c69a\");\nvar toPrimitive = __webpack_require__(\"6a99\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(\"9e1e\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ \"9b43\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(\"d8e8\");\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ \"9c6c\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(\"2b4c\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(\"32e9\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ \"9def\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(\"4588\");\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ \"9e1e\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(\"79e5\")(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"a352\":\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_a352__;\n\n/***/ }),\n\n/***/ \"a481\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar anObject = __webpack_require__(\"cb7c\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar toLength = __webpack_require__(\"9def\");\nvar toInteger = __webpack_require__(\"4588\");\nvar advanceStringIndex = __webpack_require__(\"0390\");\nvar regExpExec = __webpack_require__(\"5f1b\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(\"214f\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n\n\n/***/ }),\n\n/***/ \"aae3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(\"d3f4\");\nvar cof = __webpack_require__(\"2d95\");\nvar MATCH = __webpack_require__(\"2b4c\")('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ \"ac6a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $iterators = __webpack_require__(\"cadf\");\nvar getKeys = __webpack_require__(\"0d58\");\nvar redefine = __webpack_require__(\"2aba\");\nvar global = __webpack_require__(\"7726\");\nvar hide = __webpack_require__(\"32e9\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar wks = __webpack_require__(\"2b4c\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n\n\n/***/ }),\n\n/***/ \"b0c5\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpExec = __webpack_require__(\"520a\");\n__webpack_require__(\"5ca1\")({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n\n\n/***/ }),\n\n/***/ \"be13\":\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"c366\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(\"6821\");\nvar toLength = __webpack_require__(\"9def\");\nvar toAbsoluteIndex = __webpack_require__(\"77f1\");\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/***/ }),\n\n/***/ \"c649\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return insertNodeAt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return camelize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return console; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return removeNode; });\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"a481\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction getConsole() {\n  if (typeof window !== \"undefined\") {\n    return window.console;\n  }\n\n  return global.console;\n}\n\nvar console = getConsole();\n\nfunction cached(fn) {\n  var cache = Object.create(null);\n  return function cachedFn(str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\n\nvar regex = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(regex, function (_, c) {\n    return c ? c.toUpperCase() : \"\";\n  });\n});\n\nfunction removeNode(node) {\n  if (node.parentElement !== null) {\n    node.parentElement.removeChild(node);\n  }\n}\n\nfunction insertNodeAt(fatherNode, node, position) {\n  var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n  fatherNode.insertBefore(node, refNode);\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(\"c8ba\")))\n\n/***/ }),\n\n/***/ \"c69a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(\"9e1e\") && !__webpack_require__(\"79e5\")(function () {\n  return Object.defineProperty(__webpack_require__(\"230e\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"c8ba\":\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"ca5a\":\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n\n/***/ \"cadf\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(\"9c6c\");\nvar step = __webpack_require__(\"d53b\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar toIObject = __webpack_require__(\"6821\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(\"01f9\")(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ \"cb7c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"d3f4\");\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"ce10\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(\"69a8\");\nvar toIObject = __webpack_require__(\"6821\");\nvar arrayIndexOf = __webpack_require__(\"c366\")(false);\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ \"d2c8\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(\"aae3\");\nvar defined = __webpack_require__(\"be13\");\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n\n\n/***/ }),\n\n/***/ \"d3f4\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ \"d53b\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n/***/ }),\n\n/***/ \"d8e8\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"e11e\":\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n\n/***/ \"f559\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(\"5ca1\");\nvar toLength = __webpack_require__(\"9def\");\nvar context = __webpack_require__(\"d2c8\");\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(\"5147\")(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n\n\n/***/ }),\n\n/***/ \"f6fd\":\n/***/ (function(module, exports) {\n\n// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n\n\n/***/ }),\n\n/***/ \"f751\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(\"5ca1\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(\"7333\") });\n\n\n/***/ }),\n\n/***/ \"fa5b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(\"5537\")('native-function-to-string', Function.toString);\n\n\n/***/ }),\n\n/***/ \"fab2\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(\"7726\").document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n\n/***/ \"fb15\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (true) {\n    __webpack_require__(\"f6fd\")\n  }\n\n  var setPublicPath_i\n  if ((setPublicPath_i = window.document.currentScript) && (setPublicPath_i = setPublicPath_i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_require__.p = setPublicPath_i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.assign.js\nvar es6_object_assign = __webpack_require__(\"f751\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.starts-with.js\nvar es6_string_starts_with = __webpack_require__(\"f559\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js\nvar web_dom_iterable = __webpack_require__(\"ac6a\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js\nvar es6_array_iterator = __webpack_require__(\"cadf\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js\nvar es6_object_keys = __webpack_require__(\"456d\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.array.includes.js\nvar es7_array_includes = __webpack_require__(\"6762\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.includes.js\nvar es6_string_includes = __webpack_require__(\"2fdb\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n// EXTERNAL MODULE: external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_ = __webpack_require__(\"a352\");\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_);\n\n// EXTERNAL MODULE: ./src/util/helper.js\nvar helper = __webpack_require__(\"c649\");\n\n// CONCATENATED MODULE: ./src/vuedraggable.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction buildAttribute(object, propName, value) {\n  if (value === undefined) {\n    return object;\n  }\n\n  object = object || {};\n  object[propName] = value;\n  return object;\n}\n\nfunction computeVmIndex(vnodes, element) {\n  return vnodes.map(function (elt) {\n    return elt.elm;\n  }).indexOf(element);\n}\n\nfunction _computeIndexes(slots, children, isTransition, footerOffset) {\n  if (!slots) {\n    return [];\n  }\n\n  var elmFromNodes = slots.map(function (elt) {\n    return elt.elm;\n  });\n  var footerIndex = children.length - footerOffset;\n\n  var rawIndexes = _toConsumableArray(children).map(function (elt, idx) {\n    return idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt);\n  });\n\n  return isTransition ? rawIndexes.filter(function (ind) {\n    return ind !== -1;\n  }) : rawIndexes;\n}\n\nfunction emit(evtName, evtData) {\n  var _this = this;\n\n  this.$nextTick(function () {\n    return _this.$emit(evtName.toLowerCase(), evtData);\n  });\n}\n\nfunction delegateAndEmit(evtName) {\n  var _this2 = this;\n\n  return function (evtData) {\n    if (_this2.realList !== null) {\n      _this2[\"onDrag\" + evtName](evtData);\n    }\n\n    emit.call(_this2, evtName, evtData);\n  };\n}\n\nfunction isTransitionName(name) {\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\n}\n\nfunction vuedraggable_isTransition(slots) {\n  if (!slots || slots.length !== 1) {\n    return false;\n  }\n\n  var _slots = _slicedToArray(slots, 1),\n      componentOptions = _slots[0].componentOptions;\n\n  if (!componentOptions) {\n    return false;\n  }\n\n  return isTransitionName(componentOptions.tag);\n}\n\nfunction getSlot(slot, scopedSlot, key) {\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\n}\n\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\n  var headerOffset = 0;\n  var footerOffset = 0;\n  var header = getSlot(slot, scopedSlot, \"header\");\n\n  if (header) {\n    headerOffset = header.length;\n    children = children ? [].concat(_toConsumableArray(header), _toConsumableArray(children)) : _toConsumableArray(header);\n  }\n\n  var footer = getSlot(slot, scopedSlot, \"footer\");\n\n  if (footer) {\n    footerOffset = footer.length;\n    children = children ? [].concat(_toConsumableArray(children), _toConsumableArray(footer)) : _toConsumableArray(footer);\n  }\n\n  return {\n    children: children,\n    headerOffset: headerOffset,\n    footerOffset: footerOffset\n  };\n}\n\nfunction getComponentAttributes($attrs, componentData) {\n  var attributes = null;\n\n  var update = function update(name, value) {\n    attributes = buildAttribute(attributes, name, value);\n  };\n\n  var attrs = Object.keys($attrs).filter(function (key) {\n    return key === \"id\" || key.startsWith(\"data-\");\n  }).reduce(function (res, key) {\n    res[key] = $attrs[key];\n    return res;\n  }, {});\n  update(\"attrs\", attrs);\n\n  if (!componentData) {\n    return attributes;\n  }\n\n  var on = componentData.on,\n      props = componentData.props,\n      componentDataAttrs = componentData.attrs;\n  update(\"on\", on);\n  update(\"props\", props);\n  Object.assign(attributes.attrs, componentDataAttrs);\n  return attributes;\n}\n\nvar eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\nvar eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\nvar readonlyProperties = [\"Move\"].concat(eventsListened, eventsToEmit).map(function (evt) {\n  return \"on\" + evt;\n});\nvar draggingElement = null;\nvar props = {\n  options: Object,\n  list: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  value: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  noTransitionOnDrag: {\n    type: Boolean,\n    default: false\n  },\n  clone: {\n    type: Function,\n    default: function _default(original) {\n      return original;\n    }\n  },\n  element: {\n    type: String,\n    default: \"div\"\n  },\n  tag: {\n    type: String,\n    default: null\n  },\n  move: {\n    type: Function,\n    default: null\n  },\n  componentData: {\n    type: Object,\n    required: false,\n    default: null\n  }\n};\nvar draggableComponent = {\n  name: \"draggable\",\n  inheritAttrs: false,\n  props: props,\n  data: function data() {\n    return {\n      transitionMode: false,\n      noneFunctionalComponentMode: false\n    };\n  },\n  render: function render(h) {\n    var slots = this.$slots.default;\n    this.transitionMode = vuedraggable_isTransition(slots);\n\n    var _computeChildrenAndOf = computeChildrenAndOffsets(slots, this.$slots, this.$scopedSlots),\n        children = _computeChildrenAndOf.children,\n        headerOffset = _computeChildrenAndOf.headerOffset,\n        footerOffset = _computeChildrenAndOf.footerOffset;\n\n    this.headerOffset = headerOffset;\n    this.footerOffset = footerOffset;\n    var attributes = getComponentAttributes(this.$attrs, this.componentData);\n    return h(this.getTag(), attributes, children);\n  },\n  created: function created() {\n    if (this.list !== null && this.value !== null) {\n      helper[\"b\" /* console */].error(\"Value and list props are mutually exclusive! Please set one or another.\");\n    }\n\n    if (this.element !== \"div\") {\n      helper[\"b\" /* console */].warn(\"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\");\n    }\n\n    if (this.options !== undefined) {\n      helper[\"b\" /* console */].warn(\"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\");\n    }\n  },\n  mounted: function mounted() {\n    var _this3 = this;\n\n    this.noneFunctionalComponentMode = this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() && !this.getIsFunctional();\n\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\n      throw new Error(\"Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: \".concat(this.getTag()));\n    }\n\n    var optionsAdded = {};\n    eventsListened.forEach(function (elt) {\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(_this3, elt);\n    });\n    eventsToEmit.forEach(function (elt) {\n      optionsAdded[\"on\" + elt] = emit.bind(_this3, elt);\n    });\n    var attributes = Object.keys(this.$attrs).reduce(function (res, key) {\n      res[Object(helper[\"a\" /* camelize */])(key)] = _this3.$attrs[key];\n      return res;\n    }, {});\n    var options = Object.assign({}, this.options, attributes, optionsAdded, {\n      onMove: function onMove(evt, originalEvent) {\n        return _this3.onDragMove(evt, originalEvent);\n      }\n    });\n    !(\"draggable\" in options) && (options.draggable = \">*\");\n    this._sortable = new external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default.a(this.rootContainer, options);\n    this.computeIndexes();\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this._sortable !== undefined) this._sortable.destroy();\n  },\n  computed: {\n    rootContainer: function rootContainer() {\n      return this.transitionMode ? this.$el.children[0] : this.$el;\n    },\n    realList: function realList() {\n      return this.list ? this.list : this.value;\n    }\n  },\n  watch: {\n    options: {\n      handler: function handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n    $attrs: {\n      handler: function handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n    realList: function realList() {\n      this.computeIndexes();\n    }\n  },\n  methods: {\n    getIsFunctional: function getIsFunctional() {\n      var fnOptions = this._vnode.fnOptions;\n      return fnOptions && fnOptions.functional;\n    },\n    getTag: function getTag() {\n      return this.tag || this.element;\n    },\n    updateOptions: function updateOptions(newOptionValue) {\n      for (var property in newOptionValue) {\n        var value = Object(helper[\"a\" /* camelize */])(property);\n\n        if (readonlyProperties.indexOf(value) === -1) {\n          this._sortable.option(value, newOptionValue[property]);\n        }\n      }\n    },\n    getChildrenNodes: function getChildrenNodes() {\n      if (this.noneFunctionalComponentMode) {\n        return this.$children[0].$slots.default;\n      }\n\n      var rawNodes = this.$slots.default;\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n    },\n    computeIndexes: function computeIndexes() {\n      var _this4 = this;\n\n      this.$nextTick(function () {\n        _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode, _this4.footerOffset);\n      });\n    },\n    getUnderlyingVm: function getUnderlyingVm(htmlElt) {\n      var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n\n      if (index === -1) {\n        //Edge case during move callback: related element might be\n        //an element different from collection\n        return null;\n      }\n\n      var element = this.realList[index];\n      return {\n        index: index,\n        element: element\n      };\n    },\n    getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\n      var vue = _ref.__vue__;\n\n      if (!vue || !vue.$options || !isTransitionName(vue.$options._componentTag)) {\n        if (!(\"realList\" in vue) && vue.$children.length === 1 && \"realList\" in vue.$children[0]) return vue.$children[0];\n        return vue;\n      }\n\n      return vue.$parent;\n    },\n    emitChanges: function emitChanges(evt) {\n      var _this5 = this;\n\n      this.$nextTick(function () {\n        _this5.$emit(\"change\", evt);\n      });\n    },\n    alterList: function alterList(onList) {\n      if (this.list) {\n        onList(this.list);\n        return;\n      }\n\n      var newList = _toConsumableArray(this.value);\n\n      onList(newList);\n      this.$emit(\"input\", newList);\n    },\n    spliceList: function spliceList() {\n      var _arguments = arguments;\n\n      var spliceList = function spliceList(list) {\n        return list.splice.apply(list, _toConsumableArray(_arguments));\n      };\n\n      this.alterList(spliceList);\n    },\n    updatePosition: function updatePosition(oldIndex, newIndex) {\n      var updatePosition = function updatePosition(list) {\n        return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n      };\n\n      this.alterList(updatePosition);\n    },\n    getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\n      var to = _ref2.to,\n          related = _ref2.related;\n      var component = this.getUnderlyingPotencialDraggableComponent(to);\n\n      if (!component) {\n        return {\n          component: component\n        };\n      }\n\n      var list = component.realList;\n      var context = {\n        list: list,\n        component: component\n      };\n\n      if (to !== related && list && component.getUnderlyingVm) {\n        var destination = component.getUnderlyingVm(related);\n\n        if (destination) {\n          return Object.assign(destination, context);\n        }\n      }\n\n      return context;\n    },\n    getVmIndex: function getVmIndex(domIndex) {\n      var indexes = this.visibleIndexes;\n      var numberIndexes = indexes.length;\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n    },\n    getComponent: function getComponent() {\n      return this.$slots.default[0].componentInstance;\n    },\n    resetTransitionData: function resetTransitionData(index) {\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\n        return;\n      }\n\n      var nodes = this.getChildrenNodes();\n      nodes[index].data = null;\n      var transitionContainer = this.getComponent();\n      transitionContainer.children = [];\n      transitionContainer.kept = undefined;\n    },\n    onDragStart: function onDragStart(evt) {\n      this.context = this.getUnderlyingVm(evt.item);\n      evt.item._underlying_vm_ = this.clone(this.context.element);\n      draggingElement = evt.item;\n    },\n    onDragAdd: function onDragAdd(evt) {\n      var element = evt.item._underlying_vm_;\n\n      if (element === undefined) {\n        return;\n      }\n\n      Object(helper[\"d\" /* removeNode */])(evt.item);\n      var newIndex = this.getVmIndex(evt.newIndex);\n      this.spliceList(newIndex, 0, element);\n      this.computeIndexes();\n      var added = {\n        element: element,\n        newIndex: newIndex\n      };\n      this.emitChanges({\n        added: added\n      });\n    },\n    onDragRemove: function onDragRemove(evt) {\n      Object(helper[\"c\" /* insertNodeAt */])(this.rootContainer, evt.item, evt.oldIndex);\n\n      if (evt.pullMode === \"clone\") {\n        Object(helper[\"d\" /* removeNode */])(evt.clone);\n        return;\n      }\n\n      var oldIndex = this.context.index;\n      this.spliceList(oldIndex, 1);\n      var removed = {\n        element: this.context.element,\n        oldIndex: oldIndex\n      };\n      this.resetTransitionData(oldIndex);\n      this.emitChanges({\n        removed: removed\n      });\n    },\n    onDragUpdate: function onDragUpdate(evt) {\n      Object(helper[\"d\" /* removeNode */])(evt.item);\n      Object(helper[\"c\" /* insertNodeAt */])(evt.from, evt.item, evt.oldIndex);\n      var oldIndex = this.context.index;\n      var newIndex = this.getVmIndex(evt.newIndex);\n      this.updatePosition(oldIndex, newIndex);\n      var moved = {\n        element: this.context.element,\n        oldIndex: oldIndex,\n        newIndex: newIndex\n      };\n      this.emitChanges({\n        moved: moved\n      });\n    },\n    updateProperty: function updateProperty(evt, propertyName) {\n      evt.hasOwnProperty(propertyName) && (evt[propertyName] += this.headerOffset);\n    },\n    computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n      if (!relatedContext.element) {\n        return 0;\n      }\n\n      var domChildren = _toConsumableArray(evt.to.children).filter(function (el) {\n        return el.style[\"display\"] !== \"none\";\n      });\n\n      var currentDOMIndex = domChildren.indexOf(evt.related);\n      var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n      var draggedInList = domChildren.indexOf(draggingElement) !== -1;\n      return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n    },\n    onDragMove: function onDragMove(evt, originalEvent) {\n      var onMove = this.move;\n\n      if (!onMove || !this.realList) {\n        return true;\n      }\n\n      var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n      var draggedContext = this.context;\n      var futureIndex = this.computeFutureIndex(relatedContext, evt);\n      Object.assign(draggedContext, {\n        futureIndex: futureIndex\n      });\n      var sendEvt = Object.assign({}, evt, {\n        relatedContext: relatedContext,\n        draggedContext: draggedContext\n      });\n      return onMove(sendEvt, originalEvent);\n    },\n    onDragEnd: function onDragEnd() {\n      this.computeIndexes();\n      draggingElement = null;\n    }\n  }\n};\n\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\n  window.Vue.component(\"draggable\", draggableComponent);\n}\n\n/* harmony default export */ var vuedraggable = (draggableComponent);\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = __webpack_exports__[\"default\"] = (vuedraggable);\n\n\n\n/***/ })\n\n/******/ })[\"default\"];\n});\n//# sourceMappingURL=vuedraggable.umd.js.map"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <link rel=\"icon\" href=\"favicon.ico\">\n    <title>vuedraggable</title>\n  <link href=\"app.js\" rel=\"preload\" as=\"script\"></head>\n  <body>\n    <noscript>\n      <strong>We're sorry but vuedraggable doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  <script type=\"text/javascript\" src=\"app.js\"></script></body>\n</html>\n"
  },
  {
    "path": "documentation/Vue.draggable.for.ReadME.md",
    "content": "## For Vue.js 1.0\n\nUse it exactly as v-for directive, passing optional parameters using 'options' parameter.\nOptions parameter can be json string or a full javascript object.\n\n  ``` html\n  <div v-dragable-for=\"element in list1\" options='{\"group\":\"people\"}'>\n    <p>{{element.name}}</p>\n  </div>\n   ```\n   \n### Limitation\n\n* This directive works only when applied to arrays and not to objects.\n* `onStart`, `onUpdate`, `onAdd`, `onRemove` Sortable.js options hooks are used by v-dragable-for to update VM. As such these four options are not usable with v-dragable-for. If you need to listen to re-order events, you can watch the underlying view model collection. For example:\n``` js\n        watch: {\n            'list1': function () {\n                console.log('Collection updated!');\n            },\n```\n### fiddle\nSimple:\nhttps://jsfiddle.net/dede89/j62g58z7/\n\nTwo Lists:\nhttps://jsfiddle.net/dede89/hqxranrd/\n\nExample with list clone:\nhttps://jsfiddle.net/dede89/u5ecgtsj/\n\n## Installation\n- Available through:\n``` js\n npm install vuedraggable\n```\n``` js\n Bower install vue.draggable\n```\n\nVersion 1.0.9 is Vue.js 1.0 compatible <br>\n\n- #### For Modules\n\n  ``` js\n  // ES6  \n  //For Vue.js 1.0 only\n  import VueDraggable from 'vuedraggable'\n  import Vue from 'vue'\n  Vue.use(VueDraggable)\n\n  // ES5 \n  //For Vue.js 1.0\n  var Vue = require('vue')\n  Vue.use(require('vuedraggable'))\n  ```\n\n- #### For `<script>` Include\n\n  Include 'vue.dragable.for' after Vue and lodash(version >=3).<br>\n"
  },
  {
    "path": "documentation/legacy.options.md",
    "content": "#### options props [deprecated]\n**Deprecated: use Sortable options as props; see [below section for more](https://github.com/SortableJS/Vue.Draggable#all-sortable-options)**\n\nType: `Object`<br>\nRequired: `false`\n\nOption used to initialize the sortable object see: [sortable option documentation](https://github.com/RubaXa/Sortable#options)<br>\nNote that all the method starting by \"on\" will be ignored as draggable component expose the same API via events.\n\nAs an example, a drag handle can be added using this binding `:options=\"{handle:'.handle'}\"`. Read the linked documentation for other options available to you."
  },
  {
    "path": "documentation/migrate.md",
    "content": "## Element props\n\n`element` has been deprecated and you should use `tag` props instead. The motivation is to comply with widespread convention.\n\nMigrate from:\n\n```HTML\n<draggable v-for=\"list\" element=\"ul\">\n    <!-- -->\n</draggable>\n```\n\nTo:\n\n```HTML\n<draggable v-for=\"list\" tag=\"ul\">\n  <!-- -->\n</draggable>\n```\n\n## Options props\n\n`options` props has been deprecated in version v2.20. \n\nVue.draggable starting from that release will use [transparent wrapper](https://zendev.com/2018/05/31/transparent-wrapper-components-in-vue.html) to pass props to the Sortable instance.\n\n\nSo [Sortable options](https://github.com/SortableJS/Sortable#options) can directly be attached to Vue.draggable instance.\n\nExample 1:\n\nMigrate from:\n\n```HTML\n<draggable v-for=\"list\" :options=\"{handle: '.handle'}\">\n  <!-- -->\n</draggable>\n```\n\nTo:\n\n```HTML\n<draggable v-for=\"list\" handle=\".handle\">\n  <!-- -->\n</draggable>\n```\n\nExample 2:\n\nMigrate from:\n\n```HTML\n<draggable v-for=\"list\" :options=\"getOptions()\">\n   <!-- -->\n</draggable>\n```\n\nTo:\n\n```HTML\n<draggable v-for=\"list\" v-bind=\"getOptions()\">\n   <!-- -->\n</draggable>\n```\n\n\n\n\n"
  },
  {
    "path": "example/App.vue",
    "content": "<template>\n  <div id=\"app\">\n    <a href=\"https://github.com/SortableJS/Vue.Draggable\" target=\"_blank\">\n      <img\n        style=\"position: fixed; top: 0; right: 0; border: 0; z-index:99999\"\n        width=\"149\"\n        height=\"149\"\n        src=\"https://github.blog/wp-content/uploads/2008/12/forkme_right_gray_6d6d6d.png?resize=149%2C149\"\n        class=\"attachment-full size-full\"\n        alt=\"Fork me on GitHub\"\n        data-recalc-dims=\"1\"\n      />\n    </a>\n\n    <div class=\"container \">\n      <div class=\"jumbotron logo\">\n        <img\n          class=\"draggable\"\n          alt=\"Vue.draggable logo\"\n          src=\"./assets/logo.svg\"\n        />\n\n        <div id=\"badges\">\n          <a\n            target=\"_blank\"\n            href=\"https://circleci.com/gh/SortableJS/Vue.Draggable\"\n            ><img\n              src=\"https://circleci.com/gh/SortableJS/Vue.Draggable.svg?style=shield\"\n            />\n          </a>\n          <a\n            target=\"_blank\"\n            href=\"https://codecov.io/gh/SortableJS/Vue.Draggable\"\n            ><img\n              src=\"https://codecov.io/gh/SortableJS/Vue.Draggable/branch/master/graph/badge.svg\"\n            />\n          </a>\n          <a\n            target=\"_blank\"\n            href=\"https://codebeat.co/projects/github-com-sortablejs-vue-draggable-master\"\n            ><img\n              src=\"https://codebeat.co/badges/7a6c27c8-2d0b-47b9-af55-c2eea966e713\"\n            />\n          </a>\n          <a\n            target=\"_blank\"\n            href=\"https://github.com/SortableJS/Vue.Draggable/issues?q=is%3Aopen+is%3Aissue\"\n            ><img\n              src=\"https://img.shields.io/github/issues/SortableJS/Vue.Draggable.svg\"\n            />\n          </a>\n          <a target=\"_blank\" href=\"https://www.npmjs.com/package/vuedraggable\"\n            ><img src=\"https://img.shields.io/npm/dt/vuedraggable.svg\" />\n          </a>\n          <a target=\"_blank\" href=\"https://www.npmjs.com/package/vuedraggable\"\n            ><img src=\"https://img.shields.io/npm/dm/vuedraggable.svg\" />\n          </a>\n          <a target=\"_blank\" href=\"https://www.npmjs.com/package/vuedraggable\"\n            ><img src=\"https://img.shields.io/npm/v/vuedraggable.svg\" />\n          </a>\n          <a\n            target=\"_blank\"\n            href=\"https://github.com/SortableJS/Vue.Draggable/blob/master/LICENSE\"\n            ><img\n              src=\"https://img.shields.io/github/license/SortableJS/Vue.Draggable.svg\"\n            />\n          </a>\n        </div>\n      </div>\n\n      <ul class=\"nav nav-tabs\" role=\"tablist\">\n        <li\n          class=\"nav-item\"\n          v-for=\"component in componentList\"\n          :key=\"component.name\"\n        >\n          <a\n            class=\"nav-link\"\n            data-toggle=\"tab\"\n            :data-route=\"`/${component.name}`\"\n            :href=\"`#${component.name}`\"\n            role=\"tab\"\n            aria-controls=\"profile\"\n            >{{ component.display }}</a\n          >\n        </li>\n      </ul>\n\n      <div class=\"tab-content\" id=\"tab-content\">\n        <div\n          class=\"tab-pane show\"\n          :id=\"component.name\"\n          role=\"tabpanel\"\n          aria-labelledby=\"profile-tab\"\n          v-for=\"component in componentList\"\n          :key=\"component.name\"\n        >\n          <div class=\" justify-content-center jumbotron main-container\">\n            <div class=\"row icon-container\">\n              <div>{{ component.instruction }}</div>\n\n              <a\n                class=\"icon github\"\n                target=\"_blank\"\n                :href=\"\n                  `https://github.com/SortableJS/Vue.Draggable/blob/master/example/components/${\n                    component.name\n                  }.vue`\n                \"\n              >\n                <button class=\"btn btn-secondary\">\n                  View code\n                  <i class=\"fa fa-github icon-large\"></i>\n                </button>\n              </a>\n            </div>\n\n            <component :is=\"component.name\"></component>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport $ from \"jquery\";\n\nconst requireContext = require.context(\"./components/\", false, /\\.vue$/);\nconst components = requireContext.keys().reduce((acc, key) => {\n  const component = requireContext(key).default;\n  acc[component.name] = component;\n  return acc;\n}, {});\n\nconst showAll = process.env.VUE_APP_SHOW_ALL_EXAMPLES === \"true\";\nwindow.console.log(process.env.VUE_APP_SHOW_ALL_EXAMPLES);\nif (showAll) {\n  const order = Object.keys(components);\n  const requireContextDebug = require.context(\n    \"./debug-components/\",\n    false,\n    /\\.vue$/\n  );\n  requireContextDebug.keys().reduce((acc, key) => {\n    const component = requireContextDebug(key).default;\n    component.order += order;\n    component.display = `DEBUG: ${component.display}`;\n    acc[component.name] = component;\n    return acc;\n  }, components);\n}\n\nexport default {\n  name: \"app\",\n  components,\n  data() {\n    const componentList = Object.keys(components)\n      .map(key => components[key])\n      .sort((a, b) => a.order - b.order);\n    return {\n      componentList\n    };\n  },\n  mounted() {\n    this.toRoute(this.$route);\n    $('a[data-toggle=\"tab\"]').on(\"shown.bs.tab\", e => {\n      this.$router.push({ path: e.target.dataset.route });\n    });\n  },\n  methods: {\n    toRoute(route) {\n      $(`a[data-route=\"${route.path}\"]`).tab(\"show\");\n    }\n  },\n  watch: {\n    $route: function(route) {\n      this.toRoute(route);\n    }\n  }\n};\n</script>\n\n<style>\n#app .main-container {\n  padding-top: 40px;\n}\n\n.main-application {\n  width: 400px;\n}\n\n.jumbotron.logo {\n  text-align: center;\n  padding-top: 32px;\n  padding-bottom: 16px;\n}\n\n.jumbotron.logo .draggable {\n  height: 200px;\n}\n\n.row.icon-container {\n  justify-content: space-between;\n  flex-direction: row;\n  padding-bottom: 15px;\n  margin-left: 0;\n}\n\n>>> h3 {\n  font-size: 1.4em;\n}\n\na.github {\n  color: black;\n  float: left;\n}\n\n.icon i {\n  font-size: 20px;\n}\n\na {\n  color: black;\n}\n\n#badges {\n  text-align: center;\n  padding: 10px;\n}\n\n#badges img {\n  padding-left: 2px;\n  padding-right: 2px;\n}\n\n#tab-content {\n  min-height: 500px;\n}\n\n.tooltip[x-placement^=\"bottom\"] {\n  margin-top: 5px;\n}\n\n.tooltip[x-placement^=\"bottom\"] .tooltip-arrow {\n  border-width: 0 5px 5px 5px;\n  border-left-color: transparent !important;\n  border-right-color: transparent !important;\n  border-top-color: transparent !important;\n  top: -5px;\n  left: calc(50% - 5px);\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.tooltip[x-placement^=\"right\"] {\n  margin-left: 5px;\n}\n\n.tooltip[x-placement^=\"right\"] .tooltip-arrow {\n  border-width: 5px 5px 5px 0;\n  border-left-color: transparent !important;\n  border-top-color: transparent !important;\n  border-bottom-color: transparent !important;\n  left: -5px;\n  top: calc(50% - 5px);\n  margin-left: 0;\n  margin-right: 0;\n}\n\n.tooltip[x-placement^=\"left\"] {\n  margin-right: 5px;\n}\n\n.tooltip[x-placement^=\"left\"] .tooltip-arrow {\n  border-width: 5px 0 5px 5px;\n  border-top-color: transparent !important;\n  border-right-color: transparent !important;\n  border-bottom-color: transparent !important;\n  right: -5px;\n  top: calc(50% - 5px);\n  margin-left: 0;\n  margin-right: 0;\n}\n\n.tooltip[aria-hidden=\"true\"] {\n  visibility: hidden;\n  opacity: 0;\n  transition: opacity 0.15s, visibility 0.15s;\n}\n\n.tooltip[aria-hidden=\"false\"] {\n  visibility: visible;\n  opacity: 1;\n  transition: opacity 0.15s;\n}\n</style>\n"
  },
  {
    "path": "example/components/clone-on-control.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-3\">\n      <h3>Draggable 1</h3>\n      <draggable\n        class=\"dragArea list-group\"\n        :list=\"list1\"\n        :clone=\"clone\"\n        :group=\"{ name: 'people', pull: pullFunction }\"\n        @start=\"start\"\n      >\n        <div class=\"list-group-item\" v-for=\"element in list1\" :key=\"element.id\">\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <div class=\"col-3\">\n      <h3>Draggable 2</h3>\n      <draggable class=\"dragArea list-group\" :list=\"list2\" group=\"people\">\n        <div class=\"list-group-item\" v-for=\"element in list2\" :key=\"element.id\">\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list1\" title=\"List 1\" />\n\n    <rawDisplayer class=\"col-3\" :value=\"list2\" title=\"List 2\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet idGlobal = 8;\nexport default {\n  name: \"clone-on-control\",\n  display: \"Clone on Control\",\n  instruction: \"Press Ctrl to clone element from list 1\",\n  order: 4,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list1: [\n        { name: \"Jesus\", id: 1 },\n        { name: \"Paul\", id: 2 },\n        { name: \"Peter\", id: 3 }\n      ],\n      list2: [\n        { name: \"Luc\", id: 5 },\n        { name: \"Thomas\", id: 6 },\n        { name: \"John\", id: 7 }\n      ],\n      controlOnStart: true\n    };\n  },\n  methods: {\n    clone({ name }) {\n      return { name, id: idGlobal++ };\n    },\n    pullFunction() {\n      return this.controlOnStart ? \"clone\" : true;\n    },\n    start({ originalEvent }) {\n      this.controlOnStart = originalEvent.ctrlKey;\n    }\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/clone.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-3\">\n      <h3>Draggable 1</h3>\n      <draggable\n        class=\"dragArea list-group\"\n        :list=\"list1\"\n        :group=\"{ name: 'people', pull: 'clone', put: false }\"\n        @change=\"log\"\n      >\n        <div\n          class=\"list-group-item\"\n          v-for=\"element in list1\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <div class=\"col-3\">\n      <h3>Draggable 2</h3>\n      <draggable\n        class=\"dragArea list-group\"\n        :list=\"list2\"\n        group=\"people\"\n        @change=\"log\"\n      >\n        <div\n          class=\"list-group-item\"\n          v-for=\"element in list2\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list1\" title=\"List 1\" />\n\n    <rawDisplayer class=\"col-3\" :value=\"list2\" title=\"List 2\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nexport default {\n  name: \"clone\",\n  display: \"Clone\",\n  order: 2,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list1: [\n        { name: \"John\", id: 1 },\n        { name: \"Joao\", id: 2 },\n        { name: \"Jean\", id: 3 },\n        { name: \"Gerard\", id: 4 }\n      ],\n      list2: [\n        { name: \"Juan\", id: 5 },\n        { name: \"Edgard\", id: 6 },\n        { name: \"Johnson\", id: 7 }\n      ]\n    };\n  },\n  methods: {\n    log: function(evt) {\n      window.console.log(evt);\n    }\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/custom-clone.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-3\">\n      <h3>Draggable 1</h3>\n      <draggable\n        class=\"dragArea list-group\"\n        :list=\"list1\"\n        :group=\"{ name: 'people', pull: 'clone', put: false }\"\n        :clone=\"cloneDog\"\n        @change=\"log\"\n      >\n        <div class=\"list-group-item\" v-for=\"element in list1\" :key=\"element.id\">\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <div class=\"col-3\">\n      <h3>Draggable 2</h3>\n      <draggable\n        class=\"dragArea list-group\"\n        :list=\"list2\"\n        group=\"people\"\n        @change=\"log\"\n      >\n        <div class=\"list-group-item\" v-for=\"element in list2\" :key=\"element.id\">\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list1\" title=\"List 1\" />\n\n    <rawDisplayer class=\"col-3\" :value=\"list2\" title=\"List 2\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet idGlobal = 8;\nexport default {\n  name: \"custom-clone\",\n  display: \"Custom Clone\",\n  order: 3,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list1: [\n        { name: \"dog 1\", id: 1 },\n        { name: \"dog 2\", id: 2 },\n        { name: \"dog 3\", id: 3 },\n        { name: \"dog 4\", id: 4 }\n      ],\n      list2: [\n        { name: \"cat 5\", id: 5 },\n        { name: \"cat 6\", id: 6 },\n        { name: \"cat 7\", id: 7 }\n      ]\n    };\n  },\n  methods: {\n    log: function(evt) {\n      window.console.log(evt);\n    },\n    cloneDog({ id }) {\n      return {\n        id: idGlobal++,\n        name: `cat ${id}`\n      };\n    }\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/footerslot.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Draggable with footer</h3>\n\n      <draggable\n        tag=\"transition-group\"\n        :componentData=\"componentData\"\n        :list=\"list\"\n        class=\"list-group\"\n        draggable=\".item\"\n        :animation=\"100\"\n        @start=\"dragging = true\"\n        @end=\"dragging = false\"\n      >\n        <div\n          class=\"list-group-item item\"\n          v-for=\"element in list\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n\n        <div\n          slot=\"footer\"\n          class=\"btn-group list-group-item\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n          key=\"footer\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"replace\">Replace</button>\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet id = 1;\nexport default {\n  name: \"footerslot\",\n  display: \"Footer slot\",\n  order: 12,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: [\n        { name: \"John\", id: 0 },\n        { name: \"Joao\", id: 1 },\n        { name: \"Jean\", id: 2 }\n      ],\n      dragging: false,\n      componentData: {\n        props: {\n          type: \"transition\",\n          name: \"flip-list\"\n        }\n      }\n    };\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\", id: id++ }];\n    }\n  }\n};\n</script>\n<style scoped>\n.flip-list-move {\n  transition: transform 0.5s;\n}\n\n.no-move {\n  transition: transform 0s;\n}\n</style>\n"
  },
  {
    "path": "example/components/functional.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Draggable</h3>\n      <draggable\n        v-model=\"rows\"\n        tag=\"v-layout\"\n        class=\"row wrap fill-height align-center sortable-list\"\n        style=\"background: grey;\"\n      >\n        <v-flex\n          v-for=\"row in rows\"\n          :key=\"row.index\"\n          class=\"sortable\"\n          xs12\n          my-2\n          style=\"background: red\"\n        >\n          <draggable\n            :list=\"row.items\"\n            tag=\"v-layout\"\n            :group=\"{ name: 'row' }\"\n            class=\"row wrap justify-space-around\"\n          >\n            <v-flex\n              v-for=\"item in row.items\"\n              :key=\"item.title\"\n              xs4\n              pa-3\n              class=\"row-v\"\n            >\n              <v-card style=\"height: 100px;\">{{ item.title }}</v-card>\n            </v-flex>\n          </draggable>\n        </v-flex>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"rows\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nimport Vue from \"vue\";\nimport Vuetify from \"vuetify\";\nimport \"vuetify/dist/vuetify.min.css\";\n\nVue.use(Vuetify);\n\nexport default {\n  name: \"functional\",\n  display: \"Functional third party\",\n  order: 17,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      enabled: true,\n      rows: [\n        {\n          index: 1,\n          items: [\n            {\n              title: \"item 1\"\n            }\n          ]\n        },\n        {\n          index: 2,\n          items: [\n            {\n              title: \"item 2\"\n            },\n            {\n              title: \"item 3\"\n            }\n          ]\n        }\n      ]\n    };\n  }\n};\n</script>\n<style scoped>\n.buttons {\n  margin-top: 35px;\n}\n\n.row-v {\n  height: 150px;\n  width: 200px;\n}\n\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n</style>\n"
  },
  {
    "path": "example/components/handle.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-1\">\n      <button class=\"btn btn-secondary button\" @click=\"add\">Add</button>\n    </div>\n\n    <div class=\"col-7\">\n      <h3>Draggable {{ draggingInfo }}</h3>\n\n      <draggable tag=\"ul\" :list=\"list\" class=\"list-group\" handle=\".handle\">\n        <li\n          class=\"list-group-item\"\n          v-for=\"(element, idx) in list\"\n          :key=\"element.name\"\n        >\n          <i class=\"fa fa-align-justify handle\"></i>\n\n          <span class=\"text\">{{ element.name }} </span>\n\n          <input type=\"text\" class=\"form-control\" v-model=\"element.text\" />\n\n          <i class=\"fa fa-times close\" @click=\"removeAt(idx)\"></i>\n        </li>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nlet id = 3;\nimport draggable from \"@/vuedraggable\";\nexport default {\n  name: \"handle\",\n  display: \"Handle\",\n  instruction: \"Drag using the handle icon\",\n  order: 5,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: [\n        { name: \"John\", text: \"\", id: 0 },\n        { name: \"Joao\", text: \"\", id: 1 },\n        { name: \"Jean\", text: \"\", id: 2 }\n      ],\n      dragging: false\n    };\n  },\n  computed: {\n    draggingInfo() {\n      return this.dragging ? \"under drag\" : \"\";\n    }\n  },\n  methods: {\n    removeAt(idx) {\n      this.list.splice(idx, 1);\n    },\n    add: function() {\n      id++;\n      this.list.push({ name: \"Juan \" + id, id, text: \"\" });\n    }\n  }\n};\n</script>\n<style scoped>\n.button {\n  margin-top: 35px;\n}\n.handle {\n  float: left;\n  padding-top: 8px;\n  padding-bottom: 8px;\n}\n\n.close {\n  float: right;\n  padding-top: 8px;\n  padding-bottom: 8px;\n}\n\ninput {\n  display: inline-block;\n  width: 50%;\n}\n\n.text {\n  margin: 20px;\n}\n</style>\n"
  },
  {
    "path": "example/components/headerslot.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Draggable with header</h3>\n\n      <draggable\n        :list=\"list\"\n        class=\"list-group\"\n        draggable=\".item\"\n        @start=\"dragging = true\"\n        @end=\"dragging = false\"\n      >\n        <div\n          class=\"list-group-item item\"\n          v-for=\"element in list\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n\n        <div\n          slot=\"header\"\n          class=\"btn-group list-group-item\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"replace\">Replace</button>\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet id = 1;\nexport default {\n  name: \"headerslot\",\n  display: \"Header slot\",\n  order: 13,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: [\n        { name: \"John 1\", id: 0 },\n        { name: \"Joao 2\", id: 1 },\n        { name: \"Jean 3\", id: 2 }\n      ],\n      dragging: false\n    };\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\", id: id++ }];\n    }\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/infra/nested.vue",
    "content": "<template>\n  <draggable class=\"dragArea\" tag=\"ul\" :list=\"tasks\" :group=\"{ name: 'g1' }\">\n    <li v-for=\"el in tasks\" :key=\"el.name\">\n      <p>{{ el.name }}</p>\n      <nested-draggable :tasks=\"el.tasks\" />\n    </li>\n  </draggable>\n</template>\n<script>\nimport draggable from \"@/vuedraggable\";\n\nexport default {\n  props: {\n    tasks: {\n      required: true,\n      type: Array\n    }\n  },\n  components: {\n    draggable\n  },\n  name: \"nested-draggable\"\n};\n</script>\n<style scoped>\n.dragArea {\n  min-height: 50px;\n  outline: 1px dashed;\n}\n</style>\n"
  },
  {
    "path": "example/components/infra/raw-displayer.vue",
    "content": "<template>\n  <div>\n    <h3>{{ title }}</h3>\n    <pre>{{ valueString }}</pre>\n  </div>\n</template>\n<script>\nconst props = {\n  name: \"raw-displayer\",\n  title: {\n    required: true,\n    type: String\n  },\n  value: {\n    required: true\n  }\n};\nexport default {\n  props,\n  computed: {\n    valueString() {\n      return JSON.stringify(this.value, null, 2);\n    }\n  }\n};\n</script>\n<style scoped>\npre {\n  text-align: start;\n}\n</style>\n"
  },
  {
    "path": "example/components/nested/nested-store.js",
    "content": "import Vuex from \"vuex\";\nimport Vue from \"vue\";\n\nVue.use(Vuex);\n\nexport const nested = {\n  namespaced: true,\n  state: {\n    elements: [\n      {\n        id: 1,\n        name: \"Shrek\",\n        elements: []\n      },\n      {\n        id: 2,\n        name: \"Fiona\",\n        elements: [\n          {\n            id: 4,\n            name: \"Lord Farquad\",\n            elements: []\n          },\n          {\n            id: 5,\n            name: \"Prince Charming\",\n            elements: []\n          }\n        ]\n      },\n      {\n        id: 3,\n        name: \"Donkey\",\n        elements: []\n      }\n    ]\n  },\n  mutations: {\n    updateElements: (state, payload) => {\n      state.elements = payload;\n    }\n  },\n  actions: {\n    updateElements: ({ commit }, payload) => {\n      commit(\"updateElements\", payload);\n    }\n  }\n};\n"
  },
  {
    "path": "example/components/nested/nested-test.vue",
    "content": "<style scoped>\n.item-container {\n  max-width: 20rem;\n  margin: 0;\n}\n\n.item {\n  padding: 1rem;\n  border: solid black 1px;\n  background-color: #fefefe;\n}\n.item-sub {\n  margin: 0 0 0 1rem;\n}\n</style>\n\n<template>\n  <draggable\n    v-bind=\"dragOptions\"\n    tag=\"div\"\n    class=\"item-container\"\n    :list=\"list\"\n    :value=\"value\"\n    @input=\"emitter\"\n  >\n    <div class=\"item-group\" :key=\"el.id\" v-for=\"el in realValue\">\n      <div class=\"item\">{{ el.name }}</div>\n      <nested-test class=\"item-sub\" :list=\"el.elements\" />\n    </div>\n  </draggable>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nexport default {\n  name: \"nested-test\",\n  methods: {\n    emitter(value) {\n      this.$emit(\"input\", value);\n    }\n  },\n  components: {\n    draggable\n  },\n  computed: {\n    dragOptions() {\n      return {\n        animation: 0,\n        group: \"description\",\n        disabled: false,\n        ghostClass: \"ghost\"\n      };\n    },\n    // this.value when input = v-model\n    // this.list  when input != v-model\n    realValue() {\n      return this.value ? this.value : this.list;\n    }\n  },\n  props: {\n    value: {\n      required: false,\n      type: Array,\n      default: null\n    },\n    list: {\n      required: false,\n      type: Array,\n      default: null\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "example/components/nested-example.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Nested draggable</h3>\n      <nested-draggable :tasks=\"list\" />\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport nestedDraggable from \"./infra/nested\";\nexport default {\n  name: \"nested-example\",\n  display: \"Nested\",\n  order: 15,\n  components: {\n    nestedDraggable\n  },\n  data() {\n    return {\n      list: [\n        {\n          name: \"task 1\",\n          tasks: [\n            {\n              name: \"task 2\",\n              tasks: []\n            }\n          ]\n        },\n        {\n          name: \"task 3\",\n          tasks: [\n            {\n              name: \"task 4\",\n              tasks: []\n            }\n          ]\n        },\n        {\n          name: \"task 5\",\n          tasks: []\n        }\n      ]\n    };\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/nested-with-vmodel.vue",
    "content": "<template>\n  <div class=\"justify-content-between row\">\n    <nested-test class=\"col-8\" v-model=\"elements\" />\n    <raw-displayer class=\"col-4\" :title=\"'Vuex Store'\" :value=\"elements\" />\n  </div>\n</template>\n\n<script>\nimport NestedTest from \"./nested/nested-test.vue\";\nimport rawDisplayer from \"./infra/raw-displayer.vue\";\n\nexport default {\n  name: \"nested-with-vmodel\",\n  display: \"Nested (v-model & vuex)\",\n  order: 16,\n  components: {\n    NestedTest,\n    rawDisplayer\n  },\n  computed: {\n    elements: {\n      get() {\n        return this.$store.state.nested.elements;\n      },\n      set(value) {\n        this.$store.dispatch(\"nested/updateElements\", value);\n      }\n    }\n  },\n  methods: {}\n};\n</script>\n"
  },
  {
    "path": "example/components/simple.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-2\">\n      <div class=\"form-group\">\n        <div\n          class=\"btn-group-vertical buttons\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"replace\">Replace</button>\n        </div>\n\n        <div class=\"form-check\">\n          <input\n            id=\"disabled\"\n            type=\"checkbox\"\n            v-model=\"enabled\"\n            class=\"form-check-input\"\n          />\n          <label class=\"form-check-label\" for=\"disabled\">DnD enabled</label>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"col-6\">\n      <h3>Draggable {{ draggingInfo }}</h3>\n\n      <draggable\n        :list=\"list\"\n        :disabled=\"!enabled\"\n        class=\"list-group\"\n        ghost-class=\"ghost\"\n        :move=\"checkMove\"\n        @start=\"dragging = true\"\n        @end=\"dragging = false\"\n      >\n        <div\n          class=\"list-group-item\"\n          v-for=\"element in list\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet id = 1;\nexport default {\n  name: \"simple\",\n  display: \"Simple\",\n  order: 0,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      enabled: true,\n      list: [\n        { name: \"John\", id: 0 },\n        { name: \"Joao\", id: 1 },\n        { name: \"Jean\", id: 2 }\n      ],\n      dragging: false\n    };\n  },\n  computed: {\n    draggingInfo() {\n      return this.dragging ? \"under drag\" : \"\";\n    }\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\", id: id++ }];\n    },\n    checkMove: function(e) {\n      window.console.log(\"Future index: \" + e.draggedContext.futureIndex);\n    }\n  }\n};\n</script>\n<style scoped>\n.buttons {\n  margin-top: 35px;\n}\n\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n</style>\n"
  },
  {
    "path": "example/components/table-column-example.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Draggable table</h3>\n\n      <table class=\"table table-striped\">\n        <thead class=\"thead-dark\">\n          <draggable v-model=\"headers\" tag=\"tr\">\n            <th v-for=\"header in headers\" :key=\"header\" scope=\"col\">\n              {{ header }}\n            </th>\n          </draggable>\n        </thead>\n        <tbody>\n          <tr v-for=\"item in list\" :key=\"item.name\">\n            <td v-for=\"header in headers\" :key=\"header\">{{ item[header] }}</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n\n    <rawDisplayer class=\"col-2\" :value=\"list\" title=\"List\" />\n\n    <rawDisplayer class=\"col-2\" :value=\"headers\" title=\"Headers\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nexport default {\n  name: \"table-column-example\",\n  display: \"Table Column\",\n  order: 9,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      headers: [\"id\", \"name\", \"sport\"],\n      list: [\n        { id: 1, name: \"Abby\", sport: \"basket\" },\n        { id: 2, name: \"Brooke\", sport: \"foot\" },\n        { id: 3, name: \"Courtenay\", sport: \"volley\" },\n        { id: 4, name: \"David\", sport: \"rugby\" }\n      ],\n      dragging: false\n    };\n  }\n};\n</script>\n<style scoped>\n.buttons {\n  margin-top: 35px;\n}\n</style>\n"
  },
  {
    "path": "example/components/table-example.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Draggable table</h3>\n\n      <table class=\"table table-striped\">\n        <thead class=\"thead-dark\">\n          <tr>\n            <th scope=\"col\">Id</th>\n            <th scope=\"col\">Name</th>\n            <th scope=\"col\">Sport</th>\n          </tr>\n        </thead>\n        <draggable v-model=\"list\" tag=\"tbody\">\n          <tr v-for=\"item in list\" :key=\"item.name\">\n            <td scope=\"row\">{{ item.id }}</td>\n            <td>{{ item.name }}</td>\n            <td>{{ item.sport }}</td>\n          </tr>\n        </draggable>\n      </table>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nexport default {\n  name: \"table-example\",\n  display: \"Table\",\n  order: 8,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: [\n        { id: 1, name: \"Abby\", sport: \"basket\" },\n        { id: 2, name: \"Brooke\", sport: \"foot\" },\n        { id: 3, name: \"Courtenay\", sport: \"volley\" },\n        { id: 4, name: \"David\", sport: \"rugby\" }\n      ],\n      dragging: false\n    };\n  }\n};\n</script>\n<style scoped>\n.buttons {\n  margin-top: 35px;\n}\n</style>\n"
  },
  {
    "path": "example/components/third-party.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-7\">\n      <h3>\n        Integration with\n        <a\n          href=\"https://element.eleme.io/#/en-US/component/collapse#collapse\"\n          target=\"_blank\"\n          >Element collapse</a\n        >\n      </h3>\n\n      <draggable\n        tag=\"el-collapse\"\n        :list=\"list\"\n        :component-data=\"collapseComponentData\"\n      >\n        <el-collapse-item\n          v-for=\"item in list\"\n          :key=\"item.id\"\n          :title=\"item.title\"\n          :name=\"item.id\"\n        >\n          <div v-for=\"(lign, idx) in item.text\" :key=\"idx\">{{ lign }}</div>\n        </el-collapse-item>\n      </draggable>\n    </div>\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n    <rawDisplayer class=\"col-1\" :value=\"activeNames\" title=\"activeNames\" />\n  </div>\n</template>\n\n<script>\nimport \"element-ui/lib/theme-chalk/index.css\";\nimport draggable from \"@/vuedraggable\";\n\nexport default {\n  name: \"third-party\",\n  display: \"Third party\",\n  order: 10,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: [\n        {\n          title: \"Consistency\",\n          id: 1,\n          text: [\n            \"Consistent with real life: in line with the process and logic of real life, and comply with languages and habits that the users are used to;\",\n            \"Consistent within interface: all elements should be consistent, such as: design style, icons and texts, position of elements, etc.\"\n          ]\n        },\n        {\n          title: \"Feedback\",\n          id: 2,\n          text: [\n            \"Operation feedback: enable the users to clearly perceive their operations by style updates and interactive effects;\",\n            \"Visual feedback: reflect current state by updating or rearranging elements of the page.\"\n          ]\n        },\n        {\n          title: \"Efficiency\",\n          id: 3,\n          text: [\n            \"Simplify the process: keep operating process simple and intuitive;\",\n            \"Definite and clear: enunciate your intentions clearly so that the users can quickly understand and make decisions;\",\n            \"Easy to identify: the interface should be straightforward, which helps the users to identify and frees them from memorizing and recalling.\"\n          ]\n        },\n        {\n          title: \"Controllability\",\n          id: 4,\n          text: [\n            \"Decision making: giving advices about operations is acceptable, but do not make decisions for the users;\",\n            \"Controlled consequences: users should be granted the freedom to operate, including canceling, aborting or terminating current operation.\"\n          ]\n        }\n      ],\n      activeNames: [1],\n      collapseComponentData: {\n        on: {\n          input: this.inputChanged\n        },\n        props: {\n          value: this.activeNames\n        }\n      }\n    };\n  },\n  methods: {\n    inputChanged(val) {\n      this.activeNames = val;\n    }\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/transition-example-2.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-2\">\n      <button class=\"btn btn-secondary button\" @click=\"sort\">\n        To original order\n      </button>\n    </div>\n\n    <div class=\"col-6\">\n      <h3>Transition</h3>\n      <draggable\n        class=\"list-group\"\n        tag=\"ul\"\n        v-model=\"list\"\n        v-bind=\"dragOptions\"\n        @start=\"drag = true\"\n        @end=\"drag = false\"\n      >\n        <transition-group type=\"transition\" :name=\"!drag ? 'flip-list' : null\">\n          <li\n            class=\"list-group-item\"\n            v-for=\"element in list\"\n            :key=\"element.order\"\n          >\n            <i\n              :class=\"\n                element.fixed ? 'fa fa-anchor' : 'glyphicon glyphicon-pushpin'\n              \"\n              @click=\"element.fixed = !element.fixed\"\n              aria-hidden=\"true\"\n            ></i>\n            {{ element.name }}\n          </li>\n        </transition-group>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\n\nconst message = [\n  \"vue.draggable\",\n  \"draggable\",\n  \"component\",\n  \"for\",\n  \"vue.js 2.0\",\n  \"based\",\n  \"on\",\n  \"Sortablejs\"\n];\n\nexport default {\n  name: \"transition-example-2\",\n  display: \"Transitions\",\n  order: 7,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: message.map((name, index) => {\n        return { name, order: index + 1 };\n      }),\n      drag: false\n    };\n  },\n  methods: {\n    sort() {\n      this.list = this.list.sort((a, b) => a.order - b.order);\n    }\n  },\n  computed: {\n    dragOptions() {\n      return {\n        animation: 200,\n        group: \"description\",\n        disabled: false,\n        ghostClass: \"ghost\"\n      };\n    }\n  }\n};\n</script>\n\n<style>\n.button {\n  margin-top: 35px;\n}\n\n.flip-list-move {\n  transition: transform 0.5s;\n}\n\n.no-move {\n  transition: transform 0s;\n}\n\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n\n.list-group {\n  min-height: 20px;\n}\n\n.list-group-item {\n  cursor: move;\n}\n\n.list-group-item i {\n  cursor: pointer;\n}\n</style>\n"
  },
  {
    "path": "example/components/transition-example.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-2\">\n      <button class=\"btn btn-secondary button\" @click=\"sort\">\n        To original order\n      </button>\n    </div>\n\n    <div class=\"col-6\">\n      <h3>Transition</h3>\n      <draggable\n        class=\"list-group\"\n        tag=\"ul\"\n        v-model=\"list\"\n        v-bind=\"dragOptions\"\n        @start=\"isDragging = true\"\n        @end=\"isDragging = false\"\n      >\n        <transition-group type=\"transition\" name=\"flip-list\">\n          <li\n            class=\"list-group-item\"\n            v-for=\"element in list\"\n            :key=\"element.order\"\n          >\n            <i\n              :class=\"\n                element.fixed ? 'fa fa-anchor' : 'glyphicon glyphicon-pushpin'\n              \"\n              @click=\"element.fixed = !element.fixed\"\n              aria-hidden=\"true\"\n            ></i>\n            {{ element.name }}\n          </li>\n        </transition-group>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nconst message = [\n  \"vue.draggable\",\n  \"draggable\",\n  \"component\",\n  \"for\",\n  \"vue.js 2.0\",\n  \"based\",\n  \"on\",\n  \"Sortablejs\"\n];\n\nexport default {\n  name: \"transition-example\",\n  display: \"Transition\",\n  order: 6,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: message.map((name, index) => {\n        return { name, order: index + 1 };\n      })\n    };\n  },\n  methods: {\n    sort() {\n      this.list = this.list.sort((a, b) => a.order - b.order);\n    }\n  },\n  computed: {\n    dragOptions() {\n      return {\n        animation: 0,\n        group: \"description\",\n        disabled: false,\n        ghostClass: \"ghost\"\n      };\n    }\n  }\n};\n</script>\n\n<style>\n.button {\n  margin-top: 35px;\n}\n\n.flip-list-move {\n  transition: transform 0.5s;\n}\n\n.no-move {\n  transition: transform 0s;\n}\n\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n\n.list-group {\n  min-height: 20px;\n}\n\n.list-group-item {\n  cursor: move;\n}\n\n.list-group-item i {\n  cursor: pointer;\n}\n</style>\n"
  },
  {
    "path": "example/components/two-list-headerslots.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-4\">\n      <h3>First draggable with header</h3>\n\n      <draggable\n        id=\"first\"\n        data-source=\"juju\"\n        :list=\"list\"\n        class=\"list-group\"\n        draggable=\".item\"\n        group=\"a\"\n      >\n        <div\n          class=\"list-group-item item\"\n          v-for=\"element in list\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n\n        <div\n          slot=\"header\"\n          class=\"btn-group list-group-item\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"replace\">Replace</button>\n        </div>\n      </draggable>\n    </div>\n\n    <div class=\"col-4\">\n      <h3>Second draggable with header</h3>\n\n      <draggable :list=\"list2\" class=\"list-group\" draggable=\".item\" group=\"a\">\n        <div\n          class=\"list-group-item item\"\n          v-for=\"element in list2\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n\n        <div\n          slot=\"header\"\n          class=\"btn-group list-group-item\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add2\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"replace2\">Replace</button>\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-2\" :value=\"list\" title=\"List\" />\n\n    <rawDisplayer class=\"col-2\" :value=\"list2\" title=\"List2\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet id = 1;\nexport default {\n  name: \"two-list-headerslots\",\n  display: \"Two list header slot\",\n  order: 14,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list: [\n        { name: \"John 1\", id: 0 },\n        { name: \"Joao 2\", id: 1 },\n        { name: \"Jean 3\", id: 2 }\n      ],\n      list2: [{ name: \"Jonny 4\", id: 3 }, { name: \"Guisepe 5\", id: 4 }]\n    };\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\", id: id++ }];\n    },\n    add2: function() {\n      this.list2.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace2: function() {\n      this.list2 = [{ name: \"Edgard\", id: id++ }];\n    }\n  }\n};\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "example/components/two-lists.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-3\">\n      <h3>Draggable 1</h3>\n      <draggable class=\"list-group\" :list=\"list1\" group=\"people\" @change=\"log\">\n        <div\n          class=\"list-group-item\"\n          v-for=\"(element, index) in list1\"\n          :key=\"element.name\"\n        >\n          {{ element.name }} {{ index }}\n        </div>\n      </draggable>\n    </div>\n\n    <div class=\"col-3\">\n      <h3>Draggable 2</h3>\n      <draggable class=\"list-group\" :list=\"list2\" group=\"people\" @change=\"log\">\n        <div\n          class=\"list-group-item\"\n          v-for=\"(element, index) in list2\"\n          :key=\"element.name\"\n        >\n          {{ element.name }} {{ index }}\n        </div>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list1\" title=\"List 1\" />\n\n    <rawDisplayer class=\"col-3\" :value=\"list2\" title=\"List 2\" />\n  </div>\n</template>\n<script>\nimport draggable from \"@/vuedraggable\";\n\nexport default {\n  name: \"two-lists\",\n  display: \"Two Lists\",\n  order: 1,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      list1: [\n        { name: \"John\", id: 1 },\n        { name: \"Joao\", id: 2 },\n        { name: \"Jean\", id: 3 },\n        { name: \"Gerard\", id: 4 }\n      ],\n      list2: [\n        { name: \"Juan\", id: 5 },\n        { name: \"Edgard\", id: 6 },\n        { name: \"Johnson\", id: 7 }\n      ]\n    };\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan\" });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\" }];\n    },\n    clone: function(el) {\n      return {\n        name: el.name + \" cloned\"\n      };\n    },\n    log: function(evt) {\n      window.console.log(evt);\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "example/debug-components/future-index.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-2\">\n      <div class=\"form-group\">\n        <div\n          class=\"btn-group-vertical buttons\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"replace\">Replace</button>\n        </div>\n\n        <div class=\"form-check\">\n          <input\n            id=\"disabled\"\n            type=\"checkbox\"\n            v-model=\"enabled\"\n            class=\"form-check-input\"\n          />\n          <label class=\"form-check-label\" for=\"disabled\">DnD enabled</label>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"col-6\">\n      <h3>Draggable</h3>\n\n      <draggableList :list=\"list\" :enabled=\"enabled\" />\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggableList from \"./nested/draggable-list\";\n\nlet id = 1;\nexport default {\n  name: \"future-index\",\n  display: \"Future index\",\n  order: 1,\n  debug: true,\n  components: {\n    draggableList\n  },\n  data() {\n    return {\n      enabled: true,\n      list: [\n        { name: \"John\", id: 0 },\n        { name: \"Joao\", id: 1 },\n        { name: \"Jean\", id: 2 }\n      ]\n    };\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\", id: id++ }];\n    }\n  }\n};\n</script>\n<style scoped>\n.buttons {\n  margin-top: 35px;\n}\n\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n</style>\n"
  },
  {
    "path": "example/debug-components/nested/draggable-list.vue",
    "content": "<template>\n  <draggable\n    :list=\"list\"\n    :disabled=\"!enabled\"\n    class=\"list-group\"\n    ghost-class=\"ghost\"\n    :move=\"checkMove\"\n    @start=\"dragging = true\"\n    @end=\"dragging = false\"\n  >\n    <div class=\"list-group-item\" v-for=\"element in list\" :key=\"element.name\">\n      {{ element.name }}\n    </div>\n  </draggable>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\nlet id = 1;\nexport default {\n  name: \"draggable-list\",\n  components: {\n    draggable\n  },\n  props: {\n    list: {\n      type: Array,\n      required: true\n    },\n    enabled: {\n      type: Boolean,\n      required: true\n    }\n  },\n  data() {\n    return {\n      dragging: false\n    };\n  },\n  computed: {\n    draggingInfo() {\n      return this.dragging ? \"under drag\" : \"\";\n    }\n  },\n  methods: {\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    replace: function() {\n      this.list = [{ name: \"Edgard\", id: id++ }];\n    },\n    checkMove: function(e) {\n      window.console.log(\"Future index: \" + e.draggedContext.futureIndex);\n    }\n  }\n};\n</script>\n<style scoped>\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n</style>\n"
  },
  {
    "path": "example/debug-components/slot-example.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-2\">\n      <div class=\"form-group\">\n        <div\n          class=\"btn-group-vertical buttons\"\n          role=\"group\"\n          aria-label=\"Basic example\"\n        >\n          <button class=\"btn btn-secondary\" @click=\"add\">Add</button>\n          <button class=\"btn btn-secondary\" @click=\"remove\">Remove</button>\n          <button class=\"btn btn-secondary\" @click=\"clear\">Clear</button>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"col-6\">\n      <h3>Draggable</h3>\n\n      <draggable\n        :list=\"list\"\n        :disabled=\"!enabled\"\n        class=\"list-group\"\n        ghost-class=\"ghost\"\n      >\n        <div\n          class=\"list-group-item\"\n          v-for=\"element in list\"\n          :key=\"element.name\"\n        >\n          {{ element.name }}\n        </div>\n\n        <template v-slot:header>\n          <div>\n            header slot\n          </div>\n        </template>\n\n        <template v-slot:footer>\n          <div>\n            footer slot\n          </div>\n        </template>\n      </draggable>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"list\" title=\"List\" />\n  </div>\n</template>\n\n<script>\nimport draggable from \"@/vuedraggable\";\n\nlet id = 1;\nexport default {\n  name: \"slot-example\",\n  display: \"Slot example\",\n  order: 1,\n  debug: true,\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      enabled: true,\n      list: [\n        { name: \"John\", id: 0 },\n        { name: \"Joao\", id: 1 },\n        { name: \"Jean\", id: 2 }\n      ]\n    };\n  },\n  methods: {\n    clear: function() {\n      this.list = [];\n    },\n    add: function() {\n      this.list.push({ name: \"Juan \" + id, id: id++ });\n    },\n    remove: function() {\n      this.list.pop();\n    }\n  }\n};\n</script>\n<style scoped>\n.buttons {\n  margin-top: 35px;\n}\n\n.ghost {\n  opacity: 0.5;\n  background: #c8ebfb;\n}\n</style>\n"
  },
  {
    "path": "example/main.js",
    "content": "import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport VueRouter from \"vue-router\";\nimport routes from \"./route\";\nimport rawDisplayer from \"./components/infra/raw-displayer.vue\";\nimport ElementUI from \"element-ui\";\nimport store from \"./store\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"font-awesome/css/font-awesome.css\";\n\nrequire(\"bootstrap\");\n\nconst router = new VueRouter({\n  routes\n});\n\nVue.config.productionTip = false;\nVue.use(VueRouter);\nVue.component(\"rawDisplayer\", rawDisplayer);\nVue.use(ElementUI);\n\nnew Vue({\n  store,\n  router,\n  render: h => h(App)\n}).$mount(\"#app\");\n"
  },
  {
    "path": "example/route.js",
    "content": "const ctx = require.context(\"./components/\", false, /\\.vue$/);\n\nconst routes = ctx.keys().map(key => ({\n  path: key\n}));\n\nroutes.push({\n  path: \"/\",\n  redirect: \"./simple\"\n});\nexport default routes;\n"
  },
  {
    "path": "example/store.js",
    "content": "import { nested } from \"./components/nested/nested-store\";\nimport Vuex from \"vuex\";\nimport Vue from \"vue\";\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n  namespaced: true,\n  modules: {\n    nested\n  }\n});\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  moduleFileExtensions: [\n    \"js\",\n    \"jsx\",\n    \"json\",\n    \"vue\"\n  ],\n  transform: {\n    \"^.+\\\\.vue$\": \"vue-jest\",\n    \".+\\\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$\": \"jest-transform-stub\",\n    \"^.+\\\\.jsx?$\": \"babel-jest\"\n  },\n  moduleNameMapper: {\n    \"^@/(.*)$\": \"<rootDir>/src/$1\"\n  },\n  snapshotSerializers: [\n    \"jest-serializer-vue\"\n  ],\n  testMatch: [\n    \"**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)\"\n  ],\n  testURL: \"http://localhost/\",\n  collectCoverageFrom: [\n    \"<rootDir>/src/vuedraggable.js\",\n    \"<rootDir>/src/util/helper.js\"\n  ],\n // testEnvironment: \"node\",\n  transformIgnorePatterns: [\n    \"node_modules/(?!(babel-jest|jest-vue-preprocessor)/)\"\n  ],\n};"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"vuedraggable\",\n  \"version\": \"2.24.3\",\n  \"description\": \"draggable component for vue\",\n  \"license\": \"MIT\",\n  \"main\": \"dist/vuedraggable.umd.min.js\",\n  \"types\": \"src/vuedraggable.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/SortableJS/Vue.Draggable.git\"\n  },\n  \"private\": false,\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve ./example/main.js --open --mode local\",\n    \"build:doc\": \"vue-cli-service build ./example/main.js --dest docs --mode development\",\n    \"build\": \"vue-cli-service build --name vuedraggable --entry ./src/vuedraggable.js --target lib\",\n    \"lint\": \"vue-cli-service lint src example\",\n    \"prepublishOnly\": \"npm run lint && npm run test:unit && npm run build:doc && npm run build\",\n    \"test:unit\": \"vue-cli-service test:unit --coverage\",\n    \"test:coverage\": \"vue-cli-service test:unit --coverage --verbose && codecov\"\n  },\n  \"keywords\": [\n    \"vue\",\n    \"vuejs\",\n    \"drag\",\n    \"and\",\n    \"drop\",\n    \"list\",\n    \"Sortable.js\",\n    \"component\",\n    \"nested\"\n  ],\n  \"dependencies\": {\n    \"sortablejs\": \"1.10.2\"\n  },\n  \"devDependencies\": {\n    \"@vue/cli-plugin-babel\": \"^3.11.0\",\n    \"@vue/cli-plugin-eslint\": \"^3.11.0\",\n    \"@vue/cli-plugin-unit-jest\": \"^3.11.0\",\n    \"@vue/cli-service\": \"^3.11.0\",\n    \"@vue/eslint-config-prettier\": \"^4.0.1\",\n    \"@vue/test-utils\": \"^1.1.0\",\n    \"babel-core\": \"7.0.0-bridge.0\",\n    \"babel-eslint\": \"^10.0.1\",\n    \"babel-jest\": \"^23.6.0\",\n    \"bootstrap\": \"^4.3.1\",\n    \"codecov\": \"^3.2.0\",\n    \"component-fixture\": \"^0.4.1\",\n    \"element-ui\": \"^2.5.4\",\n    \"eslint\": \"^5.8.0\",\n    \"eslint-plugin-vue\": \"^5.0.0\",\n    \"font-awesome\": \"^4.7.0\",\n    \"jquery\": \"^3.5.1\",\n    \"vue\": \"^2.6.12\",\n    \"vue-cli-plugin-component\": \"^1.10.5\",\n    \"vue-router\": \"^3.0.2\",\n    \"vue-server-renderer\": \"^2.6.12\",\n    \"vue-template-compiler\": \"^2.6.12\",\n    \"vuetify\": \"^1.5.16\",\n    \"vuex\": \"^3.1.1\"\n  },\n  \"eslintConfig\": {\n    \"root\": true,\n    \"env\": {\n      \"node\": true\n    },\n    \"extends\": [\n      \"plugin:vue/essential\",\n      \"@vue/prettier\"\n    ],\n    \"rules\": {},\n    \"parserOptions\": {\n      \"parser\": \"babel-eslint\"\n    }\n  },\n  \"postcss\": {\n    \"plugins\": {\n      \"autoprefixer\": {}\n    }\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not ie <= 8\"\n  ],\n  \"files\": [\n    \"dist/*.css\",\n    \"dist/*.map\",\n    \"dist/*.js\",\n    \"src/*\"\n  ],\n  \"module\": \"dist/vuedraggable.umd.js\"\n}\n"
  },
  {
    "path": "public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title>vuedraggable</title>\n  </head>\n  <body>\n    <noscript>\n      <strong>We're sorry but vuedraggable doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "src/util/helper.js",
    "content": "function getConsole() {\n  if (typeof window !== \"undefined\") {\n    return window.console;\n  }\n  return global.console;\n}\nconst console = getConsole();\n\nfunction cached(fn) {\n  const cache = Object.create(null);\n  return function cachedFn(str) {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\n\nconst regex = /-(\\w)/g;\nconst camelize = cached(str =>\n  str.replace(regex, (_, c) => (c ? c.toUpperCase() : \"\"))\n);\n\nfunction removeNode(node) {\n  if (node.parentElement !== null) {\n    node.parentElement.removeChild(node);\n  }\n}\n\nfunction insertNodeAt(fatherNode, node, position) {\n  const refNode =\n    position === 0\n      ? fatherNode.children[0]\n      : fatherNode.children[position - 1].nextSibling;\n  fatherNode.insertBefore(node, refNode);\n}\n\nexport { insertNodeAt, camelize, console, removeNode };\n"
  },
  {
    "path": "src/vuedraggable.d.ts",
    "content": "declare module 'vuedraggable' {\n  import Vue, { VueConstructor } from 'vue';\n\n  type CombinedVueInstance<\n    Instance extends Vue,\n    Data,\n    Methods,\n    Computed,\n    Props\n  > = Data & Methods & Computed & Props & Instance;\n\n  type ExtendedVue<\n    Instance extends Vue,\n    Data,\n    Methods,\n    Computed,\n    Props\n  > = VueConstructor<\n    CombinedVueInstance<Instance, Data, Methods, Computed, Props> & Vue\n  >;\n\n  export type DraggedContext<T> = {\n    index: number;\n    futureIndex: number;\n    element: T;\n  };\n\n  export type DropContext<T> = {\n    index: number;\n    component: Vue;\n    element: T;\n  };\n\n  export type Rectangle = {\n    top: number;\n    right: number;\n    bottom: number;\n    left: number;\n    width: number;\n    height: number;\n  };\n\n  export type MoveEvent<T> = {\n    originalEvent: DragEvent;\n    dragged: Element;\n    draggedContext: DraggedContext<T>;\n    draggedRect: Rectangle;\n    related: Element;\n    relatedContext: DropContext<T>;\n    relatedRect: Rectangle;\n    from: Element;\n    to: Element;\n    willInsertAfter: boolean;\n    isTrusted: boolean;\n  };\n\n  const draggable: ExtendedVue<\n    Vue,\n    {},\n    {},\n    {},\n    {\n      options: any;\n      list: any[];\n      value: any[];\n      noTransitionOnDrag?: boolean;\n      clone: any;\n      tag?: string | null;\n      move: any;\n      componentData: any;\n    }\n  >;\n\n  export default draggable;\n}\n"
  },
  {
    "path": "src/vuedraggable.js",
    "content": "import Sortable from \"sortablejs\";\nimport { insertNodeAt, camelize, console, removeNode } from \"./util/helper\";\n\nfunction buildAttribute(object, propName, value) {\n  if (value === undefined) {\n    return object;\n  }\n  object = object || {};\n  object[propName] = value;\n  return object;\n}\n\nfunction computeVmIndex(vnodes, element) {\n  return vnodes.map(elt => elt.elm).indexOf(element);\n}\n\nfunction computeIndexes(slots, children, isTransition, footerOffset) {\n  if (!slots) {\n    return [];\n  }\n\n  const elmFromNodes = slots.map(elt => elt.elm);\n  const footerIndex = children.length - footerOffset;\n  const rawIndexes = [...children].map((elt, idx) =>\n    idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt)\n  );\n  return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes;\n}\n\nfunction emit(evtName, evtData) {\n  this.$nextTick(() => this.$emit(evtName.toLowerCase(), evtData));\n}\n\nfunction delegateAndEmit(evtName) {\n  return evtData => {\n    if (this.realList !== null) {\n      this[\"onDrag\" + evtName](evtData);\n    }\n    emit.call(this, evtName, evtData);\n  };\n}\n\nfunction isTransitionName(name) {\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\n}\n\nfunction isTransition(slots) {\n  if (!slots || slots.length !== 1) {\n    return false;\n  }\n  const [{ componentOptions }] = slots;\n  if (!componentOptions) {\n    return false;\n  }\n  return isTransitionName(componentOptions.tag);\n}\n\nfunction getSlot(slot, scopedSlot, key) {\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\n}\n\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\n  let headerOffset = 0;\n  let footerOffset = 0;\n  const header = getSlot(slot, scopedSlot, \"header\");\n  if (header) {\n    headerOffset = header.length;\n    children = children ? [...header, ...children] : [...header];\n  }\n  const footer = getSlot(slot, scopedSlot, \"footer\");\n  if (footer) {\n    footerOffset = footer.length;\n    children = children ? [...children, ...footer] : [...footer];\n  }\n  return { children, headerOffset, footerOffset };\n}\n\nfunction getComponentAttributes($attrs, componentData) {\n  let attributes = null;\n  const update = (name, value) => {\n    attributes = buildAttribute(attributes, name, value);\n  };\n  const attrs = Object.keys($attrs)\n    .filter(key => key === \"id\" || key.startsWith(\"data-\"))\n    .reduce((res, key) => {\n      res[key] = $attrs[key];\n      return res;\n    }, {});\n  update(\"attrs\", attrs);\n\n  if (!componentData) {\n    return attributes;\n  }\n  const { on, props, attrs: componentDataAttrs } = componentData;\n  update(\"on\", on);\n  update(\"props\", props);\n  Object.assign(attributes.attrs, componentDataAttrs);\n  return attributes;\n}\n\nconst eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\nconst eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\nconst readonlyProperties = [\"Move\", ...eventsListened, ...eventsToEmit].map(\n  evt => \"on\" + evt\n);\nvar draggingElement = null;\n\nconst props = {\n  options: Object,\n  list: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  value: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  noTransitionOnDrag: {\n    type: Boolean,\n    default: false\n  },\n  clone: {\n    type: Function,\n    default: original => {\n      return original;\n    }\n  },\n  element: {\n    type: String,\n    default: \"div\"\n  },\n  tag: {\n    type: String,\n    default: null\n  },\n  move: {\n    type: Function,\n    default: null\n  },\n  componentData: {\n    type: Object,\n    required: false,\n    default: null\n  }\n};\n\nconst draggableComponent = {\n  name: \"draggable\",\n\n  inheritAttrs: false,\n\n  props,\n\n  data() {\n    return {\n      transitionMode: false,\n      noneFunctionalComponentMode: false\n    };\n  },\n\n  render(h) {\n    const slots = this.$slots.default;\n    this.transitionMode = isTransition(slots);\n    const { children, headerOffset, footerOffset } = computeChildrenAndOffsets(\n      slots,\n      this.$slots,\n      this.$scopedSlots\n    );\n    this.headerOffset = headerOffset;\n    this.footerOffset = footerOffset;\n    const attributes = getComponentAttributes(this.$attrs, this.componentData);\n    return h(this.getTag(), attributes, children);\n  },\n\n  created() {\n    if (this.list !== null && this.value !== null) {\n      console.error(\n        \"Value and list props are mutually exclusive! Please set one or another.\"\n      );\n    }\n\n    if (this.element !== \"div\") {\n      console.warn(\n        \"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\"\n      );\n    }\n\n    if (this.options !== undefined) {\n      console.warn(\n        \"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\"\n      );\n    }\n  },\n\n  mounted() {\n    this.noneFunctionalComponentMode =\n      this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() &&\n      !this.getIsFunctional();\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\n      throw new Error(\n        `Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${this.getTag()}`\n      );\n    }\n    const optionsAdded = {};\n    eventsListened.forEach(elt => {\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(this, elt);\n    });\n\n    eventsToEmit.forEach(elt => {\n      optionsAdded[\"on\" + elt] = emit.bind(this, elt);\n    });\n\n    const attributes = Object.keys(this.$attrs).reduce((res, key) => {\n      res[camelize(key)] = this.$attrs[key];\n      return res;\n    }, {});\n\n    const options = Object.assign({}, this.options, attributes, optionsAdded, {\n      onMove: (evt, originalEvent) => {\n        return this.onDragMove(evt, originalEvent);\n      }\n    });\n    !(\"draggable\" in options) && (options.draggable = \">*\");\n    this._sortable = new Sortable(this.rootContainer, options);\n    this.computeIndexes();\n  },\n\n  beforeDestroy() {\n    if (this._sortable !== undefined) this._sortable.destroy();\n  },\n\n  computed: {\n    rootContainer() {\n      return this.transitionMode ? this.$el.children[0] : this.$el;\n    },\n\n    realList() {\n      return this.list ? this.list : this.value;\n    }\n  },\n\n  watch: {\n    options: {\n      handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n\n    $attrs: {\n      handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n\n    realList() {\n      this.computeIndexes();\n    }\n  },\n\n  methods: {\n    getIsFunctional() {\n      const { fnOptions } = this._vnode;\n      return fnOptions && fnOptions.functional;\n    },\n\n    getTag() {\n      return this.tag || this.element;\n    },\n\n    updateOptions(newOptionValue) {\n      for (var property in newOptionValue) {\n        const value = camelize(property);\n        if (readonlyProperties.indexOf(value) === -1) {\n          this._sortable.option(value, newOptionValue[property]);\n        }\n      }\n    },\n\n    getChildrenNodes() {\n      if (this.noneFunctionalComponentMode) {\n        return this.$children[0].$slots.default;\n      }\n      const rawNodes = this.$slots.default;\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n    },\n\n    computeIndexes() {\n      this.$nextTick(() => {\n        this.visibleIndexes = computeIndexes(\n          this.getChildrenNodes(),\n          this.rootContainer.children,\n          this.transitionMode,\n          this.footerOffset\n        );\n      });\n    },\n\n    getUnderlyingVm(htmlElt) {\n      const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n      if (index === -1) {\n        //Edge case during move callback: related element might be\n        //an element different from collection\n        return null;\n      }\n      const element = this.realList[index];\n      return { index, element };\n    },\n\n    getUnderlyingPotencialDraggableComponent({ __vue__: vue }) {\n      if (\n        !vue ||\n        !vue.$options ||\n        !isTransitionName(vue.$options._componentTag)\n      ) {\n        if (\n          !(\"realList\" in vue) &&\n          vue.$children.length === 1 &&\n          \"realList\" in vue.$children[0]\n        )\n          return vue.$children[0];\n\n        return vue;\n      }\n      return vue.$parent;\n    },\n\n    emitChanges(evt) {\n      this.$nextTick(() => {\n        this.$emit(\"change\", evt);\n      });\n    },\n\n    alterList(onList) {\n      if (this.list) {\n        onList(this.list);\n        return;\n      }\n      const newList = [...this.value];\n      onList(newList);\n      this.$emit(\"input\", newList);\n    },\n\n    spliceList() {\n      const spliceList = list => list.splice(...arguments);\n      this.alterList(spliceList);\n    },\n\n    updatePosition(oldIndex, newIndex) {\n      const updatePosition = list =>\n        list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n      this.alterList(updatePosition);\n    },\n\n    getRelatedContextFromMoveEvent({ to, related }) {\n      const component = this.getUnderlyingPotencialDraggableComponent(to);\n      if (!component) {\n        return { component };\n      }\n      const list = component.realList;\n      const context = { list, component };\n      if (to !== related && list && component.getUnderlyingVm) {\n        const destination = component.getUnderlyingVm(related);\n        if (destination) {\n          return Object.assign(destination, context);\n        }\n      }\n      return context;\n    },\n\n    getVmIndex(domIndex) {\n      const indexes = this.visibleIndexes;\n      const numberIndexes = indexes.length;\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n    },\n\n    getComponent() {\n      return this.$slots.default[0].componentInstance;\n    },\n\n    resetTransitionData(index) {\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\n        return;\n      }\n      var nodes = this.getChildrenNodes();\n      nodes[index].data = null;\n      const transitionContainer = this.getComponent();\n      transitionContainer.children = [];\n      transitionContainer.kept = undefined;\n    },\n\n    onDragStart(evt) {\n      this.context = this.getUnderlyingVm(evt.item);\n      evt.item._underlying_vm_ = this.clone(this.context.element);\n      draggingElement = evt.item;\n    },\n\n    onDragAdd(evt) {\n      const element = evt.item._underlying_vm_;\n      if (element === undefined) {\n        return;\n      }\n      removeNode(evt.item);\n      const newIndex = this.getVmIndex(evt.newIndex);\n      this.spliceList(newIndex, 0, element);\n      this.computeIndexes();\n      const added = { element, newIndex };\n      this.emitChanges({ added });\n    },\n\n    onDragRemove(evt) {\n      insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\n      if (evt.pullMode === \"clone\") {\n        removeNode(evt.clone);\n        return;\n      }\n      const oldIndex = this.context.index;\n      this.spliceList(oldIndex, 1);\n      const removed = { element: this.context.element, oldIndex };\n      this.resetTransitionData(oldIndex);\n      this.emitChanges({ removed });\n    },\n\n    onDragUpdate(evt) {\n      removeNode(evt.item);\n      insertNodeAt(evt.from, evt.item, evt.oldIndex);\n      const oldIndex = this.context.index;\n      const newIndex = this.getVmIndex(evt.newIndex);\n      this.updatePosition(oldIndex, newIndex);\n      const moved = { element: this.context.element, oldIndex, newIndex };\n      this.emitChanges({ moved });\n    },\n\n    updateProperty(evt, propertyName) {\n      evt.hasOwnProperty(propertyName) &&\n        (evt[propertyName] += this.headerOffset);\n    },\n\n    computeFutureIndex(relatedContext, evt) {\n      if (!relatedContext.element) {\n        return 0;\n      }\n      const domChildren = [...evt.to.children].filter(\n        el => el.style[\"display\"] !== \"none\"\n      );\n      const currentDOMIndex = domChildren.indexOf(evt.related);\n      const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n      const draggedInList = domChildren.indexOf(draggingElement) !== -1;\n      return draggedInList || !evt.willInsertAfter\n        ? currentIndex\n        : currentIndex + 1;\n    },\n\n    onDragMove(evt, originalEvent) {\n      const onMove = this.move;\n      if (!onMove || !this.realList) {\n        return true;\n      }\n\n      const relatedContext = this.getRelatedContextFromMoveEvent(evt);\n      const draggedContext = this.context;\n      const futureIndex = this.computeFutureIndex(relatedContext, evt);\n      Object.assign(draggedContext, { futureIndex });\n      const sendEvt = Object.assign({}, evt, {\n        relatedContext,\n        draggedContext\n      });\n      return onMove(sendEvt, originalEvent);\n    },\n\n    onDragEnd() {\n      this.computeIndexes();\n      draggingElement = null;\n    }\n  }\n};\n\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\n  window.Vue.component(\"draggable\", draggableComponent);\n}\n\nexport default draggableComponent;\n"
  },
  {
    "path": "tests/unit/.eslintrc.js",
    "content": "module.exports = {\n  env: {\n    jest: true\n  }\n};\n"
  },
  {
    "path": "tests/unit/helper/DraggableWithList.vue",
    "content": "<template>\n  <draggable :list=\"array\" tag=\"span\">\n    <div\n      v-for=\"item in array\"\n      :key=\"item\"\n    >{{item}}</div>\n  </draggable>\n</template>\n<script>\nimport draggable from \"@/vuedraggable\";\n\nexport default {\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n    };\n  }\n};\n</script>\n"
  },
  {
    "path": "tests/unit/helper/DraggableWithModel.vue",
    "content": "<template>\n  <draggable v-model=\"array\" tag=\"span\">\n    <div\n      v-for=\"item in array\"\n      :key=\"item\"\n    >{{item}}</div>\n  </draggable>\n</template>\n<script>\nimport draggable from \"@/vuedraggable\";\n\nexport default {\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n    };\n  }\n};\n</script>\n"
  },
  {
    "path": "tests/unit/helper/DraggableWithTransition.vue",
    "content": "<template>\n  <draggable v-model=\"array\">\n    <transition-group>\n      <div\n        v-for=\"item in array\"\n        :key=\"item\"\n      >{{item}}</div>\n    </transition-group>\n  </draggable>\n</template>\n<script>\nimport draggable from \"@/vuedraggable\";\n\nexport default {\n  components: {\n    draggable\n  },\n  data() {\n    return {\n      array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n    };\n  }\n};\n</script>\n"
  },
  {
    "path": "tests/unit/helper/FakeComponent.js",
    "content": "export default {\n  name: \"Fake\",\n  props: {\n    prop1: {\n      type: String,\n      default: \"string\"\n    }\n  },\n  template: \"<div>{{prop1}}</div>\"\n}"
  },
  {
    "path": "tests/unit/helper/FakeFunctionalComponent.js",
    "content": "export default {\n  name: \"FakeFunctional\",\n  functional:true,\n  props: {\n    prop1: {\n      type: String,\n      default: \"string\"\n    }\n  },\n  render(createElement, context) {\n    return createElement('button', 'Click me');\n  }\n}"
  },
  {
    "path": "tests/unit/util/helper.node.spec.js",
    "content": "/**\n * @jest-environment node\n */\n\nimport { console } from \"@/util/helper\";\n\ndescribe(\"console\", () => {\n  test.each([\n    [\"log\"],\n    [\"warn\"],\n    [\"error\"],\n    [\"info\"],\n  ])(\n    \"has %s function\",\n    (key) => {\n      const actual = console[key];\n      expect(typeof actual).toEqual(\"function\");\n    }\n  )\n});\n"
  },
  {
    "path": "tests/unit/util/helper.spec.js",
    "content": "import { camelize, console } from \"@/util/helper\";\n\ndescribe(\"camelize\", () => {\n  test.each([\n    [\"MyProp\", \"MyProp\"],\n    [\"MyProp\", \"MyProp\"],\n    [\"kebab-case\", \"kebabCase\"],\n    [\"multi-hyphen-string\", \"multiHyphenString\"],\n    [\"drag-class\", \"dragClass\"],\n    [\"test-\", \"test-\"]\n  ])(\n    \"transform %s into %s\",\n    (value, expected) =>{\n      const actual = camelize(value);\n      expect(actual).toEqual(expected);\n    }\n  )\n});\n\ndescribe(\"console\", () => {\n  test.each([\n    [\"log\"],\n    [\"warn\"],\n    [\"error\"],\n    [\"info\"],\n  ])(\n    \"has %s function\",\n    (key) =>{\n      const actual = console[key];\n      expect(typeof actual).toEqual(\"function\");\n    }\n  )\n});"
  },
  {
    "path": "tests/unit/vuedraggable.integrated.spec.js",
    "content": "import { mount } from \"@vue/test-utils\";\nimport Sortable from \"sortablejs\";\njest.genMockFromModule(\"sortablejs\");\njest.mock(\"sortablejs\");\nconst SortableFake = {\n  destroy: jest.fn(),\n  option: jest.fn(),\n};\nSortable.mockImplementation(() => SortableFake);\n\nimport Vue from \"vue\";\nimport DraggableWithList from \"./helper/DraggableWithList\";\nimport DraggableWithModel from \"./helper/DraggableWithList\";\nimport DraggableWithTransition from \"./helper/DraggableWithTransition\";\n\nimport draggable from \"@/vuedraggable\";\n\nlet wrapper;\nlet element;\nlet vm;\n\nfunction getEvent(name) {\n  return Sortable.mock.calls[0][1][name];\n}\n\nconst expectedArray = [0, 1, 3, 4, 5, 6, 7, 2, 8, 9];\nconst expectedDomWithWrapper = (wrapper) =>\n  `<${wrapper}>${expectedArray\n    .map((nu) => `<div>${nu}</div>`)\n    .join(\"\")}</${wrapper}>`;\n\nconst expectedDomNoTransition = expectedDomWithWrapper(\"span\");\nconst expectedDomTransition = `<div>${expectedDomWithWrapper(\n  \"transition-group-stub\"\n)}</div>`;\n\nfunction normalizeHTML(wrapper) {\n  return wrapper.html().replace(/(\\r\\n\\t|\\n|\\r\\t| )/gm, \"\");\n}\n\nfunction expectHTML(wrapper, expected) {\n  const htmlStripped = normalizeHTML(wrapper);\n  expect(htmlStripped).toEqual(expected);\n}\n\ndescribe.each([\n  [DraggableWithList, \"draggable with list\", expectedDomNoTransition, \"span\"],\n  [DraggableWithModel, \"draggable with model\", expectedDomNoTransition, \"span\"],\n  [\n    DraggableWithTransition,\n    \"draggable with transition\",\n    expectedDomTransition,\n    \"transition-group-stub\",\n  ],\n])(\n  \"should update list and DOM with component: %s %s\",\n  (component, _, expectedDom, expectWrapper) => {\n    describe(\"when handling sort\", () => {\n      beforeEach(async () => {\n        jest.resetAllMocks();\n        wrapper = mount(component);\n        vm = wrapper.vm;\n        element = wrapper.find(expectWrapper).element;\n\n        const item = element.children[2];\n        const startEvt = { item };\n        getEvent(\"onStart\")(startEvt);\n        await Vue.nextTick();\n\n        const firstDraggable = element.children[1];\n        element.removeChild(item);\n        element.insertBefore(item, firstDraggable);\n        getEvent(\"onUpdate\")({\n          item,\n          oldIndex: 2,\n          newIndex: 7,\n          from: element,\n        });\n        await Vue.nextTick();\n      });\n\n      it(\"sends a change event\", async () => {\n        const draggableWrapper = wrapper.findComponent(draggable);\n        const expectedEvt = { moved: { element: 2, oldIndex: 2, newIndex: 7 } };\n        expect(draggableWrapper.emitted().change).toEqual([[expectedEvt]]);\n      });\n\n      it(\"update list\", async () => {\n        expect(vm.array).toEqual(expectedArray);\n      });\n\n      it(\"updates DOM\", async () => {\n        expectHTML(wrapper, expectedDom);\n      });\n    });\n  }\n);\n"
  },
  {
    "path": "tests/unit/vuedraggable.script.tag.spec.js",
    "content": "import Vue from \"vue\";\nwindow.Vue = Vue;\n\ndescribe(\"draggable when used with script tag\", () => {\n  it(\"register draggable component\", () => {\n    const draggable = require(\"@/vuedraggable\").default._Ctor[0];\n    const component = Vue.component(\"draggable\");\n    expect(component).toBe(draggable);\n  });\n});"
  },
  {
    "path": "tests/unit/vuedraggable.spec.js",
    "content": "import { mount, shallowMount } from \"@vue/test-utils\";\nimport Sortable from \"sortablejs\";\njest.genMockFromModule(\"sortablejs\");\njest.mock(\"sortablejs\");\nconst SortableFake = {\n  destroy: jest.fn(),\n  option: jest.fn(),\n};\nSortable.mockImplementation(() => SortableFake);\nimport draggable from \"@/vuedraggable\";\nimport Vue from \"vue\";\nimport Fake from \"./helper/FakeComponent.js\";\nimport FakeFunctional from \"./helper/FakeFunctionalComponent.js\";\n\nlet wrapper;\nlet vm;\nlet props;\nlet items;\nlet item;\nlet element;\nlet input;\nconst initialRender =\n  \"<div><header></header><div>a</div><div>b</div><div>c</div><footer></footer></div>\";\nconst initialRenderRaw = \"<div><div>a</div><div>b</div><div>c</div></div>\";\nconst initialRenderTransition =\n  \"<div><transition-group-stub><div>a</div><div>b</div><div>c</div></transition-group-stub></div>\";\n\nfunction normalizeHTML(wrapper) {\n  return wrapper.html().replace(/(\\r\\n\\t|\\n|\\r\\t| )/gm, \"\");\n}\n\nfunction expectHTML(wrapper, expected) {\n  const htmlStripped = normalizeHTML(wrapper);\n  expect(htmlStripped).toEqual(expected);\n}\n\nfunction getEvent(name) {\n  return Sortable.mock.calls[0][1][name];\n}\n\nfunction resetMocks() {\n  Sortable.mockClear();\n  SortableFake.destroy.mockClear();\n  SortableFake.option.mockClear();\n}\n\ndescribe(\"draggable.vue when initialized with list\", () => {\n  beforeEach(() => {\n    resetMocks();\n    items = [\"a\", \"b\", \"c\"];\n    wrapper = shallowMount(draggable, {\n      propsData: {\n        list: items,\n      },\n      attrs: {\n        sortableOption: \"value\",\n        \"to-be-camelized\": true,\n      },\n      slots: {\n        default: items.map((item) => `<div>${item}</div>`),\n        header: \"<header/>\",\n        footer: \"<footer/>\",\n      },\n    });\n    vm = wrapper.vm;\n    props = vm.$options.props;\n    element = wrapper.element;\n  });\n\n  describe(\"when initialized with incorrect props\", () => {\n    const { error } = console;\n    const { warn } = console;\n\n    beforeEach(() => {\n      console.error = jest.fn();\n      console.warn = jest.fn();\n    });\n\n    afterEach(() => {\n      console.error = error;\n      console.warn = warn;\n    });\n\n    it(\"log an error when list and value are both not null\", () => {\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          list: [],\n          value: [],\n        },\n        slots: {\n          default: \"\",\n        },\n      });\n      expect(console.error).toBeCalledWith(\n        \"Value and list props are mutually exclusive! Please set one or another.\"\n      );\n    });\n\n    it(\"warns when options is used\", () => {\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          options: {\n            group: \"led zeppelin\",\n          },\n        },\n        slots: {\n          default: \"\",\n        },\n      });\n      expect(console.warn).toBeCalledWith(\n        \"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\"\n      );\n    });\n\n    it(\"warns when element is used\", () => {\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          element: \"li\",\n        },\n        slots: {\n          default: \"\",\n        },\n      });\n      expect(console.warn).toBeCalledWith(\n        \"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\"\n      );\n    });\n  });\n\n  it(\"instantiate without error\", () => {\n    expect(wrapper).not.toBeUndefined();\n  });\n\n  it(\"has draggable name\", () => {\n    expect(vm.name).not.toBe(\"draggable\");\n  });\n\n  test.each([\n    [\"options\", { type: Object }],\n    [\n      \"list\",\n      {\n        type: Array,\n        required: false,\n        default: null,\n      },\n    ],\n    [\n      \"value\",\n      {\n        type: Array,\n        required: false,\n        default: null,\n      },\n    ],\n    [\n      \"noTransitionOnDrag\",\n      {\n        type: Boolean,\n        default: false,\n      },\n    ],\n    [\n      \"element\",\n      {\n        type: String,\n        default: \"div\",\n      },\n    ],\n    [\n      \"tag\",\n      {\n        type: String,\n        default: null,\n      },\n    ],\n    [\n      \"move\",\n      {\n        type: Function,\n        default: null,\n      },\n    ],\n    [\n      \"componentData\",\n      {\n        type: Object,\n        required: false,\n        default: null,\n      },\n    ],\n  ])(\"should have props %s equal to %o\", (name, value) => {\n    const propsValue = props[name];\n    expect(propsValue).toEqual(value);\n  });\n\n  it(\"has a clone props, defaulting with identity function\", () => {\n    const expected = {};\n    const { clone } = props;\n    expect(clone.type).toBe(Function);\n    expect(clone.default(expected)).toBe(expected);\n  });\n\n  it(\"renders root element correctly\", () => {\n    expect(normalizeHTML(wrapper)).toMatch(/^<div>.*<\\/div>$/);\n  });\n\n  it(\"renders footer slot element correctly\", () => {\n    expect(normalizeHTML(wrapper)).toMatch(/<footer><\\/footer><\\/div>$/);\n  });\n\n  it(\"renders header slot element correctly\", () => {\n    expect(normalizeHTML(wrapper)).toMatch(/^<div><header><\\/header>/);\n  });\n\n  it(\"renders default slot element correctly\", () => {\n    expect(normalizeHTML(wrapper)).toContain(\n      \"<div>a</div><div>b</div><div>c</div>\"\n    );\n  });\n\n  it(\"renders correctly\", () => {\n    expectHTML(wrapper, initialRender);\n  });\n\n  describe.each([\"ul\", \"span\", \"div\"])(\"considering a tag %s\", (tag) => {\n    beforeEach(() => {\n      wrapper = shallowMount(draggable, {\n        propsData: { tag },\n      });\n    });\n\n    it(\"renders tag as root element\", () => {\n      const expectedRegex = new RegExp(`^<${tag}>.*<\\/${tag}>$`);\n      expect(wrapper.html()).toMatch(expectedRegex);\n    });\n\n    it(\"set noneFunctionalComponentMode to false \", () => {\n      const { noneFunctionalComponentMode } = vm;\n      expect(noneFunctionalComponentMode).toBe(false);\n    });\n  });\n\n  it(\"computes indexes\", async () => {\n    await Vue.nextTick();\n    expect(vm.visibleIndexes).toEqual([-1, 0, 1, 2, 3]);\n  });\n\n  it(\"update indexes\", async () => {\n    await Vue.nextTick();\n    const computeIndexes = jest.fn();\n    wrapper.setMethods({ computeIndexes });\n    wrapper.setProps({ list: [\"c\", \"d\", \"e\", \"f\", \"g\"] });\n    await Vue.nextTick();\n    expect(computeIndexes).toHaveBeenCalled();\n  });\n\n  it(\"set realList\", () => {\n    expect(vm.realList).toEqual([\"a\", \"b\", \"c\"]);\n  });\n\n  describe(\"when using component as tag\", () => {\n    beforeEach(() => {\n      input = jest.fn();\n      wrapper = mount(draggable, {\n        propsData: {\n          tag: \"child\",\n          componentData: {\n            on: {\n              input,\n            },\n            attrs: {\n              attribute1: \"value1\",\n            },\n            props: {\n              prop1: \"info\",\n              prop2: true,\n            },\n          },\n        },\n        stubs: {\n          child: Fake,\n        },\n      });\n    });\n\n    it(\"instantiate child component\", async () => {\n      const child = wrapper.find(Fake);\n      expect(child).not.toBeNull();\n    });\n\n    it(\"pass data to tag child\", async () => {\n      const fakeChild = wrapper.find(Fake);\n      expect(fakeChild.props(\"prop1\")).toEqual(\"info\");\n    });\n\n    it(\"pass event listener to tag child\", async () => {\n      const child = wrapper.find(Fake);\n      const evt = { data: 33 };\n      child.vm.$emit(\"input\", evt);\n      expect(input).toHaveBeenCalledWith(evt);\n    });\n\n    it(\"pass attributes to tag child\", async () => {\n      const child = wrapper.find(Fake);\n      const attrValue = child.attributes(\"attribute1\");\n      expect(attrValue).toEqual(\"value1\");\n    });\n  });\n\n  test.each([[Fake, true], [FakeFunctional, false]])(\n    \"when using component as tag\",\n    (component, expectedNoneFunctionalComponentMode) => {\n      wrapper = mount(draggable, {\n        propsData: {\n          tag: \"child\",\n        },\n        stubs: {\n          child: component,\n        },\n      });\n      const {\n        vm: { noneFunctionalComponentMode },\n      } = wrapper;\n      expect(noneFunctionalComponentMode).toBe(\n        expectedNoneFunctionalComponentMode\n      );\n    }\n  );\n\n  it(\"keeps a reference to Sortable instance\", () => {\n    expect(vm._sortable).toBe(SortableFake);\n  });\n\n  it(\"creates sortable instance with options\", () => {\n    expect(Sortable.mock.calls.length).toBe(1);\n    const parameters = Sortable.mock.calls[0];\n    expect(parameters[0]).toBe(element);\n    expect(parameters[1]).toMatchObject({\n      draggable: \">*\",\n      sortableOption: \"value\",\n      toBeCamelized: true,\n    });\n  });\n\n  test.each([\n    [\"onChoose\", \"choose\"],\n    [\"onUnchoose\", \"unchoose\"],\n    [\"onSort\", \"sort\"],\n    [\"onFilter\", \"filter\"],\n    [\"onClone\", \"clone\"],\n  ])(\"when event %s is emitted from sortable\", async (evt, vueEvt) => {\n    const callBack = getEvent(evt);\n    const evtInfo = {\n      data: {},\n    };\n    callBack(evtInfo);\n    await Vue.nextTick();\n    expect(wrapper.emitted()).toEqual({\n      [vueEvt]: [[evtInfo]],\n    });\n  });\n\n  it(\"creates sortable instance with options\", () => {\n    expect(Sortable.mock.calls.length).toBe(1);\n    const parameters = Sortable.mock.calls[0];\n    expect(parameters[0]).toBe(element);\n    expect(parameters[1]).toMatchObject({\n      draggable: \">*\",\n      sortableOption: \"value\",\n      toBeCamelized: true,\n    });\n  });\n\n  describe(\"when add is called\", () => {\n    let newItem;\n    beforeEach(async () => {\n      await Vue.nextTick();\n      newItem = document.createElement(\"div\");\n      const newContent = document.createTextNode(\"d\");\n      newItem.appendChild(newContent);\n      newItem._underlying_vm_ = \"d\";\n      const last = element.children[3];\n      element.insertBefore(newItem, last);\n      const add = getEvent(\"onAdd\");\n      add({\n        item: newItem,\n        newIndex: 3,\n      });\n    });\n\n    it(\"DOM changes should be reverted\", async () => {\n      await Vue.nextTick();\n      expectHTML(wrapper, initialRender);\n    });\n\n    it(\"list should be updated\", async () => {\n      await Vue.nextTick();\n      expect(vm.list).toEqual([\"a\", \"b\", \"d\", \"c\"]);\n    });\n\n    it(\"sends a update event\", async () => {\n      await Vue.nextTick();\n      const expectedEvt = {\n        item: newItem,\n        newIndex: 3,\n      };\n      expect(wrapper.emitted().add).toEqual([[expectedEvt]]);\n    });\n\n    it(\"sends a change event\", async () => {\n      await Vue.nextTick();\n      const expectedEvt = { added: { element: \"d\", newIndex: 2 } };\n      expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n    });\n  });\n\n  describe(\"when initiating a drag operation\", () => {\n    let evt;\n    beforeEach(() => {\n      item = element.children[2];\n      evt = { item };\n      const start = getEvent(\"onStart\");\n      start(evt);\n    });\n\n    it(\"sends a start event\", async () => {\n      await Vue.nextTick();\n      expect(wrapper.emitted()).toEqual({\n        start: [[evt]],\n      });\n    });\n\n    it(\"sets context\", async () => {\n      await Vue.nextTick();\n      expect(vm.context).toEqual({\n        element: \"b\",\n        index: 1,\n      });\n    });\n\n    describe(\"when calling onMove\", () => {\n      let originalEvt;\n      let move;\n      let doMove;\n\n      beforeEach(() => {\n        evt = {\n          to: element,\n          related: element.children[1],\n          willInsertAfter: false,\n        };\n        originalEvt = {\n          domInfo: true,\n        };\n        move = getEvent(\"onMove\");\n        doMove = () => move(evt, originalEvt);\n      });\n\n      it(\"returns true when move props is null\", () => {\n        const actual = doMove();\n        expect(actual).toBe(true);\n      });\n\n      describe(\"when move is set\", () => {\n        let move;\n        beforeEach(() => {\n          move = jest.fn();\n          wrapper.setProps({ move });\n        });\n\n        it(\"calls move with list information\", () => {\n          const expectedEvt = {\n            draggedContext: {\n              element: \"b\",\n              futureIndex: 0,\n              index: 1,\n            },\n            relatedContext: {\n              component: vm,\n              element: \"a\",\n              index: 0,\n              list: [\"a\", \"b\", \"c\"],\n            },\n            to: element,\n            related: element.children[1],\n            willInsertAfter: false,\n          };\n          doMove();\n          expect(move.mock.calls.length).toBe(1);\n          expect(move).toHaveBeenCalledWith(expectedEvt, originalEvt);\n        });\n\n        test.each([\n          [1, false, 0, { element: \"a\", index: 0 }],\n          [2, false, 1, { element: \"b\", index: 1 }],\n          [3, false, 2, { element: \"c\", index: 2 }],\n\n          // Will insert after is not taken into account if the dragging\n          // element is in the target list\n          [1, true, 0, { element: \"a\", index: 0 }],\n          [2, true, 1, { element: \"b\", index: 1 }],\n          [3, true, 2, { element: \"c\", index: 2 }],\n        ])(\n          \"when context is of index %n with insert after %o has futureIndex: %n and context: %o\",\n          (index, willInsertAfter, futureIndex, context) => {\n            evt.willInsertAfter = willInsertAfter;\n            evt.related = element.children[index];\n\n            const expectedEvt = {\n              draggedContext: {\n                element: \"b\",\n                futureIndex,\n                index: 1,\n              },\n              relatedContext: {\n                component: vm,\n                element: context.element,\n                index: context.index,\n                list: [\"a\", \"b\", \"c\"],\n              },\n              to: element,\n              related: element.children[index],\n              willInsertAfter,\n            };\n\n            doMove();\n            expect(move.mock.calls.length).toBe(1);\n            expect(move).toHaveBeenCalledWith(expectedEvt, originalEvt);\n          }\n        );\n\n        test.each([true, false])(\"returns move result %o\", (result) => {\n          move.mockImplementation(() => result);\n          const actual = doMove();\n          expect(actual).toBe(result);\n        });\n      });\n    });\n\n    describe(\"when remove is called\", () => {\n      beforeEach(() => {\n        element.removeChild(item);\n        const remove = getEvent(\"onRemove\");\n        remove({\n          item,\n          oldIndex: 2,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRender);\n      });\n\n      it(\"list should be updated\", async () => {\n        await Vue.nextTick();\n        expect(vm.list).toEqual([\"a\", \"c\"]);\n      });\n\n      it(\"sends a remove event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = { item, oldIndex: 2 };\n        expect(wrapper.emitted().remove).toEqual([[expectedEvt]]);\n      });\n\n      it(\"sends a change event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = { removed: { element: \"b\", oldIndex: 1 } };\n        expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n      });\n    });\n\n    describe.each([[1, [\"b\", \"a\", \"c\"]], [3, [\"a\", \"c\", \"b\"]]])(\n      \"when update is called with new index being %i\",\n      (index, expectedList) => {\n        beforeEach(() => {\n          const firstDraggable = element.children[index];\n          element.removeChild(item);\n          element.insertBefore(item, firstDraggable);\n          const update = getEvent(\"onUpdate\");\n          update({\n            item,\n            oldIndex: 2,\n            newIndex: index,\n            from: element,\n          });\n        });\n\n        it(\"DOM changes should be reverted\", async () => {\n          await Vue.nextTick();\n          expectHTML(wrapper, initialRender);\n        });\n\n        it(\"list should be updated\", async () => {\n          await Vue.nextTick();\n          expect(vm.list).toEqual(expectedList);\n        });\n\n        it(\"sends a update event\", async () => {\n          await Vue.nextTick();\n          const expectedEvt = {\n            item,\n            oldIndex: 2,\n            newIndex: index,\n            from: element,\n          };\n          expect(wrapper.emitted().update).toEqual([[expectedEvt]]);\n        });\n\n        it(\"sends a change event\", async () => {\n          await Vue.nextTick();\n          const expectedEvt = {\n            moved: { element: \"b\", oldIndex: 1, newIndex: index - 1 },\n          };\n          expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n        });\n      }\n    );\n\n    describe(\"when sending DragEnd\", () => {\n      let endEvt;\n      beforeEach(() => {\n        endEvt = {\n          data: \"data\",\n        };\n        const onEnd = getEvent(\"onEnd\");\n        onEnd(endEvt);\n      });\n\n      it(\"sends a update event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().end).toEqual([[endEvt]]);\n      });\n    });\n  });\n\n  describe(\"when initiating a drag operation in clone context\", () => {\n    let evt;\n    beforeEach(() => {\n      resetMocks();\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          list: items,\n        },\n        slots: {\n          default: items.map((item) => `<div>${item}</div>`),\n        },\n      });\n      vm = wrapper.vm;\n      element = wrapper.element;\n      item = element.children[1];\n      evt = { item };\n      const start = getEvent(\"onStart\");\n      start(evt);\n    });\n\n    describe(\"when remove is called\", () => {\n      beforeEach(() => {\n        var clone = item.cloneNode(true);\n        wrapper.element.insertBefore(clone, item);\n        wrapper.element.removeChild(item);\n        const remove = getEvent(\"onRemove\");\n        remove({\n          item,\n          clone,\n          pullMode: \"clone\",\n          oldIndex: 1,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRenderRaw);\n      });\n\n      it(\"list should be not updated\", async () => {\n        await Vue.nextTick();\n        expect(vm.list).toEqual([\"a\", \"b\", \"c\"]);\n      });\n\n      it(\"sends a remove event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().remove).toEqual([\n          [\n            {\n              item,\n              clone: item,\n              pullMode: \"clone\",\n              oldIndex: 1,\n            },\n          ],\n        ]);\n      });\n\n      it(\"does not send a change event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().change).toBeUndefined();\n      });\n    });\n  });\n\n  describe(\"when initiating a drag operation in clone context using a pull function\", () => {\n    let evt;\n    beforeEach(() => {\n      resetMocks();\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          list: items,\n        },\n        attrs: {\n          group: { pull: () => \"clone\" },\n        },\n        slots: {\n          default: items.map((item) => `<div>${item}</div>`),\n        },\n      });\n      vm = wrapper.vm;\n      element = wrapper.element;\n      item = element.children[1];\n      evt = { item };\n      const start = getEvent(\"onStart\");\n      start(evt);\n    });\n\n    describe(\"when remove is called\", () => {\n      beforeEach(() => {\n        var clone = item.cloneNode(true);\n        wrapper.element.insertBefore(clone, item);\n        wrapper.element.removeChild(item);\n        const remove = getEvent(\"onRemove\");\n        remove({\n          item,\n          clone,\n          pullMode: \"clone\",\n          oldIndex: 1,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRenderRaw);\n      });\n\n      it(\"list should be not updated\", async () => {\n        await Vue.nextTick();\n        expect(vm.list).toEqual([\"a\", \"b\", \"c\"]);\n      });\n\n      it(\"does not send a remove event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().remove).toEqual([\n          [\n            {\n              item,\n              clone: item,\n              pullMode: \"clone\",\n              oldIndex: 1,\n            },\n          ],\n        ]);\n      });\n\n      it(\"does not send a change event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().change).toBeUndefined();\n      });\n    });\n  });\n\n  describe(\"when attribute changes:\", () => {\n    const { error } = console;\n    beforeEach(() => {\n      console.error = () => {};\n    });\n    afterEach(() => {\n      console.error = error;\n    });\n\n    test.each([\n      [\"sortableOption\", \"newValue\", \"sortableOption\"],\n      [\"to-be-camelized\", 1, \"toBeCamelized\"],\n    ])(\n      \"attribute %s change for value %o, calls sortable option with %s attribute\",\n      async (attribute, value, sortableAttribute) => {\n        vm.$attrs = { [attribute]: value };\n        await Vue.nextTick();\n        expect(SortableFake.option).toHaveBeenCalledWith(\n          sortableAttribute,\n          value\n        );\n      }\n    );\n\n    test.each([\n      \"Start\",\n      \"Add\",\n      \"Remove\",\n      \"Update\",\n      \"End\",\n      \"Choose\",\n      \"Unchoose\",\n      \"Sort\",\n      \"Filter\",\n      \"Clone\",\n      \"Move\",\n    ])(\"do not call option when updating option on%s\", (callBack) => {\n      vm.$attrs = { [`on${callBack}`]: jest.fn() };\n      expect(SortableFake.option).not.toHaveBeenCalled();\n    });\n  });\n\n  test.each([\n    [\"sortableOption\", \"newValue\", \"sortableOption\"],\n    [\"to-be-camelized\", 1, \"toBeCamelized\"],\n  ])(\n    \"when option %s change for value %o, calls sortable option with %s attribute\",\n    async (attribute, value, sortableAttribute) => {\n      wrapper.setProps({ options: { [attribute]: value } });\n      await Vue.nextTick();\n      expect(SortableFake.option).toHaveBeenCalledWith(\n        sortableAttribute,\n        value\n      );\n    }\n  );\n\n  it(\"does calls Sortable destroy when mounted\", () => {\n    expect(SortableFake.destroy.mock.calls.length).toBe(0);\n  });\n\n  it(\"calls Sortable destroy when destroyed\", () => {\n    wrapper.destroy();\n    expect(SortableFake.destroy).toHaveBeenCalled();\n    expect(SortableFake.destroy.mock.calls.length).toBe(1);\n  });\n\n  it(\"does not throw on destroy when sortable is not set\", () => {\n    delete vm._sortable;\n    expect(() => wrapper.destroy()).not.toThrow();\n  });\n\n  it(\"renders id as html attribute\", () => {\n    wrapper = shallowMount(draggable, {\n      propsData: {\n        list: [],\n      },\n      attrs: {\n        id: \"my-id\",\n      },\n      slots: {\n        default: \"\",\n      },\n    });\n\n    const element = wrapper.find(\"#my-id\");\n    expect(element.is(\"div\")).toBe(true);\n    expect(element.html()).toEqual(wrapper.html());\n  });\n\n  test.each([\n    [\"data-valor\", \"a\"],\n    [\"data-valor2\", \"bd\"],\n    [\"data-attribute\", \"efg\"],\n  ])(\n    \"renders attribute %s with value %s as html attribute\",\n    (attribute, value) => {\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          list: [],\n        },\n        attrs: {\n          [attribute]: value,\n        },\n        slots: {\n          default: \"\",\n        },\n      });\n      const element = wrapper.find(`[${attribute}='${value}']`);\n      expect(element.is(\"div\")).toBe(true);\n      expect(element.html()).toEqual(wrapper.html());\n    }\n  );\n});\n\ndescribe(\"draggable.vue when initialized with value\", () => {\n  beforeEach(() => {\n    Sortable.mockClear();\n    items = [\"a\", \"b\", \"c\"];\n    wrapper = shallowMount(draggable, {\n      propsData: {\n        value: items,\n      },\n      slots: {\n        default: items.map((item) => `<div>${item}</div>`),\n      },\n    });\n    vm = wrapper.vm;\n    props = vm.$options.props;\n    element = wrapper.element;\n  });\n\n  it(\"computes indexes\", async () => {\n    await Vue.nextTick();\n    expect(vm.visibleIndexes).toEqual([0, 1, 2]);\n  });\n\n  it(\"renders correctly\", () => {\n    expectHTML(wrapper, initialRenderRaw);\n  });\n\n  it(\"update indexes\", async () => {\n    await Vue.nextTick();\n    const computeIndexes = jest.fn();\n    wrapper.setMethods({ computeIndexes });\n    wrapper.setProps({ value: [\"c\", \"d\", \"e\", \"f\", \"g\"] });\n    await Vue.nextTick();\n    expect(computeIndexes).toHaveBeenCalled();\n  });\n\n  it(\"set realList\", () => {\n    expect(vm.realList).toEqual([\"a\", \"b\", \"c\"]);\n  });\n\n  it(\"transition mode should be false\", () => {\n    expect(vm.transitionMode).toBe(false);\n  });\n\n  describe(\"when initiating a drag operation\", () => {\n    let evt;\n    beforeEach(() => {\n      item = element.children[1];\n      evt = { item };\n      const start = getEvent(\"onStart\");\n      start(evt);\n    });\n\n    it(\"sends a start event\", async () => {\n      await Vue.nextTick();\n      expect(wrapper.emitted()).toEqual({\n        start: [[evt]],\n      });\n    });\n\n    it(\"sets context\", async () => {\n      await Vue.nextTick();\n      expect(vm.context).toEqual({\n        element: \"b\",\n        index: 1,\n      });\n    });\n\n    describe(\"when remove is called\", () => {\n      beforeEach(() => {\n        element.removeChild(item);\n        const remove = getEvent(\"onRemove\");\n        remove({\n          item,\n          oldIndex: 1,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRenderRaw);\n      });\n\n      it(\"input should with updated value\", async () => {\n        await Vue.nextTick();\n        const expected = [\"a\", \"c\"];\n        expect(wrapper.emitted().input).toEqual([[expected]]);\n      });\n\n      it(\"sends a remove event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = { item, oldIndex: 1 };\n        expect(wrapper.emitted().remove).toEqual([[expectedEvt]]);\n      });\n\n      it(\"sends a change event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = { removed: { element: \"b\", oldIndex: 1 } };\n        expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n      });\n    });\n\n    describe(\"when update is called\", () => {\n      beforeEach(() => {\n        const firstDraggable = element.children[0];\n        element.removeChild(item);\n        element.insertBefore(item, firstDraggable);\n        const update = getEvent(\"onUpdate\");\n        update({\n          item,\n          oldIndex: 1,\n          newIndex: 0,\n          from: element,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRenderRaw);\n      });\n\n      it(\"send an input event\", async () => {\n        await Vue.nextTick();\n        const expected = [\"b\", \"a\", \"c\"];\n        expect(wrapper.emitted().input).toEqual([[expected]]);\n      });\n\n      it(\"sends a update event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = {\n          item,\n          oldIndex: 1,\n          newIndex: 0,\n          from: element,\n        };\n        expect(wrapper.emitted().update).toEqual([[expectedEvt]]);\n      });\n\n      it(\"sends a change event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = {\n          moved: { element: \"b\", oldIndex: 1, newIndex: 0 },\n        };\n        expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n      });\n    });\n\n    describe(\"when sending DragEnd\", () => {\n      let endEvt;\n      beforeEach(() => {\n        endEvt = {\n          data: \"data\",\n        };\n        const onEnd = getEvent(\"onEnd\");\n        onEnd(endEvt);\n      });\n\n      it(\"sends a update event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().end).toEqual([[endEvt]]);\n      });\n    });\n  });\n});\n\ndescribe(\"draggable.vue when initialized with a transition group\", () => {\n  beforeEach(() => {\n    Sortable.mockClear();\n    items = [\"a\", \"b\", \"c\"];\n    const inside = items.map((item) => `<div>${item}</div>`).join(\"\");\n    const template = `<transition-group>${inside}</transition-group>`;\n    wrapper = shallowMount(draggable, {\n      propsData: {\n        value: items,\n      },\n      slots: {\n        default: template,\n      },\n    });\n    vm = wrapper.vm;\n    props = vm.$options.props;\n    element = wrapper.element;\n  });\n\n  it(\"computes indexes\", async () => {\n    await Vue.nextTick();\n    expect(vm.visibleIndexes).toEqual([0, 1, 2]);\n  });\n\n  it(\"set realList\", () => {\n    expect(vm.realList).toEqual([\"a\", \"b\", \"c\"]);\n  });\n\n  it(\"transition mode should be false\", () => {\n    expect(vm.transitionMode).toBe(true);\n  });\n\n  it(\"enders correctly\", () => {\n    expectHTML(wrapper, initialRenderTransition);\n  });\n\n  it(\"creates sortable instance with options on transition root\", () => {\n    expect(Sortable.mock.calls.length).toBe(1);\n    const parameters = Sortable.mock.calls[0];\n    expect(parameters[0]).toBe(element.children[0]);\n  });\n\n  describe(\"when initiating a drag operation\", () => {\n    let evt;\n    beforeEach(() => {\n      item = element.children[0].children[1];\n      evt = { item };\n      const start = getEvent(\"onStart\");\n      start(evt);\n    });\n\n    it(\"sends a start event\", async () => {\n      await Vue.nextTick();\n      expect(wrapper.emitted()).toEqual({\n        start: [[evt]],\n      });\n    });\n\n    it(\"sets context\", async () => {\n      await Vue.nextTick();\n      expect(vm.context).toEqual({\n        element: \"b\",\n        index: 1,\n      });\n    });\n\n    describe(\"when remove is called\", () => {\n      beforeEach(() => {\n        element.children[0].removeChild(item);\n        const remove = getEvent(\"onRemove\");\n        remove({\n          item,\n          oldIndex: 1,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRenderTransition);\n      });\n\n      it(\"input should with updated value\", async () => {\n        await Vue.nextTick();\n        const expected = [\"a\", \"c\"];\n        expect(wrapper.emitted().input).toEqual([[expected]]);\n      });\n\n      it(\"sends a remove event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = { item, oldIndex: 1 };\n        expect(wrapper.emitted().remove).toEqual([[expectedEvt]]);\n      });\n\n      it(\"sends a change event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = { removed: { element: \"b\", oldIndex: 1 } };\n        expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n      });\n    });\n\n    describe(\"when update is called\", () => {\n      beforeEach(() => {\n        const transitionRoot = element.children[0];\n        const firstDraggable = transitionRoot.children[0];\n        transitionRoot.removeChild(item);\n        transitionRoot.insertBefore(item, firstDraggable);\n        const update = getEvent(\"onUpdate\");\n        update({\n          item,\n          oldIndex: 1,\n          newIndex: 0,\n          from: transitionRoot,\n        });\n      });\n\n      it(\"DOM changes should be reverted\", async () => {\n        await Vue.nextTick();\n        expectHTML(wrapper, initialRenderTransition);\n      });\n\n      it(\"send an input event\", async () => {\n        await Vue.nextTick();\n        const expected = [\"b\", \"a\", \"c\"];\n        expect(wrapper.emitted().input).toEqual([[expected]]);\n      });\n\n      it(\"sends a update event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = {\n          item,\n          oldIndex: 1,\n          newIndex: 0,\n          from: element.children[0],\n        };\n        expect(wrapper.emitted().update).toEqual([[expectedEvt]]);\n      });\n\n      it(\"sends a change event\", async () => {\n        await Vue.nextTick();\n        const expectedEvt = {\n          moved: { element: \"b\", oldIndex: 1, newIndex: 0 },\n        };\n        expect(wrapper.emitted().change).toEqual([[expectedEvt]]);\n      });\n    });\n\n    describe(\"when calling onMove\", () => {\n      let originalEvt;\n      let move;\n      let doMove;\n\n      beforeEach(() => {\n        move = jest.fn();\n        wrapper.setProps({ move });\n        evt = {\n          to: element.children[0],\n          related: element.children[0].children[1],\n          willInsertAfter: false,\n        };\n        originalEvt = {\n          domInfo: true,\n        };\n        doMove = () => getEvent(\"onMove\")(evt, originalEvt);\n      });\n\n      it(\"calls move with list information\", () => {\n        const expectedEvt = {\n          draggedContext: {\n            element: \"b\",\n            futureIndex: 1,\n            index: 1,\n          },\n          relatedContext: {\n            component: vm,\n            element: \"b\",\n            index: 1,\n            list: [\"a\", \"b\", \"c\"],\n          },\n          to: element.children[0],\n          related: element.children[0].children[1],\n          willInsertAfter: false,\n        };\n        doMove();\n        expect(move.mock.calls).toEqual([[expectedEvt, originalEvt]]);\n      });\n    });\n\n    describe(\"when sending DragEnd\", () => {\n      let endEvt;\n      beforeEach(() => {\n        endEvt = {\n          data: \"data\",\n        };\n        const onEnd = getEvent(\"onEnd\");\n        onEnd(endEvt);\n      });\n\n      it(\"sends a update event\", async () => {\n        await Vue.nextTick();\n        expect(wrapper.emitted().end).toEqual([[endEvt]]);\n      });\n    });\n  });\n\n  describe(\"draggable.vue when initialized with header and footer scoped slots\", () => {\n    beforeEach(() => {\n      resetMocks();\n      items = [\"a\", \"b\", \"c\"];\n      wrapper = shallowMount(draggable, {\n        propsData: {\n          list: items,\n        },\n        attrs: {\n          sortableOption: \"value\",\n          \"to-be-camelized\": true,\n        },\n        slots: {\n          default: items.map((item) => `<div>${item}</div>`),\n        },\n        scopedSlots: {\n          header: \"<header/>\",\n          footer: \"<footer/>\",\n        },\n      });\n      vm = wrapper.vm;\n      props = vm.$options.props;\n      element = wrapper.element;\n    });\n\n    it(\"renders correctly\", () => {\n      expectHTML(wrapper, initialRender);\n    });\n  });\n});\n"
  },
  {
    "path": "tests/unit/vuedraggable.ssr.spec.js",
    "content": "/**\n * @jest-environment node\n */\n\nconst Vue = require('vue');\nconst renderer = require('vue-server-renderer').createRenderer();\nconst draggable = require(\"@/vuedraggable\").default;\nVue.component('draggable', draggable);\nconst app = new Vue({\n  name: \"test-app\",\n  template: `<draggable :list=\"items\"><div v-for=\"item in items\" :key=\"item\">{{item}}</div></draggable>`,\n  data:{\n    items:[\"a\",\"b\",\"c\"]\n  }\n});\n\nlet html;\n\ndescribe(\"vuedraggable in a SSR context\", () => {\n  beforeEach(async () => {\n    html = await renderer.renderToString(app);\n  });\n\n  it(\"can be rendered\", () => {\n    const expected = '<div data-server-rendered=\"true\"><div>a</div><div>b</div><div>c</div></div>';\n    expect(html).toEqual(expected);\n  })\n})"
  },
  {
    "path": "vue.config.js",
    "content": "const config = {\n  publicPath: \"./\",\n  configureWebpack: { \n    output: {\n      libraryExport: 'default'\n    }\n  }\n}\n\nif (process.env.NODE_ENV === \"production\") {\n  config.configureWebpack.externals = {\n    sortablejs: {\n      commonjs: \"sortablejs\",\n      commonjs2: \"sortablejs\",\n      amd: \"sortablejs\",\n      root: \"Sortable\"\n    }\n  };\n};\n\nmodule.exports = config;"
  }
]