master 6e536767937f cached
123 files
1.4 MB
382.5k tokens
1164 symbols
1 requests
Download .txt
Showing preview only (1,518K chars total). Download the full file or copy to clipboard to get everything.
Repository: jbaysolutions/vue-grid-layout
Branch: master
Commit: 6e536767937f
Files: 123
Total size: 1.4 MB

Directory structure:
gitextract_yc_usgoh/

├── .browserslistrc
├── .eslintrc.js
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   └── workflows/
│       ├── build-test.yml
│       └── vuepress-deploy.yml
├── .gitignore
├── LICENSE
├── README-zh_CN.md
├── README.md
├── babel.config.js
├── dist/
│   ├── vue-grid-layout.common.js
│   └── vue-grid-layout.umd.js
├── jest.config.js
├── package.json
├── postcss.config.js
├── public/
│   ├── app.css
│   └── index.html
├── src/
│   ├── App.vue
│   ├── components/
│   │   ├── CustomDragElement.vue
│   │   ├── GridItem.vue
│   │   ├── GridLayout.vue
│   │   ├── TestElement.vue
│   │   └── index.js
│   ├── helpers/
│   │   ├── DOM.js
│   │   ├── draggableUtils.js
│   │   ├── responsiveUtils.js
│   │   └── utils.js
│   └── main.js
├── test/
│   ├── interact-test.html
│   ├── interact-test.js
│   └── unit/
│       ├── GridItem.spec.js
│       └── utils.spec.js
├── vue.config.js
└── website/
    ├── TODOS.md
    ├── docs/
    │   ├── .vuepress/
    │   │   ├── Autocomplete.js
    │   │   ├── components/
    │   │   │   ├── Example01Basic.vue
    │   │   │   ├── Example02Events.vue
    │   │   │   ├── Example03MultipleGrids.vue
    │   │   │   ├── Example04AllowIgnore.vue
    │   │   │   ├── Example05Mirrored.vue
    │   │   │   ├── Example06Responsive.vue
    │   │   │   ├── Example07PreventCollision.vue
    │   │   │   ├── Example08ResponsivePredefinedLayouts.vue
    │   │   │   ├── Example09DynamicAddRemove.vue
    │   │   │   ├── Example10DragFromOutside.vue
    │   │   │   ├── Example11Bounded.vue
    │   │   │   ├── ExampleStylingGridLines.vue
    │   │   │   ├── ExampleStylingPlaceholder.vue
    │   │   │   ├── HomeFooter.vue
    │   │   │   └── HomepageGrid.vue
    │   │   ├── config.js
    │   │   ├── enhanceApp.js
    │   │   ├── public/
    │   │   │   └── examples/
    │   │   │       ├── 01-basic.html
    │   │   │       ├── 01-basic.js
    │   │   │       ├── 02-events.html
    │   │   │       ├── 02-events.js
    │   │   │       ├── 03-multiple-grids.html
    │   │   │       ├── 04-allow-ignore.html
    │   │   │       ├── 05-mirrored.html
    │   │   │       ├── 06-responsive.html
    │   │   │       ├── 06-responsive.js
    │   │   │       ├── 07-prevent-collision.html
    │   │   │       ├── 07-prevent-collision.js
    │   │   │       ├── 08-responsive-predefined-layouts.html
    │   │   │       ├── 08-responsive-predefined-layouts.js
    │   │   │       ├── 09-dynamic-add-remove.html
    │   │   │       ├── 09-dynamic-add-remove.js
    │   │   │       ├── 10-drag-from-outside.html
    │   │   │       ├── 10-drag-from-outside.js
    │   │   │       ├── 11-bounded.html
    │   │   │       ├── 11-bounded.js
    │   │   │       ├── app.css
    │   │   │       └── vue.js
    │   │   ├── styles/
    │   │   │   └── index.styl
    │   │   └── theme/
    │   │       ├── components/
    │   │       │   ├── CarbonAds.vue
    │   │       │   └── Home.vue
    │   │       ├── index.js
    │   │       └── layouts/
    │   │           └── Layout.vue
    │   ├── README.md
    │   ├── changelog/
    │   │   └── README.md
    │   ├── guide/
    │   │   ├── 01-basic.md
    │   │   ├── 02-events.md
    │   │   ├── 03-multiple-grids.md
    │   │   ├── 04-allow-ignore.md
    │   │   ├── 05-mirrored.md
    │   │   ├── 06-responsive.md
    │   │   ├── 07-prevent-collision.md
    │   │   ├── 08-responsive-predefined-layouts.md
    │   │   ├── 09-dynamic-add-remove.md
    │   │   ├── 10-drag-from-outside.md
    │   │   ├── 11-bounded.md
    │   │   ├── README.md
    │   │   ├── auto-size.md
    │   │   ├── events.md
    │   │   ├── examples.md
    │   │   ├── properties.md
    │   │   ├── styling.md
    │   │   └── usage.md
    │   ├── logo.psd
    │   ├── logo.xcf
    │   └── zh/
    │       ├── README.md
    │       ├── changelog/
    │       │   └── README.md
    │       └── guide/
    │           ├── 01-basic.md
    │           ├── 02-events.md
    │           ├── 03-multiple-grids.md
    │           ├── 04-allow-ignore.md
    │           ├── 05-mirrored.md
    │           ├── 06-responsive.md
    │           ├── 07-prevent-collision.md
    │           ├── 08-responsive-predefined-layouts.md
    │           ├── 09-dynamic-add-remove.md
    │           ├── 10-drag-from-outside.md
    │           ├── 11-bounded.md
    │           ├── README.md
    │           ├── auto-size.md
    │           ├── events.md
    │           ├── examples.md
    │           ├── properties.md
    │           ├── styling.md
    │           └── usage.md
    └── package.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .browserslistrc
================================================
> 1%
last 2 versions
not ie <= 8


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/essential',
    'eslint:recommended'
  ],
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  },
  parserOptions: {
    parser: 'babel-eslint'
  }
}


================================================
FILE: .github/FUNDING.yml
================================================
github: jbaysolutions


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

**Software version (please complete the following information):**
 - Browser [e.g. chrome, safari]
 - Vue Version [e.g. 2.5.7]
 - vue-grid-layout Version: [e.g. 2.3.3]

**Describe the bug**
A clear and concise description of what the bug is.

Please use the [CodeSandbox Template](https://codesandbox.io/s/5wy3rz5z1x?module=%2Fsrc%2FShowcaseLayout.js) to demonstrate your bug. It is much easier for us to help you if you do.


**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

## If you have a feature request, please try to implement it before requesting it. <br/>This is free software and the author is busy with other projects.

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/workflows/build-test.yml
================================================
name: Build and Test

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x, 15.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: Install dependency
      run: yarn
    - name: Lint check
      run: yarn lint
    - name: Build
      run: yarn build
    - name: Unit test
      run: yarn test:unit


================================================
FILE: .github/workflows/vuepress-deploy.yml
================================================
name: Deploy vuepress website
on:
  push:
    branches:
      - master
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@master

      - uses: actions/setup-node@v2
        with:
          node-version: '16'

      - name: vuepress-deploy
        uses: jenkey2011/vuepress-deploy@master
        env:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          TARGET_REPO: jbaysolutions/vue-grid-layout
          TARGET_BRANCH: gh-pages
          BUILD_SCRIPT: cd website && yarn && yarn build
          BUILD_DIR: public


================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
#/dist
dist/demo.html

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

yarn-error.log

website/docs/dist


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2015 greyby

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



================================================
FILE: README-zh_CN.md
================================================
<h1 align="center">vue-grid-layout</h1>

<p align="center">
<a href="https://www.npmjs.com/package/vue-grid-layout"><img src="https://img.shields.io/npm/v/vue-grid-layout.svg"/> <img src="https://img.shields.io/npm/dm/vue-grid-layout.svg"/></a> <a href="https://vuejs.org/"><img src="https://img.shields.io/badge/vue-2.2.x-brightgreen.svg"/></a>
</p>

vue-grid-layout是一个类似于[Gridster](http://dsmorse.github.io/gridster.js/)的栅格布局系统, 适用于Vue.js。 **灵感源自于 [React-Grid-Layout](https://github.com/STRML/react-grid-layout)**

### **当前版本:** 2.4.0 (支持 Vue 2.2+)

### **Vue 2.1.10 及以下请使用 [2.1.3](https://github.com/jbaysolutions/vue-grid-layout/tree/2.1.3)**
### **Vue 1 请使用 [1.0.3](https://github.com/jbaysolutions/vue-grid-layout/tree/1.0.3)**

<br/>

[**[在线演示](https://jbaysolutions.github.io/vue-grid-layout/examples/01-basic.html) | [更新日志](/CHANGELOG.md)**]

[English](./README.md) | 简体中文

<!--
## Table of Contents

- [特性](#%e7%89%b9%e6%80%a7)
- [入门指南](#%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97)
  - [安装](#%e5%ae%89%e8%a3%85)
    - [npm](#npm)
- [如何贡献](#%e5%a6%82%e4%bd%95%e8%b4%a1%e7%8c%ae)
- [待办事项](#%e5%be%85%e5%8a%9e%e4%ba%8b%e9%a1%b9)

## Demos


TODO UPDATE DOCS

Used guide for vue cli build: https://medium.com/justfrontendthings/how-to-create-and-publish-your-own-vuejs-component-library-on-npm-using-vue-cli-28e60943eed3
Also check https://cli.vuejs.org/guide/build-targets.html#library

-->

#### 成功案例

- [DocsFold](https://www.docsfold.com/?utm_source=github&utm_medium=web&utm_campaign=vue-grid-layout)
- [Draxed](https://www.draxed.com/?utm_source=github&utm_medium=web&utm_campaign=vue-grid-layout)
- [Data Providers](https://www.dataproviders.io/?utm_source=github&utm_medium=web&utm_campaign=vue-grid-layout)
- [Cataholic](https://cataholic.glitch.me/)

*您还知悉其他项目? 请创建一个PR,谢谢!*

## 特性

* 可拖拽
* 可调整大小
* 静态部件(不可拖拽、调整大小)
* 拖拽和调整大小时进行边界检查
* 增减部件时避免重建栅格
* 可序列化和还原的布局
* 自动化 RTL 支持
* 响应式


## 入门指南

### 安装

#### npm

    # 使用 npm
	npm install vue-grid-layout --save

    # 使用 yarn
    yarn add vue-grid-layout


引入

```javascript
    import VueGridLayout from 'vue-grid-layout';
```

加入到 Vue 组件

 ```javascript
    export default {
        components: {
            GridLayout: VueGridLayout.GridLayout,
            GridItem: VueGridLayout.GridItem
        },
    // ... data, methods, mounted (), etc.
    }

```

#### 浏览器

在页面中使用已打包好的 [文件](https://github.com/jbaysolutions/vue-grid-layout/releases)。 此时组件已为可用状态。

```html
    <script src="vue-grid-layout.umd.min.js"></script>
```

### 使用

```javascript
	var testLayout = [
	    {"x":0,"y":0,"w":2,"h":2,"i":"0"},
	    {"x":2,"y":0,"w":2,"h":4,"i":"1"},
	    {"x":4,"y":0,"w":2,"h":5,"i":"2"},
	    {"x":6,"y":0,"w":2,"h":3,"i":"3"},
	    {"x":8,"y":0,"w":2,"h":3,"i":"4"},
	    {"x":10,"y":0,"w":2,"h":3,"i":"5"},
	    {"x":0,"y":5,"w":2,"h":5,"i":"6"},
	    {"x":2,"y":5,"w":2,"h":5,"i":"7"},
	    {"x":4,"y":5,"w":2,"h":5,"i":"8"},
	    {"x":6,"y":3,"w":2,"h":4,"i":"9"},
	    {"x":8,"y":4,"w":2,"h":4,"i":"10"},
	    {"x":10,"y":4,"w":2,"h":4,"i":"11"},
	    {"x":0,"y":10,"w":2,"h":5,"i":"12"},
	    {"x":2,"y":10,"w":2,"h":5,"i":"13"},
	    {"x":4,"y":8,"w":2,"h":4,"i":"14"},
	    {"x":6,"y":8,"w":2,"h":4,"i":"15"},
	    {"x":8,"y":10,"w":2,"h":5,"i":"16"},
	    {"x":10,"y":4,"w":2,"h":2,"i":"17"},
	    {"x":0,"y":9,"w":2,"h":3,"i":"18"},
	    {"x":2,"y":6,"w":2,"h":2,"i":"19"}
	];

	new Vue({
	    el: '#app',
	    data: {
	        layout: testLayout,
	    },
	});
```


```html

    <grid-layout
            :layout.sync="layout"
            :col-num="12"
            :row-height="30"
            :is-draggable="true"
            :is-resizable="true"
            :is-mirrored="false"
            :vertical-compact="true"
            :margin="[10, 10]"
            :use-css-transforms="true"
    >

        <grid-item v-for="item in layout"
                   :x="item.x"
                   :y="item.y"
                   :w="item.w"
                   :h="item.h"
                   :i="item.i"
                   :key="item.i">
            {{item.i}}
        </grid-item>
    </grid-layout>
```


### 文档

#### 属性

##### GridLayout

* **layout**

    * type: `Array`
    * required: `true`

    数据源。值必须为 `Array`,其数据项为 `Object`。 每条数据项必须有 `i`, `x`, `y`, `w` 和 `h` 属性。 请参考下面的 `GridItem`。

* **responsiveLayouts**

    * type: `Object`
    * required: `false`
    * default: `{}`

    如果 `responsive` 设置为 `true`,该配置将作为栅格中每个断点的初始布局。键值是断点名称,每项的值都是类似 `layout` 属性定义的数据结构,值必须为 `Array`,其数据项为 `Object`。例如: `{lg: [layout items], md: [layout items]}`。需要注意的是,在创建栅格布局后设置该属性无效。

* **colNum**

    * type: `Number`
    * required: `false`
    * default: `12`

    定义栅格系统的列数,其值需为自然数。

* **rowHeight**

    * type: `Number`
    * required: `false`
    * default: `150`

    每行的高度,单位像素。

* **maxRows**

    * type: `Number`
    * required: `false`
    * default: `Infinity`

    定义最大行数。

* **margin**

    * type: `Array`
    * required: `false`
    * default: `[10, 10]`

    定义栅格中的元素边距。

    值必须是包含两个 `Number`的数组,数组中第一个元素表示水平边距,第二个表示垂直边距,单位为像素。

* **isDraggable**

    * type: `Boolean`
    * required: `false`
    * default: `true`

    标识栅格中的元素是否可拖拽。

* **isResizable**

    * type: `Boolean`
    * required: `false`
    * default: `true`

    标识栅格中的元素是否可调整大小。

* **isMirrored**

    * type: `Boolean`
    * required: `false`
    * default: `false`

    标识栅格中的元素是否可镜像反转。

* **autoSize**

    * type: `Boolean`
    * required: `false`
    * default: `true`

    标识容器是否自动调整大小。

* **verticalCompact**

    * type: `Boolean`
    * required: `false`
    * default: `true`

    标识布局是否垂直压缩。

* **useCssTransforms**

    * type: `Boolean`
    * required: `false`
    * default: `true`

    标识是否使用CSS属性 `transition-property: transform;`。

* **responsive**

    * type: `Boolean`
    * required: `false`
    * default: `false`

    标识布局是否为响应式。

* **breakpoints**

    * type: `Object`
    * required: `false`
    * default: { lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }

    为响应式布局设置断点,其中参数代表不同设备的宽度:lg(large),md(medium),sm(small),xs(extra small)。

* **cols**

    * type: `Object`
    * required: `false`
    * default: { lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }

    设置每个断点对应的列数。

* **useStyleCursor**

    * type: `Boolean`
    * required: `false`
    * default: `true`

    标识是否使用动态鼠标指针样式。当拖动出现卡顿时,将此值设为 `false`也许可以缓解布局问题。

 * **preventCollision**

    * type: `Boolean`
    * default: `false`

    值设置为ture时,栅格只能拖动至空白处。

##### GridItem

* **i**

    * type: `String`
    * required: `true`

    栅格中元素的ID。

* **x**

    * type: `Number`
    * required: `true`

    标识栅格元素位于第几列,需为自然数。

* **y**

    * type: `Number`
    * required: `true`

    标识栅格元素位于第几行,需为自然数。

* **w**

    * type: `Number`
    * required: `true`

    标识栅格元素的初始宽度,值为`colWidth`的倍数。

* **h**

    * type: `Number`
    * required: `true`

    标识栅格元素的初始高度,值为`rowHeight`的倍数。

* **minW**

    * type: `Number`
    * required: `false`
    * default: `1`

    栅格元素的最小宽度,值为`colWidth`的倍数。

    如果`w`小于`minW`,则`minW`的值会被`w`覆盖。

* **minH**

    * type: `Number`
    * required: `false`
    * default: `1`

    栅格元素的最小高度,值为`rowHeight`的倍数。

    如果`h`小于`minH`,则`minH`的值会被`h`覆盖。

* **maxW**

    * type: `Number`
    * required: `false`
    * default: `Infinity`

    栅格元素的最大宽度,值为`colWidth`的倍数。

    如果`w`大于`maxW`,则`maxW`的值会被`w`覆盖。

* **maxH**

    * type: `Number`
    * required: `false`
    * default: `Infinity`

    栅格元素的最大高度,值为`rowHeight`的倍数。

    如果`h`大于`maxH`,则`maxH`的值会被`h`覆盖。

* **isDraggable**

    * type: `Boolean`
    * required: `false`
    * default: `null`

    标识栅格元素是否可拖拽。如果值为`null`则取决于父容器。

* **isResizable**

    * type: `Boolean`
    * required: `false`
    * default: `null`

    标识栅格元素是否可调整大小。如果值为`null`则取决于父容器。

* **static**

    * type: `Boolean`
    * required: `false`
    * default: `false`

    标识栅格元素是否为静态的(无法拖拽、调整大小或被其他元素移动)。

* **dragIgnoreFrom**

    * type: `String`
    * required: `false`
    * default: `'a, button'`

    标识栅格元素中哪些子元素无法触发拖拽事件,值为`css-like`选择器。

    请参考 [interact.js docs](http://interactjs.io/docs/#ignorable-selectors)中的`ignoreFrom`。

* **dragAllowFrom**

    * type: `String`
    * required: `false`
    * default: `null`

    标识栅格元素中哪些子元素可以触发拖拽事件,值为`css-like`选择器。

    如果值为`null`则表示所有子元素(`dragIgnoreFrom`的除外)。

    请参考 [interact.js docs](http://interactjs.io/docs/#ignorable-selectors)中的`allowFrom`。

* **resizeIgnoreFrom**

    * type: `String`
    * required: `false`
    * default: `'a, button'`

    标识栅格元素中哪些子元素无法触发调整大小的事件,值为`css-like`选择器。

    请参考 [interact.js docs](http://interactjs.io/docs/#ignorable-selectors)中的`ignoreFrom`。



#### 事件

每一个栅格元素`grid-item`上都可以添加监听器,用于监听移动和调整大小事件,这样父级Vue对象就可以收到通知。

 [示例](https://jbaysolutions.github.io/vue-grid-layout/examples/02-events.html)

````html

    <grid-layout
            :layout="layout"
            :col-num="12"
            :row-height="30"
            :is-draggable="true"
            :is-resizable="true"
            :vertical-compact="true"
            :margin="[10, 10]"
            :use-css-transforms="true"
            @layout-created="layoutCreatedEvent"
            @layout-before-mount="layoutBeforeMountEvent"
            @layout-mounted="layoutMountedEvent"
            @layout-ready="layoutReadyEvent"
            @layout-updated="layoutUpdatedEvent"
    >

        <grid-item v-for="item in layout"
                   :x="item.x"
                   :y="item.y"
                   :w="item.w"
                   :h="item.h"
                   :i="item.i"
                   :key="item.i"
                   @resize="resizeEvent"
                   @move="moveEvent"
                   @resized="resizedEvent"
                   @moved="movedEvent">
            {{item.i}}
        </grid-item>
    </grid-layout>
````

* **layoutCreatedEvent**

    对应Vue生命周期的`created`

```javascript
    layoutCreatedEvent: function(newLayout){
      console.log("Created layout: ", newLayout)
    }
```

* **layoutBeforeMountEvent**

    对应Vue生命周期的`beforeMount`

```javascript
    layoutBeforeMountEvent: function(newLayout){
      console.log("beforeMount layout: ", newLayout)
    }
```

* **layoutMountedEvent**

    对应Vue生命周期的`mounted`

```javascript
    layoutMountedEvent: function(newLayout){
      console.log("Mounted layout: ", newLayout)
    }
```

* **layoutReadyEvent**

    当完成mount中的所有操作时生成的事件

```javascript
    layoutReadyEvent: function(newLayout){
      console.log("Ready layout: ", newLayout)
    }
```

* **layoutUpdatedEvent**

    更新事件(布局更新或栅格元素的位置重新计算)

```javascript
    layoutUpdatedEvent: function(newLayout){
      console.log("Updated layout: ", newLayout)
    }
```

* **moveEvent**

    移动时的事件

```javascript
    moveEvent: function(i, newX, newY){
        console.log("MOVE i=" + i + ", X=" + newX + ", Y=" + newY);
    },
```

* **resizeEvent**

    调整大小时的事件

```javascript
    resizeEvent: function(i, newH, newW, newHPx, newWPx){
        console.log("RESIZE i=" + i + ", H=" + newH + ", W=" + newW + ", H(px)=" + newHPx + ", W(px)=" + newWPx);
    },
```

* **movedEvent**

    移动后的事件

```javascript
    movedEvent: function(i, newX, newY){
        console.log("MOVED i=" + i + ", X=" + newX + ", Y=" + newY);
    },
```

* **resizedEvent**

    调整大小后的事件

```javascript
    /**
     *
     * @param i the item id/index
     * @param newH new height in grid rows
     * @param newW new width in grid columns
     * @param newHPx new height in pixels
     * @param newWPx new width in pixels
     *
     */
    resizedEvent: function(i, newH, newW, newHPx, newWPx){
        console.log("RESIZED i=" + i + ", H=" + newH + ", W=" + newW + ", H(px)=" + newHPx + ", W(px)=" + newWPx);
    },
```


## 如何贡献

请提交issue或PR。


## 待办事项

- [x] 基础栅格布局
- [x] 响应式
- [x] 可拖拽的栅格元素
- [x] 可调整大小的栅格元素
- [x] 静态元素
- [x] 每个元素的Min/max w/h


================================================
FILE: README.md
================================================
<p align="center"><a href="https://jbaysolutions.github.io/vue-grid-layout/" target="_blank" rel="noopener noreferrer"><img width="100" src="https://jbaysolutions.github.io/vue-grid-layout/assets/img/logo.png" alt="Vue Grid Layout"></a></p>

<h1 align="center">vue-grid-layout</h1>

<p align="center">
<a href="https://www.npmjs.com/package/vue-grid-layout">
    <img src="https://img.shields.io/npm/v/vue-grid-layout.svg"/> 
    <img src="https://img.shields.io/npm/dm/vue-grid-layout.svg"/>
</a> 
<a href="https://github.com/jbaysolutions/vue-grid-layout/releases">
    <img src="https://img.shields.io/github/size/jbaysolutions/vue-grid-layout/dist/vue-grid-layout.umd.min.js"/>
</a>
<!--a href="https://vuejs.org/">
    <img src="https://img.shields.io/badge/vue-2.2.x-brightgreen.svg"/>
</a-->
</p>
<h2 align="center">
<a href="https://jbaysolutions.github.io/vue-grid-layout/" target="_blank">Documentation Website</a>
</h2>

## What is Vue Grid Layout?

vue-grid-layout is a grid layout system, like [Gridster](http://dsmorse.github.io/gridster.js/), for Vue.js. **Heavily inspired by [React-Grid-Layout](https://github.com/STRML/react-grid-layout)**

## Features

* Draggable widgets
* Resizable widgets
* Static widgets
* Bounds checking for dragging and resizing
* Widgets may be added or removed without rebuilding grid
* Layout can be serialized and restored
* Automatic RTL support (resizing not working with RTL on 2.2.0)
* Responsive

## **Current version:** 2.4.0 (Supports Vue 2.2+)

#### **For legacy browsers**, like IE11, use version [2.3.12-legacy](https://github.com/jbaysolutions/vue-grid-layout/tree/legacy)
#### **For Vue 2.1.10 and below use version [2.1.3](https://github.com/jbaysolutions/vue-grid-layout/tree/2.1.3)**
#### **For Vue 1 use version [1.0.3](https://github.com/jbaysolutions/vue-grid-layout/tree/1.0.3)** 

## Documentation

Check out the <a href="https://jbaysolutions.github.io/vue-grid-layout/" target="_blank">Documentation Website</a>

<!--
Chinese documentation: [简体中文](./README-zh_CN.md) 
-->

#### Projects using vue-grid-layout

- [DocsFold](https://www.docsfold.com/?utm_source=github&utm_medium=web&utm_campaign=vue-grid-layout)
- [Draxed](https://www.draxed.com/?utm_source=github&utm_medium=web&utm_campaign=vue-grid-layout)
- [Data Providers](https://www.dataproviders.io/?utm_source=github&utm_medium=web&utm_campaign=vue-grid-layout)
- [Cataholic](https://cataholic.glitch.me/)

*Know of others? Create a PR to let me know!*


## Contribute

If you have a feature request, please add it as an issue or make a pull request.


Developed by <a href="https://www.jbaysolutions.com">JBay Solutions</a> 


================================================
FILE: babel.config.js
================================================
module.exports = {
    presets: [
        '@vue/app',
        '@babel/preset-env'
    ],
    "plugins": [
        "transform-flow-comments"
    ]
}


================================================
FILE: dist/vue-grid-layout.common.js
================================================
/*! vue-grid-layout - 2.4.0 | (c) 2015, 2022  Gustavo Santos (JBay Solutions) <gustavo.santos@jbaysolutions.com> (http://www.jbaysolutions.com) | https://github.com/jbaysolutions/vue-grid-layout */
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "fb15");
/******/ })
/************************************************************************/
/******/ ({

/***/ "01f9":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__("2d00");
var $export = __webpack_require__("5ca1");
var redefine = __webpack_require__("2aba");
var hide = __webpack_require__("32e9");
var Iterators = __webpack_require__("84f2");
var $iterCreate = __webpack_require__("41a0");
var setToStringTag = __webpack_require__("7f20");
var getPrototypeOf = __webpack_require__("38fd");
var ITERATOR = __webpack_require__("2b4c")('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
var VALUES = 'values';

var returnThis = function () { return this; };

module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  $iterCreate(Constructor, NAME, next);
  var getMethod = function (kind) {
    if (!BUGGY && kind in proto) return proto[kind];
    switch (kind) {
      case KEYS: return function keys() { return new Constructor(this, kind); };
      case VALUES: return function values() { return new Constructor(this, kind); };
    } return function entries() { return new Constructor(this, kind); };
  };
  var TAG = NAME + ' Iterator';
  var DEF_VALUES = DEFAULT == VALUES;
  var VALUES_BUG = false;
  var proto = Base.prototype;
  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  var $default = $native || getMethod(DEFAULT);
  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  var methods, key, IteratorPrototype;
  // Fix native
  if ($anyNative) {
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEF_VALUES && $native && $native.name !== VALUES) {
    VALUES_BUG = true;
    $default = function values() { return $native.call(this); };
  }
  // Define iterator
  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG] = returnThis;
  if (DEFAULT) {
    methods = {
      values: DEF_VALUES ? $default : getMethod(VALUES),
      keys: IS_SET ? $default : getMethod(KEYS),
      entries: $entries
    };
    if (FORCED) for (key in methods) {
      if (!(key in proto)) redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};


/***/ }),

/***/ "02f4":
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__("4588");
var defined = __webpack_require__("be13");
// true  -> String#at
// false -> String#codePointAt
module.exports = function (TO_STRING) {
  return function (that, pos) {
    var s = String(defined(that));
    var i = toInteger(pos);
    var l = s.length;
    var a, b;
    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};


/***/ }),

/***/ "0390":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var at = __webpack_require__("02f4")(true);

 // `AdvanceStringIndex` abstract operation
// https://tc39.github.io/ecma262/#sec-advancestringindex
module.exports = function (S, index, unicode) {
  return index + (unicode ? at(S, index).length : 1);
};


/***/ }),

/***/ "0bfb":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 21.2.5.3 get RegExp.prototype.flags
var anObject = __webpack_require__("cb7c");
module.exports = function () {
  var that = anObject(this);
  var result = '';
  if (that.global) result += 'g';
  if (that.ignoreCase) result += 'i';
  if (that.multiline) result += 'm';
  if (that.unicode) result += 'u';
  if (that.sticky) result += 'y';
  return result;
};


/***/ }),

/***/ "0d58":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__("ce10");
var enumBugKeys = __webpack_require__("e11e");

module.exports = Object.keys || function keys(O) {
  return $keys(O, enumBugKeys);
};


/***/ }),

/***/ "1156":
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__("ad20");
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = __webpack_require__("499e").default
var update = add("c1ec597e", content, true, {"sourceMap":false,"shadowMode":false});

/***/ }),

/***/ "11e9":
/***/ (function(module, exports, __webpack_require__) {

var pIE = __webpack_require__("52a7");
var createDesc = __webpack_require__("4630");
var toIObject = __webpack_require__("6821");
var toPrimitive = __webpack_require__("6a99");
var has = __webpack_require__("69a8");
var IE8_DOM_DEFINE = __webpack_require__("c69a");
var gOPD = Object.getOwnPropertyDescriptor;

exports.f = __webpack_require__("9e1e") ? gOPD : function getOwnPropertyDescriptor(O, P) {
  O = toIObject(O);
  P = toPrimitive(P, true);
  if (IE8_DOM_DEFINE) try {
    return gOPD(O, P);
  } catch (e) { /* empty */ }
  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
};


/***/ }),

/***/ "1495":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc");
var anObject = __webpack_require__("cb7c");
var getKeys = __webpack_require__("0d58");

module.exports = __webpack_require__("9e1e") ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = getKeys(Properties);
  var length = keys.length;
  var i = 0;
  var P;
  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  return O;
};


/***/ }),

/***/ "18d2":
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/**
 * Resize detection strategy that injects objects to elements in order to detect resize events.
 * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/
 */



var browserDetector = __webpack_require__("18e9");

module.exports = function(options) {
    options             = options || {};
    var reporter        = options.reporter;
    var batchProcessor  = options.batchProcessor;
    var getState        = options.stateHandler.getState;

    if(!reporter) {
        throw new Error("Missing required dependency: reporter.");
    }

    /**
     * Adds a resize event listener to the element.
     * @public
     * @param {element} element The element that should have the listener added.
     * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.
     */
    function addListener(element, listener) {
        function listenerProxy() {
            listener(element);
        }

        if(browserDetector.isIE(8)) {
            //IE 8 does not support object, but supports the resize event directly on elements.
            getState(element).object = {
                proxy: listenerProxy
            };
            element.attachEvent("onresize", listenerProxy);
        } else {
            var object = getObject(element);

            if(!object) {
                throw new Error("Element is not detectable by this strategy.");
            }

            object.contentDocument.defaultView.addEventListener("resize", listenerProxy);
        }
    }

    function buildCssTextString(rules) {
        var seperator = options.important ? " !important; " : "; ";

        return (rules.join(seperator) + seperator).trim();
    }

    /**
     * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.
     * @private
     * @param {object} options Optional options object.
     * @param {element} element The element to make detectable
     * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.
     */
    function makeDetectable(options, element, callback) {
        if (!callback) {
            callback = element;
            element = options;
            options = null;
        }

        options = options || {};
        var debug = options.debug;

        function injectObject(element, callback) {
            var OBJECT_STYLE = buildCssTextString(["display: block", "position: absolute", "top: 0", "left: 0", "width: 100%", "height: 100%", "border: none", "padding: 0", "margin: 0", "opacity: 0", "z-index: -1000", "pointer-events: none"]);

            //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.

            // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.
            var positionCheckPerformed = false;

            // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.
            // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.
            var style = window.getComputedStyle(element);
            var width = element.offsetWidth;
            var height = element.offsetHeight;

            getState(element).startSize = {
                width: width,
                height: height
            };

            function mutateDom() {
                function alterPositionStyles() {
                    if(style.position === "static") {
                        element.style.setProperty("position", "relative", options.important ? "important" : "");

                        var removeRelativeStyles = function(reporter, element, style, property) {
                            function getNumericalValue(value) {
                                return value.replace(/[^-\d\.]/g, "");
                            }

                            var value = style[property];

                            if(value !== "auto" && getNumericalValue(value) !== "0") {
                                reporter.warn("An element that is positioned static has style." + property + "=" + value + " which is ignored due to the static positioning. The element will need to be positioned relative, so the style." + property + " will be set to 0. Element: ", element);
                                element.style.setProperty(property, "0", options.important ? "important" : "");
                            }
                        };

                        //Check so that there are no accidental styles that will make the element styled differently now that is is relative.
                        //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).
                        removeRelativeStyles(reporter, element, style, "top");
                        removeRelativeStyles(reporter, element, style, "right");
                        removeRelativeStyles(reporter, element, style, "bottom");
                        removeRelativeStyles(reporter, element, style, "left");
                    }
                }

                function onObjectLoad() {
                    // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.
                    if (!positionCheckPerformed) {
                        alterPositionStyles();
                    }

                    /*jshint validthis: true */

                    function getDocument(element, callback) {
                        //Opera 12 seem to call the object.onload before the actual document has been created.
                        //So if it is not present, poll it with an timeout until it is present.
                        //TODO: Could maybe be handled better with object.onreadystatechange or similar.
                        if(!element.contentDocument) {
                            var state = getState(element);
                            if (state.checkForObjectDocumentTimeoutId) {
                                window.clearTimeout(state.checkForObjectDocumentTimeoutId);
                            }
                            state.checkForObjectDocumentTimeoutId = setTimeout(function checkForObjectDocument() {
                                state.checkForObjectDocumentTimeoutId = 0;
                                getDocument(element, callback);
                            }, 100);

                            return;
                        }

                        callback(element.contentDocument);
                    }

                    //Mutating the object element here seems to fire another load event.
                    //Mutating the inner document of the object element is fine though.
                    var objectElement = this;

                    //Create the style element to be added to the object.
                    getDocument(objectElement, function onObjectDocumentReady(objectDocument) {
                        //Notify that the element is ready to be listened to.
                        callback(element);
                    });
                }

                // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.
                // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.
                if (style.position !== "") {
                    alterPositionStyles(style);
                    positionCheckPerformed = true;
                }

                //Add an object element as a child to the target element that will be listened to for resize events.
                var object = document.createElement("object");
                object.style.cssText = OBJECT_STYLE;
                object.tabIndex = -1;
                object.type = "text/html";
                object.setAttribute("aria-hidden", "true");
                object.onload = onObjectLoad;

                //Safari: This must occur before adding the object to the DOM.
                //IE: Does not like that this happens before, even if it is also added after.
                if(!browserDetector.isIE()) {
                    object.data = "about:blank";
                }

                if (!getState(element)) {
                    // The element has been uninstalled before the actual loading happened.
                    return;
                }

                element.appendChild(object);
                getState(element).object = object;

                //IE: This must occur after adding the object to the DOM.
                if(browserDetector.isIE()) {
                    object.data = "about:blank";
                }
            }

            if(batchProcessor) {
                batchProcessor.add(mutateDom);
            } else {
                mutateDom();
            }
        }

        if(browserDetector.isIE(8)) {
            //IE 8 does not support objects properly. Luckily they do support the resize event.
            //So do not inject the object and notify that the element is already ready to be listened to.
            //The event handler for the resize event is attached in the utils.addListener instead.
            callback(element);
        } else {
            injectObject(element, callback);
        }
    }

    /**
     * Returns the child object of the target element.
     * @private
     * @param {element} element The target element.
     * @returns The object element of the target.
     */
    function getObject(element) {
        return getState(element).object;
    }

    function uninstall(element) {
        if (!getState(element)) {
            return;
        }

        var object = getObject(element);

        if (!object) {
            return;
        }

        if (browserDetector.isIE(8)) {
            element.detachEvent("onresize", object.proxy);
        } else {
            element.removeChild(object);
        }

        if (getState(element).checkForObjectDocumentTimeoutId) {
            window.clearTimeout(getState(element).checkForObjectDocumentTimeoutId);
        }

        delete getState(element).object;
    }

    return {
        makeDetectable: makeDetectable,
        addListener: addListener,
        uninstall: uninstall
    };
};


/***/ }),

/***/ "18e9":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var detector = module.exports = {};

detector.isIE = function(version) {
    function isAnyIeVersion() {
        var agent = navigator.userAgent.toLowerCase();
        return agent.indexOf("msie") !== -1 || agent.indexOf("trident") !== -1 || agent.indexOf(" edge/") !== -1;
    }

    if(!isAnyIeVersion()) {
        return false;
    }

    if(!version) {
        return true;
    }

    //Shamelessly stolen from https://gist.github.com/padolsey/527683
    var ieVersion = (function(){
        var undef,
            v = 3,
            div = document.createElement("div"),
            all = div.getElementsByTagName("i");

        do {
            div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->";
        }
        while (all[0]);

        return v > 4 ? v : undef;
    }());

    return version === ieVersion;
};

detector.isLegacyOpera = function() {
    return !!window.opera;
};


/***/ }),

/***/ "1ca7":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getDocumentDir; });
/* unused harmony export setDocumentDir */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addWindowEventListener; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return removeWindowEventListener; });
var currentDir
/*: "ltr" | "rtl" | "auto"*/
= "auto"; // let currentDir = "auto";

function hasDocument() {
  return typeof document !== "undefined";
}

function hasWindow() {
  return typeof window !== "undefined";
}

function getDocumentDir() {
  if (!hasDocument()) {
    return currentDir;
  }

  var direction = typeof document.dir !== "undefined" ? document.dir : document.getElementsByTagName("html")[0].getAttribute("dir");
  return direction;
}
function setDocumentDir(dir
/*: "ltr" | "rtl" | "auto"*/
) {
  // export function setDocumentDir(dir){
  if (!hasDocument) {
    currentDir = dir;
    return;
  }

  var html = document.getElementsByTagName("html")[0];
  html.setAttribute("dir", dir);
}
function addWindowEventListener(event
/*:string*/
, callback
/*: () => mixed*/
) {
  if (!hasWindow) {
    callback();
    return;
  }

  window.addEventListener(event, callback);
}
function removeWindowEventListener(event
/*:string*/
, callback
/*: () => mixed*/
) {
  if (!hasWindow) {
    return;
  }

  window.removeEventListener(event, callback);
}

/***/ }),

/***/ "214f":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

__webpack_require__("b0c5");
var redefine = __webpack_require__("2aba");
var hide = __webpack_require__("32e9");
var fails = __webpack_require__("79e5");
var defined = __webpack_require__("be13");
var wks = __webpack_require__("2b4c");
var regexpExec = __webpack_require__("520a");

var SPECIES = wks('species');

var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
  // #replace needs built-in support for named groups.
  // #match works fine because it just return the exec results, even if it has
  // a "grops" property.
  var re = /./;
  re.exec = function () {
    var result = [];
    result.groups = { a: '7' };
    return result;
  };
  return ''.replace(re, '$<a>') !== '7';
});

var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {
  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
  var re = /(?:)/;
  var originalExec = re.exec;
  re.exec = function () { return originalExec.apply(this, arguments); };
  var result = 'ab'.split(re);
  return result.length === 2 && result[0] === 'a' && result[1] === 'b';
})();

module.exports = function (KEY, length, exec) {
  var SYMBOL = wks(KEY);

  var DELEGATES_TO_SYMBOL = !fails(function () {
    // String methods call symbol-named RegEp methods
    var O = {};
    O[SYMBOL] = function () { return 7; };
    return ''[KEY](O) != 7;
  });

  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {
    // Symbol-named RegExp methods call .exec
    var execCalled = false;
    var re = /a/;
    re.exec = function () { execCalled = true; return null; };
    if (KEY === 'split') {
      // RegExp[@@split] doesn't call the regex's exec method, but first creates
      // a new one. We need to return the patched regex when creating the new one.
      re.constructor = {};
      re.constructor[SPECIES] = function () { return re; };
    }
    re[SYMBOL]('');
    return !execCalled;
  }) : undefined;

  if (
    !DELEGATES_TO_SYMBOL ||
    !DELEGATES_TO_EXEC ||
    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||
    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
  ) {
    var nativeRegExpMethod = /./[SYMBOL];
    var fns = exec(
      defined,
      SYMBOL,
      ''[KEY],
      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {
        if (regexp.exec === regexpExec) {
          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
            // The native String method already delegates to @@method (this
            // polyfilled function), leasing to infinite recursion.
            // We avoid it by directly calling the native @@method method.
            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
          }
          return { done: true, value: nativeMethod.call(str, regexp, arg2) };
        }
        return { done: false };
      }
    );
    var strfn = fns[0];
    var rxfn = fns[1];

    redefine(String.prototype, KEY, strfn);
    hide(RegExp.prototype, SYMBOL, length == 2
      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
      ? function (string, arg) { return rxfn.call(string, this, arg); }
      // 21.2.5.6 RegExp.prototype[@@match](string)
      // 21.2.5.9 RegExp.prototype[@@search](string)
      : function (string) { return rxfn.call(string, this); }
    );
  }
};


/***/ }),

/***/ "230e":
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__("d3f4");
var document = __webpack_require__("7726").document;
// typeof document.createElement is 'object' in old IE
var is = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
  return is ? document.createElement(it) : {};
};


/***/ }),

/***/ "2350":
/***/ (function(module, exports) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
module.exports = function(useSourceMap) {
	var list = [];

	// return the list of modules as css string
	list.toString = function toString() {
		return this.map(function (item) {
			var content = cssWithMappingToString(item, useSourceMap);
			if(item[2]) {
				return "@media " + item[2] + "{" + content + "}";
			} else {
				return content;
			}
		}).join("");
	};

	// import a list of modules into the list
	list.i = function(modules, mediaQuery) {
		if(typeof modules === "string")
			modules = [[null, modules, ""]];
		var alreadyImportedModules = {};
		for(var i = 0; i < this.length; i++) {
			var id = this[i][0];
			if(typeof id === "number")
				alreadyImportedModules[id] = true;
		}
		for(i = 0; i < modules.length; i++) {
			var item = modules[i];
			// skip already imported module
			// this implementation is not 100% perfect for weird media query combinations
			//  when a module is imported multiple times with different media queries.
			//  I hope this will never occur (Hey this way we have smaller bundles)
			if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
				if(mediaQuery && !item[2]) {
					item[2] = mediaQuery;
				} else if(mediaQuery) {
					item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
				}
				list.push(item);
			}
		}
	};
	return list;
};

function cssWithMappingToString(item, useSourceMap) {
	var content = item[1] || '';
	var cssMapping = item[3];
	if (!cssMapping) {
		return content;
	}

	if (useSourceMap && typeof btoa === 'function') {
		var sourceMapping = toComment(cssMapping);
		var sourceURLs = cssMapping.sources.map(function (source) {
			return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
		});

		return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
	}

	return [content].join('\n');
}

// Adapted from convert-source-map (MIT)
function toComment(sourceMap) {
	// eslint-disable-next-line no-undef
	var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
	var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;

	return '/*# ' + data + ' */';
}


/***/ }),

/***/ "23c6":
/***/ (function(module, exports, __webpack_require__) {

// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__("2d95");
var TAG = __webpack_require__("2b4c")('toStringTag');
// ES3 wrong here
var ARG = cof(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (e) { /* empty */ }
};

module.exports = function (it) {
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};


/***/ }),

/***/ "2621":
/***/ (function(module, exports) {

exports.f = Object.getOwnPropertySymbols;


/***/ }),

/***/ "2877":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
/* globals __VUE_SSR_CONTEXT__ */

// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.

function normalizeComponent (
  scriptExports,
  render,
  staticRenderFns,
  functionalTemplate,
  injectStyles,
  scopeId,
  moduleIdentifier, /* server only */
  shadowMode /* vue-cli only */
) {
  // Vue.extend constructor export interop
  var options = typeof scriptExports === 'function'
    ? scriptExports.options
    : scriptExports

  // render functions
  if (render) {
    options.render = render
    options.staticRenderFns = staticRenderFns
    options._compiled = true
  }

  // functional template
  if (functionalTemplate) {
    options.functional = true
  }

  // scopedId
  if (scopeId) {
    options._scopeId = 'data-v-' + scopeId
  }

  var hook
  if (moduleIdentifier) { // server build
    hook = function (context) {
      // 2.3 injection
      context =
        context || // cached call
        (this.$vnode && this.$vnode.ssrContext) || // stateful
        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
      // 2.2 with runInNewContext: true
      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
        context = __VUE_SSR_CONTEXT__
      }
      // inject component styles
      if (injectStyles) {
        injectStyles.call(this, context)
      }
      // register component module identifier for async chunk inferrence
      if (context && context._registeredComponents) {
        context._registeredComponents.add(moduleIdentifier)
      }
    }
    // used by ssr in case component is cached and beforeCreate
    // never gets called
    options._ssrRegister = hook
  } else if (injectStyles) {
    hook = shadowMode
      ? function () {
        injectStyles.call(
          this,
          (options.functional ? this.parent : this).$root.$options.shadowRoot
        )
      }
      : injectStyles
  }

  if (hook) {
    if (options.functional) {
      // for template-only hot-reload because in that case the render fn doesn't
      // go through the normalizer
      options._injectStyles = hook
      // register for functional component in vue file
      var originalRender = options.render
      options.render = function renderWithStyleInjection (h, context) {
        hook.call(context)
        return originalRender(h, context)
      }
    } else {
      // inject component registration as beforeCreate hook
      var existing = options.beforeCreate
      options.beforeCreate = existing
        ? [].concat(existing, hook)
        : [hook]
    }
  }

  return {
    exports: scriptExports,
    options: options
  }
}


/***/ }),

/***/ "2aba":
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__("7726");
var hide = __webpack_require__("32e9");
var has = __webpack_require__("69a8");
var SRC = __webpack_require__("ca5a")('src');
var $toString = __webpack_require__("fa5b");
var TO_STRING = 'toString';
var TPL = ('' + $toString).split(TO_STRING);

__webpack_require__("8378").inspectSource = function (it) {
  return $toString.call(it);
};

(module.exports = function (O, key, val, safe) {
  var isFunction = typeof val == 'function';
  if (isFunction) has(val, 'name') || hide(val, 'name', key);
  if (O[key] === val) return;
  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
  if (O === global) {
    O[key] = val;
  } else if (!safe) {
    delete O[key];
    hide(O, key, val);
  } else if (O[key]) {
    O[key] = val;
  } else {
    hide(O, key, val);
  }
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
  return typeof this == 'function' && this[SRC] || $toString.call(this);
});


/***/ }),

/***/ "2aeb":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__("cb7c");
var dPs = __webpack_require__("1495");
var enumBugKeys = __webpack_require__("e11e");
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = __webpack_require__("230e")('iframe');
  var i = enumBugKeys.length;
  var lt = '<';
  var gt = '>';
  var iframeDocument;
  iframe.style.display = 'none';
  __webpack_require__("fab2").appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty();
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};


/***/ }),

/***/ "2af9":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return install; });
/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("7f7f");
/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("cadf");
/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("456d");
/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("ac6a");
/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _GridItem_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("bc21");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _GridItem_vue__WEBPACK_IMPORTED_MODULE_4__["a"]; });

/* harmony import */ var _GridLayout_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("37c8");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "b", function() { return _GridLayout_vue__WEBPACK_IMPORTED_MODULE_5__["a"]; });






 // import ResponsiveGridLayout from './ResponsiveGridLayout.vue';

var VueGridLayout = {
  // ResponsiveGridLayout,
  GridLayout: _GridLayout_vue__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],
  GridItem: _GridItem_vue__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"]
};
function install(Vue) {
  if (install.installed) return;
  install.installed = true;
  Object.keys(VueGridLayout).forEach(function (name) {
    Vue.component(name, VueGridLayout[name]);
  });
}
var plugin = {
  install: install
};
var GlobalVue = null;

if (typeof window !== 'undefined') {
  GlobalVue = window.Vue;
} else if (typeof global !== 'undefined') {
  GlobalVue = global.Vue;
}

if (GlobalVue) {
  GlobalVue.use(plugin);
}

/* harmony default export */ __webpack_exports__["c"] = (VueGridLayout);

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba")))

/***/ }),

/***/ "2b4c":
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__("5537")('wks');
var uid = __webpack_require__("ca5a");
var Symbol = __webpack_require__("7726").Symbol;
var USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function (name) {
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;


/***/ }),

/***/ "2cef":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function() {
    var idCount = 1;

    /**
     * Generates a new unique id in the context.
     * @public
     * @returns {number} A unique id in the context.
     */
    function generate() {
        return idCount++;
    }

    return {
        generate: generate
    };
};


/***/ }),

/***/ "2d00":
/***/ (function(module, exports) {

module.exports = false;


/***/ }),

/***/ "2d95":
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),

/***/ "2f21":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__("79e5");

module.exports = function (method, arg) {
  return !!method && fails(function () {
    // eslint-disable-next-line no-useless-call
    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);
  });
};


/***/ }),

/***/ "32e9":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc");
var createDesc = __webpack_require__("4630");
module.exports = __webpack_require__("9e1e") ? function (object, key, value) {
  return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),

/***/ "37c8":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";

// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1705dc22-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/GridLayout.vue?vue&type=template&id=361da5e4&
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"item",staticClass:"vue-grid-layout",style:(_vm.mergedStyle)},[_vm._t("default"),_c('grid-item',{directives:[{name:"show",rawName:"v-show",value:(_vm.isDragging),expression:"isDragging"}],staticClass:"vue-grid-placeholder",attrs:{"x":_vm.placeholder.x,"y":_vm.placeholder.y,"w":_vm.placeholder.w,"h":_vm.placeholder.h,"i":_vm.placeholder.i}})],2)}
var staticRenderFns = []


// CONCATENATED MODULE: ./src/components/GridLayout.vue?vue&type=template&id=361da5e4&

// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js
var es7_object_get_own_property_descriptors = __webpack_require__("8e6e");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js
var es6_array_iterator = __webpack_require__("cadf");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js
var es6_object_keys = __webpack_require__("456d");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.assign.js
var es6_object_assign = __webpack_require__("f751");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.number.is-finite.js
var es6_number_is_finite = __webpack_require__("fca0");

// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js
var web_dom_iterable = __webpack_require__("ac6a");

// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__("ade3");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.number.constructor.js
var es6_number_constructor = __webpack_require__("c5f6");

// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf");
var external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);

// EXTERNAL MODULE: ./src/helpers/utils.js
var utils = __webpack_require__("a2b6");

// EXTERNAL MODULE: ./src/helpers/responsiveUtils.js
var responsiveUtils = __webpack_require__("97a7");

// EXTERNAL MODULE: ./src/components/GridItem.vue + 71 modules
var GridItem = __webpack_require__("bc21");

// EXTERNAL MODULE: ./src/helpers/DOM.js
var DOM = __webpack_require__("1ca7");

// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/GridLayout.vue?vue&type=script&lang=js&









function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//


var elementResizeDetectorMaker = __webpack_require__("eec4");


 //var eventBus = require('./eventBus');



/* harmony default export */ var GridLayoutvue_type_script_lang_js_ = ({
  name: "GridLayout",
  provide: function provide() {
    return {
      eventBus: null,
      layout: this
    };
  },
  components: {
    GridItem: GridItem["a" /* default */]
  },
  props: {
    // If true, the container height swells and contracts to fit contents
    autoSize: {
      type: Boolean,
      default: true
    },
    colNum: {
      type: Number,
      default: 12
    },
    rowHeight: {
      type: Number,
      default: 150
    },
    maxRows: {
      type: Number,
      default: Infinity
    },
    margin: {
      type: Array,
      default: function _default() {
        return [10, 10];
      }
    },
    isDraggable: {
      type: Boolean,
      default: true
    },
    isResizable: {
      type: Boolean,
      default: true
    },
    isMirrored: {
      type: Boolean,
      default: false
    },
    isBounded: {
      type: Boolean,
      default: false
    },
    useCssTransforms: {
      type: Boolean,
      default: true
    },
    verticalCompact: {
      type: Boolean,
      default: true
    },
    restoreOnDrag: {
      type: Boolean,
      default: false
    },
    layout: {
      type: Array,
      required: true
    },
    responsive: {
      type: Boolean,
      default: false
    },
    responsiveLayouts: {
      type: Object,
      default: function _default() {
        return {};
      }
    },
    transformScale: {
      type: Number,
      default: 1
    },
    breakpoints: {
      type: Object,
      default: function _default() {
        return {
          lg: 1200,
          md: 996,
          sm: 768,
          xs: 480,
          xxs: 0
        };
      }
    },
    cols: {
      type: Object,
      default: function _default() {
        return {
          lg: 12,
          md: 10,
          sm: 6,
          xs: 4,
          xxs: 2
        };
      }
    },
    preventCollision: {
      type: Boolean,
      default: false
    },
    useStyleCursor: {
      type: Boolean,
      default: true
    }
  },
  data: function data() {
    return {
      width: null,
      mergedStyle: {},
      lastLayoutLength: 0,
      isDragging: false,
      placeholder: {
        x: 0,
        y: 0,
        w: 0,
        h: 0,
        i: -1
      },
      layouts: {},
      // array to store all layouts from different breakpoints
      lastBreakpoint: null,
      // store last active breakpoint
      originalLayout: null // store original Layout

    };
  },
  created: function created() {
    var self = this; // Accessible refernces of functions for removing in beforeDestroy

    self.resizeEventHandler = function (eventType, i, x, y, h, w) {
      self.resizeEvent(eventType, i, x, y, h, w);
    };

    self.dragEventHandler = function (eventType, i, x, y, h, w) {
      self.dragEvent(eventType, i, x, y, h, w);
    };

    self._provided.eventBus = new external_commonjs_vue_commonjs2_vue_root_Vue_default.a();
    self.eventBus = self._provided.eventBus;
    self.eventBus.$on('resizeEvent', self.resizeEventHandler);
    self.eventBus.$on('dragEvent', self.dragEventHandler);
    self.$emit('layout-created', self.layout);
  },
  beforeDestroy: function beforeDestroy() {
    //Remove listeners
    this.eventBus.$off('resizeEvent', this.resizeEventHandler);
    this.eventBus.$off('dragEvent', this.dragEventHandler);
    this.eventBus.$destroy();
    Object(DOM["c" /* removeWindowEventListener */])("resize", this.onWindowResize);

    if (this.erd) {
      this.erd.uninstall(this.$refs.item);
    }
  },
  beforeMount: function beforeMount() {
    this.$emit('layout-before-mount', this.layout);
  },
  mounted: function mounted() {
    this.$emit('layout-mounted', this.layout);
    this.$nextTick(function () {
      Object(utils["l" /* validateLayout */])(this.layout);
      this.originalLayout = this.layout;
      var self = this;
      this.$nextTick(function () {
        self.initResponsiveFeatures();
        self.onWindowResize(); //self.width = self.$el.offsetWidth;

        Object(DOM["a" /* addWindowEventListener */])('resize', self.onWindowResize);
        Object(utils["c" /* compact */])(self.layout, self.verticalCompact);
        self.$emit('layout-updated', self.layout);
        self.updateHeight();
        self.$nextTick(function () {
          this.erd = elementResizeDetectorMaker({
            strategy: "scroll",
            //<- For ultra performance.
            // See https://github.com/wnr/element-resize-detector/issues/110 about callOnAdd.
            callOnAdd: false
          });
          this.erd.listenTo(self.$refs.item, function () {
            self.onWindowResize();
          });
        });
      });
    });
  },
  watch: {
    width: function width(newval, oldval) {
      var self = this;
      this.$nextTick(function () {
        var _this = this;

        //this.$broadcast("updateWidth", this.width);
        this.eventBus.$emit("updateWidth", this.width);

        if (oldval === null) {
          /*
              If oldval == null is when the width has never been
              set before. That only occurs when mouting is
              finished, and onWindowResize has been called and
              this.width has been changed the first time after it
              got set to null in the constructor. It is now time
              to issue layout-ready events as the GridItems have
              their sizes configured properly.
                The reason for emitting the layout-ready events on
              the next tick is to allow for the newly-emitted
              updateWidth event (above) to have reached the
              children GridItem-s and had their effect, so we're
              sure that they have the final size before we emit
              layout-ready (for this GridLayout) and
              item-layout-ready (for the GridItem-s).
                This way any client event handlers can reliably
              invistigate stable sizes of GridItem-s.
          */
          this.$nextTick(function () {
            _this.$emit('layout-ready', self.layout);
          });
        }

        this.updateHeight();
      });
    },
    layout: function layout() {
      this.layoutUpdate();
    },
    colNum: function colNum(val) {
      this.eventBus.$emit("setColNum", val);
    },
    rowHeight: function rowHeight() {
      this.eventBus.$emit("setRowHeight", this.rowHeight);
    },
    isDraggable: function isDraggable() {
      this.eventBus.$emit("setDraggable", this.isDraggable);
    },
    isResizable: function isResizable() {
      this.eventBus.$emit("setResizable", this.isResizable);
    },
    isBounded: function isBounded() {
      this.eventBus.$emit("setBounded", this.isBounded);
    },
    transformScale: function transformScale() {
      this.eventBus.$emit("setTransformScale", this.transformScale);
    },
    responsive: function responsive() {
      if (!this.responsive) {
        this.$emit('update:layout', this.originalLayout);
        this.eventBus.$emit("setColNum", this.colNum);
      }

      this.onWindowResize();
    },
    maxRows: function maxRows() {
      this.eventBus.$emit("setMaxRows", this.maxRows);
    },
    margin: function margin() {
      this.updateHeight();
    }
  },
  methods: {
    layoutUpdate: function layoutUpdate() {
      if (this.layout !== undefined && this.originalLayout !== null) {
        if (this.layout.length !== this.originalLayout.length) {
          // console.log("### LAYOUT UPDATE!", this.layout.length, this.originalLayout.length);
          var diff = this.findDifference(this.layout, this.originalLayout);

          if (diff.length > 0) {
            // console.log(diff);
            if (this.layout.length > this.originalLayout.length) {
              this.originalLayout = this.originalLayout.concat(diff);
            } else {
              this.originalLayout = this.originalLayout.filter(function (obj) {
                return !diff.some(function (obj2) {
                  return obj.i === obj2.i;
                });
              });
            }
          }

          this.lastLayoutLength = this.layout.length;
          this.initResponsiveFeatures();
        }

        Object(utils["c" /* compact */])(this.layout, this.verticalCompact);
        this.eventBus.$emit("updateWidth", this.width);
        this.updateHeight();
        this.$emit('layout-updated', this.layout);
      }
    },
    updateHeight: function updateHeight() {
      this.mergedStyle = {
        height: this.containerHeight()
      };
    },
    onWindowResize: function onWindowResize() {
      if (this.$refs !== null && this.$refs.item !== null && this.$refs.item !== undefined) {
        this.width = this.$refs.item.offsetWidth;
      }

      this.eventBus.$emit("resizeEvent");
    },
    containerHeight: function containerHeight() {
      if (!this.autoSize) return; // console.log("bottom: " + bottom(this.layout))
      // console.log("rowHeight + margins: " + (this.rowHeight + this.margin[1]) + this.margin[1])

      var containerHeight = Object(utils["a" /* bottom */])(this.layout) * (this.rowHeight + this.margin[1]) + this.margin[1] + 'px';
      return containerHeight;
    },
    dragEvent: function dragEvent(eventName, id, x, y, h, w) {
      //console.log(eventName + " id=" + id + ", x=" + x + ", y=" + y);
      var l = Object(utils["f" /* getLayoutItem */])(this.layout, id); //GetLayoutItem sometimes returns null object

      if (l === undefined || l === null) {
        l = {
          x: 0,
          y: 0
        };
      }

      if (eventName === "dragstart" && !this.verticalCompact) {
        this.positionsBeforeDrag = this.layout.reduce(function (result, _ref) {
          var i = _ref.i,
              x = _ref.x,
              y = _ref.y;
          return _objectSpread(_objectSpread({}, result), {}, Object(defineProperty["a" /* default */])({}, i, {
            x: x,
            y: y
          }));
        }, {});
      }

      if (eventName === "dragmove" || eventName === "dragstart") {
        this.placeholder.i = id;
        this.placeholder.x = l.x;
        this.placeholder.y = l.y;
        this.placeholder.w = w;
        this.placeholder.h = h;
        this.$nextTick(function () {
          this.isDragging = true;
        }); //this.$broadcast("updateWidth", this.width);

        this.eventBus.$emit("updateWidth", this.width);
      } else {
        this.$nextTick(function () {
          this.isDragging = false;
        });
      } // Move the element to the dragged location.


      this.layout = Object(utils["g" /* moveElement */])(this.layout, l, x, y, true, this.preventCollision);

      if (this.restoreOnDrag) {
        // Do not compact items more than in layout before drag
        // Set moved item as static to avoid to compact it
        l.static = true;
        Object(utils["c" /* compact */])(this.layout, this.verticalCompact, this.positionsBeforeDrag);
        l.static = false;
      } else {
        Object(utils["c" /* compact */])(this.layout, this.verticalCompact);
      } // needed because vue can't detect changes on array element properties


      this.eventBus.$emit("compact");
      this.updateHeight();

      if (eventName === 'dragend') {
        delete this.positionsBeforeDrag;
        this.$emit('layout-updated', this.layout);
      }
    },
    resizeEvent: function resizeEvent(eventName, id, x, y, h, w) {
      var l = Object(utils["f" /* getLayoutItem */])(this.layout, id); //GetLayoutItem sometimes return null object

      if (l === undefined || l === null) {
        l = {
          h: 0,
          w: 0
        };
      }

      var hasCollisions;

      if (this.preventCollision) {
        var collisions = Object(utils["e" /* getAllCollisions */])(this.layout, _objectSpread(_objectSpread({}, l), {}, {
          w: w,
          h: h
        })).filter(function (layoutItem) {
          return layoutItem.i !== l.i;
        });
        hasCollisions = collisions.length > 0; // If we're colliding, we need adjust the placeholder.

        if (hasCollisions) {
          // adjust w && h to maximum allowed space
          var leastX = Infinity,
              leastY = Infinity;
          collisions.forEach(function (layoutItem) {
            if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x);
            if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y);
          });
          if (Number.isFinite(leastX)) l.w = leastX - l.x;
          if (Number.isFinite(leastY)) l.h = leastY - l.y;
        }
      }

      if (!hasCollisions) {
        // Set new width and height.
        l.w = w;
        l.h = h;
      }

      if (eventName === "resizestart" || eventName === "resizemove") {
        this.placeholder.i = id;
        this.placeholder.x = x;
        this.placeholder.y = y;
        this.placeholder.w = l.w;
        this.placeholder.h = l.h;
        this.$nextTick(function () {
          this.isDragging = true;
        }); //this.$broadcast("updateWidth", this.width);

        this.eventBus.$emit("updateWidth", this.width);
      } else {
        this.$nextTick(function () {
          this.isDragging = false;
        });
      }

      if (this.responsive) this.responsiveGridLayout();
      Object(utils["c" /* compact */])(this.layout, this.verticalCompact);
      this.eventBus.$emit("compact");
      this.updateHeight();
      if (eventName === 'resizeend') this.$emit('layout-updated', this.layout);
    },
    // finds or generates new layouts for set breakpoints
    responsiveGridLayout: function responsiveGridLayout() {
      var newBreakpoint = Object(responsiveUtils["b" /* getBreakpointFromWidth */])(this.breakpoints, this.width);
      var newCols = Object(responsiveUtils["c" /* getColsFromBreakpoint */])(newBreakpoint, this.cols); // save actual layout in layouts

      if (this.lastBreakpoint != null && !this.layouts[this.lastBreakpoint]) this.layouts[this.lastBreakpoint] = Object(utils["b" /* cloneLayout */])(this.layout); // Find or generate a new layout.

      var layout = Object(responsiveUtils["a" /* findOrGenerateResponsiveLayout */])(this.originalLayout, this.layouts, this.breakpoints, newBreakpoint, this.lastBreakpoint, newCols, this.verticalCompact); // Store the new layout.

      this.layouts[newBreakpoint] = layout;

      if (this.lastBreakpoint !== newBreakpoint) {
        this.$emit('breakpoint-changed', newBreakpoint, layout);
      } // new prop sync


      this.$emit('update:layout', layout);
      this.lastBreakpoint = newBreakpoint;
      this.eventBus.$emit("setColNum", Object(responsiveUtils["c" /* getColsFromBreakpoint */])(newBreakpoint, this.cols));
    },
    // clear all responsive layouts
    initResponsiveFeatures: function initResponsiveFeatures() {
      // clear layouts
      this.layouts = Object.assign({}, this.responsiveLayouts);
    },
    // find difference in layouts
    findDifference: function findDifference(layout, originalLayout) {
      //Find values that are in result1 but not in result2
      var uniqueResultOne = layout.filter(function (obj) {
        return !originalLayout.some(function (obj2) {
          return obj.i === obj2.i;
        });
      }); //Find values that are in result2 but not in result1

      var uniqueResultTwo = originalLayout.filter(function (obj) {
        return !layout.some(function (obj2) {
          return obj.i === obj2.i;
        });
      }); //Combine the two arrays of unique entries#

      return uniqueResultOne.concat(uniqueResultTwo);
    }
  }
});
// CONCATENATED MODULE: ./src/components/GridLayout.vue?vue&type=script&lang=js&
 /* harmony default export */ var components_GridLayoutvue_type_script_lang_js_ = (GridLayoutvue_type_script_lang_js_); 
// EXTERNAL MODULE: ./src/components/GridLayout.vue?vue&type=style&index=0&lang=css&
var GridLayoutvue_type_style_index_0_lang_css_ = __webpack_require__("e279");

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__("2877");

// CONCATENATED MODULE: ./src/components/GridLayout.vue






/* normalize component */

var component = Object(componentNormalizer["a" /* default */])(
  components_GridLayoutvue_type_script_lang_js_,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ var GridLayout = __webpack_exports__["a"] = (component.exports);

/***/ }),

/***/ "38fd":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has = __webpack_require__("69a8");
var toObject = __webpack_require__("4bf8");
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');
var ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};


/***/ }),

/***/ "41a0":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var create = __webpack_require__("2aeb");
var descriptor = __webpack_require__("4630");
var setToStringTag = __webpack_require__("7f20");
var IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__("32e9")(IteratorPrototype, __webpack_require__("2b4c")('iterator'), function () { return this; });

module.exports = function (Constructor, NAME, next) {
  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  setToStringTag(Constructor, NAME + ' Iterator');
};


/***/ }),

/***/ "456d":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 Object.keys(O)
var toObject = __webpack_require__("4bf8");
var $keys = __webpack_require__("0d58");

__webpack_require__("5eda")('keys', function () {
  return function keys(it) {
    return $keys(toObject(it));
  };
});


/***/ }),

/***/ "4588":
/***/ (function(module, exports) {

// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
module.exports = function (it) {
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};


/***/ }),

/***/ "4630":
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),

/***/ "4917":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var anObject = __webpack_require__("cb7c");
var toLength = __webpack_require__("9def");
var advanceStringIndex = __webpack_require__("0390");
var regExpExec = __webpack_require__("5f1b");

// @@match logic
__webpack_require__("214f")('match', 1, function (defined, MATCH, $match, maybeCallNative) {
  return [
    // `String.prototype.match` method
    // https://tc39.github.io/ecma262/#sec-string.prototype.match
    function match(regexp) {
      var O = defined(this);
      var fn = regexp == undefined ? undefined : regexp[MATCH];
      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
    },
    // `RegExp.prototype[@@match]` method
    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
    function (regexp) {
      var res = maybeCallNative($match, regexp, this);
      if (res.done) return res.value;
      var rx = anObject(regexp);
      var S = String(this);
      if (!rx.global) return regExpExec(rx, S);
      var fullUnicode = rx.unicode;
      rx.lastIndex = 0;
      var A = [];
      var n = 0;
      var result;
      while ((result = regExpExec(rx, S)) !== null) {
        var matchStr = String(result[0]);
        A[n] = matchStr;
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
        n++;
      }
      return n === 0 ? null : A;
    }
  ];
});


/***/ }),

/***/ "499e":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, "default", function() { return /* binding */ addStylesClient; });

// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/listToStyles.js
/**
 * Translates the list format produced by css-loader into something
 * easier to manipulate.
 */
function listToStyles (parentId, list) {
  var styles = []
  var newStyles = {}
  for (var i = 0; i < list.length; i++) {
    var item = list[i]
    var id = item[0]
    var css = item[1]
    var media = item[2]
    var sourceMap = item[3]
    var part = {
      id: parentId + ':' + i,
      css: css,
      media: media,
      sourceMap: sourceMap
    }
    if (!newStyles[id]) {
      styles.push(newStyles[id] = { id: id, parts: [part] })
    } else {
      newStyles[id].parts.push(part)
    }
  }
  return styles
}

// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/addStylesClient.js
/*
  MIT License http://www.opensource.org/licenses/mit-license.php
  Author Tobias Koppers @sokra
  Modified by Evan You @yyx990803
*/



var hasDocument = typeof document !== 'undefined'

if (typeof DEBUG !== 'undefined' && DEBUG) {
  if (!hasDocument) {
    throw new Error(
    'vue-style-loader cannot be used in a non-browser environment. ' +
    "Use { target: 'node' } in your Webpack config to indicate a server-rendering environment."
  ) }
}

/*
type StyleObject = {
  id: number;
  parts: Array<StyleObjectPart>
}

type StyleObjectPart = {
  css: string;
  media: string;
  sourceMap: ?string
}
*/

var stylesInDom = {/*
  [id: number]: {
    id: number,
    refs: number,
    parts: Array<(obj?: StyleObjectPart) => void>
  }
*/}

var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
var singletonElement = null
var singletonCounter = 0
var isProduction = false
var noop = function () {}
var options = null
var ssrIdKey = 'data-vue-ssr-id'

// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
// tags it will allow on a page
var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())

function addStylesClient (parentId, list, _isProduction, _options) {
  isProduction = _isProduction

  options = _options || {}

  var styles = listToStyles(parentId, list)
  addStylesToDom(styles)

  return function update (newList) {
    var mayRemove = []
    for (var i = 0; i < styles.length; i++) {
      var item = styles[i]
      var domStyle = stylesInDom[item.id]
      domStyle.refs--
      mayRemove.push(domStyle)
    }
    if (newList) {
      styles = listToStyles(parentId, newList)
      addStylesToDom(styles)
    } else {
      styles = []
    }
    for (var i = 0; i < mayRemove.length; i++) {
      var domStyle = mayRemove[i]
      if (domStyle.refs === 0) {
        for (var j = 0; j < domStyle.parts.length; j++) {
          domStyle.parts[j]()
        }
        delete stylesInDom[domStyle.id]
      }
    }
  }
}

function addStylesToDom (styles /* Array<StyleObject> */) {
  for (var i = 0; i < styles.length; i++) {
    var item = styles[i]
    var domStyle = stylesInDom[item.id]
    if (domStyle) {
      domStyle.refs++
      for (var j = 0; j < domStyle.parts.length; j++) {
        domStyle.parts[j](item.parts[j])
      }
      for (; j < item.parts.length; j++) {
        domStyle.parts.push(addStyle(item.parts[j]))
      }
      if (domStyle.parts.length > item.parts.length) {
        domStyle.parts.length = item.parts.length
      }
    } else {
      var parts = []
      for (var j = 0; j < item.parts.length; j++) {
        parts.push(addStyle(item.parts[j]))
      }
      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
    }
  }
}

function createStyleElement () {
  var styleElement = document.createElement('style')
  styleElement.type = 'text/css'
  head.appendChild(styleElement)
  return styleElement
}

function addStyle (obj /* StyleObjectPart */) {
  var update, remove
  var styleElement = document.querySelector('style[' + ssrIdKey + '~="' + obj.id + '"]')

  if (styleElement) {
    if (isProduction) {
      // has SSR styles and in production mode.
      // simply do nothing.
      return noop
    } else {
      // has SSR styles but in dev mode.
      // for some reason Chrome can't handle source map in server-rendered
      // style tags - source maps in <style> only works if the style tag is
      // created and inserted dynamically. So we remove the server rendered
      // styles and inject new ones.
      styleElement.parentNode.removeChild(styleElement)
    }
  }

  if (isOldIE) {
    // use singleton mode for IE9.
    var styleIndex = singletonCounter++
    styleElement = singletonElement || (singletonElement = createStyleElement())
    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
  } else {
    // use multi-style-tag mode in all other cases
    styleElement = createStyleElement()
    update = applyToTag.bind(null, styleElement)
    remove = function () {
      styleElement.parentNode.removeChild(styleElement)
    }
  }

  update(obj)

  return function updateStyle (newObj /* StyleObjectPart */) {
    if (newObj) {
      if (newObj.css === obj.css &&
          newObj.media === obj.media &&
          newObj.sourceMap === obj.sourceMap) {
        return
      }
      update(obj = newObj)
    } else {
      remove()
    }
  }
}

var replaceText = (function () {
  var textStore = []

  return function (index, replacement) {
    textStore[index] = replacement
    return textStore.filter(Boolean).join('\n')
  }
})()

function applyToSingletonTag (styleElement, index, remove, obj) {
  var css = remove ? '' : obj.css

  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = replaceText(index, css)
  } else {
    var cssNode = document.createTextNode(css)
    var childNodes = styleElement.childNodes
    if (childNodes[index]) styleElement.removeChild(childNodes[index])
    if (childNodes.length) {
      styleElement.insertBefore(cssNode, childNodes[index])
    } else {
      styleElement.appendChild(cssNode)
    }
  }
}

function applyToTag (styleElement, obj) {
  var css = obj.css
  var media = obj.media
  var sourceMap = obj.sourceMap

  if (media) {
    styleElement.setAttribute('media', media)
  }
  if (options.ssrId) {
    styleElement.setAttribute(ssrIdKey, obj.id)
  }

  if (sourceMap) {
    // https://developer.chrome.com/devtools/docs/javascript-debugging
    // this makes source maps inside style tags work properly in Chrome
    css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
    // http://stackoverflow.com/a/26603875
    css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
  }

  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = css
  } else {
    while (styleElement.firstChild) {
      styleElement.removeChild(styleElement.firstChild)
    }
    styleElement.appendChild(document.createTextNode(css))
  }
}


/***/ }),

/***/ "49ad":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function(idHandler) {
    var eventListeners = {};

    /**
     * Gets all listeners for the given element.
     * @public
     * @param {element} element The element to get all listeners for.
     * @returns All listeners for the given element.
     */
    function getListeners(element) {
        var id = idHandler.get(element);

        if (id === undefined) {
            return [];
        }

        return eventListeners[id] || [];
    }

    /**
     * Stores the given listener for the given element. Will not actually add the listener to the element.
     * @public
     * @param {element} element The element that should have the listener added.
     * @param {function} listener The callback that the element has added.
     */
    function addListener(element, listener) {
        var id = idHandler.get(element);

        if(!eventListeners[id]) {
            eventListeners[id] = [];
        }

        eventListeners[id].push(listener);
    }

    function removeListener(element, listener) {
        var listeners = getListeners(element);
        for (var i = 0, len = listeners.length; i < len; ++i) {
            if (listeners[i] === listener) {
              listeners.splice(i, 1);
              break;
            }
        }
    }

    function removeAllListeners(element) {
      var listeners = getListeners(element);
      if (!listeners) { return; }
      listeners.length = 0;
    }

    return {
        get: getListeners,
        add: addListener,
        removeListener: removeListener,
        removeAllListeners: removeAllListeners
    };
};


/***/ }),

/***/ "4bf8":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.13 ToObject(argument)
var defined = __webpack_require__("be13");
module.exports = function (it) {
  return Object(defined(it));
};


/***/ }),

/***/ "5058":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function(options) {
    var idGenerator     = options.idGenerator;
    var getState        = options.stateHandler.getState;

    /**
     * Gets the resize detector id of the element.
     * @public
     * @param {element} element The target element to get the id of.
     * @returns {string|number|null} The id of the element. Null if it has no id.
     */
    function getId(element) {
        var state = getState(element);

        if (state && state.id !== undefined) {
            return state.id;
        }

        return null;
    }

    /**
     * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.
     * @public
     * @param {element} element The target element to set the id of.
     * @returns {string|number|null} The id of the element.
     */
    function setId(element) {
        var state = getState(element);

        if (!state) {
            throw new Error("setId required the element to have a resize detection state.");
        }

        var id = idGenerator.generate();

        state.id = id;

        return id;
    }

    return {
        get: getId,
        set: setId
    };
};


/***/ }),

/***/ "50bf":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = module.exports = {};

utils.getOption = getOption;

function getOption(options, name, defaultValue) {
    var value = options[name];

    if((value === undefined || value === null) && defaultValue !== undefined) {
        return defaultValue;
    }

    return value;
}


/***/ }),

/***/ "520a":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var regexpFlags = __webpack_require__("0bfb");

var nativeExec = RegExp.prototype.exec;
// This always refers to the native implementation, because the
// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
// which loads this file before patching the method.
var nativeReplace = String.prototype.replace;

var patchedExec = nativeExec;

var LAST_INDEX = 'lastIndex';

var UPDATES_LAST_INDEX_WRONG = (function () {
  var re1 = /a/,
      re2 = /b*/g;
  nativeExec.call(re1, 'a');
  nativeExec.call(re2, 'a');
  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
})();

// nonparticipating capturing group, copied from es5-shim's String#split patch.
var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;

if (PATCH) {
  patchedExec = function exec(str) {
    var re = this;
    var lastIndex, reCopy, match, i;

    if (NPCG_INCLUDED) {
      reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
    }
    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];

    match = nativeExec.call(re, str);

    if (UPDATES_LAST_INDEX_WRONG && match) {
      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
    }
    if (NPCG_INCLUDED && match && match.length > 1) {
      // Fix browsers whose `exec` methods don't consistently return `undefined`
      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
      // eslint-disable-next-line no-loop-func
      nativeReplace.call(match[0], reCopy, function () {
        for (i = 1; i < arguments.length - 2; i++) {
          if (arguments[i] === undefined) match[i] = undefined;
        }
      });
    }

    return match;
  };
}

module.exports = patchedExec;


/***/ }),

/***/ "52a7":
/***/ (function(module, exports) {

exports.f = {}.propertyIsEnumerable;


/***/ }),

/***/ "5537":
/***/ (function(module, exports, __webpack_require__) {

var core = __webpack_require__("8378");
var global = __webpack_require__("7726");
var SHARED = '__core-js_shared__';
var store = global[SHARED] || (global[SHARED] = {});

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: core.version,
  mode: __webpack_require__("2d00") ? 'pure' : 'global',
  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
});


/***/ }),

/***/ "55dd":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $export = __webpack_require__("5ca1");
var aFunction = __webpack_require__("d8e8");
var toObject = __webpack_require__("4bf8");
var fails = __webpack_require__("79e5");
var $sort = [].sort;
var test = [1, 2, 3];

$export($export.P + $export.F * (fails(function () {
  // IE8-
  test.sort(undefined);
}) || !fails(function () {
  // V8 bug
  test.sort(null);
  // Old WebKit
}) || !__webpack_require__("2f21")($sort)), 'Array', {
  // 22.1.3.25 Array.prototype.sort(comparefn)
  sort: function sort(comparefn) {
    return comparefn === undefined
      ? $sort.call(toObject(this))
      : $sort.call(toObject(this), aFunction(comparefn));
  }
});


/***/ }),

/***/ "5be5":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function(options) {
    var getState = options.stateHandler.getState;

    /**
     * Tells if the element has been made detectable and ready to be listened for resize events.
     * @public
     * @param {element} The element to check.
     * @returns {boolean} True or false depending on if the element is detectable or not.
     */
    function isDetectable(element) {
        var state = getState(element);
        return state && !!state.isDetectable;
    }

    /**
     * Marks the element that it has been made detectable and ready to be listened for resize events.
     * @public
     * @param {element} The element to mark.
     */
    function markAsDetectable(element) {
        getState(element).isDetectable = true;
    }

    /**
     * Tells if the element is busy or not.
     * @public
     * @param {element} The element to check.
     * @returns {boolean} True or false depending on if the element is busy or not.
     */
    function isBusy(element) {
        return !!getState(element).busy;
    }

    /**
     * Marks the object is busy and should not be made detectable.
     * @public
     * @param {element} element The element to mark.
     * @param {boolean} busy If the element is busy or not.
     */
    function markBusy(element, busy) {
        getState(element).busy = !!busy;
    }

    return {
        isDetectable: isDetectable,
        markAsDetectable: markAsDetectable,
        isBusy: isBusy,
        markBusy: markBusy
    };
};


/***/ }),

/***/ "5ca1":
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__("7726");
var core = __webpack_require__("8378");
var hide = __webpack_require__("32e9");
var redefine = __webpack_require__("2aba");
var ctx = __webpack_require__("9b43");
var PROTOTYPE = 'prototype';

var $export = function (type, name, source) {
  var IS_FORCED = type & $export.F;
  var IS_GLOBAL = type & $export.G;
  var IS_STATIC = type & $export.S;
  var IS_PROTO = type & $export.P;
  var IS_BIND = type & $export.B;
  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
  var key, own, out, exp;
  if (IS_GLOBAL) source = name;
  for (key in source) {
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    // export native or passed
    out = (own ? target : source)[key];
    // bind timers to global for call from export context
    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // extend global
    if (target) redefine(target, key, out, type & $export.U);
    // export
    if (exports[key] != out) hide(exports, key, exp);
    if (IS_PROTO && expProto[key] != out) expProto[key] = out;
  }
};
global.core = core;
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;


/***/ }),

/***/ "5dbc":
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__("d3f4");
var setPrototypeOf = __webpack_require__("8b97").set;
module.exports = function (that, target, C) {
  var S = target.constructor;
  var P;
  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
    setPrototypeOf(that, P);
  } return that;
};


/***/ }),

/***/ "5ed4":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_GridItem_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6e21");
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_GridItem_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_GridItem_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__);
/* unused harmony reexport * */


/***/ }),

/***/ "5eda":
/***/ (function(module, exports, __webpack_require__) {

// most Object methods by ES6 should accept primitives
var $export = __webpack_require__("5ca1");
var core = __webpack_require__("8378");
var fails = __webpack_require__("79e5");
module.exports = function (KEY, exec) {
  var fn = (core.Object || {})[KEY] || Object[KEY];
  var exp = {};
  exp[KEY] = exec(fn);
  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
};


/***/ }),

/***/ "5f1b":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var classof = __webpack_require__("23c6");
var builtinExec = RegExp.prototype.exec;

 // `RegExpExec` abstract operation
// https://tc39.github.io/ecma262/#sec-regexpexec
module.exports = function (R, S) {
  var exec = R.exec;
  if (typeof exec === 'function') {
    var result = exec.call(R, S);
    if (typeof result !== 'object') {
      throw new TypeError('RegExp exec method returned something other than an Object or null');
    }
    return result;
  }
  if (classof(R) !== 'RegExp') {
    throw new TypeError('RegExp#exec called on incompatible receiver');
  }
  return builtinExec.call(R, S);
};


/***/ }),

/***/ "613b":
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__("5537")('keys');
var uid = __webpack_require__("ca5a");
module.exports = function (key) {
  return shared[key] || (shared[key] = uid(key));
};


/***/ }),

/***/ "626a":
/***/ (function(module, exports, __webpack_require__) {

// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__("2d95");
// eslint-disable-next-line no-prototype-builtins
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  return cof(it) == 'String' ? it.split('') : Object(it);
};


/***/ }),

/***/ "6821":
/***/ (function(module, exports, __webpack_require__) {

// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__("626a");
var defined = __webpack_require__("be13");
module.exports = function (it) {
  return IObject(defined(it));
};


/***/ }),

/***/ "69a8":
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),

/***/ "6a99":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__("d3f4");
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (it, S) {
  if (!isObject(it)) return it;
  var fn, val;
  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),

/***/ "6e21":
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__("9cbe");
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = __webpack_require__("499e").default
var update = add("3cbd0c21", content, true, {"sourceMap":false,"shadowMode":false});

/***/ }),

/***/ "7333":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 19.1.2.1 Object.assign(target, source, ...)
var DESCRIPTORS = __webpack_require__("9e1e");
var getKeys = __webpack_require__("0d58");
var gOPS = __webpack_require__("2621");
var pIE = __webpack_require__("52a7");
var toObject = __webpack_require__("4bf8");
var IObject = __webpack_require__("626a");
var $assign = Object.assign;

// should work with symbols and should have deterministic property order (V8 bug)
module.exports = !$assign || __webpack_require__("79e5")(function () {
  var A = {};
  var B = {};
  // eslint-disable-next-line no-undef
  var S = Symbol();
  var K = 'abcdefghijklmnopqrst';
  A[S] = 7;
  K.split('').forEach(function (k) { B[k] = k; });
  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  var T = toObject(target);
  var aLen = arguments.length;
  var index = 1;
  var getSymbols = gOPS.f;
  var isEnum = pIE.f;
  while (aLen > index) {
    var S = IObject(arguments[index++]);
    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
    var length = keys.length;
    var j = 0;
    var key;
    while (length > j) {
      key = keys[j++];
      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];
    }
  } return T;
} : $assign;


/***/ }),

/***/ "7726":
/***/ (function(module, exports) {

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self
  // eslint-disable-next-line no-new-func
  : Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),

/***/ "77f1":
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__("4588");
var max = Math.max;
var min = Math.min;
module.exports = function (index, length) {
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};


/***/ }),

/***/ "79e5":
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (e) {
    return true;
  }
};


/***/ }),

/***/ "7f20":
/***/ (function(module, exports, __webpack_require__) {

var def = __webpack_require__("86cc").f;
var has = __webpack_require__("69a8");
var TAG = __webpack_require__("2b4c")('toStringTag');

module.exports = function (it, tag, stat) {
  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};


/***/ }),

/***/ "7f7f":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc").f;
var FProto = Function.prototype;
var nameRE = /^\s*function ([^ (]*)/;
var NAME = 'name';

// 19.2.4.2 name
NAME in FProto || __webpack_require__("9e1e") && dP(FProto, NAME, {
  configurable: true,
  get: function () {
    try {
      return ('' + this).match(nameRE)[1];
    } catch (e) {
      return '';
    }
  }
});


/***/ }),

/***/ "8378":
/***/ (function(module, exports) {

var core = module.exports = { version: '2.6.12' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),

/***/ "84f2":
/***/ (function(module, exports) {

module.exports = {};


/***/ }),

/***/ "86cc":
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__("cb7c");
var IE8_DOM_DEFINE = __webpack_require__("c69a");
var toPrimitive = __webpack_require__("6a99");
var dP = Object.defineProperty;

exports.f = __webpack_require__("9e1e") ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return dP(O, P, Attributes);
  } catch (e) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),

/***/ "8b97":
/***/ (function(module, exports, __webpack_require__) {

// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
var isObject = __webpack_require__("d3f4");
var anObject = __webpack_require__("cb7c");
var check = function (O, proto) {
  anObject(O);
  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
};
module.exports = {
  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
    function (test, buggy, set) {
      try {
        set = __webpack_require__("9b43")(Function.call, __webpack_require__("11e9").f(Object.prototype, '__proto__').set, 2);
        set(test, []);
        buggy = !(test instanceof Array);
      } catch (e) { buggy = true; }
      return function setPrototypeOf(O, proto) {
        check(O, proto);
        if (buggy) O.__proto__ = proto;
        else set(O, proto);
        return O;
      };
    }({}, false) : undefined),
  check: check
};


/***/ }),

/***/ "8bbf":
/***/ (function(module, exports) {

module.exports = require("vue");

/***/ }),

/***/ "8e6e":
/***/ (function(module, exports, __webpack_require__) {

// https://github.com/tc39/proposal-object-getownpropertydescriptors
var $export = __webpack_require__("5ca1");
var ownKeys = __webpack_require__("990b");
var toIObject = __webpack_require__("6821");
var gOPD = __webpack_require__("11e9");
var createProperty = __webpack_require__("f1ae");

$export($export.S, 'Object', {
  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
    var O = toIObject(object);
    var getDesc = gOPD.f;
    var keys = ownKeys(O);
    var result = {};
    var i = 0;
    var key, desc;
    while (keys.length > i) {
      desc = getDesc(O, key = keys[i++]);
      if (desc !== undefined) createProperty(result, key, desc);
    }
    return result;
  }
});


/***/ }),

/***/ "9093":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
var $keys = __webpack_require__("ce10");
var hiddenKeys = __webpack_require__("e11e").concat('length', 'prototype');

exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return $keys(O, hiddenKeys);
};


/***/ }),

/***/ "97a7":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getBreakpointFromWidth; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getColsFromBreakpoint; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return findOrGenerateResponsiveLayout; });
/* unused harmony export generateResponsiveLayout */
/* unused harmony export sortBreakpoints */
/* harmony import */ var core_js_modules_es6_array_sort__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("55dd");
/* harmony import */ var core_js_modules_es6_array_sort__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_sort__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("ac6a");
/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("cadf");
/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("456d");
/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("a2b6");




// @flow


/*:: import type {Layout} from './utils';*/

/*:: export type ResponsiveLayout = {lg?: Layout, md?: Layout, sm?: Layout, xs?: Layout, xxs?: Layout};*/

/*:: type Breakpoint = string;*/

/**
 * Given a width, find the highest breakpoint that matches is valid for it (width > breakpoint).
 *
 * @param  {Object} breakpoints Breakpoints object (e.g. {lg: 1200, md: 960, ...})
 * @param  {Number} width Screen width.
 * @return {String}       Highest breakpoint that is less than width.
 */

/*:: type Breakpoints = {lg?: number, md?: number, sm?: number, xs?: number, xxs?: number};*/

function getBreakpointFromWidth(breakpoints
/*: Breakpoints*/
, width
/*: number*/
)
/*: Breakpoint*/
{
  var sorted = sortBreakpoints(breakpoints);
  var matching = sorted[0];

  for (var i = 1, len = sorted.length; i < len; i++) {
    var breakpointName = sorted[i];
    if (width > breakpoints[breakpointName]) matching = breakpointName;
  }

  return matching;
}
/**
 * Given a breakpoint, get the # of cols set for it.
 * @param  {String} breakpoint Breakpoint name.
 * @param  {Object} cols       Map of breakpoints to cols.
 * @return {Number}            Number of cols.
 */

function getColsFromBreakpoint(breakpoint
/*: Breakpoint*/
, cols
/*: Breakpoints*/
)
/*: number*/
{
  if (!cols[breakpoint]) {
    throw new Error("ResponsiveGridLayout: `cols` entry for breakpoint " + breakpoint + " is missing!");
  }

  return cols[breakpoint];
}
/**
 * Given existing layouts and a new breakpoint, find or generate a new layout.
 *
 * This finds the layout above the new one and generates from it, if it exists.
 *
 * @param  {Array} orgLayout     Original layout.
 * @param  {Object} layouts     Existing layouts.
 * @param  {Array} breakpoints All breakpoints.
 * @param  {String} breakpoint New breakpoint.
 * @param  {String} breakpoint Last breakpoint (for fallback).
 * @param  {Number} cols       Column count at new breakpoint.
 * @param  {Boolean} verticalCompact Whether or not to compact the layout
 *   vertically.
 * @return {Array}             New layout.
 */

function findOrGenerateResponsiveLayout(orgLayout
/*: Layout*/
, layouts
/*: ResponsiveLayout*/
, breakpoints
/*: Breakpoints*/
, breakpoint
/*: Breakpoint*/
, lastBreakpoint
/*: Breakpoint*/
, cols
/*: number*/
, verticalCompact
/*: boolean*/
)
/*: Layout*/
{
  // If it already exists, just return it.
  if (layouts[breakpoint]) return Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* cloneLayout */ "b"])(layouts[breakpoint]); // Find or generate the next layout

  var layout = orgLayout;
  var breakpointsSorted = sortBreakpoints(breakpoints);
  var breakpointsAbove = breakpointsSorted.slice(breakpointsSorted.indexOf(breakpoint));

  for (var i = 0, len = breakpointsAbove.length; i < len; i++) {
    var b = breakpointsAbove[i];

    if (layouts[b]) {
      layout = layouts[b];
      break;
    }
  }

  layout = Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* cloneLayout */ "b"])(layout || []); // clone layout so we don't modify existing items

  return Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* compact */ "c"])(Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* correctBounds */ "d"])(layout, {
    cols: cols
  }), verticalCompact);
}
function generateResponsiveLayout(layout
/*: Layout*/
, breakpoints
/*: Breakpoints*/
, breakpoint
/*: Breakpoint*/
, lastBreakpoint
/*: Breakpoint*/
, cols
/*: number*/
, verticalCompact
/*: boolean*/
)
/*: Layout*/
{
  // If it already exists, just return it.

  /*if (layouts[breakpoint]) return cloneLayout(layouts[breakpoint]);
  // Find or generate the next layout
  let layout = layouts[lastBreakpoint];*/

  /*const breakpointsSorted = sortBreakpoints(breakpoints);
  const breakpointsAbove = breakpointsSorted.slice(breakpointsSorted.indexOf(breakpoint));
  for (let i = 0, len = breakpointsAbove.length; i < len; i++) {
  const b = breakpointsAbove[i];
  if (layouts[b]) {
    layout = layouts[b];
    break;
  }
  }*/
  layout = Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* cloneLayout */ "b"])(layout || []); // clone layout so we don't modify existing items

  return Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* compact */ "c"])(Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* correctBounds */ "d"])(layout, {
    cols: cols
  }), verticalCompact);
}
/**
 * Given breakpoints, return an array of breakpoints sorted by width. This is usually
 * e.g. ['xxs', 'xs', 'sm', ...]
 *
 * @param  {Object} breakpoints Key/value pair of breakpoint names to widths.
 * @return {Array}              Sorted breakpoints.
 */

function sortBreakpoints(breakpoints
/*: Breakpoints*/
)
/*: Array<Breakpoint>*/
{
  var keys
  /*: Array<string>*/
  = Object.keys(breakpoints);
  return keys.sort(function (a, b) {
    return breakpoints[a] - breakpoints[b];
  });
}

/***/ }),

/***/ "990b":
/***/ (function(module, exports, __webpack_require__) {

// all object keys, includes non-enumerable and symbols
var gOPN = __webpack_require__("9093");
var gOPS = __webpack_require__("2621");
var anObject = __webpack_require__("cb7c");
var Reflect = __webpack_require__("7726").Reflect;
module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {
  var keys = gOPN.f(anObject(it));
  var getSymbols = gOPS.f;
  return getSymbols ? keys.concat(getSymbols(it)) : keys;
};


/***/ }),

/***/ "9b43":
/***/ (function(module, exports, __webpack_require__) {

// optional / simple context binding
var aFunction = __webpack_require__("d8e8");
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),

/***/ "9c6c":
/***/ (function(module, exports, __webpack_require__) {

// 22.1.3.31 Array.prototype[@@unscopables]
var UNSCOPABLES = __webpack_require__("2b4c")('unscopables');
var ArrayProto = Array.prototype;
if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__("32e9")(ArrayProto, UNSCOPABLES, {});
module.exports = function (key) {
  ArrayProto[UNSCOPABLES][key] = true;
};


/***/ }),

/***/ "9cbe":
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__("2350")(false);
// imports


// module
exports.push([module.i, ".vue-grid-item{-webkit-transition:all .2s ease;transition:all .2s ease;-webkit-transition-property:left,top,right;transition-property:left,top,right}.vue-grid-item.no-touch{-ms-touch-action:none;touch-action:none}.vue-grid-item.cssTransforms{-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;left:0;right:auto}.vue-grid-item.cssTransforms.render-rtl{left:auto;right:0}.vue-grid-item.resizing{opacity:.6;z-index:3}.vue-grid-item.vue-draggable-dragging{-webkit-transition:none;transition:none;z-index:3}.vue-grid-item.vue-grid-placeholder{background:red;opacity:.2;-webkit-transition-duration:.1s;transition-duration:.1s;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.vue-grid-item>.vue-resizable-handle{position:absolute;width:20px;height:20px;bottom:0;right:0;background:url(\"data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjYiIGhlaWdodD0iNiI+PHBhdGggZD0iTTYgNkgwVjQuMmg0LjJWMEg2djZ6IiBvcGFjaXR5PSIuMzAyIi8+PC9zdmc+\");background-position:100% 100%;padding:0 3px 3px 0;background-repeat:no-repeat;background-origin:content-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:se-resize}.vue-grid-item>.vue-rtl-resizable-handle{bottom:0;left:0;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTS0xLTFoMTJ2MTJILTF6Ii8+PGc+PHBhdGggc3Ryb2tlLWxpbmVjYXA9InVuZGVmaW5lZCIgc3Ryb2tlLWxpbmVqb2luPSJ1bmRlZmluZWQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGQ9Ik0xNDQuODIxLTM4LjM5M2wtMjAuMzU3LTMxLjc4NSIvPjxwYXRoIHN0cm9rZT0iIzY2NiIgc3Ryb2tlLWxpbmVjYXA9InVuZGVmaW5lZCIgc3Ryb2tlLWxpbmVqb2luPSJ1bmRlZmluZWQiIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0ibm9uZSIgZD0iTS45NDctLjAxOHY5LjEyNU0tLjY1NiA5aDEwLjczIi8+PC9nPjwvc3ZnPg==);background-position:0 100%;padding-left:3px;background-repeat:no-repeat;background-origin:content-box;cursor:sw-resize;right:auto}.vue-grid-item.disable-userselect{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}", ""]);

// exports


/***/ }),

/***/ "9def":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.15 ToLength
var toInteger = __webpack_require__("4588");
var min = Math.min;
module.exports = function (it) {
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};


/***/ }),

/***/ "9e1e":
/***/ (function(module, exports, __webpack_require__) {

// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__("79e5")(function () {
  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),

/***/ "a2b6":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return bottom; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return cloneLayout; });
/* unused harmony export cloneLayoutItem */
/* unused harmony export collides */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return compact; });
/* unused harmony export compactItem */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return correctBounds; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return getLayoutItem; });
/* unused harmony export getFirstCollision */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return getAllCollisions; });
/* unused harmony export getStatics */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return moveElement; });
/* unused harmony export moveElementAwayFromCollision */
/* unused harmony export perc */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return setTransform; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return setTransformRtl; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return setTopLeft; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return setTopRight; });
/* unused harmony export sortLayoutItemsByRowCol */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return validateLayout; });
/* unused harmony export autoBindHandlers */
/* unused harmony export createMarkup */
/* unused harmony export IS_UNITLESS */
/* unused harmony export addPx */
/* unused harmony export hyphenateRE */
/* unused harmony export hyphenate */
/* unused harmony export findItemInArray */
/* unused harmony export findAndRemove */
/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("a481");
/* 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__);
/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("cadf");
/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("456d");
/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("ac6a");
/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es6_array_sort__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("55dd");
/* harmony import */ var core_js_modules_es6_array_sort__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_sort__WEBPACK_IMPORTED_MODULE_4__);





// @flow

/*:: export type LayoutItemRequired = {w: number, h: number, x: number, y: number, i: string};*/

/*:: export type LayoutItem = LayoutItemRequired &
                         {minW?: number, minH?: number, maxW?: number, maxH?: number,
                          moved?: boolean, static?: boolean,
                          isDraggable?: ?boolean, isResizable?: ?boolean};*/

// export type Position = {left: number, top: number, width: number, height: number};

/*
export type DragCallbackData = {
  node: HTMLElement,
  x: number, y: number,
  deltaX: number, deltaY: number,
  lastX: number, lastY: number
};
*/
// export type DragEvent = {e: Event} & DragCallbackData;

/*:: export type Layout = Array<LayoutItem>;*/

// export type ResizeEvent = {e: Event, node: HTMLElement, size: Size};
// const isProduction = process.env.NODE_ENV === 'production';

/**
 * Return the bottom coordinate of the layout.
 *
 * @param  {Array} layout Layout array.
 * @return {Number}       Bottom coordinate.
 */

/*:: export type Size = {width: number, height: number};*/

function bottom(layout
/*: Layout*/
)
/*: number*/
{
  var max = 0,
      bottomY;

  for (var i = 0, len = layout.length; i < len; i++) {
    bottomY = layout[i].y + layout[i].h;
    if (bottomY > max) max = bottomY;
  }

  return max;
}
function cloneLayout(layout
/*: Layout*/
)
/*: Layout*/
{
  var newLayout = Array(layout.length);

  for (var i = 0, len = layout.length; i < len; i++) {
    newLayout[i] = cloneLayoutItem(layout[i]);
  }

  return newLayout;
} // Fast path to cloning, since this is monomorphic

function cloneLayoutItem(layoutItem
/*: LayoutItem*/
)
/*: LayoutItem*/
{
  /*return {
    w: layoutItem.w, h: layoutItem.h, x: layoutItem.x, y: layoutItem.y, i: layoutItem.i,
    minW: layoutItem.minW, maxW: layoutItem.maxW, minH: layoutItem.minH, maxH: layoutItem.maxH,
    moved: Boolean(layoutItem.moved), static: Boolean(layoutItem.static),
    // These can be null
    isDraggable: layoutItem.isDraggable, isResizable: layoutItem.isResizable
  };*/
  return JSON.parse(JSON.stringify(layoutItem));
}
/**
 * Given two layoutitems, check if they collide.
 *
 * @return {Boolean}   True if colliding.
 */

function collides(l1
/*: LayoutItem*/
, l2
/*: LayoutItem*/
)
/*: boolean*/
{
  if (l1 === l2) return false; // same element

  if (l1.x + l1.w <= l2.x) return false; // l1 is left of l2

  if (l1.x >= l2.x + l2.w) return false; // l1 is right of l2

  if (l1.y + l1.h <= l2.y) return false; // l1 is above l2

  if (l1.y >= l2.y + l2.h) return false; // l1 is below l2

  return true; // boxes overlap
}
/**
 * Given a layout, compact it. This involves going down each y coordinate and removing gaps
 * between items.
 *
 * @param  {Array} layout Layout.
 * @param  {Boolean} verticalCompact Whether or not to compact the layout
 *   vertically.
 * @param {Object} minPositions
 * @return {Array}       Compacted Layout.
 */

function compact(layout
/*: Layout*/
, verticalCompact
/*: Boolean*/
, minPositions)
/*: Layout*/
{
  // Statics go in the compareWith array right away so items flow around them.
  var compareWith = getStatics(layout); // We go through the items by row and column.

  var sorted = sortLayoutItemsByRowCol(layout); // Holding for new items.

  var out = Array(layout.length);

  for (var i = 0, len = sorted.length; i < len; i++) {
    var l = sorted[i]; // Don't move static elements

    if (!l.static) {
      l = compactItem(compareWith, l, verticalCompact, minPositions); // Add to comparison array. We only collide with items before this one.
      // Statics are already in this array.

      compareWith.push(l);
    } // Add to output array to make sure they still come out in the right order.


    out[layout.indexOf(l)] = l; // Clear moved flag, if it exists.

    l.moved = false;
  }

  return out;
}
/**
 * Compact an item in the layout.
 */

function compactItem(compareWith
/*: Layout*/
, l
/*: LayoutItem*/
, verticalCompact
/*: boolean*/
, minPositions)
/*: LayoutItem*/
{
  if (verticalCompact) {
    // Move the element up as far as it can go without colliding.
    while (l.y > 0 && !getFirstCollision(compareWith, l)) {
      l.y--;
    }
  } else if (minPositions) {
    var minY = minPositions[l.i].y;

    while (l.y > minY && !getFirstCollision(compareWith, l)) {
      l.y--;
    }
  } // Move it down, and keep moving it down if it's colliding.


  var collides;

  while (collides = getFirstCollision(compareWith, l)) {
    l.y = collides.y + collides.h;
  }

  return l;
}
/**
 * Given a layout, make sure all elements fit within its bounds.
 *
 * @param  {Array} layout Layout array.
 * @param  {Number} bounds Number of columns.
 */

function correctBounds(layout
/*: Layout*/
, bounds
/*: {cols: number}*/
)
/*: Layout*/
{
  var collidesWith = getStatics(layout);

  for (var i = 0, len = layout.length; i < len; i++) {
    var l = layout[i]; // Overflows right

    if (l.x + l.w > bounds.cols) l.x = bounds.cols - l.w; // Overflows left

    if (l.x < 0) {
      l.x = 0;
      l.w = bounds.cols;
    }

    if (!l.static) collidesWith.push(l);else {
      // If this is static and collides with other statics, we must move it down.
      // We have to do something nicer than just letting them overlap.
      while (getFirstCollision(collidesWith, l)) {
        l.y++;
      }
    }
  }

  return layout;
}
/**
 * Get a layout item by ID. Used so we can override later on if necessary.
 *
 * @param  {Array}  layout Layout array.
 * @param  {String} id     ID
 * @return {LayoutItem}    Item at ID.
 */

function getLayoutItem(layout
/*: Layout*/
, id
/*: string*/
)
/*: ?LayoutItem*/
{
  for (var i = 0, len = layout.length; i < len; i++) {
    if (layout[i].i === id) return layout[i];
  }
}
/**
 * Returns the first item this layout collides with.
 * It doesn't appear to matter which order we approach this from, although
 * perhaps that is the wrong thing to do.
 *
 * @param  {Object} layoutItem Layout item.
 * @return {Object|undefined}  A colliding layout item, or undefined.
 */

function getFirstCollision(layout
/*: Layout*/
, layoutItem
/*: LayoutItem*/
)
/*: ?LayoutItem*/
{
  for (var i = 0, len = layout.length; i < len; i++) {
    if (collides(layout[i], layoutItem)) return layout[i];
  }
}
function getAllCollisions(layout
/*: Layout*/
, layoutItem
/*: LayoutItem*/
)
/*: Array<LayoutItem>*/
{
  return layout.filter(function (l) {
    return collides(l, layoutItem);
  });
}
/**
 * Get all static elements.
 * @param  {Array} layout Array of layout objects.
 * @return {Array}        Array of static layout items..
 */

function getStatics(layout
/*: Layout*/
)
/*: Array<LayoutItem>*/
{
  //return [];
  return layout.filter(function (l) {
    return l.static;
  });
}
/**
 * Move an element. Responsible for doing cascading movements of other elements.
 *
 * @param  {Array}      layout Full layout to modify.
 * @param  {LayoutItem} l      element to move.
 * @param  {Number}     [x]    X position in grid units.
 * @param  {Number}     [y]    Y position in grid units.
 * @param  {Boolean}    [isUserAction] If true, designates that the item we're moving is
 *                                     being dragged/resized by th euser.
 */

function moveElement(layout
/*: Layout*/
, l
/*: LayoutItem*/
, x
/*: Number*/
, y
/*: Number*/
, isUserAction
/*: Boolean*/
, preventCollision
/*: Boolean*/
)
/*: Layout*/
{
  if (l.static) return layout; // Short-circuit if nothing to do.
  //if (l.y === y && l.x === x) return layout;

  var oldX = l.x;
  var oldY = l.y;
  var movingUp = y && l.y > y; // This is quite a bit faster than extending the object

  if (typeof x === 'number') l.x = x;
  if (typeof y === 'number') l.y = y;
  l.moved = true; // If this collides with anything, move it.
  // When doing this comparison, we have to sort the items we compare with
  // to ensure, in the case of multiple collisions, that we're getting the
  // nearest collision.

  var sorted = sortLayoutItemsByRowCol(layout);
  if (movingUp) sorted = sorted.reverse();
  var collisions = getAllCollisions(sorted, l);

  if (preventCollision && collisions.length) {
    l.x = oldX;
    l.y = oldY;
    l.moved = false;
    return layout;
  } // Move each item that collides away from this element.


  for (var i = 0, len = collisions.length; i < len; i++) {
    var collision = collisions[i]; // console.log('resolving collision between', l.i, 'at', l.y, 'and', collision.i, 'at', collision.y);
    // Short circuit so we can't infinite loop

    if (collision.moved) continue; // This makes it feel a bit more precise by waiting to swap for just a bit when moving up.

    if (l.y > collision.y && l.y - collision.y > collision.h / 4) continue; // Don't move static items - we have to move *this* element away

    if (collision.static) {
      layout = moveElementAwayFromCollision(layout, collision, l, isUserAction);
    } else {
      layout = moveElementAwayFromCollision(layout, l, collision, isUserAction);
    }
  }

  return layout;
}
/**
 * This is where the magic needs to happen - given a collision, move an element away from the collision.
 * We attempt to move it up if there's room, otherwise it goes below.
 *
 * @param  {Array} layout            Full layout to modify.
 * @param  {LayoutItem} collidesWith Layout item we're colliding with.
 * @param  {LayoutItem} itemToMove   Layout item we're moving.
 * @param  {Boolean} [isUserAction]  If true, designates that the item we're moving is being dragged/resized
 *                                   by the user.
 */

function moveElementAwayFromCollision(layout
/*: Layout*/
, collidesWith
/*: LayoutItem*/
, itemToMove
/*: LayoutItem*/
, isUserAction
/*: ?boolean*/
)
/*: Layout*/
{
  var preventCollision = false; // we're already colliding
  // If there is enough space above the collision to put this element, move it there.
  // We only do this on the main collision as this can get funky in cascades and cause
  // unwanted swapping behavior.

  if (isUserAction) {
    // Make a mock item so we don't modify the item here, only modify in moveElement.
    var fakeItem
    /*: LayoutItem*/
    = {
      x: itemToMove.x,
      y: itemToMove.y,
      w: itemToMove.w,
      h: itemToMove.h,
      i: '-1'
    };
    fakeItem.y = Math.max(collidesWith.y - itemToMove.h, 0);

    if (!getFirstCollision(layout, fakeItem)) {
      return moveElement(layout, itemToMove, undefined, fakeItem.y, preventCollision);
    }
  } // Previously this was optimized to move below the collision directly, but this can cause problems
  // with cascading moves, as an item may actually leapflog a collision and cause a reversal in order.


  return moveElement(layout, itemToMove, undefined, itemToMove.y + 1, preventCollision);
}
/**
 * Helper to convert a number to a percentage string.
 *
 * @param  {Number} num Any number
 * @return {String}     That number as a percentage.
 */

function perc(num
/*: number*/
)
/*: string*/
{
  return num * 100 + '%';
}
function setTransform(top, left, width, height)
/*: Object*/
{
  // Replace unitless items with px
  var translate = "translate3d(" + left + "px," + top + "px, 0)";
  return {
    transform: translate,
    WebkitTransform: translate,
    MozTransform: translate,
    msTransform: translate,
    OTransform: translate,
    width: width + "px",
    height: height + "px",
    position: 'absolute'
  };
}
/**
 * Just like the setTransform method, but instead it will return a negative value of right.
 *
 * @param top
 * @param right
 * @param width
 * @param height
 * @returns {{transform: string, WebkitTransform: string, MozTransform: string, msTransform: string, OTransform: string, width: string, height: string, position: string}}
 */

function setTransformRtl(top, right, width, height)
/*: Object*/
{
  // Replace unitless items with px
  var translate = "translate3d(" + right * -1 + "px," + top + "px, 0)";
  return {
    transform: translate,
    WebkitTransform: translate,
    MozTransform: translate,
    msTransform: translate,
    OTransform: translate,
    width: width + "px",
    height: height + "px",
    position: 'absolute'
  };
}
function setTopLeft(top, left, width, height)
/*: Object*/
{
  return {
    top: top + "px",
    left: left + "px",
    width: width + "px",
    height: height + "px",
    position: 'absolute'
  };
}
/**
 * Just like the setTopLeft method, but instead, it will return a right property instead of left.
 *
 * @param top
 * @param right
 * @param width
 * @param height
 * @returns {{top: string, right: string, width: string, height: string, position: string}}
 */

function setTopRight(top, right, width, height)
/*: Object*/
{
  return {
    top: top + "px",
    right: right + "px",
    width: width + "px",
    height: height + "px",
    position: 'absolute'
  };
}
/**
 * Get layout items sorted from top left to right and down.
 *
 * @return {Array} Array of layout objects.
 * @return {Array}        Layout, sorted static items first.
 */

function sortLayoutItemsByRowCol(layout
/*: Layout*/
)
/*: Layout*/
{
  return [].concat(layout).sort(function (a, b) {
    if (a.y === b.y && a.x === b.x) {
      return 0;
    }

    if (a.y > b.y || a.y === b.y && a.x > b.x) {
      return 1;
    }

    return -1;
  });
}
/**
 * Generate a layout using the initialLayout and children as a template.
 * Missing entries will be added, extraneous ones will be truncated.
 *
 * @param  {Array}  initialLayout Layout passed in through props.
 * @param  {String} breakpoint    Current responsive breakpoint.
 * @param  {Boolean} verticalCompact Whether or not to compact the layout vertically.
 * @return {Array}                Working layout.
 */

/*
export function synchronizeLayoutWithChildren(initialLayout: Layout, children: Array<React.Element>|React.Element,
                                              cols: number, verticalCompact: boolean): Layout {
  // ensure 'children' is always an array
  if (!Array.isArray(children)) {
    children = [children];
  }
  initialLayout = initialLayout || [];

  // Generate one layout item per child.
  let layout: Layout = [];
  for (let i = 0, len = children.length; i < len; i++) {
    let newItem;
    const child = children[i];

    // Don't overwrite if it already exists.
    const exists = getLayoutItem(initialLayout, child.key || "1" /!* FIXME satisfies Flow *!/);
    if (exists) {
      newItem = exists;
    } else {
      const g = child.props._grid;

      // Hey, this item has a _grid property, use it.
      if (g) {
        if (!isProduction) {
          validateLayout([g], 'ReactGridLayout.children');
        }
        // Validated; add it to the layout. Bottom 'y' possible is the bottom of the layout.
        // This allows you to do nice stuff like specify {y: Infinity}
        if (verticalCompact) {
          newItem = cloneLayoutItem({...g, y: Math.min(bottom(layout), g.y), i: child.key});
        } else {
          newItem = cloneLayoutItem({...g, y: g.y, i: child.key});
        }
      }
      // Nothing provided: ensure this is added to the bottom
      else {
        newItem = cloneLayoutItem({w: 1, h: 1, x: 0, y: bottom(layout), i: child.key || "1"});
      }
    }
    layout[i] = newItem;
  }

  // Correct the layout.
  layout = correctBounds(layout, {cols: cols});
  layout = compact(layout, verticalCompact);

  return layout;
}
*/

/**
 * Validate a layout. Throws errors.
 *
 * @param  {Array}  layout        Array of layout items.
 * @param  {String} [contextName] Context name for errors.
 * @throw  {Error}                Validation error.
 */

function validateLayout(layout
/*: Layout*/
, contextName
/*: string*/
)
/*: void*/
{
  contextName = contextName || "Layout";
  var subProps = ['x', 'y', 'w', 'h'];
  var keyArr = [];
  if (!Array.isArray(layout)) throw new Error(contextName + " must be an array!");

  for (var i = 0, len = layout.length; i < len; i++) {
    var item = layout[i];

    for (var j = 0; j < subProps.length; j++) {
      if (typeof item[subProps[j]] !== 'number') {
        throw new Error('VueGridLayout: ' + contextName + '[' + i + '].' + subProps[j] + ' must be a number!');
      }
    }

    if (item.i === undefined || item.i === null) {
      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].i cannot be null!');
    }

    if (typeof item.i !== 'number' && typeof item.i !== 'string') {
      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].i must be a string or number!');
    }

    if (keyArr.indexOf(item.i) >= 0) {
      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].i must be unique!');
    }

    keyArr.push(item.i);

    if (item.static !== undefined && typeof item.static !== 'boolean') {
      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].static must be a boolean!');
    }
  }
} // Flow can't really figure this out, so we just use Object

function autoBindHandlers(el
/*: Object*/
, fns
/*: Array<string>*/
)
/*: void*/
{
  fns.forEach(function (key) {
    return el[key] = el[key].bind(el);
  });
}
/**
 * Convert a JS object to CSS string. Similar to React's output of CSS.
 * @param obj
 * @returns {string}
 */

function createMarkup(obj) {
  var keys = Object.keys(obj);
  if (!keys.length) return '';
  var i,
      len = keys.length;
  var result = '';

  for (i = 0; i < len; i++) {
    var key = keys[i];
    var val = obj[key];
    result += hyphenate(key) + ':' + addPx(key, val) + ';';
  }

  return result;
}
/* The following list is defined in React's core */

var IS_UNITLESS = {
  animationIterationCount: true,
  boxFlex: true,
  boxFlexGroup: true,
  boxOrdinalGroup: true,
  columnCount: true,
  flex: true,
  flexGrow: true,
  flexPositive: true,
  flexShrink: true,
  flexNegative: true,
  flexOrder: true,
  gridRow: true,
  gridColumn: true,
  fontWeight: true,
  lineClamp: true,
  lineHeight: true,
  opacity: true,
  order: true,
  orphans: true,
  tabSize: true,
  widows: true,
  zIndex: true,
  zoom: true,
  // SVG-related properties
  fillOpacity: true,
  stopOpacity: true,
  strokeDashoffset: true,
  strokeOpacity: true,
  strokeWidth: true
};
/**
 * Will add px to the end of style values which are Numbers.
 * @param name
 * @param value
 * @returns {*}
 */

function addPx(name, value) {
  if (typeof value === 'number' && !IS_UNITLESS[name]) {
    return value + 'px';
  } else {
    return value;
  }
}
/**
 * Hyphenate a camelCase string.
 *
 * @param {String} str
 * @return {String}
 */

var hyphenateRE = /([a-z\d])([A-Z])/g;
function hyphenate(str) {
  return str.replace(hyphenateRE, '$1-$2').toLowerCase();
}
function findItemInArray(array, property, value) {
  for (var i = 0; i < array.length; i++) {
    if (array[i][property] == value) return true;
  }

  return false;
}
function findAndRemove(array, property, value) {
  array.forEach(function (result, index) {
    if (result[property] === value) {
      //Remove from array
      array.splice(index, 1);
    }
  });
}

/***/ }),

/***/ "a481":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var anObject = __webpack_require__("cb7c");
var toObject = __webpack_require__("4bf8");
var toLength = __webpack_require__("9def");
var toInteger = __webpack_require__("4588");
var advanceStringIndex = __webpack_require__("0390");
var regExpExec = __webpack_require__("5f1b");
var max = Math.max;
var min = Math.min;
var floor = Math.floor;
var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;

var maybeToString = function (it) {
  return it === undefined ? it : String(it);
};

// @@replace logic
__webpack_require__("214f")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {
  return [
    // `String.prototype.replace` method
    // https://tc39.github.io/ecma262/#sec-string.prototype.replace
    function replace(searchValue, replaceValue) {
      var O = defined(this);
      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
      return fn !== undefined
        ? fn.call(searchValue, O, replaceValue)
        : $replace.call(String(O), searchValue, replaceValue);
    },
    // `RegExp.prototype[@@replace]` method
    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
    function (regexp, replaceValue) {
      var res = maybeCallNative($replace, regexp, this, replaceValue);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);
      var functionalReplace = typeof replaceValue === 'function';
      if (!functionalReplace) replaceValue = String(replaceValue);
      var global = rx.global;
      if (global) {
        var fullUnicode = rx.unicode;
        rx.lastIndex = 0;
      }
      var results = [];
      while (true) {
        var result = regExpExec(rx, S);
        if (result === null) break;
        results.push(result);
        if (!global) break;
        var matchStr = String(result[0]);
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
      }
      var accumulatedResult = '';
      var nextSourcePosition = 0;
      for (var i = 0; i < results.length; i++) {
        result = results[i];
        var matched = String(result[0]);
        var position = max(min(toInteger(result.index), S.length), 0);
        var captures = [];
        // NOTE: This is equivalent to
        //   captures = result.slice(1).map(maybeToString)
        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
        // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
        var namedCaptures = result.groups;
        if (functionalReplace) {
          var replacerArgs = [matched].concat(captures, position, S);
          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
          var replacement = String(replaceValue.apply(undefined, replacerArgs));
        } else {
          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
        }
        if (position >= nextSourcePosition) {
          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
          nextSourcePosition = position + matched.length;
        }
      }
      return accumulatedResult + S.slice(nextSourcePosition);
    }
  ];

    // https://tc39.github.io/ecma262/#sec-getsubstitution
  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
    var tailPos = position + matched.length;
    var m = captures.length;
    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
    if (namedCaptures !== undefined) {
      namedCaptures = toObject(namedCaptures);
      symbols = SUBSTITUTION_SYMBOLS;
    }
    return $replace.call(replacement, symbols, function (match, ch) {
      var capture;
      switch (ch.charAt(0)) {
        case '$': return '$';
        case '&': return matched;
        case '`': return str.slice(0, position);
        case "'": return str.slice(tailPos);
        case '<':
          capture = namedCaptures[ch.slice(1, -1)];
          break;
        default: // \d\d?
          var n = +ch;
          if (n === 0) return match;
          if (n > m) {
            var f = floor(n / 10);
            if (f === 0) return match;
            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
            return match;
          }
          capture = captures[n - 1];
      }
      return capture === undefined ? '' : capture;
    });
  }
});


/***/ }),

/***/ "aa77":
/***/ (function(module, exports, __webpack_require__) {

var $export = __webpack_require__("5ca1");
var defined = __webpack_require__("be13");
var fails = __webpack_require__("79e5");
var spaces = __webpack_require__("fdef");
var space = '[' + spaces + ']';
var non = '\u200b\u0085';
var ltrim = RegExp('^' + space + space + '*');
var rtrim = RegExp(space + space + '*$');

var exporter = function (KEY, exec, ALIAS) {
  var exp = {};
  var FORCE = fails(function () {
    return !!spaces[KEY]() || non[KEY]() != non;
  });
  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
  if (ALIAS) exp[ALIAS] = fn;
  $export($export.P + $export.F * FORCE, 'String', exp);
};

// 1 -> String#trimLeft
// 2 -> String#trimRight
// 3 -> String#trim
var trim = exporter.trim = function (string, TYPE) {
  string = String(defined(string));
  if (TYPE & 1) string = string.replace(ltrim, '');
  if (TYPE & 2) string = string.replace(rtrim, '');
  return string;
};

module.exports = exporter;


/***/ }),

/***/ "abb4":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/* global console: false */

/**
 * Reporter that handles the reporting of logs, warnings and errors.
 * @public
 * @param {boolean} quiet Tells if the reporter should be quiet or not.
 */
module.exports = function(quiet) {
    function noop() {
        //Does nothing.
    }

    var reporter = {
        log: noop,
        warn: noop,
        error: noop
    };

    if(!quiet && window.console) {
        var attachFunction = function(reporter, name) {
            //The proxy is needed to be able to call the method with the console context,
            //since we cannot use bind.
            reporter[name] = function reporterProxy() {
                var f = console[name];
                if (f.apply) { //IE9 does not support console.log.apply :)
                    f.apply(console, arguments);
                } else {
                    for (var i = 0; i < arguments.length; i++) {
                        f(arguments[i]);
                    }
                }
            };
        };

        attachFunction(reporter, "log");
        attachFunction(reporter, "warn");
        attachFunction(reporter, "error");
    }

    return reporter;
};

/***/ }),

/***/ "ac6a":
/***/ (function(module, exports, __webpack_require__) {

var $iterators = __webpack_require__("cadf");
var getKeys = __webpack_require__("0d58");
var redefine = __webpack_require__("2aba");
var global = __webpack_require__("7726");
var hide = __webpack_require__("32e9");
var Iterators = __webpack_require__("84f2");
var wks = __webpack_require__("2b4c");
var ITERATOR = wks('iterator');
var TO_STRING_TAG = wks('toStringTag');
var ArrayValues = Iterators.Array;

var DOMIterables = {
  CSSRuleList: true, // TODO: Not spec compliant, should be false.
  CSSStyleDeclaration: false,
  CSSValueList: false,
  ClientRectList: false,
  DOMRectList: false,
  DOMStringList: false,
  DOMTokenList: true,
  DataTransferItemList: false,
  FileList: false,
  HTMLAllCollection: false,
  HTMLCollection: false,
  HTMLFormElement: false,
  HTMLSelectElement: false,
  MediaList: true, // TODO: Not spec compliant, should be false.
  MimeTypeArray: false,
  NamedNodeMap: false,
  NodeList: true,
  PaintRequestList: false,
  Plugin: false,
  PluginArray: false,
  SVGLengthList: false,
  SVGNumberList: false,
  SVGPathSegList: false,
  SVGPointList: false,
  SVGStringList: false,
  SVGTransformList: false,
  SourceBufferList: false,
  StyleSheetList: true, // TODO: Not spec compliant, should be false.
  TextTrackCueList: false,
  TextTrackList: false,
  TouchList: false
};

for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
  var NAME = collections[i];
  var explicit = DOMIterables[NAME];
  var Collection = global[NAME];
  var proto = Collection && Collection.prototype;
  var key;
  if (proto) {
    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
    Iterators[NAME] = ArrayValues;
    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
  }
}


/***/ }),

/***/ "ad20":
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__("2350")(false);
// imports


// module
exports.push([module.i, ".vue-grid-layout{position:relative;-webkit-transition:height .2s ease;transition:height .2s ease}", ""]);

// exports


/***/ }),

/***/ "ade3":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; });
function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

/***/ }),

/***/ "b0c5":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var regexpExec = __webpack_require__("520a");
__webpack_require__("5ca1")({
  target: 'RegExp',
  proto: true,
  forced: regexpExec !== /./.exec
}, {
  exec: regexpExec
});


/***/ }),

/***/ "b770":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = module.exports = {};

/**
 * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.
 * @public
 * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.
 * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.
 * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.
 */
utils.forEach = function(collection, callback) {
    for(var i = 0; i < collection.length; i++) {
        var result = callback(collection[i]);
        if(result) {
            return result;
        }
    }
};


/***/ }),

/***/ "bc21":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";

// NAMESPACE OBJECT: ./node_modules/@interactjs/snappers/all.js
var all_namespaceObject = {};
__webpack_require__.r(all_namespaceObject);
__webpack_require__.d(all_namespaceObject, "edgeTarget", function() { return edgeTarget; });
__webpack_require__.d(all_namespaceObject, "elements", function() { return snappers_elements; });
__webpack_require__.d(all_namespaceObject, "grid", function() { return grid; });

// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1705dc22-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/GridItem.vue?vue&type=template&id=e7489122&
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"item",staticClass:"vue-grid-item",class:_vm.classObj,style:(_vm.style)},[_vm._t("default"),(_vm.resizableAndNotStatic)?_c('span',{ref:"handle",class:_vm.resizableHandleClass}):_vm._e()],2)}
var staticRenderFns = []


// CONCATENATED MODULE: ./src/components/GridItem.vue?vue&type=template&id=e7489122&

// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js
var es7_object_get_own_property_descriptors = __webpack_require__("8e6e");

// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js
var web_dom_iterable = __webpack_require__("ac6a");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js
var es6_array_iterator = __webpack_require__("cadf");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js
var es6_object_keys = __webpack_require__("456d");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.regexp.replace.js
var es6_regexp_replace = __webpack_require__("a481");

// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__("ade3");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.number.is-finite.js
var es6_number_is_finite = __webpack_require__("fca0");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.regexp.match.js
var es6_regexp_match = __webpack_require__("4917");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.number.constructor.js
var es6_number_constructor = __webpack_require__("c5f6");

// EXTERNAL MODULE: ./src/helpers/utils.js
var utils = __webpack_require__("a2b6");

// CONCATENATED MODULE: ./src/helpers/draggableUtils.js
// Get {x, y} positions from event.
function getControlPosition(e) {
  return offsetXYFromParentOf(e);
} // Get from offsetParent

function offsetXYFromParentOf(evt) {
  var offsetParent = evt.target.offsetParent || document.body;
  var offsetParentRect = evt.offsetParent === document.body ? {
    left: 0,
    top: 0
  } : offsetParent.getBoundingClientRect();
  var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;
  var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;
  /*const x = Math.round(evt.clientX + offsetParent.scrollLeft - offsetParentRect.left);
  const y = Math.round(evt.clientY + offsetParent.scrollTop - offsetParentRect.top);*/

  return {
    x: x,
    y: y
  };
} // Create an data object exposed by <DraggableCore>'s events

function createCoreData(lastX, lastY, x, y) {
  // State changes are often (but not always!) async. We want the latest value.
  var isStart = !isNum(lastX);

  if (isStart) {
    // If this is our first move, use the x and y as last coords.
    return {
      deltaX: 0,
      deltaY: 0,
      lastX: x,
      lastY: y,
      x: x,
      y: y
    };
  } else {
    // Otherwise calculate proper values.
    return {
      deltaX: x - lastX,
      deltaY: y - lastY,
      lastX: lastX,
      lastY: lastY,
      x: x,
      y: y
    };
  }
}

function isNum(num) {
  return typeof num === 'number' && !isNaN(num);
}
// EXTERNAL MODULE: ./src/helpers/responsiveUtils.js
var responsiveUtils = __webpack_require__("97a7");

// EXTERNAL MODULE: ./src/helpers/DOM.js
var DOM = __webpack_require__("1ca7");

// CONCATENATED MODULE: ./node_modules/@interactjs/utils/domObjects.js
const domObjects = {
  init,
  document: null,
  DocumentFragment: null,
  SVGElement: null,
  SVGSVGElement: null,
  SVGElementInstance: null,
  Element: null,
  HTMLElement: null,
  Event: null,
  Touch: null,
  PointerEvent: null
};

function blank() {}

/* harmony default export */ var utils_domObjects = (domObjects);

function init(window) {
  const win = window;
  domObjects.document = win.document;
  domObjects.DocumentFragment = win.DocumentFragment || blank;
  domObjects.SVGElement = win.SVGElement || blank;
  domObjects.SVGSVGElement = win.SVGSVGElement || blank;
  domObjects.SVGElementInstance = win.SVGElementInstance || blank;
  domObjects.Element = win.Element || blank;
  domObjects.HTMLElement = win.HTMLElement || domObjects.Element;
  domObjects.Event = win.Event;
  domObjects.Touch = win.Touch || blank;
  domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent;
}
//# sourceMappingURL=domObjects.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/isWindow.js
/* harmony default export */ var isWindow = (thing => !!(thing && thing.Window) && thing instanceof thing.Window);
//# sourceMappingURL=isWindow.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/window.js

let realWindow = undefined;
let win = undefined;

function window_init(window) {
  // get wrapped window if using Shadow DOM polyfill
  realWindow = window; // create a TextNode

  const el = window.document.createTextNode(''); // check if it's wrapped by a polyfill

  if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {
    // use wrapped window
    window = window.wrap(window);
  }

  win = window;
}

if (typeof window !== 'undefined' && !!window) {
  window_init(window);
}

function getWindow(node) {
  if (isWindow(node)) {
    return node;
  }

  const rootNode = node.ownerDocument || node;
  return rootNode.defaultView || win.window;
}
//# sourceMappingURL=window.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/is.js



const is_window = thing => thing === win || isWindow(thing);

const docFrag = thing => object(thing) && thing.nodeType === 11;

const object = thing => !!thing && typeof thing === 'object';

const func = thing => typeof thing === 'function';

const number = thing => typeof thing === 'number';

const bool = thing => typeof thing === 'boolean';

const string = thing => typeof thing === 'string';

const is_element = thing => {
  if (!thing || typeof thing !== 'object') {
    return false;
  } // eslint-disable-next-line import/no-named-as-default-member


  const _window = getWindow(thing) || win;

  return /object|function/.test(typeof _window.Element) ? thing instanceof _window.Element // DOM2
  : thing.nodeType === 1 && typeof thing.nodeName === 'string';
};

const plainObject = thing => object(thing) && !!thing.constructor && /function Object\b/.test(thing.constructor.toString());

const array = thing => object(thing) && typeof thing.length !== 'undefined' && func(thing.splice);

/* harmony default export */ var is = ({
  window: is_window,
  docFrag,
  object,
  func,
  number,
  bool,
  string,
  element: is_element,
  plainObject,
  array
});
//# sourceMappingURL=is.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/browser.js



const browser = {
  init: browser_init,
  supportsTouch: null,
  supportsPointerEvent: null,
  isIOS7: null,
  isIOS: null,
  isIe9: null,
  isOperaMobile: null,
  prefixedMatchesSelector: null,
  pEventTypes: null,
  wheelEvent: null
};

function browser_init(window) {
  const Element = utils_domObjects.Element;
  const navigator = win.navigator; // Does the browser support touch input?

  browser.supportsTouch = 'ontouchstart' in window || is.func(window.DocumentTouch) && utils_domObjects.document instanceof window.DocumentTouch; // Does the browser support PointerEvents

  browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!utils_domObjects.PointerEvent;
  browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform); // scrolling doesn't change the result of getClientRects on iOS 7

  browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\d]/.test(navigator.appVersion);
  browser.isIe9 = /MSIE 9/.test(navigator.userAgent); // Opera Mobile must be handled differently

  browser.isOperaMobile = navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent); // prefix matchesSelector

  browser.prefixedMatchesSelector = 'matches' in Element.prototype ? 'matches' : 'webkitMatchesSelector' in Element.prototype ? 'webkitMatchesSelector' : 'mozMatchesSelector' in Element.prototype ? 'mozMatchesSelector' : 'oMatchesSelector' in Element.prototype ? 'oMatchesSelector' : 'msMatchesSelector';
  browser.pEventTypes = browser.supportsPointerEvent ? utils_domObjects.PointerEvent === window.MSPointerEvent ? {
    up: 'MSPointerUp',
    down: 'MSPointerDown',
    over: 'mouseover',
    out: 'mouseout',
    move: 'MSPointerMove',
    cancel: 'MSPointerCancel'
  } : {
    up: 'pointerup',
    down: 'pointerdown',
    over: 'pointerover',
    out: 'pointerout',
    move: 'pointermove',
    cancel: 'pointercancel'
  } : null; // because Webkit and Opera still use 'mousewheel' event type

  browser.wheelEvent = 'onmousewheel' in utils_domObjects.document ? 'mousewheel' : 'wheel';
}

/* harmony default export */ var utils_browser = (browser);
//# sourceMappingURL=browser.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/arr.js
const contains = (array, target) => array.indexOf(target) !== -1;
const arr_remove = (array, target) => array.splice(array.indexOf(target), 1);
const merge = (target, source) => {
  for (const item of source) {
    target.push(item);
  }

  return target;
};
const from = source => merge([], source);
const findIndex = (array, func) => {
  for (let i = 0; i < array.length; i++) {
    if (func(array[i], i, array)) {
      return i;
    }
  }

  return -1;
};
const find = (array, func) => array[findIndex(array, func)];
//# sourceMappingURL=arr.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/clone.js

 // tslint:disable-next-line ban-types

function clone(source) {
  const dest = {};

  for (const prop in source) {
    const value = source[prop];

    if (is.plainObject(value)) {
      dest[prop] = clone(value);
    } else if (is.array(value)) {
      dest[prop] = from(value);
    } else {
      dest[prop] = value;
    }
  }

  return dest;
}
//# sourceMappingURL=clone.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/extend.js
function extend(dest, source) {
  for (const prop in source) {
    dest[prop] = source[prop];
  }

  const ret = dest;
  return ret;
}
//# sourceMappingURL=extend.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/raf.js
let lastTime = 0;
let request;
let cancel;

function raf_init(window) {
  request = window.requestAnimationFrame;
  cancel = window.cancelAnimationFrame;

  if (!request) {
    const vendors = ['ms', 'moz', 'webkit', 'o'];

    for (const vendor of vendors) {
      request = window[`${vendor}RequestAnimationFrame`];
      cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`];
    }
  }

  request = request && request.bind(window);
  cancel = cancel && cancel.bind(window);

  if (!request) {
    request = callback => {
      const currTime = Date.now();
      const timeToCall = Math.max(0, 16 - (currTime - lastTime)); // eslint-disable-next-line node/no-callback-literal

      const token = window.setTimeout(() => {
        callback(currTime + timeToCall);
      }, timeToCall);
      lastTime = currTime + timeToCall;
      return token;
    };

    cancel = token => clearTimeout(token);
  }
}

/* harmony default export */ var raf = ({
  request: callback => request(callback),
  cancel: token => cancel(token),
  init: raf_init
});
//# sourceMappingURL=raf.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/normalizeListeners.js


function normalize(type, listeners, result) {
  result = result || {};

  if (is.string(type) && type.search(' ') !== -1) {
    type = split(type);
  }

  if (is.array(type)) {
    return type.reduce((acc, t) => extend(acc, normalize(t, listeners, result)), result);
  } // ({ type: fn }) -> ('', { type: fn })


  if (is.object(type)) {
    listeners = type;
    type = '';
  }

  if (is.func(listeners)) {
    result[type] = result[type] || [];
    result[type].push(listeners);
  } else if (is.array(listeners)) {
    for (const l of listeners) {
      normalize(type, l, result);
    }
  } else if (is.object(listeners)) {
    for (const prefix in listeners) {
      const combinedTypes = split(prefix).map(p => `${type}${p}`);
      normalize(combinedTypes, listeners[prefix], result);
    }
  }

  return result;
}

function split(type) {
  return type.trim().split(/ +/);
}
//# sourceMappingURL=normalizeListeners.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/core/Eventable.js




function fireUntilImmediateStopped(event, listeners) {
  for (const listener of listeners) {
    if (event.immediatePropagationStopped) {
      break;
    }

    listener(event);
  }
}

class Eventable_Eventable {
  constructor(options) {
    this.options = void 0;
    this.types = {};
    this.propagationStopped = false;
    this.immediatePropagationStopped = false;
    this.global = void 0;
    this.options = extend({}, options || {});
  }

  fire(event) {
    let listeners;
    const global = this.global; // Interactable#on() listeners
    // tslint:disable no-conditional-assignment

    if (listeners = this.types[event.type]) {
      fireUntilImmediateStopped(event, listeners);
    } // interact.on() listeners


    if (!event.propagationStopped && global && (listeners = global[event.type])) {
      fireUntilImmediateStopped(event, listeners);
    }
  }

  on(type, listener) {
    const listeners = normalize(type, listener);

    for (type in listeners) {
      this.types[type] = merge(this.types[type] || [], listeners[type]);
    }
  }

  off(type, listener) {
    const listeners = normalize(type, listener);

    for (type in listeners) {
      const eventList = this.types[type];

      if (!eventList || !eventList.length) {
        continue;
      }

      for (const subListener of listeners[type]) {
        const index = eventList.indexOf(subListener);

        if (index !== -1) {
          eventList.splice(index, 1);
        }
      }
    }
  }

  getRect(_element) {
    return null;
  }

}
//# sourceMappingURL=Eventable.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/domUtils.js




function nodeContains(parent, child) {
  if (parent.contains) {
    return parent.contains(child);
  }

  while (child) {
    if (child === parent) {
      return true;
    }

    child = child.parentNode;
  }

  return false;
}
function domUtils_closest(element, selector) {
  while (is.element(element)) {
    if (matchesSelector(element, selector)) {
      return element;
    }

    element = parentNode(element);
  }

  return null;
}
function parentNode(node) {
  let parent = node.parentNode;

  if (is.docFrag(parent)) {
    // skip past #shado-root fragments
    // tslint:disable-next-line
    while ((parent = parent.host) && is.docFrag(parent)) {
      continue;
    }

    return parent;
  }

  return parent;
}
function matchesSelector(element, selector) {
  // remove /deep/ from selectors if shadowDOM polyfill is used
  if (win !== realWindow) {
    selector = selector.replace(/\/deep\//g, ' ');
  }

  return element[utils_browser.prefixedMatchesSelector](selector);
}

const getParent = el => el.parentNode || el.host; // Test for the element that's "above" all other qualifiers


function indexOfDeepestElement(elements) {
  let deepestNodeParents = [];
  let deepestNodeIndex;

  for (let i = 0; i < elements.length; i++) {
    const currentNode = elements[i];
    const deepestNode = elements[deepestNodeIndex]; // node may appear in elements array multiple times

    if (!currentNode || i === deepestNodeIndex) {
      continue;
    }

    if (!deepestNode) {
      deepestNodeIndex = i;
      continue;
    }

    const currentNodeParent = getParent(currentNode);
    const deepestNodeParent = getParent(deepestNode); // check if the deepest or current are document.documentElement/rootElement
    // - if the current node is, do nothing and continue

    if (currentNodeParent === currentNode.ownerDocument) {
      continue;
    } // - if deepest is, update with the current node and continue to next
    else if (deepestNodeParent === currentNode.ownerDocument) {
        deepestNodeIndex = i;
        continue;
      } // compare zIndex of siblings


    if (currentNodeParent === deepestNodeParent) {
      if (zIndexIsHigherThan(currentNode, deepestNode)) {
        deepestNodeIndex = i;
      }

      continue;
    } // populate the ancestry array for the latest deepest node


    deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode);
    let ancestryStart; // if the deepest node is an HTMLElement and the current node is a non root svg element

    if (deepestNode instanceof utils_domObjects.HTMLElement && currentNode instanceof utils_domObjects.SVGElement && !(currentNode instanceof utils_domObjects.SVGSVGElement)) {
      // TODO: is this check necessary? Was this for HTML elements embedded in SVG?
      if (currentNode === deepestNodeParent) {
        continue;
      }

      ancestryStart = currentNode.ownerSVGElement;
    } else {
      ancestryStart = currentNode;
    }

    const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument);
    let commonIndex = 0; // get (position of closest common ancestor) + 1

    while (currentNodeParents[commonIndex] && currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]) {
      commonIndex++;
    }

    const parents = [currentNodeParents[commonIndex - 1], currentNodeParents[commonIndex], deepestNodeParents[commonIndex]];
    let child = parents[0].lastChild;

    while (child) {
      if (child === parents[1]) {
        deepestNodeIndex = i;
        deepestNodeParents = currentNodeParents;
        break;
      } else if (child === parents[2]) {
        break;
      }

      child = child.previousSibling;
    }
  }

  return deepestNodeIndex;
}

function getNodeParents(node, limit) {
  const parents = [];
  let parent = node;
  let parentParent;

  while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {
    parents.unshift(parent);
    parent = parentParent;
  }

  return parents;
}

function zIndexIsHigherThan(higherNode, lowerNode) {
  const higherIndex = parseInt(getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0;
  const lowerIndex = parseInt(getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0;
  return higherIndex >= lowerIndex;
}

function matchesUpTo(element, selector, limit) {
  while (is.element(element)) {
    if (matchesSelector(element, selector)) {
      return true;
    }

    element = parentNode(element);

    if (element === limit) {
      return matchesSelector(element, selector);
    }
  }

  return false;
}
function getActualElement(element) {
  return element.correspondingUseElement || element;
}
function getScrollXY(relevantWindow) {
  relevantWindow = relevantWindow || win;
  return {
    x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,
    y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop
  };
}
function getElementClientRect(element) {
  const clientRect = element instanceof utils_domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0];
  return clientRect && {
    left: clientRect.left,
    right: clientRect.right,
    top: clientRect.top,
    bottom: clientRect.bottom,
    width: clientRect.width || clientRect.right - clientRect.left,
    height: clientRect.height || clientRect.bottom - clientRect.top
  };
}
function getElementRect(element) {
  const clientRect = getElementClientRect(element);

  if (!utils_browser.isIOS7 && clientRect) {
    const scroll = getScrollXY(getWindow(element));
    clientRect.left += scroll.x;
    clientRect.right += scroll.x;
    clientRect.top += scroll.y;
    clientRect.bottom += scroll.y;
  }

  return clientRect;
}
function getPath(node) {
  const path = [];

  while (node) {
    path.push(node);
    node = parentNode(node);
  }

  return path;
}
function trySelector(value) {
  if (!is.string(value)) {
    return false;
  } // an exception will be raised if it is invalid


  utils_domObjects.document.querySelector(value);
  return true;
}
//# sourceMappingURL=domUtils.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/rect.js



function getStringOptionResult(value, target, element) {
  if (value === 'parent') {
    return parentNode(element);
  }

  if (value === 'self') {
    return target.getRect(element);
  }

  return domUtils_closest(element, value);
}
function resolveRectLike(value, target, element, functionArgs) {
  let returnValue = value;

  if (is.string(returnValue)) {
    returnValue = getStringOptionResult(returnValue, target, element);
  } else if (is.func(returnValue)) {
    returnValue = returnValue(...functionArgs);
  }

  if (is.element(returnValue)) {
    returnValue = getElementRect(returnValue);
  }

  return returnValue;
}
function rectToXY(rect) {
  return rect && {
    x: 'x' in rect ? rect.x : rect.left,
    y: 'y' in rect ? rect.y : rect.top
  };
}
function xywhToTlbr(rect) {
  if (rect && !('left' in rect && 'top' in rect)) {
    rect = extend({}, rect);
    rect.left = rect.x || 0;
    rect.top = rect.y || 0;
    rect.right = rect.right || rect.left + rect.width;
    rect.bottom = rect.bottom || rect.top + rect.height;
  }

  return rect;
}
function tlbrToXywh(rect) {
  if (rect && !('x' in rect && 'y' in rect)) {
    rect = extend({}, rect);
    rect.x = rect.left || 0;
    rect.y = rect.top || 0;
    rect.width = rect.width || (rect.right || 0) - rect.x;
    rect.height = rect.height || (rect.bottom || 0) - rect.y;
  }

  return rect;
}
function addEdges(edges, rect, delta) {
  if (edges.left) {
    rect.left += delta.x;
  }

  if (edges.right) {
    rect.right += delta.x;
  }

  if (edges.top) {
    rect.top += delta.y;
  }

  if (edges.bottom) {
    rect.bottom += delta.y;
  }

  rect.width = rect.right - rect.left;
  rect.height = rect.bottom - rect.top;
}
//# sourceMappingURL=rect.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/getOriginXY.js

/* harmony default export */ var getOriginXY = (function (target, element, actionName) {
  const actionOptions = target.options[actionName];
  const actionOrigin = actionOptions && actionOptions.origin;
  const origin = actionOrigin || target.options.origin;
  const originRect = resolveRectLike(origin, target, element, [target && element]);
  return rectToXY(originRect) || {
    x: 0,
    y: 0
  };
});
//# sourceMappingURL=getOriginXY.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/utils/hypot.js
/* harmony default export */ var hypot = ((x, y) => Math.sqrt(x * x + y * y));
//# sourceMappingURL=hypot.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/core/BaseEvent.js
class BaseEvent {
  constructor(interaction) {
    this.type = void 0;
    this.target = void 0;
    this.currentTarget = void 0;
    this.interactable = void 0;
    this._interaction = void 0;
    this.timeStamp = void 0;
    this.immediatePropagationStopped = false;
    this.propagationStopped = false;
    this._interaction = interaction;
  }

  preventDefault() {}
  /**
   * Don't call any other listeners (even on the current target)
   */


  stopPropagation() {
    this.propagationStopped = true;
  }
  /**
   * Don't call listeners on the remaining targets
   */


  stopImmediatePropagation() {
    this.immediatePropagationStopped = this.propagationStopped = true;
  }

} // defined outside of class definition to avoid assignment of undefined during
// construction

// getters and setters defined here to support typescript 3.6 and below which
// don't support getter and setters in .d.ts files
Object.defineProperty(BaseEvent.prototype, 'interaction', {
  get() {
    return this._interaction._proxy;
  },

  set() {}

});
//# sourceMappingURL=BaseEvent.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/core/defaultOptions.js
// eslint-disable-next-line @typescript-eslint/no-empty-interface
// export interface Options extends BaseDefaults, PerActionDefaults {}
const defaultOptions_defaults = {
  base: {
    preventDefault: 'auto',
    deltaSource: 'page'
  },
  perAction: {
    enabled: false,
    origin: {
      x: 0,
      y: 0
    }
  },
  actions: {}
};
//# sourceMappingURL=defaultOptions.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/core/InteractEvent.js





class InteractEvent_InteractEvent extends BaseEvent {
  // resize

  /** */
  constructor(interaction, event, actionName, phase, element, preEnd, type) {
    super(interaction);
    this.target = void 0;
    this.currentTarget = void 0;
    this.relatedTarget = null;
    this.screenX = void 0;
    this.screenY = void 0;
    this.button = void 0;
    this.buttons = void 0;
    this.ctrlKey = void 0;
    this.shiftKey = void 0;
    this.altKey = void 0;
    this.metaKey = void 0;
    this.page = void 0;
    this.client = void 0;
    this.delta = void 0;
    this.rect = void 0;
    this.x0 = void 0;
    this.y0 = void 0;
    this.t0 = void 0;
    this.dt = void 0;
    this.duration = void 0;
    this.clientX0 = void 0;
    this.clientY0 = void 0;
    this.velocity = void 0;
    this.speed = void 0;
    this.swipe = void 0;
    this.timeStamp = void 0;
    this.axes = void 0;
    this.preEnd = void 0;
    element = element || interaction.element;
    const target = interaction.interactable;
    const deltaSource = (target && target.options || defaultOptions_defaults).deltaSource;
    const origin = getOriginXY(target, element, actionName);
    const starting = phase === 'start';
    const ending = phase === 'end';
    const prevEvent = starting ? this : interaction.prevEvent;
    const coords = starting ? interaction.coords.start : ending ? {
      page: prevEvent.page,
      client: prevEvent.client,
      timeStamp: interaction.coords.cur.timeStamp
    } : interaction.coords.cur;
    this.page = extend({}, coords.page);
    this.client = extend({}, coords.client);
    this.rect = extend({}, interaction.rect);
    this.timeStamp = coords.timeStamp;

    if (!ending) {
      this.page.x -= origin.x;
      this.page.y -= origin.y;
      this.client.x -= origin.x;
      this.client.y -= origin.y;
    }

    this.ctrlKey = event.ctrlKey;
    this.altKey = event.altKey;
    this.shiftKey = event.shiftKey;
    this.metaKey = event.metaKey;
    this.button = event.button;
    this.buttons = event.buttons;
    this.target = element;
    this.currentTarget = element;
    this.preEnd = preEnd;
    this.type = type || actionName + (phase || '');
    this.interactable = target;
    this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0;
    this.x0 = interaction.coords.start.page.x - origin.x;
    this.y0 = interaction.coords.start.page.y - origin.y;
    this.clientX0 = interaction.coords.start.client.x - origin.x;
    this.clientY0 = interaction.coords.start.client.y - origin.y;

    if (starting || ending) {
      this.delta = {
        x: 0,
        y: 0
      };
    } else {
      this.delta = {
        x: this[deltaSource].x - prevEvent[deltaSource].x,
        y: this[deltaSource].y - prevEvent[deltaSource].y
      };
    }

    this.dt = interaction.coords.delta.timeStamp;
    this.duration = this.timeStamp - this.t0; // velocity and speed in pixels per second

    this.velocity = extend({}, interaction.coords.velocity[deltaSource]);
    this.speed = hypot(this.velocity.x, this.velocity.y);
    this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null;
  }

  getSwipe() {
    const interaction = this._interaction;

    if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {
      return null;
    }

    let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI;
    const overlap = 22.5;

    if (angle < 0) {
      angle += 360;
    }

    const left = 135 - overlap <= angle && angle < 225 + overlap;
    const up = 225 - overlap <= angle && angle < 315 + overlap;
    const right = !left && (315 - overlap <= angle || angle < 45 + overlap);
    const down = !up && 45 - overlap <= angle && angle < 135 + overlap;
    return {
      up,
      down,
      left,
      right,
      angle,
      speed: interaction.prevEvent.speed,
      velocity: {
        x: interaction.prevEvent.velocityX,
        y: interaction.prevEvent.velocityY
      }
    };
  }

  preventDefault() {}
  /**
   * Don't call listeners on the remaining targets
   */


  stopImmediatePropagation() {
    this.immediatePropagationStopped = this.propagationStopped = true;
  }
  /**
   * Don't call any other listeners (even on the current target)
   */


  stopPropagation() {
    this.propagationStopped = true;
  }

} // getters and setters defined here to support typescript 3.6 and below which
// don't support getter and setters in .d.ts files

Object.defineProperties(InteractEvent_InteractEvent.prototype, {
  pageX: {
    get() {
      return this.page.x;
    },

    set(value) {
      this.page.x = value;
    }

  },
  pageY: {
    get() {
      return this.page.y;
    },

    set(value) {
      this.page.y = value;
    }

  },
  clientX: {
    get() {
      return this.client.x;
    },

    set(value) {
      this.client.x = value;
    }

  },
  clientY: {
    get() {
      return this.client.y;
    },

    set(value) {
      this.client.y = value;
    }

  },
  dx: {
    get() {
      return this.delta.x;
    },

    set(value) {
      this.delta.x = value;
    }

  },
  dy: {
    get() {
      return this.delta.y;
    },

    set(value) {
      this.delta.y = value;
    }

  },
  velocityX: {
    get() {
      return this.velocity.x;
    },

    set(value) {
      this.velocity.x = value;
    }

  },
  velocityY: {
    get() {
      return this.velocity.y;
    },

    set(value) {
      this.velocity.y = value;
    }

  }
});
//# sourceMappingURL=InteractEvent.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/core/isNonNativeEvent.js
function isNonNativeEvent(type, actions) {
  if (actions.phaselessTypes[type]) {
    return true;
  }

  for (const name in actions.map) {
    if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {
      return true;
    }
  }

  return false;
}
//# sourceMappingURL=isNonNativeEvent.js.map
// CONCATENATED MODULE: ./node_modules/@interactjs/core/Interactable.js
/* eslint-disable no-dupe-class-members */











/** */
class Interactable_Interactable {
  /** @internal */
  get _defaults() {
    return {
      base: {},
      perAction: {},
      actions: {}
    };
  }

  /** */
  constructor(target, options, defaultContext, scopeEvents) {
    this.options = void 0;
    this._actions = void 0;
    this.target = void 0;
    this.events = new Eventable_Eventable();
    this._context = void 0;
    this._win = void 0;
    this._doc = void 0;
    this._scopeEvents = void 0;
    this._rectChecker = void 0;
    this._actions = options.actions;
    this.target = target;
    this._context = options.context || defaultContext;
    this._win = getWindow(trySelector(target) ? this._context : target);
    this._doc = this._win.document;
    this._scopeEvents = scopeEvents;
    this.set(options);
  }

  setOnEvents(actionName, phases) {
    if (is.func(phases.onstart)) {
      this.on(`${actionName}start`, phases.onstart);
    }

    if (is.func(phases.onmove)) {
      this.on(`${actionName}move`, phases.onmove);
    }

    if (is.func(phases.onend)) {
      this.on(`${actionName}end`, phases.onend);
    }

    if (is.func(phases.oninertiastart)) {
      this.on(`${actionName}inertiastart`, phases.oninertiastart);
    }

    return this;
  }

  updatePerActionListeners(actionName, prev, cur) {
    if (is.array(prev) || is.object(prev)) {
      this.off(actionName, prev);
    }

    if (is.array(cur) || is.object(cur)) {
      this.on(actionName, cur);
    }
  }

  setPerAction(actionName, options) {
    const defaults = this._defaults; // for all the default per-action options

    for (const optionName_ in options) {
      const optionName = optionName_;
      const actionOptions = this.options[actionName];
      const optionValue = options[optionName]; // remove old event listeners and add new ones

      if (optionName === 'listeners') {
        this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue);
      } // if the option value is an array


      if (is.array(optionValue)) {
        actionOptions[optionName] = from(optionValue);
      } // if the option value is an object
      else if (is.plainObject(optionValue)) {
          // copy the object
          actionOptions[optionName] = extend(actionOptions[optionName] || {}, clone(optionValue)); // set anabled field to true if it exists in the defaults

          if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {
            actionOptions[optionName].enabled = optionValue.enabled !== false;
          }
        } // if the option value is a boolean and the default is an object
        else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {
            actionOptions[optionName].enabled = optionValue;
          } // if it's anything else, do a plain assignment
          else {
              actionOptions[optionName] = optionValue;
            }
    }
  }
  /**
   * The default function to get an Interactables bounding rect. Can be
   * overridden using {@link Interactable.rectChecker}.
   *
   * @param {Element} [element] The element to measure.
   * @return {Rect} The object's bounding rectangle.
   */


  getRect(element) {
    element = element || (is.element(this.target) ? this.target : null);

    if (is.string(this.target)) {
      element = element || this._context.querySelector(this.target);
    }

    return getElementRect(element);
  }
  /**
   * Returns or sets the function used to calculate the interactable's
   * element's rectangle
   *
   * @param {function} [checker] A function which returns this Interactable's
   * bounding rectangle. See {@link Interactable.getRect}
   * @return {function | object} The checker function or this Interactable
   */


  rectChecker(checker) {
    if (is.func(checker)) {
      this._rectChecker = checker;

      this.getRect = element => {
        const rect = extend({}, this._rectChecker(element));

        if (!('width' in rect)) {
          rect.width = rect.right - rect.left;
          rect.height = rect.bottom - rect.top;
        }

        return rect;
      };

      return this;
    }

    if (checker === null) {
      delete this.getRect;
      delete this._rectChecker;
      return this;
    }

    return this.getRect;
  }

  _backCompatOption(optionName, newValue) {
    if (trySelector(newValue) || is.object(newValue)) {
      this.options[optionName] = newValue;

      for (const action in this._actions.map) {
        this.options[action][optionName] = newValue;
      }

      return this;
    }

    return this.options[optionName];
  }
  /**
   * Gets or sets the origin of the Interactable's element.  The x and y
   * of the origin will be subtracted from action event coordinates.
   *
   * @param {Element | object | string} [origin] An HTML or SVG Element whose
   * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'
   * or any CSS selector
   *
   * @return {object} The current origin or this Interactable
   */


  origin(newValue) {
    return this._backCompatOption('origin', newValue);
  }
  /**
   * Returns or sets the mouse coordinate types used to calculate the
   * movement of the pointer.
   *
   * @param {string} [newValue] Use 'client' if you will be scrolling while
   * interacting; Use 'page' if you want autoScroll to work
   * @return {string | object} The current deltaSource or this Interactable
   */


  deltaSource(newValue) {
    if (newValue === 'page' || newValue === 'client') {
      this.options.deltaSource = newValue;
      return this;
    }

    return this.options.deltaSource;
  }
  /**
   * Gets the selector context Node of the Interactable. The default is
   * `window.document`.
   *
   * @return {Node} The context Node of this Interactable
   */


  context() {
    return this._context;
  }

  inContext(element) {
    return this._context === element.ownerDocument || nodeContains(this._context, element);
  }

  testIgnoreAllow(options, targetNode, eventTarget) {
    return !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && this.testAllow(options.allowFrom, targetNode, eventTarget);
  }

  testAllow(allowFrom, targetNode, element) {
    if (!allowFrom) {
      return true;
    }

    if (!is.element(element)) {
      return false;
    }

    if (is.string(allowFrom)) {
      return matchesUpTo(element, allowFrom, targetNode);
    } else if (is.element(allowFrom)) {
      return nodeContains(allowFrom, element);
    }

    return false;
  }

  testIgnore(ignoreFrom, targetNode, element) {
    if (!ignoreFrom || !is.element(element)) {
      return false;
    }

    if (is.string(ignoreFrom)) {
      return matchesUpTo(element, ignoreFrom, targetNode);
    } else if (is.element(ignoreFrom)) {
      return nodeContains(ignoreFrom, element);
    }

    return false;
  }
  /**
   * Calls listeners for the given InteractEvent type bound globally
   * and directly to this Interactable
   *
   * @param {InteractEvent} iEvent The InteractEvent object to be fired on this
   * Interactable
   * @return {Interactable} this Interactable
   */


  fire(iEvent) {
    this.events.fire(iEvent);
    return this;
  }

  _onOff(method, typeArg, listenerArg, options) {
    if (is.object(typeArg) && !is.array(typeArg)) {
      options = listenerArg;
      listenerArg = null;
    }

    const addRemove = method === 'on' ? 'add' : 'remove';
    const listeners = normalize(typeArg, listenerArg);

    for (let type in listeners) {
      if (type === 'wheel') {
        type = utils_browser.wheelEvent;
      }

      for (const listener of listeners[type]) {
        // if it is an action event type
        if (isNonNativeEvent(type, this._actions)) {
          this.events[method](type, listener);
        } // delegated event
        else if (is.string(this.target)) {
            this._scopeEvents[`${addRemove}Delegate`](this.target, this._context, type, listener, options);
          } // remove listener from this Interactable's element
          else {
              this._scopeEvents[addRemove](this.target, type, listener, options);
Download .txt
gitextract_yc_usgoh/

├── .browserslistrc
├── .eslintrc.js
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   └── workflows/
│       ├── build-test.yml
│       └── vuepress-deploy.yml
├── .gitignore
├── LICENSE
├── README-zh_CN.md
├── README.md
├── babel.config.js
├── dist/
│   ├── vue-grid-layout.common.js
│   └── vue-grid-layout.umd.js
├── jest.config.js
├── package.json
├── postcss.config.js
├── public/
│   ├── app.css
│   └── index.html
├── src/
│   ├── App.vue
│   ├── components/
│   │   ├── CustomDragElement.vue
│   │   ├── GridItem.vue
│   │   ├── GridLayout.vue
│   │   ├── TestElement.vue
│   │   └── index.js
│   ├── helpers/
│   │   ├── DOM.js
│   │   ├── draggableUtils.js
│   │   ├── responsiveUtils.js
│   │   └── utils.js
│   └── main.js
├── test/
│   ├── interact-test.html
│   ├── interact-test.js
│   └── unit/
│       ├── GridItem.spec.js
│       └── utils.spec.js
├── vue.config.js
└── website/
    ├── TODOS.md
    ├── docs/
    │   ├── .vuepress/
    │   │   ├── Autocomplete.js
    │   │   ├── components/
    │   │   │   ├── Example01Basic.vue
    │   │   │   ├── Example02Events.vue
    │   │   │   ├── Example03MultipleGrids.vue
    │   │   │   ├── Example04AllowIgnore.vue
    │   │   │   ├── Example05Mirrored.vue
    │   │   │   ├── Example06Responsive.vue
    │   │   │   ├── Example07PreventCollision.vue
    │   │   │   ├── Example08ResponsivePredefinedLayouts.vue
    │   │   │   ├── Example09DynamicAddRemove.vue
    │   │   │   ├── Example10DragFromOutside.vue
    │   │   │   ├── Example11Bounded.vue
    │   │   │   ├── ExampleStylingGridLines.vue
    │   │   │   ├── ExampleStylingPlaceholder.vue
    │   │   │   ├── HomeFooter.vue
    │   │   │   └── HomepageGrid.vue
    │   │   ├── config.js
    │   │   ├── enhanceApp.js
    │   │   ├── public/
    │   │   │   └── examples/
    │   │   │       ├── 01-basic.html
    │   │   │       ├── 01-basic.js
    │   │   │       ├── 02-events.html
    │   │   │       ├── 02-events.js
    │   │   │       ├── 03-multiple-grids.html
    │   │   │       ├── 04-allow-ignore.html
    │   │   │       ├── 05-mirrored.html
    │   │   │       ├── 06-responsive.html
    │   │   │       ├── 06-responsive.js
    │   │   │       ├── 07-prevent-collision.html
    │   │   │       ├── 07-prevent-collision.js
    │   │   │       ├── 08-responsive-predefined-layouts.html
    │   │   │       ├── 08-responsive-predefined-layouts.js
    │   │   │       ├── 09-dynamic-add-remove.html
    │   │   │       ├── 09-dynamic-add-remove.js
    │   │   │       ├── 10-drag-from-outside.html
    │   │   │       ├── 10-drag-from-outside.js
    │   │   │       ├── 11-bounded.html
    │   │   │       ├── 11-bounded.js
    │   │   │       ├── app.css
    │   │   │       └── vue.js
    │   │   ├── styles/
    │   │   │   └── index.styl
    │   │   └── theme/
    │   │       ├── components/
    │   │       │   ├── CarbonAds.vue
    │   │       │   └── Home.vue
    │   │       ├── index.js
    │   │       └── layouts/
    │   │           └── Layout.vue
    │   ├── README.md
    │   ├── changelog/
    │   │   └── README.md
    │   ├── guide/
    │   │   ├── 01-basic.md
    │   │   ├── 02-events.md
    │   │   ├── 03-multiple-grids.md
    │   │   ├── 04-allow-ignore.md
    │   │   ├── 05-mirrored.md
    │   │   ├── 06-responsive.md
    │   │   ├── 07-prevent-collision.md
    │   │   ├── 08-responsive-predefined-layouts.md
    │   │   ├── 09-dynamic-add-remove.md
    │   │   ├── 10-drag-from-outside.md
    │   │   ├── 11-bounded.md
    │   │   ├── README.md
    │   │   ├── auto-size.md
    │   │   ├── events.md
    │   │   ├── examples.md
    │   │   ├── properties.md
    │   │   ├── styling.md
    │   │   └── usage.md
    │   ├── logo.psd
    │   ├── logo.xcf
    │   └── zh/
    │       ├── README.md
    │       ├── changelog/
    │       │   └── README.md
    │       └── guide/
    │           ├── 01-basic.md
    │           ├── 02-events.md
    │           ├── 03-multiple-grids.md
    │           ├── 04-allow-ignore.md
    │           ├── 05-mirrored.md
    │           ├── 06-responsive.md
    │           ├── 07-prevent-collision.md
    │           ├── 08-responsive-predefined-layouts.md
    │           ├── 09-dynamic-add-remove.md
    │           ├── 10-drag-from-outside.md
    │           ├── 11-bounded.md
    │           ├── README.md
    │           ├── auto-size.md
    │           ├── events.md
    │           ├── examples.md
    │           ├── properties.md
    │           ├── styling.md
    │           └── usage.md
    └── package.json
Download .txt
SYMBOL INDEX (1164 symbols across 13 files)

FILE: dist/vue-grid-layout.common.js
  function __webpack_require__ (line 8) | function __webpack_require__(moduleId) {
  function addListener (line 330) | function addListener(element, listener) {
  function buildCssTextString (line 352) | function buildCssTextString(rules) {
  function makeDetectable (line 365) | function makeDetectable(options, element, callback) {
  function getObject (line 518) | function getObject(element) {
  function uninstall (line 522) | function uninstall(element) {
  function isAnyIeVersion (line 565) | function isAnyIeVersion() {
  function hasDocument (line 615) | function hasDocument() {
  function hasWindow (line 619) | function hasWindow() {
  function getDocumentDir (line 623) | function getDocumentDir() {
  function setDocumentDir (line 631) | function setDocumentDir(dir
  function addWindowEventListener (line 643) | function addWindowEventListener(event
  function removeWindowEventListener (line 655) | function removeWindowEventListener(event
  function cssWithMappingToString (line 839) | function cssWithMappingToString(item, useSourceMap) {
  function toComment (line 859) | function toComment(sourceMap) {
  function normalizeComponent (line 919) | function normalizeComponent (
  function install (line 1132) | function install(Vue) {
  function generate (line 1192) | function generate() {
  function ownKeys (line 1318) | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object...
  function _objectSpread (line 1320) | function _objectSpread(target) { for (var i = 1; i < arguments.length; i...
  function listToStyles (line 2013) | function listToStyles (parentId, list) {
  function addStylesClient (line 2089) | function addStylesClient (parentId, list, _isProduction, _options) {
  function addStylesToDom (line 2123) | function addStylesToDom (styles /* Array<StyleObject> */) {
  function createStyleElement (line 2148) | function createStyleElement () {
  function addStyle (line 2155) | function addStyle (obj /* StyleObjectPart */) {
  function applyToSingletonTag (line 2214) | function applyToSingletonTag (styleElement, index, remove, obj) {
  function applyToTag (line 2231) | function applyToTag (styleElement, obj) {
  function getListeners (line 2279) | function getListeners(element) {
  function addListener (line 2295) | function addListener(element, listener) {
  function removeListener (line 2305) | function removeListener(element, listener) {
  function removeAllListeners (line 2315) | function removeAllListeners(element) {
  function getId (line 2360) | function getId(element) {
  function setId (line 2376) | function setId(element) {
  function getOption (line 2409) | function getOption(options, name, defaultValue) {
  function isDetectable (line 2561) | function isDetectable(element) {
  function markAsDetectable (line 2571) | function markAsDetectable(element) {
  function isBusy (line 2581) | function isBusy(element) {
  function markBusy (line 2591) | function markBusy(element, busy) {
  function getBreakpointFromWidth (line 3099) | function getBreakpointFromWidth(breakpoints
  function getColsFromBreakpoint (line 3123) | function getColsFromBreakpoint(breakpoint
  function findOrGenerateResponsiveLayout (line 3152) | function findOrGenerateResponsiveLayout(orgLayout
  function generateResponsiveLayout (line 3191) | function generateResponsiveLayout(layout
  function sortBreakpoints (line 3235) | function sortBreakpoints(breakpoints
  function bottom (line 3429) | function bottom(layout
  function cloneLayout (line 3444) | function cloneLayout(layout
  function cloneLayoutItem (line 3458) | function cloneLayoutItem(layoutItem
  function collides (line 3478) | function collides(l1
  function compact (line 3508) | function compact(layout
  function compactItem (line 3544) | function compactItem(compareWith
  function correctBounds (line 3582) | function correctBounds(layout
  function getLayoutItem (line 3620) | function getLayoutItem(layout
  function getFirstCollision (line 3640) | function getFirstCollision(layout
  function getAllCollisions (line 3651) | function getAllCollisions(layout
  function getStatics (line 3668) | function getStatics(layout
  function moveElement (line 3689) | function moveElement(layout
  function moveElementAwayFromCollision (line 3758) | function moveElementAwayFromCollision(layout
  function perc (line 3803) | function perc(num
  function setTransform (line 3810) | function setTransform(top, left, width, height)
  function setTransformRtl (line 3836) | function setTransformRtl(top, right, width, height)
  function setTopLeft (line 3852) | function setTopLeft(top, left, width, height)
  function setTopRight (line 3873) | function setTopRight(top, right, width, height)
  function sortLayoutItemsByRowCol (line 3891) | function sortLayoutItemsByRowCol(layout
  function validateLayout (line 3977) | function validateLayout(layout
  function autoBindHandlers (line 4018) | function autoBindHandlers(el
  function createMarkup (line 4035) | function createMarkup(obj) {
  function addPx (line 4090) | function addPx(name, value) {
  function hyphenate (line 4105) | function hyphenate(str) {
  function findItemInArray (line 4108) | function findItemInArray(array, property, value) {
  function findAndRemove (line 4115) | function findAndRemove(array, property, value) {
  function getSubstitution (line 4215) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function noop (line 4303) | function noop() {
  function _defineProperty (line 4424) | function _defineProperty(obj, key, value) {
  function getControlPosition (line 4536) | function getControlPosition(e) {
  function offsetXYFromParentOf (line 4540) | function offsetXYFromParentOf(evt) {
  function createCoreData (line 4557) | function createCoreData(lastX, lastY, x, y) {
  function isNum (line 4584) | function isNum(num) {
  function blank (line 4608) | function blank() {}
  function init (line 4612) | function init(window) {
  function window_init (line 4634) | function window_init(window) {
  function getWindow (line 4652) | function getWindow(node) {
  function browser_init (line 4725) | function browser_init(window) {
  function clone (line 4787) | function clone(source) {
  function extend (line 4806) | function extend(dest, source) {
  function raf_init (line 4820) | function raf_init(window) {
  function normalize (line 4861) | function normalize(type, listeners, result) {
  function split (line 4895) | function split(type) {
  function fireUntilImmediateStopped (line 4904) | function fireUntilImmediateStopped(event, listeners) {
  class Eventable_Eventable (line 4914) | class Eventable_Eventable {
    method constructor (line 4915) | constructor(options) {
    method fire (line 4924) | fire(event) {
    method on (line 4939) | on(type, listener) {
    method off (line 4947) | off(type, listener) {
    method getRect (line 4967) | getRect(_element) {
  function nodeContains (line 4978) | function nodeContains(parent, child) {
  function domUtils_closest (line 4993) | function domUtils_closest(element, selector) {
  function parentNode (line 5004) | function parentNode(node) {
  function matchesSelector (line 5019) | function matchesSelector(element, selector) {
  function indexOfDeepestElement (line 5031) | function indexOfDeepestElement(elements) {
  function getNodeParents (line 5110) | function getNodeParents(node, limit) {
  function zIndexIsHigherThan (line 5123) | function zIndexIsHigherThan(higherNode, lowerNode) {
  function matchesUpTo (line 5129) | function matchesUpTo(element, selector, limit) {
  function getActualElement (line 5144) | function getActualElement(element) {
  function getScrollXY (line 5147) | function getScrollXY(relevantWindow) {
  function getElementClientRect (line 5154) | function getElementClientRect(element) {
  function getElementRect (line 5165) | function getElementRect(element) {
  function getPath (line 5178) | function getPath(node) {
  function trySelector (line 5188) | function trySelector(value) {
  function getStringOptionResult (line 5202) | function getStringOptionResult(value, target, element) {
  function resolveRectLike (line 5213) | function resolveRectLike(value, target, element, functionArgs) {
  function rectToXY (line 5228) | function rectToXY(rect) {
  function xywhToTlbr (line 5234) | function xywhToTlbr(rect) {
  function tlbrToXywh (line 5245) | function tlbrToXywh(rect) {
  function addEdges (line 5256) | function addEdges(edges, rect, delta) {
  class BaseEvent (line 5294) | class BaseEvent {
    method constructor (line 5295) | constructor(interaction) {
    method preventDefault (line 5307) | preventDefault() {}
    method stopPropagation (line 5313) | stopPropagation() {
    method stopImmediatePropagation (line 5321) | stopImmediatePropagation() {
  method get (line 5331) | get() {
  method set (line 5335) | set() {}
  class InteractEvent_InteractEvent (line 5363) | class InteractEvent_InteractEvent extends BaseEvent {
    method constructor (line 5367) | constructor(interaction, event, actionName, phase, element, preEnd, ty...
    method getSwipe (line 5458) | getSwipe() {
    method preventDefault (line 5490) | preventDefault() {}
    method stopImmediatePropagation (line 5496) | stopImmediatePropagation() {
    method stopPropagation (line 5504) | stopPropagation() {
  method get (line 5513) | get() {
  method set (line 5517) | set(value) {
  method get (line 5523) | get() {
  method set (line 5527) | set(value) {
  method get (line 5533) | get() {
  method set (line 5537) | set(value) {
  method get (line 5543) | get() {
  method set (line 5547) | set(value) {
  method get (line 5553) | get() {
  method set (line 5557) | set(value) {
  method get (line 5563) | get() {
  method set (line 5567) | set(value) {
  method get (line 5573) | get() {
  method set (line 5577) | set(value) {
  method get (line 5583) | get() {
  method set (line 5587) | set(value) {
  function isNonNativeEvent (line 5595) | function isNonNativeEvent(type, actions) {
  class Interactable_Interactable (line 5623) | class Interactable_Interactable {
    method _defaults (line 5625) | get _defaults() {
    method constructor (line 5634) | constructor(target, options, defaultContext, scopeEvents) {
    method setOnEvents (line 5653) | setOnEvents(actionName, phases) {
    method updatePerActionListeners (line 5673) | updatePerActionListeners(actionName, prev, cur) {
    method setPerAction (line 5683) | setPerAction(actionName, options) {
    method getRect (line 5724) | getRect(element) {
    method rectChecker (line 5743) | rectChecker(checker) {
    method _backCompatOption (line 5770) | _backCompatOption(optionName, newValue) {
    method origin (line 5795) | origin(newValue) {
    method deltaSource (line 5808) | deltaSource(newValue) {
    method context (line 5824) | context() {
    method inContext (line 5828) | inContext(element) {
    method testIgnoreAllow (line 5832) | testIgnoreAllow(options, targetNode, eventTarget) {
    method testAllow (line 5836) | testAllow(allowFrom, targetNode, element) {
    method testIgnore (line 5854) | testIgnore(ignoreFrom, targetNode, element) {
    method fire (line 5877) | fire(iEvent) {
    method _onOff (line 5882) | _onOff(method, typeArg, listenerArg, options) {
    method on (line 5924) | on(types, listener, options) {
    method off (line 5939) | off(types, listener, options) {
    method set (line 5950) | set(options) {
    method unset (line 5981) | unset() {
  class InteractableSet_InteractableSet (line 6015) | class InteractableSet_InteractableSet {
    method constructor (line 6017) | constructor(scope) {
    method new (line 6044) | new(target, options) {
    method get (line 6082) | get(target, options) {
    method forEachMatch (line 6095) | forEachMatch(node, callback) {
  function pointerExtend (line 6115) | function pointerExtend(dest, source) {
  function copyCoords (line 6148) | function copyCoords(dest, src) {
  function setCoordDeltas (line 6157) | function setCoordDeltas(targetObj, prev, cur) {
  function setCoordVelocity (line 6164) | function setCoordVelocity(targetObj, delta) {
  function setZeroCoords (line 6172) | function setZeroCoords(targetObj) {
  function isNativePointer (line 6178) | function isNativePointer(pointer) {
  function getXY (line 6182) | function getXY(type, pointer, xy) {
  function getPageXY (line 6189) | function getPageXY(pointer, page) {
  function getClientXY (line 6205) | function getClientXY(pointer, client) {
  function getPointerId (line 6217) | function getPointerId(pointer) {
  function setCoords (line 6220) | function setCoords(dest, pointers, timeStamp) {
  function getTouchPair (line 6226) | function getTouchPair(event) {
  function pointerAverage (line 6250) | function pointerAverage(pointers) {
  function touchBBox (line 6272) | function touchBBox(event) {
  function touchDistance (line 6293) | function touchDistance(event, deltaSource) {
  function touchAngle (line 6301) | function touchAngle(event, deltaSource) {
  function getPointerType (line 6310) | function getPointerType(pointer) {
  function getEventTargets (line 6316) | function getEventTargets(event) {
  function newCoords (line 6320) | function newCoords() {
  function coordsToEvent (line 6333) | function coordsToEvent(coords) {
  function install (line 6401) | function install(scope) {
  class events_FakeEvent (line 6627) | class events_FakeEvent {
    method constructor (line 6628) | constructor(originalEvent) {
    method preventOriginalDefault (line 6637) | preventOriginalDefault() {
    method stopPropagation (line 6641) | stopPropagation() {
    method stopImmediatePropagation (line 6645) | stopImmediatePropagation() {
  function getOptions (line 6651) | function getOptions(param) {
  function warnOnce (line 6672) | function warnOnce(method, message) {
  function copyAction (line 6683) | function copyAction(dest, src) {
  function createInteractStatic (line 6698) | function createInteractStatic(scope) {
  class PointerInfo (line 6946) | class PointerInfo {
    method constructor (line 6947) | constructor(id, pointer, event, downTime, downTarget) {
  class Interaction_Interaction (line 6993) | class Interaction_Interaction {
    method pointerMoveTolerance (line 7002) | get pointerMoveTolerance() {
    method constructor (line 7011) | constructor({
    method pointerDown (line 7084) | pointerDown(pointer, event, eventTarget) {
    method start (line 7131) | start(action, interactable, element) {
    method pointerMove (line 7155) | pointerMove(pointer, event, eventTarget) {
    method move (line 7223) | move(signalArg) {
    method pointerUp (line 7240) | pointerUp(pointer, event, eventTarget, curEventTarget) {
    method documentBlur (line 7267) | documentBlur(event) {
    method end (line 7294) | end(event) {
    method currentAction (line 7314) | currentAction() {
    method interacting (line 7318) | interacting() {
    method stop (line 7324) | stop() {
    method getPointerIndex (line 7335) | getPointerIndex(pointer) {
    method getPointerInfo (line 7341) | getPointerInfo(pointer) {
    method updatePointer (line 7345) | updatePointer(pointer, event, eventTarget, down) {
    method removePointer (line 7391) | removePointer(pointer, event) {
    method _updateLatestPointer (line 7413) | _updateLatestPointer(pointer, event, eventTarget) {
    method destroy (line 7419) | destroy() {
    method _createPreparedEvent (line 7425) | _createPreparedEvent(event, phase, preEnd, type) {
    method _fireEvent (line 7429) | _fireEvent(iEvent) {
    method _doPhase (line 7437) | _doPhase(signalArg) {
    method _now (line 7476) | _now() {
  function preventDefault (line 7490) | function preventDefault(newValue) {
  function checkAndPreventDefault (line 7504) | function checkAndPreventDefault(interactable, scope, event) {
  function onInteractionEvent (line 7542) | function onInteractionEvent({
  function interactablePreventDefault_install (line 7551) | function interactablePreventDefault_install(scope) {
  method search (line 7602) | search(details) {
  method simulationResume (line 7615) | simulationResume({
  method mouseOrPen (line 7644) | mouseOrPen({
  method hasPointer (line 7692) | hasPointer({
  method idle (line 7706) | idle({
  function hasPointerId (line 7734) | function hasPointerId(interaction, pointerId) {
  function interactions_install (line 7753) | function interactions_install(scope) {
  function doOnInteractions (line 7873) | function doOnInteractions(method, scope) {
  function getInteraction (line 7935) | function getInteraction(searchDetails) {
  function onDocSignal (line 7951) | function onDocSignal({
  class scope_Scope (line 8036) | class scope_Scope {
    method constructor (line 8041) | constructor() {
    method addListeners (line 8099) | addListeners(map, id) {
    method fire (line 8106) | fire(name, arg) {
    method init (line 8118) | init(window) {
    method pluginIsInstalled (line 8122) | pluginIsInstalled(plugin) {
    method usePlugin (line 8126) | usePlugin(plugin, options) {
    method addDocument (line 8176) | addDocument(doc, options) {
    method removeDocument (line 8203) | removeDocument(doc) {
    method getDocIndex (line 8218) | getDocIndex(doc) {
    method getDocOptions (line 8228) | getDocOptions(doc) {
    method now (line 8233) | now() {
  function initScope (line 8238) | function initScope(scope, window) {
  function pluginIdRoot (line 8251) | function pluginIdRoot(id) {
  function InteractableMethods_install (line 8271) | function InteractableMethods_install(scope) {
  function defaultActionChecker (line 8388) | function defaultActionChecker(interactable, event, interaction, element,...
  function styleCursor (line 8408) | function styleCursor(newValue) {
  function actionChecker (line 8422) | function actionChecker(checker) {
  function base_install (line 8449) | function base_install(scope) {
  function prepareOnDown (line 8489) | function prepareOnDown({
  function prepareOnMove (line 8503) | function prepareOnMove({
  function startOnMove (line 8517) | function startOnMove(arg, scope) {
  function clearCursorOnStop (line 8543) | function clearCursorOnStop({
  function validateAction (line 8557) | function validateAction(action, interactable, element, eventTarget, scop...
  function validateMatches (line 8565) | function validateMatches(interaction, pointer, event, matches, matchElem...
  function getActionInfo (line 8593) | function getActionInfo(interaction, pointer, event, eventTarget, scope) {
  function prepare (line 8623) | function prepare(interaction, {
  function withinInteractionLimit (line 8641) | function withinInteractionLimit(interactable, element, action, scope) {
  function maxInteractions (line 8689) | function maxInteractions(newValue, scope) {
  function setCursor (line 8698) | function setCursor(element, cursor, scope) {
  function setInteractionCursor (line 8712) | function setInteractionCursor(interaction, scope) {
  function beforeStart (line 8766) | function beforeStart({
  function checkStartAxis (line 8823) | function checkStartAxis(startAxis, interactable) {
  function hold_install (line 8843) | function hold_install(scope) {
  function getHoldDuration (line 8852) | function getHoldDuration(interaction) {
  method install (line 8914) | install(scope) {
  function plugin_install (line 8941) | function plugin_install(scope) {
  method start (line 8975) | start(interaction) {
  method stop (line 8984) | stop() {
  method scroll (line 8995) | scroll() {
  method check (line 9055) | check(interactable, actionName) {
  method onInteractionMove (line 9062) | onInteractionMove({
  function getContainer (line 9112) | function getContainer(value, interactable, element) {
  function getScroll (line 9115) | function getScroll(container) {
  function getScrollSize (line 9125) | function getScrollSize(container) {
  function getScrollSizeDelta (line 9135) | function getScrollSizeDelta({
  function drag_plugin_install (line 9198) | function drag_plugin_install(scope) {
  function beforeMove (line 9210) | function beforeMove({
  function move (line 9232) | function move({
  method getCursor (line 9351) | getCursor() {
  function resize_plugin_install (line 9376) | function resize_plugin_install(scope) {
  function resizeChecker (line 9444) | function resizeChecker(arg) {
  function resizable (line 9502) | function resizable(interactable, options, scope) {
  function checkResizeEdge (line 9531) | function checkResizeEdge(name, value, page, element, interactableElement...
  function initCursors (line 9590) | function initCursors(browser) {
  function start (line 9620) | function start({
  function plugin_move (line 9648) | function plugin_move({
  function end (line 9707) | function end({
  function updateEventAxes (line 9721) | function updateEventAxes({
  method getCursor (line 9791) | getCursor({
  method install (line 9888) | install(scope) {
  class Modification_Modification (line 9903) | class Modification_Modification {
    method constructor (line 9904) | constructor(interaction) {
    method start (line 9921) | start({
    method fillArg (line 9946) | fillArg(arg) {
    method startAll (line 9958) | startAll(arg) {
    method setAll (line 9969) | setAll(arg) {
    method applyToInteraction (line 10018) | applyToInteraction(arg) {
    method setAndApply (line 10056) | setAndApply(arg) {
    method beforeEnd (line 10094) | beforeEnd(arg) {
    method stop (line 10132) | stop(arg) {
    method prepareStates (line 10161) | prepareStates(modifierList) {
    method restoreInteractionCoords (line 10181) | restoreInteractionCoords({
    method shouldDo (line 10214) | shouldDo(options, preEnd, phase, requireEndOnly) {
    method copyFrom (line 10226) | copyFrom(other) {
    method destroy (line 10234) | destroy() {
  function createResult (line 10242) | function createResult(coords, rect) {
  function getModifierList (line 10261) | function getModifierList(interaction) {
  function getRectOffset (line 10278) | function getRectOffset(rect, coords) {
  function makeModifier (line 10296) | function makeModifier(module, name) {
  function addEventModifiers (line 10341) | function addEventModifiers({
  method start (line 10408) | start(arg) {
  method set (line 10460) | set(arg) {
  function setEqualDelta (line 10508) | function setEqualDelta({
  function setRatio (line 10519) | function setRatio({
  function pointer_start (line 10549) | function pointer_start({
  function set (line 10596) | function set({
  function getRestrictionRect (line 10616) | function getRestrictionRect(value, interaction, coords) {
  function edges_start (line 10666) | function edges_start({
  function edges_set (line 10693) | function edges_set({
  function fixRect (line 10727) | function fixRect(rect, defaults) {
  method elementRect (line 10759) | get elementRect() {
  method elementRect (line 10768) | set elementRect(_) {}
  function size_start (line 10794) | function size_start(arg) {
  function size_set (line 10798) | function size_set(arg) {
  function snap_pointer_start (line 10863) | function snap_pointer_start(arg) {
  function pointer_set (line 10910) | function pointer_set(arg) {
  function getOrigin (line 11005) | function getOrigin(arg) {
  function snap_size_start (line 11040) | function snap_size_start(arg) {
  function snap_size_set (line 11074) | function snap_size_set(arg) {
  function snap_edges_start (line 11169) | function snap_edges_start(arg) {
  method install (line 11233) | install(scope) {
  function dev_tools_plugin_install (line 11289) | function dev_tools_plugin_install(scope, {
  method perform (line 11314) | perform({
  method getInfo (line 11320) | getInfo({
  method perform (line 11330) | perform(interaction) {
  method getInfo (line 11339) | getInfo({
  method perform (line 11348) | perform(interaction) {
  method getInfo (line 11354) | getInfo(interaction) {
  function hasStyle (line 11361) | function hasStyle(element, prop, styleRe) {
  function parentHasStyle (line 11366) | function parentHasStyle(element, prop, styleRe) {
  function ownKeys (line 11429) | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object...
  function _objectSpread (line 11431) | function _objectSpread(target) { for (var i = 1; i < arguments.length; i...
  function addFunction (line 12525) | function addFunction(level, fn) {
  function processBatch (line 12535) | function processBatch() {
  function forceProcessBatch (line 12547) | function forceProcessBatch(localAsyncProcess) {
  function processBatchAsync (line 12568) | function processBatchAsync() {
  function clearBatch (line 12572) | function clearBatch() {
  function cancelFrame (line 12579) | function cancelFrame(listener) {
  function requestFrame (line 12585) | function requestFrame(callback) {
  function Batch (line 12597) | function Batch() {
  function initDocument (line 12827) | function initDocument(targetDocument) {
  function buildCssTextString (line 12835) | function buildCssTextString(rules) {
  function getScrollbarSizes (line 12841) | function getScrollbarSizes() {
  function injectScrollStyle (line 12866) | function injectScrollStyle(targetDocument, styleId, containerClass) {
  function addAnimationClass (line 12891) | function addAnimationClass(element) {
  function addEvent (line 12895) | function addEvent(el, name, cb) {
  function removeEvent (line 12905) | function removeEvent(el, name, cb) {
  function getExpandElement (line 12915) | function getExpandElement(element) {
  function getShrinkElement (line 12919) | function getShrinkElement(element) {
  function addListener (line 12929) | function addListener(element, listener) {
  function makeDetectable (line 12946) | function makeDetectable(options, element, callback) {
  function uninstall (line 13439) | function uninstall(element) {
  function initState (line 13590) | function initState(element) {
  function getState (line 13595) | function getState(element) {
  function cleanState (line 13599) | function cleanState(element) {
  function isCollection (line 13665) | function isCollection(obj) {
  function toArray (line 13669) | function toArray(collection) {
  function isElement (line 13681) | function isElement(obj) {
  function listenTo (line 13799) | function listenTo(options, elements, listener) {
  function uninstall (line 13932) | function uninstall(elements) {
  function initDocument (line 13955) | function initDocument(targetDocument) {
  function getOption (line 13968) | function getOption(options, name, defaultValue) {

FILE: dist/vue-grid-layout.umd.js
  function __webpack_require__ (line 17) | function __webpack_require__(moduleId) {
  function addListener (line 339) | function addListener(element, listener) {
  function buildCssTextString (line 361) | function buildCssTextString(rules) {
  function makeDetectable (line 374) | function makeDetectable(options, element, callback) {
  function getObject (line 527) | function getObject(element) {
  function uninstall (line 531) | function uninstall(element) {
  function isAnyIeVersion (line 574) | function isAnyIeVersion() {
  function hasDocument (line 624) | function hasDocument() {
  function hasWindow (line 628) | function hasWindow() {
  function getDocumentDir (line 632) | function getDocumentDir() {
  function setDocumentDir (line 640) | function setDocumentDir(dir
  function addWindowEventListener (line 652) | function addWindowEventListener(event
  function removeWindowEventListener (line 664) | function removeWindowEventListener(event
  function cssWithMappingToString (line 848) | function cssWithMappingToString(item, useSourceMap) {
  function toComment (line 868) | function toComment(sourceMap) {
  function normalizeComponent (line 928) | function normalizeComponent (
  function install (line 1141) | function install(Vue) {
  function generate (line 1201) | function generate() {
  function ownKeys (line 1327) | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object...
  function _objectSpread (line 1329) | function _objectSpread(target) { for (var i = 1; i < arguments.length; i...
  function listToStyles (line 2022) | function listToStyles (parentId, list) {
  function addStylesClient (line 2098) | function addStylesClient (parentId, list, _isProduction, _options) {
  function addStylesToDom (line 2132) | function addStylesToDom (styles /* Array<StyleObject> */) {
  function createStyleElement (line 2157) | function createStyleElement () {
  function addStyle (line 2164) | function addStyle (obj /* StyleObjectPart */) {
  function applyToSingletonTag (line 2223) | function applyToSingletonTag (styleElement, index, remove, obj) {
  function applyToTag (line 2240) | function applyToTag (styleElement, obj) {
  function getListeners (line 2288) | function getListeners(element) {
  function addListener (line 2304) | function addListener(element, listener) {
  function removeListener (line 2314) | function removeListener(element, listener) {
  function removeAllListeners (line 2324) | function removeAllListeners(element) {
  function getId (line 2369) | function getId(element) {
  function setId (line 2385) | function setId(element) {
  function getOption (line 2418) | function getOption(options, name, defaultValue) {
  function isDetectable (line 2570) | function isDetectable(element) {
  function markAsDetectable (line 2580) | function markAsDetectable(element) {
  function isBusy (line 2590) | function isBusy(element) {
  function markBusy (line 2600) | function markBusy(element, busy) {
  function getBreakpointFromWidth (line 3108) | function getBreakpointFromWidth(breakpoints
  function getColsFromBreakpoint (line 3132) | function getColsFromBreakpoint(breakpoint
  function findOrGenerateResponsiveLayout (line 3161) | function findOrGenerateResponsiveLayout(orgLayout
  function generateResponsiveLayout (line 3200) | function generateResponsiveLayout(layout
  function sortBreakpoints (line 3244) | function sortBreakpoints(breakpoints
  function bottom (line 3438) | function bottom(layout
  function cloneLayout (line 3453) | function cloneLayout(layout
  function cloneLayoutItem (line 3467) | function cloneLayoutItem(layoutItem
  function collides (line 3487) | function collides(l1
  function compact (line 3517) | function compact(layout
  function compactItem (line 3553) | function compactItem(compareWith
  function correctBounds (line 3591) | function correctBounds(layout
  function getLayoutItem (line 3629) | function getLayoutItem(layout
  function getFirstCollision (line 3649) | function getFirstCollision(layout
  function getAllCollisions (line 3660) | function getAllCollisions(layout
  function getStatics (line 3677) | function getStatics(layout
  function moveElement (line 3698) | function moveElement(layout
  function moveElementAwayFromCollision (line 3767) | function moveElementAwayFromCollision(layout
  function perc (line 3812) | function perc(num
  function setTransform (line 3819) | function setTransform(top, left, width, height)
  function setTransformRtl (line 3845) | function setTransformRtl(top, right, width, height)
  function setTopLeft (line 3861) | function setTopLeft(top, left, width, height)
  function setTopRight (line 3882) | function setTopRight(top, right, width, height)
  function sortLayoutItemsByRowCol (line 3900) | function sortLayoutItemsByRowCol(layout
  function validateLayout (line 3986) | function validateLayout(layout
  function autoBindHandlers (line 4027) | function autoBindHandlers(el
  function createMarkup (line 4044) | function createMarkup(obj) {
  function addPx (line 4099) | function addPx(name, value) {
  function hyphenate (line 4114) | function hyphenate(str) {
  function findItemInArray (line 4117) | function findItemInArray(array, property, value) {
  function findAndRemove (line 4124) | function findAndRemove(array, property, value) {
  function getSubstitution (line 4224) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function noop (line 4312) | function noop() {
  function _defineProperty (line 4433) | function _defineProperty(obj, key, value) {
  function getControlPosition (line 4545) | function getControlPosition(e) {
  function offsetXYFromParentOf (line 4549) | function offsetXYFromParentOf(evt) {
  function createCoreData (line 4566) | function createCoreData(lastX, lastY, x, y) {
  function isNum (line 4593) | function isNum(num) {
  function blank (line 4617) | function blank() {}
  function init (line 4621) | function init(window) {
  function window_init (line 4643) | function window_init(window) {
  function getWindow (line 4661) | function getWindow(node) {
  function browser_init (line 4734) | function browser_init(window) {
  function clone (line 4796) | function clone(source) {
  function extend (line 4815) | function extend(dest, source) {
  function raf_init (line 4829) | function raf_init(window) {
  function normalize (line 4870) | function normalize(type, listeners, result) {
  function split (line 4904) | function split(type) {
  function fireUntilImmediateStopped (line 4913) | function fireUntilImmediateStopped(event, listeners) {
  class Eventable_Eventable (line 4923) | class Eventable_Eventable {
    method constructor (line 4924) | constructor(options) {
    method fire (line 4933) | fire(event) {
    method on (line 4948) | on(type, listener) {
    method off (line 4956) | off(type, listener) {
    method getRect (line 4976) | getRect(_element) {
  function nodeContains (line 4987) | function nodeContains(parent, child) {
  function domUtils_closest (line 5002) | function domUtils_closest(element, selector) {
  function parentNode (line 5013) | function parentNode(node) {
  function matchesSelector (line 5028) | function matchesSelector(element, selector) {
  function indexOfDeepestElement (line 5040) | function indexOfDeepestElement(elements) {
  function getNodeParents (line 5119) | function getNodeParents(node, limit) {
  function zIndexIsHigherThan (line 5132) | function zIndexIsHigherThan(higherNode, lowerNode) {
  function matchesUpTo (line 5138) | function matchesUpTo(element, selector, limit) {
  function getActualElement (line 5153) | function getActualElement(element) {
  function getScrollXY (line 5156) | function getScrollXY(relevantWindow) {
  function getElementClientRect (line 5163) | function getElementClientRect(element) {
  function getElementRect (line 5174) | function getElementRect(element) {
  function getPath (line 5187) | function getPath(node) {
  function trySelector (line 5197) | function trySelector(value) {
  function getStringOptionResult (line 5211) | function getStringOptionResult(value, target, element) {
  function resolveRectLike (line 5222) | function resolveRectLike(value, target, element, functionArgs) {
  function rectToXY (line 5237) | function rectToXY(rect) {
  function xywhToTlbr (line 5243) | function xywhToTlbr(rect) {
  function tlbrToXywh (line 5254) | function tlbrToXywh(rect) {
  function addEdges (line 5265) | function addEdges(edges, rect, delta) {
  class BaseEvent (line 5303) | class BaseEvent {
    method constructor (line 5304) | constructor(interaction) {
    method preventDefault (line 5316) | preventDefault() {}
    method stopPropagation (line 5322) | stopPropagation() {
    method stopImmediatePropagation (line 5330) | stopImmediatePropagation() {
  method get (line 5340) | get() {
  method set (line 5344) | set() {}
  class InteractEvent_InteractEvent (line 5372) | class InteractEvent_InteractEvent extends BaseEvent {
    method constructor (line 5376) | constructor(interaction, event, actionName, phase, element, preEnd, ty...
    method getSwipe (line 5467) | getSwipe() {
    method preventDefault (line 5499) | preventDefault() {}
    method stopImmediatePropagation (line 5505) | stopImmediatePropagation() {
    method stopPropagation (line 5513) | stopPropagation() {
  method get (line 5522) | get() {
  method set (line 5526) | set(value) {
  method get (line 5532) | get() {
  method set (line 5536) | set(value) {
  method get (line 5542) | get() {
  method set (line 5546) | set(value) {
  method get (line 5552) | get() {
  method set (line 5556) | set(value) {
  method get (line 5562) | get() {
  method set (line 5566) | set(value) {
  method get (line 5572) | get() {
  method set (line 5576) | set(value) {
  method get (line 5582) | get() {
  method set (line 5586) | set(value) {
  method get (line 5592) | get() {
  method set (line 5596) | set(value) {
  function isNonNativeEvent (line 5604) | function isNonNativeEvent(type, actions) {
  class Interactable_Interactable (line 5632) | class Interactable_Interactable {
    method _defaults (line 5634) | get _defaults() {
    method constructor (line 5643) | constructor(target, options, defaultContext, scopeEvents) {
    method setOnEvents (line 5662) | setOnEvents(actionName, phases) {
    method updatePerActionListeners (line 5682) | updatePerActionListeners(actionName, prev, cur) {
    method setPerAction (line 5692) | setPerAction(actionName, options) {
    method getRect (line 5733) | getRect(element) {
    method rectChecker (line 5752) | rectChecker(checker) {
    method _backCompatOption (line 5779) | _backCompatOption(optionName, newValue) {
    method origin (line 5804) | origin(newValue) {
    method deltaSource (line 5817) | deltaSource(newValue) {
    method context (line 5833) | context() {
    method inContext (line 5837) | inContext(element) {
    method testIgnoreAllow (line 5841) | testIgnoreAllow(options, targetNode, eventTarget) {
    method testAllow (line 5845) | testAllow(allowFrom, targetNode, element) {
    method testIgnore (line 5863) | testIgnore(ignoreFrom, targetNode, element) {
    method fire (line 5886) | fire(iEvent) {
    method _onOff (line 5891) | _onOff(method, typeArg, listenerArg, options) {
    method on (line 5933) | on(types, listener, options) {
    method off (line 5948) | off(types, listener, options) {
    method set (line 5959) | set(options) {
    method unset (line 5990) | unset() {
  class InteractableSet_InteractableSet (line 6024) | class InteractableSet_InteractableSet {
    method constructor (line 6026) | constructor(scope) {
    method new (line 6053) | new(target, options) {
    method get (line 6091) | get(target, options) {
    method forEachMatch (line 6104) | forEachMatch(node, callback) {
  function pointerExtend (line 6124) | function pointerExtend(dest, source) {
  function copyCoords (line 6157) | function copyCoords(dest, src) {
  function setCoordDeltas (line 6166) | function setCoordDeltas(targetObj, prev, cur) {
  function setCoordVelocity (line 6173) | function setCoordVelocity(targetObj, delta) {
  function setZeroCoords (line 6181) | function setZeroCoords(targetObj) {
  function isNativePointer (line 6187) | function isNativePointer(pointer) {
  function getXY (line 6191) | function getXY(type, pointer, xy) {
  function getPageXY (line 6198) | function getPageXY(pointer, page) {
  function getClientXY (line 6214) | function getClientXY(pointer, client) {
  function getPointerId (line 6226) | function getPointerId(pointer) {
  function setCoords (line 6229) | function setCoords(dest, pointers, timeStamp) {
  function getTouchPair (line 6235) | function getTouchPair(event) {
  function pointerAverage (line 6259) | function pointerAverage(pointers) {
  function touchBBox (line 6281) | function touchBBox(event) {
  function touchDistance (line 6302) | function touchDistance(event, deltaSource) {
  function touchAngle (line 6310) | function touchAngle(event, deltaSource) {
  function getPointerType (line 6319) | function getPointerType(pointer) {
  function getEventTargets (line 6325) | function getEventTargets(event) {
  function newCoords (line 6329) | function newCoords() {
  function coordsToEvent (line 6342) | function coordsToEvent(coords) {
  function install (line 6410) | function install(scope) {
  class events_FakeEvent (line 6636) | class events_FakeEvent {
    method constructor (line 6637) | constructor(originalEvent) {
    method preventOriginalDefault (line 6646) | preventOriginalDefault() {
    method stopPropagation (line 6650) | stopPropagation() {
    method stopImmediatePropagation (line 6654) | stopImmediatePropagation() {
  function getOptions (line 6660) | function getOptions(param) {
  function warnOnce (line 6681) | function warnOnce(method, message) {
  function copyAction (line 6692) | function copyAction(dest, src) {
  function createInteractStatic (line 6707) | function createInteractStatic(scope) {
  class PointerInfo (line 6955) | class PointerInfo {
    method constructor (line 6956) | constructor(id, pointer, event, downTime, downTarget) {
  class Interaction_Interaction (line 7002) | class Interaction_Interaction {
    method pointerMoveTolerance (line 7011) | get pointerMoveTolerance() {
    method constructor (line 7020) | constructor({
    method pointerDown (line 7093) | pointerDown(pointer, event, eventTarget) {
    method start (line 7140) | start(action, interactable, element) {
    method pointerMove (line 7164) | pointerMove(pointer, event, eventTarget) {
    method move (line 7232) | move(signalArg) {
    method pointerUp (line 7249) | pointerUp(pointer, event, eventTarget, curEventTarget) {
    method documentBlur (line 7276) | documentBlur(event) {
    method end (line 7303) | end(event) {
    method currentAction (line 7323) | currentAction() {
    method interacting (line 7327) | interacting() {
    method stop (line 7333) | stop() {
    method getPointerIndex (line 7344) | getPointerIndex(pointer) {
    method getPointerInfo (line 7350) | getPointerInfo(pointer) {
    method updatePointer (line 7354) | updatePointer(pointer, event, eventTarget, down) {
    method removePointer (line 7400) | removePointer(pointer, event) {
    method _updateLatestPointer (line 7422) | _updateLatestPointer(pointer, event, eventTarget) {
    method destroy (line 7428) | destroy() {
    method _createPreparedEvent (line 7434) | _createPreparedEvent(event, phase, preEnd, type) {
    method _fireEvent (line 7438) | _fireEvent(iEvent) {
    method _doPhase (line 7446) | _doPhase(signalArg) {
    method _now (line 7485) | _now() {
  function preventDefault (line 7499) | function preventDefault(newValue) {
  function checkAndPreventDefault (line 7513) | function checkAndPreventDefault(interactable, scope, event) {
  function onInteractionEvent (line 7551) | function onInteractionEvent({
  function interactablePreventDefault_install (line 7560) | function interactablePreventDefault_install(scope) {
  method search (line 7611) | search(details) {
  method simulationResume (line 7624) | simulationResume({
  method mouseOrPen (line 7653) | mouseOrPen({
  method hasPointer (line 7701) | hasPointer({
  method idle (line 7715) | idle({
  function hasPointerId (line 7743) | function hasPointerId(interaction, pointerId) {
  function interactions_install (line 7762) | function interactions_install(scope) {
  function doOnInteractions (line 7882) | function doOnInteractions(method, scope) {
  function getInteraction (line 7944) | function getInteraction(searchDetails) {
  function onDocSignal (line 7960) | function onDocSignal({
  class scope_Scope (line 8045) | class scope_Scope {
    method constructor (line 8050) | constructor() {
    method addListeners (line 8108) | addListeners(map, id) {
    method fire (line 8115) | fire(name, arg) {
    method init (line 8127) | init(window) {
    method pluginIsInstalled (line 8131) | pluginIsInstalled(plugin) {
    method usePlugin (line 8135) | usePlugin(plugin, options) {
    method addDocument (line 8185) | addDocument(doc, options) {
    method removeDocument (line 8212) | removeDocument(doc) {
    method getDocIndex (line 8227) | getDocIndex(doc) {
    method getDocOptions (line 8237) | getDocOptions(doc) {
    method now (line 8242) | now() {
  function initScope (line 8247) | function initScope(scope, window) {
  function pluginIdRoot (line 8260) | function pluginIdRoot(id) {
  function InteractableMethods_install (line 8280) | function InteractableMethods_install(scope) {
  function defaultActionChecker (line 8397) | function defaultActionChecker(interactable, event, interaction, element,...
  function styleCursor (line 8417) | function styleCursor(newValue) {
  function actionChecker (line 8431) | function actionChecker(checker) {
  function base_install (line 8458) | function base_install(scope) {
  function prepareOnDown (line 8498) | function prepareOnDown({
  function prepareOnMove (line 8512) | function prepareOnMove({
  function startOnMove (line 8526) | function startOnMove(arg, scope) {
  function clearCursorOnStop (line 8552) | function clearCursorOnStop({
  function validateAction (line 8566) | function validateAction(action, interactable, element, eventTarget, scop...
  function validateMatches (line 8574) | function validateMatches(interaction, pointer, event, matches, matchElem...
  function getActionInfo (line 8602) | function getActionInfo(interaction, pointer, event, eventTarget, scope) {
  function prepare (line 8632) | function prepare(interaction, {
  function withinInteractionLimit (line 8650) | function withinInteractionLimit(interactable, element, action, scope) {
  function maxInteractions (line 8698) | function maxInteractions(newValue, scope) {
  function setCursor (line 8707) | function setCursor(element, cursor, scope) {
  function setInteractionCursor (line 8721) | function setInteractionCursor(interaction, scope) {
  function beforeStart (line 8775) | function beforeStart({
  function checkStartAxis (line 8832) | function checkStartAxis(startAxis, interactable) {
  function hold_install (line 8852) | function hold_install(scope) {
  function getHoldDuration (line 8861) | function getHoldDuration(interaction) {
  method install (line 8923) | install(scope) {
  function plugin_install (line 8950) | function plugin_install(scope) {
  method start (line 8984) | start(interaction) {
  method stop (line 8993) | stop() {
  method scroll (line 9004) | scroll() {
  method check (line 9064) | check(interactable, actionName) {
  method onInteractionMove (line 9071) | onInteractionMove({
  function getContainer (line 9121) | function getContainer(value, interactable, element) {
  function getScroll (line 9124) | function getScroll(container) {
  function getScrollSize (line 9134) | function getScrollSize(container) {
  function getScrollSizeDelta (line 9144) | function getScrollSizeDelta({
  function drag_plugin_install (line 9207) | function drag_plugin_install(scope) {
  function beforeMove (line 9219) | function beforeMove({
  function move (line 9241) | function move({
  method getCursor (line 9360) | getCursor() {
  function resize_plugin_install (line 9385) | function resize_plugin_install(scope) {
  function resizeChecker (line 9453) | function resizeChecker(arg) {
  function resizable (line 9511) | function resizable(interactable, options, scope) {
  function checkResizeEdge (line 9540) | function checkResizeEdge(name, value, page, element, interactableElement...
  function initCursors (line 9599) | function initCursors(browser) {
  function start (line 9629) | function start({
  function plugin_move (line 9657) | function plugin_move({
  function end (line 9716) | function end({
  function updateEventAxes (line 9730) | function updateEventAxes({
  method getCursor (line 9800) | getCursor({
  method install (line 9897) | install(scope) {
  class Modification_Modification (line 9912) | class Modification_Modification {
    method constructor (line 9913) | constructor(interaction) {
    method start (line 9930) | start({
    method fillArg (line 9955) | fillArg(arg) {
    method startAll (line 9967) | startAll(arg) {
    method setAll (line 9978) | setAll(arg) {
    method applyToInteraction (line 10027) | applyToInteraction(arg) {
    method setAndApply (line 10065) | setAndApply(arg) {
    method beforeEnd (line 10103) | beforeEnd(arg) {
    method stop (line 10141) | stop(arg) {
    method prepareStates (line 10170) | prepareStates(modifierList) {
    method restoreInteractionCoords (line 10190) | restoreInteractionCoords({
    method shouldDo (line 10223) | shouldDo(options, preEnd, phase, requireEndOnly) {
    method copyFrom (line 10235) | copyFrom(other) {
    method destroy (line 10243) | destroy() {
  function createResult (line 10251) | function createResult(coords, rect) {
  function getModifierList (line 10270) | function getModifierList(interaction) {
  function getRectOffset (line 10287) | function getRectOffset(rect, coords) {
  function makeModifier (line 10305) | function makeModifier(module, name) {
  function addEventModifiers (line 10350) | function addEventModifiers({
  method start (line 10417) | start(arg) {
  method set (line 10469) | set(arg) {
  function setEqualDelta (line 10517) | function setEqualDelta({
  function setRatio (line 10528) | function setRatio({
  function pointer_start (line 10558) | function pointer_start({
  function set (line 10605) | function set({
  function getRestrictionRect (line 10625) | function getRestrictionRect(value, interaction, coords) {
  function edges_start (line 10675) | function edges_start({
  function edges_set (line 10702) | function edges_set({
  function fixRect (line 10736) | function fixRect(rect, defaults) {
  method elementRect (line 10768) | get elementRect() {
  method elementRect (line 10777) | set elementRect(_) {}
  function size_start (line 10803) | function size_start(arg) {
  function size_set (line 10807) | function size_set(arg) {
  function snap_pointer_start (line 10872) | function snap_pointer_start(arg) {
  function pointer_set (line 10919) | function pointer_set(arg) {
  function getOrigin (line 11014) | function getOrigin(arg) {
  function snap_size_start (line 11049) | function snap_size_start(arg) {
  function snap_size_set (line 11083) | function snap_size_set(arg) {
  function snap_edges_start (line 11178) | function snap_edges_start(arg) {
  method install (line 11242) | install(scope) {
  function dev_tools_plugin_install (line 11298) | function dev_tools_plugin_install(scope, {
  method perform (line 11323) | perform({
  method getInfo (line 11329) | getInfo({
  method perform (line 11339) | perform(interaction) {
  method getInfo (line 11348) | getInfo({
  method perform (line 11357) | perform(interaction) {
  method getInfo (line 11363) | getInfo(interaction) {
  function hasStyle (line 11370) | function hasStyle(element, prop, styleRe) {
  function parentHasStyle (line 11375) | function parentHasStyle(element, prop, styleRe) {
  function ownKeys (line 11438) | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object...
  function _objectSpread (line 11440) | function _objectSpread(target) { for (var i = 1; i < arguments.length; i...
  function addFunction (line 12534) | function addFunction(level, fn) {
  function processBatch (line 12544) | function processBatch() {
  function forceProcessBatch (line 12556) | function forceProcessBatch(localAsyncProcess) {
  function processBatchAsync (line 12577) | function processBatchAsync() {
  function clearBatch (line 12581) | function clearBatch() {
  function cancelFrame (line 12588) | function cancelFrame(listener) {
  function requestFrame (line 12594) | function requestFrame(callback) {
  function Batch (line 12606) | function Batch() {
  function initDocument (line 12836) | function initDocument(targetDocument) {
  function buildCssTextString (line 12844) | function buildCssTextString(rules) {
  function getScrollbarSizes (line 12850) | function getScrollbarSizes() {
  function injectScrollStyle (line 12875) | function injectScrollStyle(targetDocument, styleId, containerClass) {
  function addAnimationClass (line 12900) | function addAnimationClass(element) {
  function addEvent (line 12904) | function addEvent(el, name, cb) {
  function removeEvent (line 12914) | function removeEvent(el, name, cb) {
  function getExpandElement (line 12924) | function getExpandElement(element) {
  function getShrinkElement (line 12928) | function getShrinkElement(element) {
  function addListener (line 12938) | function addListener(element, listener) {
  function makeDetectable (line 12955) | function makeDetectable(options, element, callback) {
  function uninstall (line 13448) | function uninstall(element) {
  function initState (line 13599) | function initState(element) {
  function getState (line 13604) | function getState(element) {
  function cleanState (line 13608) | function cleanState(element) {
  function isCollection (line 13674) | function isCollection(obj) {
  function toArray (line 13678) | function toArray(collection) {
  function isElement (line 13690) | function isElement(obj) {
  function listenTo (line 13808) | function listenTo(options, elements, listener) {
  function uninstall (line 13941) | function uninstall(elements) {
  function initDocument (line 13964) | function initDocument(targetDocument) {
  function getOption (line 13977) | function getOption(options, name, defaultValue) {

FILE: src/components/index.js
  function install (line 11) | function install(Vue) {

FILE: src/helpers/DOM.js
  function hasDocument (line 4) | function hasDocument(){
  function hasWindow (line 8) | function hasWindow(){
  function getDocumentDir (line 12) | function getDocumentDir(){
  function setDocumentDir (line 22) | function setDocumentDir(dir: "ltr" | "rtl" | "auto"){
  function addWindowEventListener (line 33) | function addWindowEventListener(event:string, callback: () => mixed){
  function removeWindowEventListener (line 42) | function removeWindowEventListener(event:string, callback: () => mixed){

FILE: src/helpers/draggableUtils.js
  function getControlPosition (line 2) | function getControlPosition(e) {
  function offsetXYFromParentOf (line 8) | function offsetXYFromParentOf(evt) {
  function createCoreData (line 24) | function createCoreData(lastX, lastY, x, y) {
  function isNum (line 46) | function isNum(num)  {

FILE: src/helpers/responsiveUtils.js
  function getBreakpointFromWidth (line 17) | function getBreakpointFromWidth(breakpoints: Breakpoints, width: number)...
  function getColsFromBreakpoint (line 34) | function getColsFromBreakpoint(breakpoint: Breakpoint, cols: Breakpoints...
  function findOrGenerateResponsiveLayout (line 56) | function findOrGenerateResponsiveLayout(orgLayout: Layout, layouts: Resp...
  function generateResponsiveLayout (line 77) | function generateResponsiveLayout(layout: Layout, breakpoints: Breakpoints,

FILE: src/helpers/utils.js
  function bottom (line 28) | function bottom(layout: Layout): number {
  function cloneLayout (line 37) | function cloneLayout(layout: Layout): Layout {
  function cloneLayoutItem (line 46) | function cloneLayoutItem(layoutItem: LayoutItem): LayoutItem {
  function collides (line 62) | function collides(l1: LayoutItem, l2: LayoutItem): boolean {
  function compact (line 81) | function compact(layout: Layout, verticalCompact: Boolean, minPositions)...
  function compactItem (line 114) | function compactItem(compareWith: Layout, l: LayoutItem, verticalCompact...
  method if (line 476) | if (typeof item[subProps[j]] !== 'number') {

FILE: test/interact-test.js
  function dragMoveListener (line 1) | function dragMoveListener (event) {

FILE: test/unit/utils.spec.js
  function compactAndMove (line 81) | function compactAndMove(

FILE: vue.config.js
  constant PACKAGE (line 4) | const PACKAGE = require('./package.json');

FILE: website/docs/.vuepress/public/examples/01-basic.js
  method itemTitle (line 46) | itemTitle(item) {

FILE: website/docs/.vuepress/public/examples/07-prevent-collision.js
  method itemTitle (line 46) | itemTitle(item) {

FILE: website/docs/.vuepress/public/examples/vue.js
  function isUndef (line 18) | function isUndef (v) {
  function isDef (line 22) | function isDef (v) {
  function isTrue (line 26) | function isTrue (v) {
  function isFalse (line 30) | function isFalse (v) {
  function isPrimitive (line 37) | function isPrimitive (value) {
  function isObject (line 52) | function isObject (obj) {
  function toRawType (line 61) | function toRawType (value) {
  function isPlainObject (line 69) | function isPlainObject (obj) {
  function isRegExp (line 73) | function isRegExp (v) {
  function isValidArrayIndex (line 80) | function isValidArrayIndex (val) {
  function isPromise (line 85) | function isPromise (val) {
  function toString (line 96) | function toString (val) {
  function toNumber (line 108) | function toNumber (val) {
  function makeMap (line 117) | function makeMap (
  function remove (line 144) | function remove (arr, item) {
  function hasOwn (line 157) | function hasOwn (obj, key) {
  function cached (line 164) | function cached (fn) {
  function polyfillBind (line 204) | function polyfillBind (fn, ctx) {
  function nativeBind (line 218) | function nativeBind (fn, ctx) {
  function toArray (line 229) | function toArray (list, start) {
  function extend (line 242) | function extend (to, _from) {
  function toObject (line 252) | function toObject (arr) {
  function noop (line 269) | function noop (a, b, c) {}
  function genStaticKeys (line 286) | function genStaticKeys (modules) {
  function looseEqual (line 296) | function looseEqual (a, b) {
  function looseIndexOf (line 336) | function looseIndexOf (arr, val) {
  function once (line 346) | function once (fn) {
  function isReserved (line 489) | function isReserved (str) {
  function def (line 497) | function def (obj, key, val, enumerable) {
  function parsePath (line 510) | function parsePath (path) {
  function isNative (line 581) | function isNative (Ctor) {
  function Set (line 597) | function Set () {
  function pushTarget (line 755) | function pushTarget (target) {
  function popTarget (line 760) | function popTarget () {
  function createTextVNode (line 821) | function createTextVNode (val) {
  function cloneVNode (line 829) | function cloneVNode (vnode) {
  function toggleObserving (line 912) | function toggleObserving (value) {
  function protoAugment (line 966) | function protoAugment (target, src) {
  function copyAugment (line 977) | function copyAugment (target, src, keys) {
  function observe (line 989) | function observe (value, asRootData) {
  function defineReactive$$1 (line 1014) | function defineReactive$$1 (
  function set (line 1080) | function set (target, key, val) {
  function del (line 1114) | function del (target, key) {
  function dependArray (line 1145) | function dependArray (value) {
  function mergeData (line 1182) | function mergeData (to, from) {
  function mergeDataOrFn (line 1212) | function mergeDataOrFn (
  function mergeHook (line 1279) | function mergeHook (
  function dedupeHooks (line 1295) | function dedupeHooks (hooks) {
  function mergeAssets (line 1316) | function mergeAssets (
  function checkComponents (line 1406) | function checkComponents (options) {
  function validateComponentName (line 1412) | function validateComponentName (name) {
  function normalizeProps (line 1431) | function normalizeProps (options, vm) {
  function normalizeInject (line 1468) | function normalizeInject (options, vm) {
  function normalizeDirectives (line 1495) | function normalizeDirectives (options) {
  function assertObjectType (line 1507) | function assertObjectType (name, value, vm) {
  function mergeOptions (line 1521) | function mergeOptions (
  function resolveAsset (line 1575) | function resolveAsset (
  function validateProp (line 1607) | function validateProp (
  function getPropDefaultValue (line 1649) | function getPropDefaultValue (vm, prop, key) {
  function assertProp (line 1682) | function assertProp (
  function assertType (line 1733) | function assertType (value, type) {
  function getType (line 1761) | function getType (fn) {
  function isSameType (line 1766) | function isSameType (a, b) {
  function getTypeIndex (line 1770) | function getTypeIndex (type, expectedTypes) {
  function getInvalidTypeMessage (line 1782) | function getInvalidTypeMessage (name, value, expectedTypes) {
  function styleValue (line 1803) | function styleValue (value, type) {
  function isExplicable (line 1813) | function isExplicable (value) {
  function isBoolean (line 1818) | function isBoolean () {
  function handleError (line 1827) | function handleError (err, vm, info) {
  function invokeWithErrorHandling (line 1854) | function invokeWithErrorHandling (
  function globalHandleError (line 1875) | function globalHandleError (err, vm, info) {
  function logError (line 1890) | function logError (err, vm, info) {
  function flushCallbacks (line 1909) | function flushCallbacks () {
  function nextTick (line 1983) | function nextTick (cb, ctx) {
  function traverse (line 2130) | function traverse (val) {
  function _traverse (line 2135) | function _traverse (val, seen) {
  function createFnInvoker (line 2175) | function createFnInvoker (fns, vm) {
  function updateListeners (line 2194) | function updateListeners (
  function mergeVNodeHook (line 2235) | function mergeVNodeHook (def, hookKey, hook) {
  function extractPropsFromVNodeData (line 2270) | function extractPropsFromVNodeData (
  function checkProp (line 2311) | function checkProp (
  function simpleNormalizeChildren (line 2350) | function simpleNormalizeChildren (children) {
  function normalizeChildren (line 2363) | function normalizeChildren (children) {
  function isTextNode (line 2371) | function isTextNode (node) {
  function normalizeArrayChildren (line 2375) | function normalizeArrayChildren (children, nestedIndex) {
  function initProvide (line 2425) | function initProvide (vm) {
  function initInjections (line 2434) | function initInjections (vm) {
  function resolveInject (line 2455) | function resolveInject (inject, vm) {
  function resolveSlots (line 2498) | function resolveSlots (
  function isWhitespace (line 2538) | function isWhitespace (node) {
  function normalizeScopedSlots (line 2544) | function normalizeScopedSlots (
  function normalizeScopedSlot (line 2591) | function normalizeScopedSlot(normalSlots, key, fn) {
  function proxyNormalSlot (line 2614) | function proxyNormalSlot(slots, key) {
  function renderList (line 2623) | function renderList (
  function renderSlot (line 2668) | function renderSlot (
  function resolveFilter (line 2705) | function resolveFilter (id) {
  function isKeyNotMatch (line 2711) | function isKeyNotMatch (expect, actual) {
  function checkKeyCodes (line 2724) | function checkKeyCodes (
  function bindObjectProps (line 2746) | function bindObjectProps (
  function renderStatic (line 2801) | function renderStatic (
  function markOnce (line 2826) | function markOnce (
  function markStatic (line 2835) | function markStatic (
  function markStaticNode (line 2851) | function markStaticNode (node, key, isOnce) {
  function bindObjectListeners (line 2859) | function bindObjectListeners (data, value) {
  function resolveScopedSlots (line 2880) | function resolveScopedSlots (
  function bindDynamicKeys (line 2908) | function bindDynamicKeys (baseObj, values) {
  function prependModifier (line 2927) | function prependModifier (value, symbol) {
  function installRenderHelpers (line 2933) | function installRenderHelpers (target) {
  function FunctionalRenderContext (line 2955) | function FunctionalRenderContext (
  function createFunctionalComponent (line 3031) | function createFunctionalComponent (
  function cloneAndMarkFunctionalResult (line 3072) | function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, ...
  function mergeProps (line 3088) | function mergeProps (to, from) {
  function createComponent (line 3169) | function createComponent (
  function createComponentInstanceForVnode (line 3268) | function createComponentInstanceForVnode (
  function installComponentHooks (line 3286) | function installComponentHooks (data) {
  function mergeHook$1 (line 3298) | function mergeHook$1 (f1, f2) {
  function transformModel (line 3310) | function transformModel (options, data) {
  function createElement (line 3337) | function createElement (
  function _createElement (line 3356) | function _createElement (
  function applyNS (line 3440) | function applyNS (vnode, ns, force) {
  function registerDeepBindings (line 3461) | function registerDeepBindings (data) {
  function initRender (line 3472) | function initRender (vm) {
  function renderMixin (line 3506) | function renderMixin (Vue) {
  function ensureCtor (line 3580) | function ensureCtor (comp, base) {
  function createAsyncPlaceholder (line 3592) | function createAsyncPlaceholder (
  function resolveAsyncComponent (line 3605) | function resolveAsyncComponent (
  function isAsyncPlaceholder (line 3713) | function isAsyncPlaceholder (node) {
  function getFirstComponentChild (line 3719) | function getFirstComponentChild (children) {
  function initEvents (line 3734) | function initEvents (vm) {
  function add (line 3746) | function add (event, fn) {
  function remove$1 (line 3750) | function remove$1 (event, fn) {
  function createOnceHandler (line 3754) | function createOnceHandler (event, fn) {
  function updateComponentListeners (line 3764) | function updateComponentListeners (
  function eventsMixin (line 3774) | function eventsMixin (Vue) {
  function setActiveInstance (line 3872) | function setActiveInstance(vm) {
  function initLifecycle (line 3880) | function initLifecycle (vm) {
  function lifecycleMixin (line 3906) | function lifecycleMixin (Vue) {
  function mountComponent (line 3989) | function mountComponent (
  function updateChildComponent (line 4063) | function updateChildComponent (
  function isInInactiveTree (line 4143) | function isInInactiveTree (vm) {
  function activateChildComponent (line 4150) | function activateChildComponent (vm, direct) {
  function deactivateChildComponent (line 4168) | function deactivateChildComponent (vm, direct) {
  function callHook (line 4184) | function callHook (vm, hook) {
  function resetSchedulerState (line 4215) | function resetSchedulerState () {
  function flushSchedulerQueue (line 4248) | function flushSchedulerQueue () {
  function callUpdatedHooks (line 4307) | function callUpdatedHooks (queue) {
  function queueActivatedComponent (line 4322) | function queueActivatedComponent (vm) {
  function callActivatedHooks (line 4329) | function callActivatedHooks (queue) {
  function queueWatcher (line 4341) | function queueWatcher (watcher) {
  function proxy (line 4586) | function proxy (target, sourceKey, key) {
  function initState (line 4596) | function initState (vm) {
  function initProps (line 4612) | function initProps (vm, propsOptions) {
  function initData (line 4660) | function initData (vm) {
  function getData (line 4702) | function getData (data, vm) {
  function initComputed (line 4717) | function initComputed (vm, computed) {
  function defineComputed (line 4758) | function defineComputed (
  function createComputedGetter (line 4788) | function createComputedGetter (key) {
  function createGetterInvoker (line 4803) | function createGetterInvoker(fn) {
  function initMethods (line 4809) | function initMethods (vm, methods) {
  function initWatch (line 4837) | function initWatch (vm, watch) {
  function createWatcher (line 4850) | function createWatcher (
  function stateMixin (line 4866) | function stateMixin (Vue) {
  function initMixin (line 4921) | function initMixin (Vue) {
  function initInternalComponent (line 4978) | function initInternalComponent (vm, options) {
  function resolveConstructorOptions (line 4997) | function resolveConstructorOptions (Ctor) {
  function resolveModifiedOptions (line 5021) | function resolveModifiedOptions (Ctor) {
  function Vue (line 5034) | function Vue (options) {
  function initUse (line 5050) | function initUse (Vue) {
  function initMixin$1 (line 5072) | function initMixin$1 (Vue) {
  function initExtend (line 5081) | function initExtend (Vue) {
  function initProps$1 (line 5157) | function initProps$1 (Comp) {
  function initComputed$1 (line 5164) | function initComputed$1 (Comp) {
  function initAssetRegisters (line 5173) | function initAssetRegisters (Vue) {
  function getComponentName (line 5207) | function getComponentName (opts) {
  function matches (line 5211) | function matches (pattern, name) {
  function pruneCache (line 5223) | function pruneCache (keepAliveInstance, filter) {
  function pruneCacheEntry (line 5238) | function pruneCacheEntry (
  function initGlobalAPI (line 5339) | function initGlobalAPI (Vue) {
  function genClassForVnode (line 5464) | function genClassForVnode (vnode) {
  function mergeClassData (line 5482) | function mergeClassData (child, parent) {
  function renderClass (line 5491) | function renderClass (
  function concat (line 5502) | function concat (a, b) {
  function stringifyClass (line 5506) | function stringifyClass (value) {
  function stringifyArray (line 5520) | function stringifyArray (value) {
  function stringifyObject (line 5532) | function stringifyObject (value) {
  function getTagNamespace (line 5579) | function getTagNamespace (tag) {
  function isUnknownElement (line 5591) | function isUnknownElement (tag) {
  function query (line 5623) | function query (el) {
  function createElement$1 (line 5640) | function createElement$1 (tagName, vnode) {
  function createElementNS (line 5652) | function createElementNS (namespace, tagName) {
  function createTextNode (line 5656) | function createTextNode (text) {
  function createComment (line 5660) | function createComment (text) {
  function insertBefore (line 5664) | function insertBefore (parentNode, newNode, referenceNode) {
  function removeChild (line 5668) | function removeChild (node, child) {
  function appendChild (line 5672) | function appendChild (node, child) {
  function parentNode (line 5676) | function parentNode (node) {
  function nextSibling (line 5680) | function nextSibling (node) {
  function tagName (line 5684) | function tagName (node) {
  function setTextContent (line 5688) | function setTextContent (node, text) {
  function setStyleScope (line 5692) | function setStyleScope (node, scopeId) {
  function registerRef (line 5728) | function registerRef (vnode, isRemoval) {
  function sameVnode (line 5771) | function sameVnode (a, b) {
  function sameInputType (line 5788) | function sameInputType (a, b) {
  function createKeyToOldIdx (line 5796) | function createKeyToOldIdx (children, beginIdx, endIdx) {
  function createPatchFunction (line 5806) | function createPatchFunction (backend) {
  function updateDirectives (line 6534) | function updateDirectives (oldVnode, vnode) {
  function _update (line 6540) | function _update (oldVnode, vnode) {
  function normalizeDirectives$1 (line 6603) | function normalizeDirectives$1 (
  function getRawDirName (line 6626) | function getRawDirName (dir) {
  function callHook$1 (line 6630) | function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
  function updateAttrs (line 6648) | function updateAttrs (oldVnode, vnode) {
  function setAttr (line 6689) | function setAttr (el, key, value) {
  function baseSetAttr (line 6718) | function baseSetAttr (el, key, value) {
  function updateClass (line 6750) | function updateClass (oldVnode, vnode) {
  function parseFilters (line 6790) | function parseFilters (exp) {
  function wrapFilter (line 6872) | function wrapFilter (exp, filter) {
  function baseWarn (line 6889) | function baseWarn (msg, range) {
  function pluckModuleFunction (line 6894) | function pluckModuleFunction (
  function addProp (line 6903) | function addProp (el, name, value, range, dynamic) {
  function addAttr (line 6908) | function addAttr (el, name, value, range, dynamic) {
  function addRawAttr (line 6917) | function addRawAttr (el, name, value, range) {
  function addDirective (line 6922) | function addDirective (
  function prependModifierMarker (line 6943) | function prependModifierMarker (symbol, name, dynamic) {
  function addHandler (line 6949) | function addHandler (
  function getRawBindingAttr (line 7032) | function getRawBindingAttr (
  function getBindingAttr (line 7041) | function getBindingAttr (
  function getAndRemoveAttr (line 7063) | function getAndRemoveAttr (
  function getAndRemoveAttrByRegex (line 7084) | function getAndRemoveAttrByRegex (
  function rangeSetItem (line 7098) | function rangeSetItem (
  function genComponentModel (line 7118) | function genComponentModel (
  function genAssignmentCode (line 7150) | function genAssignmentCode (
  function parseModel (line 7181) | function parseModel (val) {
  function next (line 7221) | function next () {
  function eof (line 7225) | function eof () {
  function isStringStart (line 7229) | function isStringStart (chr) {
  function parseBracket (line 7233) | function parseBracket (chr) {
  function parseString (line 7251) | function parseString (chr) {
  function model (line 7270) | function model (
  function genCheckboxModel (line 7323) | function genCheckboxModel (
  function genRadioModel (line 7354) | function genRadioModel (
  function genSelect (line 7366) | function genSelect (
  function genDefaultModel (line 7383) | function genDefaultModel (
  function normalizeEvents (line 7442) | function normalizeEvents (on) {
  function createOnceHandler$1 (line 7461) | function createOnceHandler$1 (event, handler, capture) {
  function add$1 (line 7476) | function add$1 (
  function remove$2 (line 7519) | function remove$2 (
  function updateDOMListeners (line 7532) | function updateDOMListeners (oldVnode, vnode) {
  function updateDOMProps (line 7553) | function updateDOMProps (oldVnode, vnode) {
  function shouldUpdateValue (line 7625) | function shouldUpdateValue (elm, checkVal) {
  function isNotInFocusAndDirty (line 7633) | function isNotInFocusAndDirty (elm, checkVal) {
  function isDirtyWithModifiers (line 7643) | function isDirtyWithModifiers (elm, newVal) {
  function normalizeStyleData (line 7678) | function normalizeStyleData (data) {
  function normalizeStyleBinding (line 7688) | function normalizeStyleBinding (bindingStyle) {
  function getStyle (line 7702) | function getStyle (vnode, checkChild) {
  function updateStyle (line 7775) | function updateStyle (oldVnode, vnode) {
  function addClass (line 7831) | function addClass (el, cls) {
  function removeClass (line 7856) | function removeClass (el, cls) {
  function resolveTransition (line 7889) | function resolveTransition (def$$1) {
  function nextFrame (line 7949) | function nextFrame (fn) {
  function addTransitionClass (line 7955) | function addTransitionClass (el, cls) {
  function removeTransitionClass (line 7963) | function removeTransitionClass (el, cls) {
  function whenTransitionEnds (line 7970) | function whenTransitionEnds (
  function getTransitionInfo (line 8003) | function getTransitionInfo (el, expectedType) {
  function getTimeout (line 8053) | function getTimeout (delays, durations) {
  function toMs (line 8068) | function toMs (s) {
  function enter (line 8074) | function enter (vnode, toggleDisplay) {
  function leave (line 8225) | function leave (vnode, rm) {
  function checkDuration (line 8330) | function checkDuration (val, name, vnode) {
  function isValidDuration (line 8346) | function isValidDuration (val) {
  function getHookArgumentsLength (line 8356) | function getHookArgumentsLength (fn) {
  function _enter (line 8373) | function _enter (_, vnode) {
  function setSelected (line 8478) | function setSelected (el, binding, vm) {
  function actuallySetSelected (line 8488) | function actuallySetSelected (el, binding, vm) {
  function hasNoMatchingOption (line 8521) | function hasNoMatchingOption (value, options) {
  function getValue (line 8525) | function getValue (option) {
  function onCompositionStart (line 8531) | function onCompositionStart (e) {
  function onCompositionEnd (line 8535) | function onCompositionEnd (e) {
  function trigger (line 8542) | function trigger (el, type) {
  function locateNode (line 8551) | function locateNode (vnode) {
  function getRealChild (line 8639) | function getRealChild (vnode) {
  function extractTransitionData (line 8648) | function extractTransitionData (comp) {
  function placeholder (line 8664) | function placeholder (h, rawChild) {
  function hasParentTransition (line 8672) | function hasParentTransition (vnode) {
  function isSameChild (line 8680) | function isSameChild (child, oldChild) {
  function callPendingCbs (line 8947) | function callPendingCbs (c) {
  function recordPosition (line 8958) | function recordPosition (c) {
  function applyTranslation (line 8962) | function applyTranslation (c) {
  function parseText (line 9044) | function parseText (
  function transformNode (line 9081) | function transformNode (el, options) {
  function genData (line 9105) | function genData (el) {
  function transformNode$1 (line 9124) | function transformNode$1 (el, options) {
  function genData$1 (line 9150) | function genData$1 (el) {
  function decodeAttr (line 9239) | function decodeAttr (value, shouldDecodeNewlines) {
  function parseHTML (line 9244) | function parseHTML (html, options) {
  function createASTElement (line 9532) | function createASTElement (
  function parse (line 9551) | function parse (
  function processPre (line 9873) | function processPre (el) {
  function processRawAttrs (line 9879) | function processRawAttrs (el) {
  function processElement (line 9900) | function processElement (
  function processKey (line 9925) | function processKey (el) {
  function processRef (line 9952) | function processRef (el) {
  function processFor (line 9960) | function processFor (el) {
  function parseFor (line 9977) | function parseFor (exp) {
  function processIf (line 9996) | function processIf (el) {
  function processIfConditions (line 10015) | function processIfConditions (el, parent) {
  function findPrevElement (line 10031) | function findPrevElement (children) {
  function addIfCondition (line 10049) | function addIfCondition (el, condition) {
  function processOnce (line 10056) | function processOnce (el) {
  function processSlotContent (line 10065) | function processSlotContent (el) {
  function getSlotName (line 10184) | function getSlotName (binding) {
  function processSlotOutlet (line 10204) | function processSlotOutlet (el) {
  function processComponent (line 10218) | function processComponent (el) {
  function processAttrs (line 10228) | function processAttrs (el) {
  function checkInFor (line 10361) | function checkInFor (el) {
  function parseModifiers (line 10372) | function parseModifiers (name) {
  function makeAttrsMap (line 10381) | function makeAttrsMap (attrs) {
  function isTextTag (line 10395) | function isTextTag (el) {
  function isForbiddenTag (line 10399) | function isForbiddenTag (el) {
  function guardIESVGBug (line 10413) | function guardIESVGBug (attrs) {
  function checkForAliasModel (line 10425) | function checkForAliasModel (el, value) {
  function preTransformNode (line 10444) | function preTransformNode (el, options) {
  function cloneASTElement (line 10506) | function cloneASTElement (el) {
  function text (line 10522) | function text (el, dir) {
  function html (line 10530) | function html (el, dir) {
  function optimize (line 10575) | function optimize (root, options) {
  function genStaticKeys$1 (line 10585) | function genStaticKeys$1 (keys) {
  function markStatic$1 (line 10592) | function markStatic$1 (node) {
  function markStaticRoots (line 10624) | function markStaticRoots (node, isInFor) {
  function isStatic (line 10654) | function isStatic (node) {
  function isDirectChildOfTemplateFor (line 10671) | function isDirectChildOfTemplateFor (node) {
  function genHandlers (line 10738) | function genHandlers (
  function genHandler (line 10761) | function genHandler (handler) {
  function genKeyFilter (line 10820) | function genKeyFilter (keys) {
  function genFilterCode (line 10830) | function genFilterCode (key) {
  function on (line 10849) | function on (el, dir) {
  function bind$1 (line 10858) | function bind$1 (el, dir) {
  function generate (line 10893) | function generate (
  function genElement (line 10905) | function genElement (el, state) {
  function genStatic (line 10945) | function genStatic (el, state) {
  function genOnce (line 10960) | function genOnce (el, state) {
  function genIf (line 10987) | function genIf (
  function genIfConditions (line 10997) | function genIfConditions (
  function genFor (line 11024) | function genFor (
  function genData$2 (line 11056) | function genData$2 (el, state) {
  function genDirectives (line 11140) | function genDirectives (el, state) {
  function genInlineTemplate (line 11165) | function genInlineTemplate (el, state) {
  function genScopedSlots (line 11179) | function genScopedSlots (
  function hash (line 11233) | function hash(str) {
  function containsSlotChild (line 11242) | function containsSlotChild (el) {
  function genScopedSlot (line 11252) | function genScopedSlot (
  function genChildren (line 11277) | function genChildren (
  function getNormalizationType (line 11310) | function getNormalizationType (
  function needsNormalization (line 11333) | function needsNormalization (el) {
  function genNode (line 11337) | function genNode (node, state) {
  function genText (line 11347) | function genText (text) {
  function genComment (line 11353) | function genComment (comment) {
  function genSlot (line 11357) | function genSlot (el, state) {
  function genComponent (line 11383) | function genComponent (
  function genProps (line 11392) | function genProps (props) {
  function transformSpecialNewlines (line 11413) | function transformSpecialNewlines (text) {
  function detectErrors (line 11440) | function detectErrors (ast, warn) {
  function checkNode (line 11446) | function checkNode (node, warn) {
  function checkEvent (line 11473) | function checkEvent (exp, text, warn, range) {
  function checkFor (line 11486) | function checkFor (node, text, warn, range) {
  function checkIdentifier (line 11493) | function checkIdentifier (
  function checkExpression (line 11509) | function checkExpression (exp, text, warn, range) {
  function generateCodeFrame (line 11535) | function generateCodeFrame (
  function repeat$1 (line 11572) | function repeat$1 (str, n) {
  function createFunction (line 11589) | function createFunction (code, errors) {
  function createCompileToFunctionFn (line 11598) | function createCompileToFunctionFn (compile) {
  function createCompilerCreator (line 11700) | function createCompilerCreator (baseCompile) {
  function getShouldDecode (line 11801) | function getShouldDecode (href) {
  function getOuterHTML (line 11893) | function getOuterHTML (el) {
Condensed preview — 123 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,573K chars).
[
  {
    "path": ".browserslistrc",
    "chars": 33,
    "preview": "> 1%\nlast 2 versions\nnot ie <= 8\n"
  },
  {
    "path": ".eslintrc.js",
    "chars": 353,
    "preview": "module.exports = {\n  root: true,\n  env: {\n    node: true\n  },\n  'extends': [\n    'plugin:vue/essential',\n    'eslint:rec"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 22,
    "preview": "github: jbaysolutions\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 888,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Software versi"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 750,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n## If you hav"
  },
  {
    "path": ".github/workflows/build-test.yml",
    "chars": 679,
    "preview": "name: Build and Test\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\njobs:\n  build:\n\n   "
  },
  {
    "path": ".github/workflows/vuepress-deploy.yml",
    "chars": 592,
    "preview": "name: Deploy vuepress website\non:\n  push:\n    branches:\n      - master\njobs:\n  build-and-deploy:\n    runs-on: ubuntu-lat"
  },
  {
    "path": ".gitignore",
    "chars": 265,
    "preview": ".DS_Store\nnode_modules\n#/dist\ndist/demo.html\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn"
  },
  {
    "path": "LICENSE",
    "chars": 1074,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 greyby\n\nPermission is hereby granted, free of charge, to any person obtaining "
  },
  {
    "path": "README-zh_CN.md",
    "chars": 11658,
    "preview": "<h1 align=\"center\">vue-grid-layout</h1>\n\n<p align=\"center\">\n<a href=\"https://www.npmjs.com/package/vue-grid-layout\"><img"
  },
  {
    "path": "README.md",
    "chars": 2656,
    "preview": "<p align=\"center\"><a href=\"https://jbaysolutions.github.io/vue-grid-layout/\" target=\"_blank\" rel=\"noopener noreferrer\"><"
  },
  {
    "path": "babel.config.js",
    "chars": 148,
    "preview": "module.exports = {\n    presets: [\n        '@vue/app',\n        '@babel/preset-env'\n    ],\n    \"plugins\": [\n        \"trans"
  },
  {
    "path": "dist/vue-grid-layout.common.js",
    "chars": 413430,
    "preview": "/*! vue-grid-layout - 2.4.0 | (c) 2015, 2022  Gustavo Santos (JBay Solutions) <gustavo.santos@jbaysolutions.com> (http:/"
  },
  {
    "path": "dist/vue-grid-layout.umd.js",
    "chars": 413923,
    "preview": "/*! vue-grid-layout - 2.4.0 | (c) 2015, 2022  Gustavo Santos (JBay Solutions) <gustavo.santos@jbaysolutions.com> (http:/"
  },
  {
    "path": "jest.config.js",
    "chars": 548,
    "preview": "module.exports = {\n  moduleFileExtensions: [\n    'js',\n    'json',\n    'vue',\n  ],\n  moduleNameMapper: {\n    '^@/(.*)$':"
  },
  {
    "path": "package.json",
    "chars": 1862,
    "preview": "{\n  \"name\": \"vue-grid-layout\",\n  \"version\": \"2.4.0\",\n  \"description\": \"A draggable and resizable grid layout, as a Vue c"
  },
  {
    "path": "postcss.config.js",
    "chars": 59,
    "preview": "module.exports = {\n  plugins: {\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "public/app.css",
    "chars": 2775,
    "preview": "/*** EXAMPLE ***/\n#content {\n    width: 100%;\n    margin-top:10px;\n}\n\n.vue-grid-layout {\n    background: #eee;\n}\n\n.layou"
  },
  {
    "path": "public/index.html",
    "chars": 649,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=ed"
  },
  {
    "path": "src/App.vue",
    "chars": 14517,
    "preview": "<template>\n    <div id=\"app\">\n        <h1 style=\"text-align: center\">Vue Grid Layout</h1>\n        <!--<pre>{{ layout | j"
  },
  {
    "path": "src/components/CustomDragElement.vue",
    "chars": 1062,
    "preview": "<template>\n    <span class=\"text\">\n        {{text}}\n    <button>xxx</button>\n    <span class=\"vue-draggable-handle\"></sp"
  },
  {
    "path": "src/components/GridItem.vue",
    "chars": 40720,
    "preview": "<template>\n    <div ref=\"item\"\n         class=\"vue-grid-item\"\n         :class=\"classObj\"\n         :style=\"style\"\n    >\n "
  },
  {
    "path": "src/components/GridLayout.vue",
    "chars": 19653,
    "preview": "<template>\n    <div ref=\"item\" class=\"vue-grid-layout\" :style=\"mergedStyle\">\n        <slot></slot>\n        <grid-item cl"
  },
  {
    "path": "src/components/TestElement.vue",
    "chars": 654,
    "preview": "<template>\n    <div>\n        <span class=\"text\">\n            {{text}}\n        </span>\n        <span class=\"remove\" @clic"
  },
  {
    "path": "src/components/index.js",
    "chars": 745,
    "preview": "import GridItem from './GridItem.vue';\nimport GridLayout from './GridLayout.vue';\n// import ResponsiveGridLayout from '."
  },
  {
    "path": "src/helpers/DOM.js",
    "chars": 1126,
    "preview": "let currentDir: \"ltr\" | \"rtl\" | \"auto\"  = \"auto\";\n// let currentDir = \"auto\";\n\nfunction hasDocument(){\n    return (typeo"
  },
  {
    "path": "src/helpers/draggableUtils.js",
    "chars": 1460,
    "preview": "// Get {x, y} positions from event.\nexport function getControlPosition(e) {\n    return offsetXYFromParentOf(e);\n}\n\n\n// G"
  },
  {
    "path": "src/helpers/responsiveUtils.js",
    "chars": 4504,
    "preview": "// @flow\n\nimport {cloneLayout, compact, correctBounds} from './utils';\n\nimport type {Layout} from './utils';\nexport type"
  },
  {
    "path": "src/helpers/utils.js",
    "chars": 19079,
    "preview": "// @flow\nexport type LayoutItemRequired = {w: number, h: number, x: number, y: number, i: string};\nexport type LayoutIte"
  },
  {
    "path": "src/main.js",
    "chars": 101,
    "preview": "import Vue from 'vue'\nimport App from './App.vue'\n\nnew Vue({\n  render: h => h(App)\n}).$mount('#app')\n"
  },
  {
    "path": "test/interact-test.html",
    "chars": 1002,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Interact TEST</title>\n    <meta name=\"view"
  },
  {
    "path": "test/interact-test.js",
    "chars": 2071,
    "preview": "function dragMoveListener (event) {\n    var target = event.target,\n        // keep the dragged position in the data-x/da"
  },
  {
    "path": "test/unit/GridItem.spec.js",
    "chars": 767,
    "preview": "import { shallowMount } from '@vue/test-utils'\nimport GridLayout from '../../src/components/GridLayout.vue'\n\nlet layout\n"
  },
  {
    "path": "test/unit/utils.spec.js",
    "chars": 9639,
    "preview": "// @flow\r\n/* eslint-env jest */\r\n\r\nimport {\r\n    bottom,\r\n    collides,\r\n    compact,\r\n    moveElement,\r\n    sortLayoutI"
  },
  {
    "path": "vue.config.js",
    "chars": 743,
    "preview": "// https://medium.com/js-dojo/how-to-reduce-your-vue-js-bundle-size-with-webpack-3145bf5019b7\n// const BundleAnalyzerPlu"
  },
  {
    "path": "website/TODOS.md",
    "chars": 205,
    "preview": "# vue-grid-layout\n\n\nhttps://github.com/wearebraid/vueformulate.com/tree/master/docs\n\n\n# emit responsiveLayoutUpdatedEven"
  },
  {
    "path": "website/docs/.vuepress/Autocomplete.js",
    "chars": 385,
    "preview": "// import MyFormulateAutocomplete from './components/MyFormulateAutocomplete'\n//\n// export default function (formulateIn"
  },
  {
    "path": "website/docs/.vuepress/components/Example01Basic.vue",
    "chars": 3599,
    "preview": "<template>\n    <grid-layout :layout.sync=\"layout\"\n                 :col-num=\"12\"\n                 :row-height=\"30\"\n     "
  },
  {
    "path": "website/docs/.vuepress/components/Example02Events.vue",
    "chars": 6791,
    "preview": "<template>\n    <div>\n        <div ref=\"eventsDiv\" class=\"eventsJSON\">\n            <div v-for=\"event in eventLog\">\n      "
  },
  {
    "path": "website/docs/.vuepress/components/Example03MultipleGrids.vue",
    "chars": 5832,
    "preview": "<template>\n    <div>\n        <div style=\"margin-top:10px;\">\n            <h4>Grid #1</h4>\n            <grid-layout :layou"
  },
  {
    "path": "website/docs/.vuepress/components/Example04AllowIgnore.vue",
    "chars": 5811,
    "preview": "<template>\n    <div>\n        <grid-layout :layout.sync=\"layout\"\n                     :col-num=\"12\"\n                     "
  },
  {
    "path": "website/docs/.vuepress/components/Example05Mirrored.vue",
    "chars": 3781,
    "preview": "<template>\n    <div>\n        <input type=\"checkbox\" v-model=\"draggable\"/> Draggable\n        <input type=\"checkbox\" v-mod"
  },
  {
    "path": "website/docs/.vuepress/components/Example06Responsive.vue",
    "chars": 4200,
    "preview": "<template>\n    <div style=\"width:100%;height:2000px;\">\n        <div class=\"layoutJSON\">\n            Displayed as <code>["
  },
  {
    "path": "website/docs/.vuepress/components/Example07PreventCollision.vue",
    "chars": 3575,
    "preview": "<template>\n    <div>\n        <grid-layout :layout.sync=\"layout\"\n                     :col-num=\"12\"\n                     "
  },
  {
    "path": "website/docs/.vuepress/components/Example08ResponsivePredefinedLayouts.vue",
    "chars": 4404,
    "preview": "<template>\n    <div>\n        <grid-layout :layout.sync=\"layout\"\n                     :responsive-layouts=\"layouts\"\n     "
  },
  {
    "path": "website/docs/.vuepress/components/Example09DynamicAddRemove.vue",
    "chars": 4158,
    "preview": "<template>\n    <div>\n        <div class=\"layoutJSON\">\n            Displayed as <code>[x, y, w, h]</code>:\n            <d"
  },
  {
    "path": "website/docs/.vuepress/components/Example10DragFromOutside.vue",
    "chars": 7310,
    "preview": "<template>\n    <div>\n        <div>\n            <div class=\"layoutJSON\">\n                Displayed as <code>[x, y, w, h]<"
  },
  {
    "path": "website/docs/.vuepress/components/Example11Bounded.vue",
    "chars": 4144,
    "preview": "<template>\n    <div style=\"width:100%;height:2000px;\">\n        <div class=\"layoutJSON\">\n            Displayed as <code>["
  },
  {
    "path": "website/docs/.vuepress/components/ExampleStylingGridLines.vue",
    "chars": 4775,
    "preview": "<template>\n    <div class=\"container\">\n        <grid-layout\n            class=\"grid\"\n            :layout.sync=\"layout\"\n "
  },
  {
    "path": "website/docs/.vuepress/components/ExampleStylingPlaceholder.vue",
    "chars": 3782,
    "preview": "<template>\n    <div class=\"container\">\n        <grid-layout :layout.sync=\"layout\"\n                     :col-num=\"12\"\n   "
  },
  {
    "path": "website/docs/.vuepress/components/HomeFooter.vue",
    "chars": 629,
    "preview": "<template>\n    <footer class=\"footer\">\n        A product by:\n        <a href=\"https://www.jbaysolutions.com/\" target=\"_b"
  },
  {
    "path": "website/docs/.vuepress/components/HomepageGrid.vue",
    "chars": 5945,
    "preview": "<template>\n    <grid-layout :layout.sync=\"layout\"\n                 :col-num=\"12\"\n                 :row-height=\"30\"\n     "
  },
  {
    "path": "website/docs/.vuepress/config.js",
    "chars": 4439,
    "preview": "const description = 'A draggable and resizable grid layout, as a Vue component.'\nconst title = 'Vue Grid Layout - ️A gri"
  },
  {
    "path": "website/docs/.vuepress/enhanceApp.js",
    "chars": 901,
    "preview": "/**\n * App level enhancements. Read more here:\n * https://vuepress.vuejs.org/guide/basic-config.html#app-level-enhanceme"
  },
  {
    "path": "website/docs/.vuepress/public/examples/01-basic.html",
    "chars": 2375,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 1 - Basic</title>\n"
  },
  {
    "path": "website/docs/.vuepress/public/examples/01-basic.js",
    "chars": 2989,
    "preview": "var testLayout = [\n    {\"x\":0,\"y\":0,\"w\":2,\"h\":2,\"i\":\"0\", static: false},\n    {\"x\":2,\"y\":0,\"w\":2,\"h\":4,\"i\":\"1\", static: t"
  },
  {
    "path": "website/docs/.vuepress/public/examples/02-events.html",
    "chars": 3068,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 2 - Move and resiz"
  },
  {
    "path": "website/docs/.vuepress/public/examples/02-events.js",
    "chars": 3660,
    "preview": "var testLayout = [\n    {\"x\":0,\"y\":0,\"w\":2,\"h\":2,\"i\":\"0\"},\n    {\"x\":2,\"y\":0,\"w\":2,\"h\":4,\"i\":\"1\"},\n    {\"x\":4,\"y\":0,\"w\":2,"
  },
  {
    "path": "website/docs/.vuepress/public/examples/03-multiple-grids.html",
    "chars": 3269,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 3 - Multiple grids"
  },
  {
    "path": "website/docs/.vuepress/public/examples/04-allow-ignore.html",
    "chars": 3677,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 4 - Drag allow/ign"
  },
  {
    "path": "website/docs/.vuepress/public/examples/05-mirrored.html",
    "chars": 3462,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 4 - Mirrored grid "
  },
  {
    "path": "website/docs/.vuepress/public/examples/06-responsive.html",
    "chars": 2369,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 1 - Basic Responsi"
  },
  {
    "path": "website/docs/.vuepress/public/examples/06-responsive.js",
    "chars": 2625,
    "preview": "var testLayout = [\n    {\"x\":0,\"y\":0,\"w\":2,\"h\":2,\"i\":\"0\"},\n    {\"x\":2,\"y\":0,\"w\":2,\"h\":4,\"i\":\"1\"},\n    {\"x\":4,\"y\":0,\"w\":2,"
  },
  {
    "path": "website/docs/.vuepress/public/examples/07-prevent-collision.html",
    "chars": 1913,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\">\n  <title>Vue Grid Layout Example 7 - Prevent Collision"
  },
  {
    "path": "website/docs/.vuepress/public/examples/07-prevent-collision.js",
    "chars": 1652,
    "preview": "var testLayout = [\n  {\"x\":0,\"y\":0,\"w\":2,\"h\":5,\"i\":\"0\", static: false},\n  {\"x\":2,\"y\":0,\"w\":2,\"h\":2,\"i\":\"1\", static: false"
  },
  {
    "path": "website/docs/.vuepress/public/examples/08-responsive-predefined-layouts.html",
    "chars": 2451,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\">\n  <title>Vue Grid Layout Example 8 - Responsive with p"
  },
  {
    "path": "website/docs/.vuepress/public/examples/08-responsive-predefined-layouts.js",
    "chars": 2569,
    "preview": "var testLayouts = {\n    md: [\n        {\"x\":0, \"y\":0, \"w\":2, \"h\":2, \"i\":\"0\"},\n        {\"x\":2, \"y\":0, \"w\":2, \"h\":4, \"i\":\"1"
  },
  {
    "path": "website/docs/.vuepress/public/examples/09-dynamic-add-remove.html",
    "chars": 2288,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Vue Grid Layout Example 9 - Dynamic Add/Rem"
  },
  {
    "path": "website/docs/.vuepress/public/examples/09-dynamic-add-remove.js",
    "chars": 1174,
    "preview": "var testLayout = [\n  { x: 0, y: 0, w: 2, h: 2, i: \"0\" },\n  { x: 2, y: 0, w: 2, h: 2, i: \"1\" },\n  { x: 4, y: 0, w: 2, h: "
  },
  {
    "path": "website/docs/.vuepress/public/examples/10-drag-from-outside.html",
    "chars": 2673,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Vue Grid Layout Example 10 - Drag From Out"
  },
  {
    "path": "website/docs/.vuepress/public/examples/10-drag-from-outside.js",
    "chars": 3909,
    "preview": "var testLayout = [\n    {\"x\":0,\"y\":0,\"w\":2,\"h\":2,\"i\":\"0\"},\n    {\"x\":2,\"y\":0,\"w\":2,\"h\":4,\"i\":\"1\"},\n    {\"x\":4,\"y\":0,\"w\":2,"
  },
  {
    "path": "website/docs/.vuepress/public/examples/11-bounded.html",
    "chars": 2170,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\">\n  <title>Vue Grid Layout Example 11 - Bounded</title>\n"
  },
  {
    "path": "website/docs/.vuepress/public/examples/11-bounded.js",
    "chars": 969,
    "preview": "var testLayout = [\n    {\"x\":0,\"y\":0,\"w\":2,\"h\":2,\"i\":\"0\"},\n    {\"x\":2,\"y\":0,\"w\":2,\"h\":4,\"i\":\"1\"},\n    {\"x\":4,\"y\":0,\"w\":2,"
  },
  {
    "path": "website/docs/.vuepress/public/examples/app.css",
    "chars": 2679,
    "preview": "/*** EXAMPLE ***/\n#content {\n    width: 100%;\n}\n\n.vue-grid-layout {\n    background: #eee;\n}\n\n.layoutJSON {\n    backgroun"
  },
  {
    "path": "website/docs/.vuepress/public/examples/vue.js",
    "chars": 340083,
    "preview": "/*!\n * Vue.js v2.6.7\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  ty"
  },
  {
    "path": "website/docs/.vuepress/styles/index.styl",
    "chars": 590,
    "preview": "// placeholder for test, dont't remove it.\n\n//.content {\n//  font-size 30px;\n//}\n\n//div.theme-default-content:not(.custo"
  },
  {
    "path": "website/docs/.vuepress/theme/components/CarbonAds.vue",
    "chars": 2685,
    "preview": "<script>\nexport default {\n    name: 'CarbonAds',\n\n    watch: {\n        '$route' (to, from) {\n            if (\n          "
  },
  {
    "path": "website/docs/.vuepress/theme/components/Home.vue",
    "chars": 3978,
    "preview": "<template>\n  <main\n    class=\"home\"\n    :aria-labelledby=\"data.heroText !== null ? 'main-title' : null\"\n  >\n    <header "
  },
  {
    "path": "website/docs/.vuepress/theme/index.js",
    "chars": 56,
    "preview": "module.exports = {\n\textend: '@vuepress/theme-default'\n}\n"
  },
  {
    "path": "website/docs/.vuepress/theme/layouts/Layout.vue",
    "chars": 1037,
    "preview": "<template>\n    <ParentLayout>\n        <template #sidebar-top>\n            <CarbonAds/>\n        </template>\n        <temp"
  },
  {
    "path": "website/docs/README.md",
    "chars": 902,
    "preview": "---\nlayout: HomeLayout\nhome: true\nheroImage: /assets/img/logo.png\nheroText: Vue Grid Layout\ntagline: A grid layout syste"
  },
  {
    "path": "website/docs/changelog/README.md",
    "chars": 7744,
    "preview": "---\nsidebar: auto\n---\n# Changelog\n\n## 2.4.0 (Aug 3, 2022)\n\n* GridLayout transformScale prop, to allow proper dragging an"
  },
  {
    "path": "website/docs/guide/01-basic.md",
    "chars": 207,
    "preview": "# 01 - Basic \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/compone"
  },
  {
    "path": "website/docs/guide/02-events.md",
    "chars": 226,
    "preview": "# 02 - Move and resize events \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/"
  },
  {
    "path": "website/docs/guide/03-multiple-grids.md",
    "chars": 240,
    "preview": "# 03 - Multiple grids \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepres"
  },
  {
    "path": "website/docs/guide/04-allow-ignore.md",
    "chars": 366,
    "preview": "# 04 - Drag allow/ignore elements \n\nIgnore drag on certain elements and allow on others.\n\nClick and drag the dots on the"
  },
  {
    "path": "website/docs/guide/05-mirrored.md",
    "chars": 231,
    "preview": "# 05 - Mirrored grid layout \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.v"
  },
  {
    "path": "website/docs/guide/06-responsive.md",
    "chars": 331,
    "preview": "# 06 - Responsive \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/co"
  },
  {
    "path": "website/docs/guide/07-prevent-collision.md",
    "chars": 362,
    "preview": "# 07 - Prevent Collision \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuep"
  },
  {
    "path": "website/docs/guide/08-responsive-predefined-layouts.md",
    "chars": 301,
    "preview": "# 08 - Responsive with predefined layouts \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/w"
  },
  {
    "path": "website/docs/guide/09-dynamic-add-remove.md",
    "chars": 364,
    "preview": "# 09 - Dynamic Add/Remove \n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vue"
  },
  {
    "path": "website/docs/guide/10-drag-from-outside.md",
    "chars": 454,
    "preview": "# 10 - Drag From Outside \n\nThis demo shows what happens when an item is added from outside of the grid.\n<br/>\nOnce you d"
  },
  {
    "path": "website/docs/guide/11-bounded.md",
    "chars": 251,
    "preview": "# 11 - Dragging grid items bounded to grid container\n\n[View source](https://github.com/jbaysolutions/vue-grid-layout/blo"
  },
  {
    "path": "website/docs/guide/README.md",
    "chars": 712,
    "preview": "# Installation\n\n## NPM\n\n\tnpm install vue-grid-layout --save\n    \n## Yarn\n\n    yarn add vue-grid-layout\n\n\nImport the libr"
  },
  {
    "path": "website/docs/guide/auto-size.md",
    "chars": 92,
    "preview": "# Auto Sizing Grid Items\n\nTODO: https://github.com/jbaysolutions/vue-grid-layout/issues/351\n"
  },
  {
    "path": "website/docs/guide/events.md",
    "chars": 4928,
    "preview": "# Events\n\nMove and resize event listeners can be added to each grid-item, so that the parent Vue can be notified when a "
  },
  {
    "path": "website/docs/guide/examples.md",
    "chars": 351,
    "preview": "# Examples\n\n## Basic\n\n<Grid01Basic></Grid01Basic>\n\n## Events\n\n<Grid02Events></Grid02Events>\n\n## Multiple Grids\n\n<Grid03M"
  },
  {
    "path": "website/docs/guide/properties.md",
    "chars": 7869,
    "preview": "# Properties\n\n## GridLayout\n\n### layout\n\n   \n* type: `Array`\n* required: `true`\n\nThis is the initial layout of the grid."
  },
  {
    "path": "website/docs/guide/styling.md",
    "chars": 2091,
    "preview": "# Styling\n\nGrid styling can be customized to fit your needs. Below is a list of the classes you can override.\n\n## Placeh"
  },
  {
    "path": "website/docs/guide/usage.md",
    "chars": 1779,
    "preview": "# Usage\n\n```javascript\n\tnew Vue({\n\t    el: '#app',\n\t    data: {\n\t        layout: [\n                {\"x\":0,\"y\":0,\"w\":2,\"h"
  },
  {
    "path": "website/docs/zh/README.md",
    "chars": 671,
    "preview": "---\nlayout: HomeLayout\nhome: true\nheroImage: /assets/img/logo.png\nheroText: Vue Grid Layout\ntagline: 一个类似于<a href=\"http:"
  },
  {
    "path": "website/docs/zh/changelog/README.md",
    "chars": 4621,
    "preview": "---\nsidebar: auto\n---\n# 更新日志\n\n## 2.4.0(2022年08月03日)\n\n* TODO\n\n## 2.3.12(2021年01月15日)\n\n* 将interact.js升级到1.10.2\n* 向GridItem"
  },
  {
    "path": "website/docs/zh/guide/01-basic.md",
    "chars": 196,
    "preview": "# 01 - 基本\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/Example"
  },
  {
    "path": "website/docs/zh/guide/02-events.md",
    "chars": 205,
    "preview": "# 02 - 移动事件并调整大小\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/"
  },
  {
    "path": "website/docs/zh/guide/03-multiple-grids.md",
    "chars": 222,
    "preview": "# 03 - 多个栅格\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/Examp"
  },
  {
    "path": "website/docs/zh/guide/04-allow-ignore.md",
    "chars": 263,
    "preview": "# 04 - 拖动允许/忽略元素\n\n忽略对某些元素的拖动而对其他元素的允许。\n\n单击并拖动每个项目角上的点以重新定位\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob"
  },
  {
    "path": "website/docs/zh/guide/05-mirrored.md",
    "chars": 211,
    "preview": "# 05 - 镜像反转栅格布局\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/E"
  },
  {
    "path": "website/docs/zh/guide/06-responsive.md",
    "chars": 316,
    "preview": "# 06 - 响应式\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/Exampl"
  },
  {
    "path": "website/docs/zh/guide/07-prevent-collision.md",
    "chars": 341,
    "preview": "# 07 - 防止碰撞\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/Examp"
  },
  {
    "path": "website/docs/zh/guide/08-responsive-predefined-layouts.md",
    "chars": 267,
    "preview": "# 08 - 响应预定义的布局\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/E"
  },
  {
    "path": "website/docs/zh/guide/09-dynamic-add-remove.md",
    "chars": 345,
    "preview": "# 09 - 动态添加/删除\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/Ex"
  },
  {
    "path": "website/docs/zh/guide/10-drag-from-outside.md",
    "chars": 290,
    "preview": "# 10 - 从外面拖动\n\n该演示演示了从栅格外部添加部件时发生的情况。\n<br/>\n将部件放到栅格中后,您将获得其坐标/属性,并可以据此执行操作。\n\n[查看资料](https://github.com/jbaysolutions/vue-"
  },
  {
    "path": "website/docs/zh/guide/11-bounded.md",
    "chars": 233,
    "preview": "# 11 - 拖动栅格元素绑定到容器\n\n可以获得栅格元素的坐标与容器间的绑定关系。\n\n[查看资料](https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/d"
  },
  {
    "path": "website/docs/zh/guide/README.md",
    "chars": 572,
    "preview": "# 安装\n\n## NPM\n\n\tnpm install vue-grid-layout --save\n    \n## Yarn\n\n    yarn add vue-grid-layout\n\n\n导入库\n\n```javascript\n    im"
  },
  {
    "path": "website/docs/zh/guide/auto-size.md",
    "chars": 76,
    "preview": "# 自动调整栅格元素\n\n待办: https://github.com/jbaysolutions/vue-grid-layout/issues/351\n"
  },
  {
    "path": "website/docs/zh/guide/events.md",
    "chars": 4003,
    "preview": "# 事件\n\n每一个栅格元素grid-item上都可以添加监听器,用于监听移动和调整大小事件,这样父级Vue对象就可以收到通知。\n\n示例 [点击这里](../guide/02-events.md)   \n\n````html\n\n    <gri"
  },
  {
    "path": "website/docs/zh/guide/examples.md",
    "chars": 230,
    "preview": "# 例子\n\n## 基本\n\n<Grid01Basic></Grid01Basic>\n\n## 事件\n\n<Grid02Events></Grid02Events>\n\n## 多个网格\n\n<Grid03MultipleGrids></Grid03Mu"
  },
  {
    "path": "website/docs/zh/guide/properties.md",
    "chars": 4165,
    "preview": "# 属性\n\n## GridLayout\n\n### layout\n\n   \n* type: `Array`\n* required: `true`\n\n这是栅格的初始布局。\n\n数据源。值必须为 `Array`,其数据项为 `Object`。 每条"
  },
  {
    "path": "website/docs/zh/guide/styling.md",
    "chars": 882,
    "preview": "# 样式\n\n可以定制栅格样式以适合您的需求。以下是可以覆盖的类的列表。\n\n## 占位符 \n  \n占位符的默认css为:\n\n````css\n.vue-grid-item.vue-grid-placeholder {\n    backgroun"
  },
  {
    "path": "website/docs/zh/guide/usage.md",
    "chars": 1776,
    "preview": "# 用法\n\n```javascript\n\tnew Vue({\n\t    el: '#app',\n\t    data: {\n\t        layout: [\n                {\"x\":0,\"y\":0,\"w\":2,\"h\":2"
  },
  {
    "path": "website/package.json",
    "chars": 826,
    "preview": "{\n  \"name\": \"vue-grid-layout-website\",\n  \"version\": \"1.0.0\",\n  \"description\": \"vue-grid-layout website\",\n  \"author\": \"Gu"
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the jbaysolutions/vue-grid-layout GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 123 files (1.4 MB), approximately 382.5k tokens, and a symbol index with 1164 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!