├── .gitignore
├── .npmignore
├── docs
├── favicon.ico
├── img
│ ├── 0.a99f52e0.gif
│ ├── 1.b6a5bef8.gif
│ ├── 2.d4ca4874.gif
│ ├── 3.d078582e.gif
│ ├── 4.627abd19.gif
│ ├── 5.7c787298.gif
│ ├── dylan-0.45179feb.jpg
│ ├── dylan-1.c74bc761.jpg
│ ├── dylan-2.b7bb7ab3.jpg
│ └── dylan-3.54c22a11.jpg
├── css
│ └── app.068cba39.css
├── index.html
└── js
│ ├── app.a7ab0f70.js
│ └── app.a7ab0f70.js.map
├── package.json
├── LICENSE
├── README.md
├── vue-dnd-zone.css
└── vue-dnd-zone.js
/.gitignore:
--------------------------------------------------------------------------------
1 | demo
2 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | demo
2 | docs
3 |
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/favicon.ico
--------------------------------------------------------------------------------
/docs/img/0.a99f52e0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/0.a99f52e0.gif
--------------------------------------------------------------------------------
/docs/img/1.b6a5bef8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/1.b6a5bef8.gif
--------------------------------------------------------------------------------
/docs/img/2.d4ca4874.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/2.d4ca4874.gif
--------------------------------------------------------------------------------
/docs/img/3.d078582e.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/3.d078582e.gif
--------------------------------------------------------------------------------
/docs/img/4.627abd19.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/4.627abd19.gif
--------------------------------------------------------------------------------
/docs/img/5.7c787298.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/5.7c787298.gif
--------------------------------------------------------------------------------
/docs/img/dylan-0.45179feb.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/dylan-0.45179feb.jpg
--------------------------------------------------------------------------------
/docs/img/dylan-1.c74bc761.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/dylan-1.c74bc761.jpg
--------------------------------------------------------------------------------
/docs/img/dylan-2.b7bb7ab3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/dylan-2.b7bb7ab3.jpg
--------------------------------------------------------------------------------
/docs/img/dylan-3.54c22a11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/supraniti/vue-dnd-zone/HEAD/docs/img/dylan-3.54c22a11.jpg
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-dnd-zone",
3 | "version": "0.4.0",
4 | "description": "Data Driven Drag and Drop functionality for Vue.js",
5 | "main": "vue-dnd-zone.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/supraniti/vue-dnd-zone.git"
12 | },
13 | "keywords": [
14 | "drag",
15 | "and",
16 | "drop",
17 | "vue",
18 | "sortable",
19 | "draggable",
20 | "plugin"
21 | ],
22 | "author": "Supraniti",
23 | "license": "ISC",
24 | "bugs": {
25 | "url": "https://github.com/supraniti/vue-dnd-zone/issues"
26 | },
27 | "homepage": "https://github.com/supraniti/vue-dnd-zone#readme"
28 | }
29 |
--------------------------------------------------------------------------------
/docs/css/app.068cba39.css:
--------------------------------------------------------------------------------
1 | .dnd-zone,.dnd-zone *{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;cursor:crosshair!important}.handle{cursor:-webkit-grab;cursor:grab}.dnd-mirror,.dnd-mirror *{pointer-events:none!important;transition-duration:0s!important}.dnd-mirror{background:transparent;z-index:99}.dnd-shadow{position:fixed!important;visibility:visible!important;pointer-events:none!important}.dnd-shadow,.dnd-transition{transition:all var(--dnd-transition-duration)!important}.dnd-transition{overflow:hidden!important}.dnd-dragged{visibility:hidden!important;transition:all 0s!important}.dnd-move{transition:var(--dnd-transition-duration)}.dnd-zone .dnd-leave-active,.dndZone .dnd-enter-active{transition:all 0s!important;visibility:hidden!important}.dnd-enter-active,.dnd-leave-active{opacity:1;transition:all var(--dnd-transition-duration)}.dnd-enter,.dnd-leave{opacity:0}.dnd-leave-active{position:absolute}
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Yair Levy
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-dnd-zone
2 | ## _Drag And Drop functionality for Vue.js - written in Vue.js_
3 | vue-dnd-zone is a vue.js plugin for drag and drop functionality.
4 | It is not a wrapper for an external js library, but a set of vue components managing the drag and drop event and data model state
5 |
6 | ### Examples, Demo, API:
7 | https://supraniti.github.io/vue-dnd-zone/
8 |
9 | ### Features
10 | - Smooth transitions
11 | - Auto scroll while dragging
12 | - Supports nested structures
13 | - Lightweight (~4kb gzipped)
14 | - Supports touch events
15 |
16 |
17 | ### Installation
18 | ```sh
19 | npm install vue-dnd-zone
20 | ```
21 | ```sh
22 | //main.js
23 | import VueDndZone from 'vue-dnd-zone'
24 | import 'vue-dnd-zone/vue-dnd-zone.css'
25 | ```
26 |
27 | ### Usage
28 | ```sh
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | ```
37 |
38 | ### Development
39 |
40 | vue-dnd-zone is currently in a POC (proof of concept) state,
41 | Further development can and will be done, but it might take a while :-)
42 | If you want to support its progress, star the repository on github
43 |
44 | ### License
45 | MIT
46 |
--------------------------------------------------------------------------------
/vue-dnd-zone.css:
--------------------------------------------------------------------------------
1 | .dnd-zone, .dnd-zone *{
2 | -webkit-user-select: none !important;
3 | -moz-user-select: none !important;
4 | -ms-user-select: none !important;
5 | user-select: none !important;
6 | cursor:crosshair !important;
7 | }
8 | .handle{
9 | cursor:grab;
10 | }
11 | .dnd-mirror, .dnd-mirror *{
12 | pointer-events:none !important;
13 | transition-duration:0s !important;
14 | }
15 | .dnd-mirror{
16 | background:transparent;
17 | z-index:99;
18 | }
19 | .dnd-shadow{
20 | position:fixed !important;
21 | visibility:visible !important;
22 | pointer-events:none !important;
23 | transition:all var(--dnd-transition-duration) !important;
24 | }
25 | .dnd-transition{
26 | transition: all var(--dnd-transition-duration) !important;
27 | overflow:hidden !important;
28 | }
29 | .dnd-dragged{
30 | visibility:hidden !important;
31 | transition:all 0s !important;
32 | }
33 | .dnd-move{
34 | transition: var(--dnd-transition-duration);
35 | }
36 | .dndZone .dnd-enter-active, .dnd-zone .dnd-leave-active {
37 | transition:all 0s !important;
38 | visibility:hidden !important;
39 | }
40 | .dnd-enter-active, .dnd-leave-active {
41 | opacity:1;
42 | transition: all var(--dnd-transition-duration);
43 | }
44 | .dnd-enter, .dnd-leave{
45 | opacity:0;
46 | }
47 | .dnd-leave-active {
48 | position:absolute;
49 | }
50 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
vue-dnd-zone Drag and drop plugin for Vue.js We're sorry but demo doesn't work properly without JavaScript enabled. Please enable it to continue.
--------------------------------------------------------------------------------
/docs/js/app.a7ab0f70.js:
--------------------------------------------------------------------------------
1 | (function(t){function e(e){for(var i,s,o=e[0],d=e[1],l=e[2],h=0,u=[];h\n \n \n \x3c!-- item markup goes here --\x3e\n \n \n \n\n")]),t._v("\n ")]),n("v-btn",{attrs:{text:"",small:""},on:{click:function(e){t.tab=1}}},[t._v("Examples")])],1):t._e()],2)],1)],1)],1)]}))],2)],1)],1)],1)],1),n("v-tab-item",[n("Examples")],1),n("v-tab-item",[n("API")],1)],1)],1)],1)},r=[],s=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("v-tabs",{attrs:{color:"black"},model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[n("v-tab",[t._v(" List ")]),n("v-tab",[t._v(" Grid ")]),n("v-tab",[t._v(" Nested Grid ")])],1),n("v-tabs-items",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[n("v-tab-item",[n("dnd-zone",[n("v-card",{staticClass:"mx-auto",attrs:{"max-width":"400"}},[n("v-system-bar",{attrs:{color:"grey darken-2",dark:""}},[n("v-spacer"),n("v-icon",[t._v("mdi-window-minimize")]),n("v-icon",[t._v("mdi-window-maximize")]),n("v-icon",[t._v("mdi-close")])],1),n("v-app-bar",{attrs:{dark:"",color:"black"}},[n("v-app-bar-nav-icon"),n("v-toolbar-title",[t._v("My Playlists")]),n("v-spacer"),n("v-btn",{attrs:{icon:""}},[n("v-icon",[t._v("mdi-magnify")])],1)],1),n("v-container",[n("dnd-container",{staticClass:"row",attrs:{"dnd-model":t.cardModel.children,"dnd-id":"cards-example",dense:"","vertical-search":""}},[n("v-col",{key:"fixed",attrs:{cols:"12"}},[n("v-card",{attrs:{color:"black",dark:""}},[n("v-card-title",{staticClass:"headline"},[t._v(" Bob Dylan ")]),n("v-card-actions",[n("v-btn",{attrs:{text:""}},[n("v-icon",{attrs:{left:""}},[t._v("mdi-play")]),t._v(" Play All ")],1)],1)],1)],1),t._l(t.cardModel.children,(function(e){return[n("dnd-item",{key:e.id,attrs:{"dnd-model":e,"dnd-id":e.id}},[n("v-col",{attrs:{cols:"12"}},[n("v-card",{attrs:{color:"white"}},[n("div",{staticClass:"d-flex flex-no-wrap justify-space-between"},[n("div",[n("v-card-title",{staticClass:"headline",domProps:{textContent:t._s(e.title)}}),n("v-card-subtitle",{domProps:{textContent:t._s(e.artist)}}),n("v-card-actions",[n("v-btn",{staticClass:"ml-2 mt-3",attrs:{fab:"",icon:"",height:"40px",right:"",width:"40px"}},[n("v-icon",[t._v("mdi-play")])],1)],1)],1),n("v-avatar",{staticClass:"ma-3",attrs:{size:"125",tile:""}},[n("v-img",{attrs:{src:e.src}})],1)],1)])],1)],1)]}))],2)],1)],1)],1),n("div",[n("v-alert",{staticClass:"my-2",attrs:{color:"grey darken-4",dark:"",border:"left",prominent:""}},[n("pre",[n("code",{staticStyle:{display:"block","white-space":"pre-wrap"}},[t._v('\n\n \n \n \n \n \x3c!--Card Markup --\x3e\n \n \n \n \n \n')]),t._v("\n ")])])],1)],1),n("v-tab-item",{staticClass:"pb-0"},[n("v-card",{staticClass:"pb-10",attrs:{flat:""}},[n("v-card-title",[t.ordered?n("v-icon",{attrs:{color:"green"}},[t._v("mdi-check")]):t._e(),t._v("Pai Mei GIF Captcha")],1),n("v-card-text",[n("dnd-zone",{attrs:{"transition-duration":.3}},[n("dnd-container",{staticClass:"row row--dense",staticStyle:{"max-width":"500px"},attrs:{"dnd-model":t.images,"dnd-id":"images"}},t._l(t.images,(function(e){return n("dnd-item",{key:e.id,attrs:{"dnd-model":e,"dnd-id":e.id}},[n("v-col",{staticClass:"d-flex child-flex handle",class:t.ordered?"pa-0":"pa-2",attrs:{cols:"4"}},[n("v-img",{staticClass:"grey lighten-2",attrs:{src:e.src,"aspect-ratio":"1"},scopedSlots:t._u([{key:"placeholder",fn:function(){return[n("v-row",{staticClass:"fill-height ma-0",attrs:{align:"center",justify:"center"}},[n("v-progress-circular",{attrs:{indeterminate:"",color:"grey lighten-5"}})],1)]},proxy:!0}],null,!0)})],1)],1)})),1)],1)],1),n("v-card-actions",{staticStyle:{"max-width":"500px"}},[n("v-text-field",{attrs:{label:"E-mail",required:"",disabled:!t.ordered}}),n("v-spacer"),n("v-text-field",{staticClass:"ml-4",attrs:{label:"Password",required:"",disabled:!t.ordered}}),n("v-spacer"),n("v-btn",{staticClass:"ml-4",attrs:{disabled:!t.ordered}},[t._v(" submit ")])],1)],1),n("v-alert",{staticClass:"my-2 py-0",attrs:{color:"grey darken-4",dark:"",border:"left",prominent:""}},[n("pre",[n("code",{staticStyle:{display:"block","white-space":"pre-wrap"}},[t._v('\n\n \n \n \n \n \n \n \n \n')]),t._v("\n ")])])],1),n("v-tab-item",[n("dnd-zone",{attrs:{"handle-class":"handle",validate:t.validate,"native-scroll":!1}},[n("recursive-grid",{attrs:{model:t.grid},on:{addChild:t.addChild,edit:t.edit}})],1)],1)],1),n("v-row",{attrs:{justify:"center"}},[n("v-dialog",{attrs:{persistent:"","max-width":"290"},model:{value:t.dialog,callback:function(e){t.dialog=e},expression:"dialog"}},[t.context?n("v-card",[n("v-card-title",{staticClass:"headline"},[t._v(" Edit Note ")]),n("v-card-text",[n("v-text-field",{model:{value:t.context.title,callback:function(e){t.$set(t.context,"title",e)},expression:"context.title"}})],1),n("v-card-actions",[n("v-btn",{attrs:{color:"red darken-1",text:""},on:{click:t.removeContext}},[t._v(" Delete Note ")]),n("v-spacer"),n("v-btn",{attrs:{color:"green darken-1",text:""},on:{click:function(e){t.context=null}}},[t._v(" Save ")])],1)],1):t._e()],1)],1)],1)},o=[],d=(n("159b"),n("a434"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("v-col",{staticClass:"pa-0",attrs:{cols:12,sm:t.model.cols}},[n("v-card",{staticClass:"ma-2",attrs:{color:t.model.color,dark:t.model.dark,light:!t.model.dark}},[t.model.id?n("v-card-actions",[n("v-icon",{staticClass:"handle"},[t._v("mdi-drag")]),n("v-spacer"),"2"==t.model.level?n("v-btn",{attrs:{icon:""},on:{click:function(e){return t.$emit("edit",t.model)}}},[n("v-icon",[t._v("mdi-folder-edit")])],1):t._e(),"1"==t.model.level?n("v-btn",{attrs:{icon:""},on:{click:t.addChild}},[n("v-icon",[t._v("mdi-folder-plus")])],1):t._e()],1):t._e(),n("v-card-title",{class:t.model.titleClass,domProps:{textContent:t._s(t.model.title)}}),t.model.level<2?n("v-card-text",[n("dnd-container",{staticClass:"row row--dense",style:{minHeight:"50px",border:t.model.dark?"1px dotted white":"1px dotted black"},attrs:{"dnd-id":t.model.id,"dnd-model":t.model.children,"container-transfer":{level:t.model.level},"vertical-search":t.$vuetify.breakpoint.xs}},[t._l(t.model.children,(function(e){return[n("dnd-item",{key:e.id,attrs:{"dnd-id":e.id,"dnd-model":e}},[n("recursive-grid",{attrs:{model:e},on:{addChild:t.addChild,edit:t.edit}})],1)]}))],2)],1):t._e()],1)],1)}),l=[],c={name:"RecursiveGrid",props:["model"],data:function(){return{}},methods:{edit:function(t){t.id?this.$emit("edit",t):this.$emit("edit",this.model)},addChild:function(t){t.id?this.$emit("addChild",t):this.$emit("addChild",this.model)}}},h=c,u=n("2877"),v=n("6544"),p=n.n(v),m=n("8336"),f=n("b0af"),g=n("99d9"),b=n("62ad"),y=n("132d"),w=n("2fa4"),C=Object(u["a"])(h,d,l,!1,null,null,null),x=C.exports;p()(C,{VBtn:m["a"],VCard:f["a"],VCardActions:g["a"],VCardText:g["c"],VCardTitle:g["d"],VCol:b["a"],VIcon:y["a"],VSpacer:w["a"]});var _=n("10e8"),O=n.n(_),k=n("afbb"),j=n.n(k),E=n("6f92"),S=n.n(E),P=n("2e0d"),I=n.n(P),D=n("8f60"),M=n.n(D),V=n("19b9"),L=n.n(V),$=n("4637"),T=n.n($),R=n("2f49"),A=n.n(R),B=n("4167"),Y=n.n(B),X=n("999a"),N=n.n(X),z={name:"Examples",data:function(){return{tab:0,context:null,selectedListItem:1,noteCounter:1e3,grid:{id:0,title:"KANBAN",color:"white",cols:12,level:0,dark:!1,children:[{id:1,title:"Top Priority",color:"red darken-2",cols:4,level:1,dark:!0,children:[]},{id:2,title:"Second Priority",color:"green darken-2",cols:4,level:1,dark:!0,children:[]},{id:3,title:"Maybe some day",color:"blue darken-2",cols:4,level:1,dark:!0,children:[]},{id:4,title:"Not in this lifetime",color:"purple darken-2",cols:4,level:1,dark:!0,children:[]}]},cardModel:{id:"card",children:[{id:"card-0",src:T.a,title:"Blonde On Blonde",artist:"Full Album"},{id:"card-1",src:A.a,title:"The Freewheelin'",artist:"Don't Think Twice, It's All Right"},{id:"card-2",src:Y.a,title:"Dylan",artist:"Full Album"},{id:"card-3",src:N.a,title:"Live",artist:"Blowin' in the wind"}]},listModel:{id:100,children:[{id:101,data:{text:"Real-Time",icon:"mdi-clock"}},{id:102,data:{text:"Audience",icon:"mdi-account"}},{id:103,data:{text:"Conversions",icon:"mdi-flag"}}]},listModel2:{id:200,children:[{id:201,data:{text:"Real-Time",icon:"mdi-clock"}},{id:202,data:{text:"Audience",icon:"mdi-account"}},{id:203,data:{text:"Conversions",icon:"mdi-flag"}}]},images:[{id:125,src:O.a},{id:126,src:j.a},{id:127,src:S.a},{id:128,src:I.a},{id:129,src:M.a},{id:130,src:L.a}],dndModel:{id:94,children:[{id:1,children:[],data:{title:"A",content:"Lorem Ipsum",level:0}},{id:2,children:[{id:3,data:{title:"B1",content:"Lorem",level:1},children:[]},{id:4,data:{title:"B2",content:"Lorem",level:1},children:[]}],data:{title:"B",content:"Lorem Ipsum",level:0}},{id:5,children:[{id:6,children:[],data:{title:"0",content:"Lorem",level:1}},{id:7,children:[],data:{title:"1",content:"Lorem",level:1}},{id:8,children:[],data:{title:"2",content:"Lorem",level:1}},{id:9,children:[],data:{title:"3",content:"Lorem",level:1}},{id:10,children:[],data:{title:"4",content:"Lorem",level:1}},{id:11,children:[],data:{title:"5",content:"Lorem",level:1}},{id:12,children:[],data:{title:"6",content:"Lorem",level:1}}],data:{title:"C",content:"Lorem Ipsum",level:0}}]}}},computed:{dialog:function(){return!!this.context},ordered:function(){for(var t=0;t-1&&e.children.splice(n,1)})),this.context=null},addChild:function(t){1==t.level&&t.children.unshift({id:this.noteCounter,title:"#"+this.noteCounter,color:"white",cols:6,class:{caption:!0},level:2,dark:!1,children:[]}),this.noteCounter++}},components:{RecursiveGrid:x}},Z=z,F=n("0798"),q=n("40dc"),H=n("5bc1"),U=n("8212"),W=n("a523"),G=n("169a"),J=n("adda"),K=n("490a"),Q=n("0fd9"),tt=n("afd9"),et=n("71a3"),nt=n("c671"),it=n("fe57"),at=n("aac8"),rt=n("8654"),st=n("2a7f"),ot=Object(u["a"])(Z,s,o,!1,null,null,null),dt=ot.exports;p()(ot,{VAlert:F["a"],VAppBar:q["a"],VAppBarNavIcon:H["a"],VAvatar:U["a"],VBtn:m["a"],VCard:f["a"],VCardActions:g["a"],VCardSubtitle:g["b"],VCardText:g["c"],VCardTitle:g["d"],VCol:b["a"],VContainer:W["a"],VDialog:G["a"],VIcon:y["a"],VImg:J["a"],VProgressCircular:K["a"],VRow:Q["a"],VSpacer:w["a"],VSystemBar:tt["a"],VTab:et["a"],VTabItem:nt["a"],VTabs:it["a"],VTabsItems:at["a"],VTextField:rt["a"],VToolbarTitle:st["a"]});var lt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("v-card",[n("v-card-title",{staticClass:"blue--text"},[t._v("dnd-zone component")]),n("v-card-text",{staticClass:"pb-0"},[n("p",[t._v("the 'dnd-zone' component manages the drag and drop event")])]),n("v-card-title",{staticClass:"pb-0"},[t._v("props:")]),n("v-card-text",{staticClass:"pb-0"},[n("v-simple-table",{scopedSlots:t._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",{staticClass:"text-left"},[t._v(" Name ")]),n("th",{staticClass:"text-left"},[t._v(" Type ")]),n("th",{staticClass:"text-left"},[t._v(" Default ")]),n("th",{staticClass:"text-left"},[t._v(" Description ")])])]),n("tbody",[n("tr",[n("td",[t._v("transition-duration")]),n("td",[t._v("Number")]),n("td",[t._v("0.3")]),n("td",[t._v("drag and drop transition duration in seconds")])]),n("tr",[n("td",[t._v("handle-class")]),n("td",[t._v("String")]),n("td",[t._v("None")]),n("td",[t._v("CSS class to limit drag selection to a specific element")])]),n("tr",[n("td",[t._v("native-scroll")]),n("td",[t._v("Boolean")]),n("td",[t._v("true")]),n("td",[t._v("When set to false, vue-dnd-zone will use a custom scroll controller that allows scrolling while drag and dropping")])]),n("tr",[n("td",[t._v("validate")]),n("td",[t._v("Function")]),n("td",[n("code",[t._v(" (item, container, zone) => true ")])]),n("td",[t._v("Validation function with access to all components envolved in the drag and drop action")])])])]},proxy:!0}])})],1),n("v-card-title",[t._v("events:")]),n("v-card-text",{staticClass:"pb-0"},[n("p",[t._v("vue-dnd-zone will emit a 'move' event on any change to the data structure")]),n("p",[t._v("the event payload contains the following data:")]),n("pre",[t._v(" "),n("code",{staticStyle:{display:"block","white-space":"pre-wrap"}},[t._v("\n from:{\n container:oldContainer,\n index:oldIndex\n },\n to:{\n container:newContainer,\n index:index\n }\n ")]),t._v("\n ")])]),n("v-card-title",{staticClass:"blue--text"},[t._v("dnd-container component")]),n("v-card-text",[n("p",[t._v("the 'dnd-container' component creates an html element that acts as a container for dnd items ")]),n("p",[t._v("it also creates a native vue transition-group component to handle the transitions inside it")])]),n("v-card-title",[t._v("props:")]),n("v-card-text",[n("v-simple-table",{scopedSlots:t._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",{staticClass:"text-left"},[t._v(" Name ")]),n("th",{staticClass:"text-left"},[t._v(" Type ")]),n("th",{staticClass:"text-left"},[t._v(" Default ")]),n("th",{staticClass:"text-left"},[t._v(" Description ")])])]),n("tbody",[n("tr",[n("td",[t._v("dnd-model")]),n("td",[t._v("Array")]),n("td",[t._v("[]")]),n("td",[t._v("*** Required, an array of objects serves as the data container")])]),n("tr",[n("td",[t._v("dnd-id")]),n("td",[t._v("String")]),n("td",[t._v("null")]),n("td",[t._v("*** Required, a unique id for the data model (similar to 'key')")])]),n("tr",[n("td",[t._v("tag")]),n("td",[t._v("String")]),n("td",[t._v("div")]),n("td",[t._v("tag for the container DOM element")])]),n("tr",[n("td",[t._v("vertical-search")]),n("td",[t._v("Boolean")]),n("td",[t._v("false")]),n("td",[t._v("Set to true when items are ordered in a column")])])])]},proxy:!0}])})],1),n("v-card-title",{staticClass:"blue--text"},[t._v("dnd-item component")]),n("v-card-text",[n("p",[t._v("the 'dnd-item' component does not create any markup, it serves as a functional wrapper for the draggable element")])]),n("v-card-title",[t._v("props:")]),n("v-card-text",[n("v-simple-table",{scopedSlots:t._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",{staticClass:"text-left"},[t._v(" Name ")]),n("th",{staticClass:"text-left"},[t._v(" Type ")]),n("th",{staticClass:"text-left"},[t._v(" Default ")]),n("th",{staticClass:"text-left"},[t._v(" Description ")])])]),n("tbody",[n("tr",[n("td",[t._v("dnd-model")]),n("td",[t._v("Object")]),n("td",[t._v("{}")]),n("td",[t._v("*** Required, the data Object corresponding to the dragged DOM element")])]),n("tr",[n("td",[t._v("dnd-id")]),n("td",[t._v("String")]),n("td",[t._v("null")]),n("td",[t._v("*** Required, a unique id for the data model (similar to 'key')")])])])]},proxy:!0}])})],1)],1)},ct=[],ht={name:"API",data:function(){return{}}},ut=ht,vt=n("1f4f"),pt=Object(u["a"])(ut,lt,ct,!1,null,null,null),mt=pt.exports;p()(pt,{VCard:f["a"],VCardText:g["c"],VCardTitle:g["d"],VSimpleTable:vt["a"]});var ft={name:"App",components:{Examples:dt,API:mt},data:function(){return{drawer:!0,tab:0,about:{children:[{id:0,color:"grey darken-3",dark:!0,cols:5,title:"About",text:["vue-dnd-zone is a vue.js plugin for drag and drop functionality.","It is not a wrapper for an external js library, but a set of vue components managing the drag and drop event and data model state."]},{id:1,color:"grey darken-3",dark:!0,cols:5,title:"Features",text:["- Smooth transitions"," - Auto scroll while dragging","- Supports nested structures","- Lightweight (~4kb gzipped)","- Supports touch events"]},{id:2,color:"grey lighten-5",dark:!1,cols:4,title:"Installation",html:["npm install vue-dnd-zone //main.js import VueDndZone from 'vue-dnd-zone' import 'vue-dnd-zone/vue-dnd-zone.css'"]},{id:3,color:"grey lighten-5",dark:!1,cols:4,title:"Usage",custom:!0},{id:4,color:"deep-purple darken-3",dark:!0,cols:4,title:"Project Status",html:["vue-dnd-zone is currently in a POC (proof of concept) state.",'If you want to support its progress, star the repository on github.']}]}}},watch:{tab:function(){this.$vuetify.breakpoint.xs&&(this.drawer=!1)}}},gt=ft,bt=n("7496"),yt=n("ce7e"),wt=n("da13"),Ct=n("5d23"),xt=n("f6c4"),_t=n("f774"),Ot=Object(u["a"])(gt,a,r,!1,null,null,null),kt=Ot.exports;p()(Ot,{VApp:bt["a"],VAppBar:q["a"],VAppBarNavIcon:H["a"],VBtn:m["a"],VCard:f["a"],VCardActions:g["a"],VCardText:g["c"],VCardTitle:g["d"],VCol:b["a"],VDivider:yt["a"],VIcon:y["a"],VListItem:wt["a"],VListItemContent:Ct["a"],VListItemSubtitle:Ct["b"],VListItemTitle:Ct["c"],VMain:xt["a"],VNavigationDrawer:_t["a"],VSpacer:w["a"],VTab:et["a"],VTabItem:nt["a"],VTabs:it["a"],VTabsItems:at["a"],VToolbarTitle:st["a"]});var jt=n("f309");i["a"].use(jt["a"]);var Et=new jt["a"]({}),St=n("2909"),Pt=(n("a9e3"),n("b64b"),n("4de4"),n("d81d"),{install:function(t){t.component("DndZone",{props:{validate:{type:Function,default:function(t,e,n){if(t&&e&&n)return!0}},mirrorMinHeight:{type:Number,default:150},mirrorMaxWidth:{type:Number,default:500},calcInterval:{type:Number,default:150},lockDistance:{type:Number,default:25},shadowAnchor:{type:Function,default:function(){return this.$el}},mirrorAnchor:{type:Function,default:function(){return this.$el}},transitionDuration:{type:Number,default:.2},shadowOpacity:{type:Number,default:.5},shadowMargin:{type:[Boolean,String],default:"0px"},shadowPadding:{type:[Boolean,String],default:!1},dragstartBuffer:{type:Number,default:50},nativeScroll:{type:Boolean,default:!0},handleClass:{type:[Boolean,String],default:!1},pushToLast:{type:Boolean,default:!1}},data:function(){return{isDndZone:!0,dndState:"Idle",positionCache:null,lockPosition:!1,dataObject:null,dataObjectContainer:null,registeredContainers:{},shadow:null,mirror:null,transitions:{leaveContainer:{id:null,updated:null},enterContainer:{id:null,updated:null}},dragOffset:{x:0,y:0},intervalID:null,event:null,cursorX:null,cursorY:null,prevX:0,prevY:0,lastAction:0,cursorEl:null,passiveCallback:{passive:!0},scrollInvoked:{top:null,left:null,bottom:null,right:null},activeScroll:!1,shadowPos:{top:0,left:0,pageXOffset:0,pageYOffset:0}}},methods:{routeEvent:function(t){if("mouseup"===t.type||0===t.buttons)this.clear();else if("mousedown"===t.type&&1===t.buttons)this.event=t,this.init(t);else if("mousemove"===t.type&&1===t.buttons&&(this.event=t,this.animateMirror(),!this.nativeScroll)){var e=this.canScroll();for(var n in e)e[n]&&!this.scrollInvoked[n]&&this.scroll(n)}},routeTouchEvent:function(t){if(t.touches.length>1)return!1;if("touchend"===t.type&&"DragTrack"===this.dndState&&(t.preventDefault(),t.stopPropagation()),"touchend"===t.type||t.touches.length>1)t.target.removeEventListener("touchmove",this.routeTouchEvent),t.target.removeEventListener("touchend",this.routeTouchEvent),this.clear();else if("touchstart"===t.type)t.target.addEventListener("touchmove",this.routeTouchEvent),t.target.addEventListener("touchend",this.routeTouchEvent),this.setTouchEvent(t),this.init(t);else if("touchmove"===t.type){if("DragTrack"===this.dndState&&(t.preventDefault(),t.stopPropagation(),this.setTouchEvent(t),this.animateMirror(),!this.nativeScroll)){var e=this.canScroll();for(var n in e)e[n]&&!this.scrollInvoked[n]&&this.scroll(n)}"DragStartBuffer"===this.dndState&&this.setIdleState()}},setTouchEvent:function(t){var e=t.touches[0]?t.touches[0].screenX:0,n=t.touches[0]?t.touches[0].screenY:0,i=t.touches[0]?t.touches[0].clientX:0,a=t.touches[0]?t.touches[0].clientY:0;this.event={screenX:e,screenY:n,clientX:i,clientY:a,target:"touchmove"===t.type?document.elementFromPoint(i,a)||document.body:t.target}},init:function(t){"Idle"===this.dndState&&(this.dndState="DragStartBuffer",window.setTimeout(function(){var e=this;if("DragStartBuffer"===this.dndState){if(this.handleClass&&!t.target.classList.contains(this.handleClass))return void(this.dndState="Idle");var n=this.getValidItem(t.target);if(!n)return void(this.dndState="Idle");this.dataObject=n.dndModel;var i=this.getContainer(n);if(n&&i){this.dataObject=n.dndModel,this.updateDataObjectContainer(),this.dataObjectContainer.$children[0].$vnode.componentInstance._hasMove=!0,this.addListeners(),this.$el.classList.add("dnd-zone"),document.documentElement.style.setProperty("--dnd-transition-duration",this.transitionDuration+"s");var a=n.$el,r=n.$el.getBoundingClientRect();this.animateShadow(r,a),this.animateMirror(r,a),this.nativeScroll||(this.activeScroll=!0),Object.keys(this.registeredContainers).forEach((function(t){e.registeredContainers[t].saveRects()})),this.dataObjectDomElement.classList.add("dnd-dragged"),clearInterval(this.intervalID),this.intervalID=window.setInterval(this.track,this.calcInterval),this.dndState="DragTrack"}else this.dndState="Idle"}}.bind(this),this.dragstartBuffer))},animateShadow:function(t,e){!this.shadow&&t&&e?(this.shadow=e.cloneNode(!0),this.shadow.classList.add("dnd-shadow"),this.shadowOpacity&&this.shadow.style.setProperty("opacity",this.shadowOpacity,"important"),this.shadowMargin&&this.shadow.style.setProperty("margin",this.shadowMargin,"important"),this.shadowPadding&&this.shadow.style.setProperty("padding",this.shadowPadding,"important"),this.setRect(this.shadow,t),this.shadowAnchor().append(this.shadow)):t&&this.setRect(this.shadow,t)},animateMirror:function(t,e){if(!this.mirror&&t&&e){var n=document.createElement(e.parentElement.tagName),i=e.cloneNode(!0);n.append(i),this.cloneAttributes(n,e.parentElement),this.cloneAttributes(i,e),this.dragOffset.x=this.event.clientX-t.left,this.dragOffset.y=this.event.clientY-t.top;var a=this.mirrorMaxWidth/t.width,r=this.mirrorMinHeight/t.height,s=Math.min(1,Math.max(a,r));this.dragOffset.x*=s,this.dragOffset.y*=s,i.style.setProperty("transform","scale("+s+","+s+")"),i.style.setProperty("transform-origin","0 0"),i.style.setProperty("position","fixed","important"),i.classList.add("dnd-mirror"),i.style.setProperty("margin","0","important"),i.style.setProperty("width",t.width+"px","important"),i.style.setProperty("height",t.height+"px","important"),i.style.setProperty("pointer-events","none","important"),i.style.setProperty("visibility","visible","important"),n.style.setProperty("padding","0","important"),n.style.setProperty("visibility","hidden","important"),n.style.setProperty("position","fixed","important"),n.style.setProperty("pointer-events","none","important"),n.style.setProperty("width","0px","important"),n.style.setProperty("height","0px","important"),this.mirror=i,this.mirrorAnchor().append(n)}this.mirror.style.setProperty("top",this.event.clientY-this.dragOffset.y+"px"),this.mirror.style.setProperty("left",this.event.clientX-this.dragOffset.x+"px")},containerUpdated:function(t){var e=this;if(this.transitions.leaveContainer.id===t.dndId&&(this.transitions.leaveContainer.updated=!0),this.transitions.enterContainer.id===t.dndId&&(this.transitions.enterContainer.updated=!0),this.transitions.enterContainer.updated&&this.transitions.leaveContainer.updated){this.registeredContainers[this.transitions.enterContainer.id].saveRects(),this.updateDataObjectContainer();var n=this.dataObjectDomElement;while(n&&n!==this.$el)n.classList.remove("dnd-move"),n=n.parentElement;var i=this.dataObjectDomElement.getBoundingClientRect();this.dataObjectDomElement.classList.add("dnd-dragged"),window.requestAnimationFrame((function(){e.animateShadow(i)})),this.animateContainer(this.registeredContainers[this.transitions.enterContainer.id]),this.transitions.enterContainer.id!==this.transitions.leaveContainer.id&&this.animateContainer(this.registeredContainers[this.transitions.leaveContainer.id])}},animateContainer:function(t){t.newRect.height===t.oldRect.height&&t.newRect.width===t.oldRect.width||(t.setRect(t.oldRect),window.requestAnimationFrame((function(){t.setRect(t.newRect),t.$el.classList.add("dnd-transition"),t.$el.addEventListener("transitionend",(function(){t.$el.classList.remove("dnd-transition"),t.unsetRect()}),{once:!0})})))},track:function(){if(this.event&&"DragTrack"===this.dndState){if(this.lockPosition){var t=Math.abs(this.event.clientX-this.cursorX)+Math.abs(this.event.clientY-this.cursorY);if(t0){this.mirror.style.setProperty("top",e.top+"px","important"),this.mirror.style.setProperty("left",e.left+"px","important"),this.mirror.style.setProperty("width",e.width+"px","important"),this.mirror.style.setProperty("height",e.height+"px","important"),this.mirror.style.setProperty("transform","scale(1,1)","important"),this.mirror.style.setProperty("transition-duration",this.transitionDuration+"s","important"),this.mirror.style.setProperty("transition-property","all","important"),this.mirror.classList.remove("dnd-mirror"),this.shadow.style.setProperty("top",e.top+"px","important"),this.shadow.style.setProperty("left",e.left+"px","important"),this.shadow.style.setProperty("width",e.width+"px","important"),this.shadow.style.setProperty("height",e.height+"px","important");var i=!0;this.mirror.addEventListener("transitionend",function(){i&&(i=!1,this.setIdleState())}.bind(this))}else this.setIdleState()}},setIdleState:function(){var t=this;this.dndState="Idle",this.shadow&&this.shadow.parentElement.removeChild(this.shadow),this.mirror&&this.mirror.parentElement.parentElement.removeChild(this.mirror.parentElement),this.dataObjectDomElement&&this.dataObjectDomElement.classList.remove("dnd-dragged"),this.activeScroll=null,this.dataObject=null,this.dataObjectContainer=null,this.shadow=null,this.mirror=null,this.event=null,this.cursorX=null,this.cursorY=null,this.cursorEl=null,this.prevX=null,this.prevY=null,Object.keys(this.registeredContainers).forEach((function(e){var n=t.registeredContainers[e];n.nr.hasChanged=!1,n.$el.classList.remove("dnd-transition"),n.unsetRect()}))},registerContainer:function(t){this.registeredContainers[t.dndId]=t},unregisterContainer:function(t){delete this.registeredContainers[t.dndId]},updateDataObjectContainer:function(){for(var t=Object.keys(this.registeredContainers),e=0;e-1)return void(this.dataObjectContainer=n)}this.dataObjectContainer=null},scroll:function(t){this.scrollInvoked[t]=window.setInterval(function(){switch(t){case"top":window.scrollTo(window.pageXOffset,window.pageYOffset-this.scrollSpeed(this.event,document.documentElement));break;case"left":window.scrollTo(window.pageXOffset-this.scrollSpeed(this.event,document.documentElement),window.pageYOffset);break;case"bottom":window.scrollTo(window.pageXOffset,window.pageYOffset+this.scrollSpeed(this.event,document.documentElement));break;case"right":window.scrollTo(window.pageXOffset+this.scrollSpeed(this.event,document.documentElement),window.pageYOffset);break}this.shadow.style.setProperty("transition-duration","0s","important"),this.shadow.style.setProperty("top",this.shadowPos.top+this.shadowPos.pageYOffset-window.pageYOffset+"px"),this.canScroll()[t]&&this.activeScroll||(clearInterval(this.scrollInvoked[t]),this.shadow.style.removeProperty("transition-duration"),this.scrollInvoked[t]=null,this.dataObjectContainer.saveRects())}.bind(this),16)},scrollSpeed:function(t,e){return Math.max(0,20+Math.max(0-t.clientY,0-t.clientX,t.clientY-e.clientHeight,t.clientX-e.clientWidth))},canScroll:function(){return{top:this.event.clientY<=20&&window.pageYOffset>0,left:this.event.clientX<=20&&window.pageXOffset>0,bottom:this.event.clientY>=document.documentElement.clientHeight-20&&window.pageYOffset=document.documentElement.clientWidth-20&&window.pageXOffset1)return!1;var e="touchstart"===t.type?"mousedown":"touchend"===t.type?"mouseup":"mousemove",n=new MouseEvent(e,{view:window,bubbles:!0,cancelable:!0,screenX:t.touches[0]?t.touches[0].screenX:0,screenY:t.touches[0]?t.touches[0].screenY:0,clientX:t.touches[0]?t.touches[0].clientX:0,clientY:t.touches[0]?t.touches[0].clientY:0,button:0,buttons:1}),i="touchmove"===t.type?document.elementFromPoint(n.clientX,n.clientY)||document.body:t.target;i.dispatchEvent(n)}else this.clear()},cloneAttributes:function(t,e){Object(St["a"])(e.attributes).forEach((function(e){t.setAttribute("id"===e.nodeName?"data-id":e.nodeName,e.nodeValue)}))},addListeners:function(){var t=this;document.body.addEventListener("mousemove",this.routeEvent),document.addEventListener("mouseup",(function(){t.clear()}),{once:!0})},removeListeners:function(){document.body.removeEventListener("mousemove",this.routeEvent),this.$el.removeEventListener("mouseup",this.routeEvent)},getItem:function(t){while(t&&t.$parent){if(t.isDraggable&&t.dndModel)return t;t=t.$parent}return null},getValidItem:function(t){while(t!==this.$el){if(t.__vue__)return this.getItem(t.__vue__);t=t.parentElement}return null},getContainer:function(t){if(!this.dataObject)return null;while(t&&t.$parent){if(t.isNestable&&t.dndModel&&t.dndZone==this&&!this.isSubset(t.dndModel,this.dataObject))return t;t=t.$parent}return null},getValidContainer:function(){var t=this.cursorEl;while(t&&t!==this.$el&&t!==document.body){if(t.__vue__)return this.getContainer(t.__vue__);t=t.parentElement}return null},isSubset:function(t,e){var n=this;return e.children&&e.children.length>0&&t!==e.children?Object.keys(e.children).some((function(i){n.isSubset(t,e.children[i])})):t===e.children},setRect:function(t,e){var n=t.style;this.shadowPos.left=e.left,this.shadowPos.top=e.top,this.shadowPos.pageXOffset=window.pageXOffset,this.shadowPos.pageYOffset=window.pageYOffset,n.setProperty("width",e.width+"px"),n.setProperty("height",e.height+"px"),n.setProperty("top",e.top+"px"),n.setProperty("left",e.left+"px")}},computed:{dataObjectComponent:function(){return this.dataObjectContainer?this.dataObjectContainer.getDataObjectComponent(this.dataObject)[0]:null},dataObjectDomElement:function(){return this.dataObjectComponent?this.dataObjectComponent.$el:null},cursorContainer:function(){return this.cursorEl&&this.dataObject?this.getValidContainer(this.cursorEl):null},cursorIndex:function(){return this.cursorContainer&&this.cursorX&&this.cursorY&&!this.lockPosition?this.cursorContainer.getIndex(this.cursorX,this.cursorY):null},cursorPosition:function(){return this.cursorContainer?this.cursorContainer.dndId+"-"+this.cursorIndex:null}},watch:{cursorPosition:function(t){if(this.lockPosition)return this.positionCache;if(t&&this.dataObjectContainer){this.positionCache=t;var e=this.cursorContainer;if(!e)return;var n=Math.min(this.dataObjectContainer.dndModel.length-1,this.cursorIndex),i=this.dataObjectContainer.getDataObjectIndex(this.dataObject);if(this.dataObjectContainer==e){var a=Math.min(this.dataObjectContainer.dndModel.length-1,this.cursorIndex),r=this.dataObjectContainer.getDataObjectIndex(this.dataObject);if(r==a)return;if(!this.validate(this.dataObjectComponent,e,this))return;this.$emit("move",{from:{container:e,index:r},to:{container:e,index:a}}),this.dataObjectContainer.removeDataObject(this.dataObject),e.addDataObject(this.dataObject,a),this.lockPosition=!0,e.nr.hasChanged=!0,this.transitions.leaveContainer={id:this.dataObjectContainer.dndId,updated:!1},this.transitions.enterContainer={id:e.dndId,updated:!1}}else{if(e.dndZone!==this.dataObjectContainer.dndZone)return;if(!this.validate(this.dataObjectComponent,e,this))return;this.$emit("move",{from:{container:this.dataObjectContainer,index:i},to:{container:e,index:n}}),this.dataObjectContainer.removeDataObject(this.dataObject),this.dataObjectContainer.nr.hasChanged=!0,e.addDataObject(this.dataObject,this.cursorIndex,this.pushToLast),e.nr.hasChanged=!0,this.lockPosition=!0,this.transitions.leaveContainer={id:this.dataObjectContainer.dndId,updated:!1},this.transitions.enterContainer={id:e.dndId,updated:!1}}}}},mounted:function(){document.documentElement.style.setProperty("--dnd-transition-duration",this.transitionDuration+"s"),this.$el.addEventListener("mousedown",this.routeEvent),this.$el.addEventListener("touchstart",this.routeTouchEvent),this.$el.addEventListener("drag",this.muteEvent,!1),this.$el.addEventListener("dragstart",this.muteEvent,!1)},beforeDestroy:function(){this.$el.removeEventListener("mousedown",this.routeEvent),this.$el.removeEventListener("touchstart",this.routeTouchEvent),this.$el.removeEventListener("drag",this.muteEvent,!1),this.$el.removeEventListener("dragstart",this.muteEvent,!1)},render:function(){return this.$slots.default}}),t.component("DndContainer",{props:{tag:{type:String,default:"div"},dndId:{type:[Number,String],default:null},dndModel:{type:Array,default:function(){return[]}},containerTransfer:{type:Object,default:function(){return{}}},verticalSearch:{type:Boolean,default:!1},isNestable:{type:Boolean,default:!0}},data:function(){return{itemCount:null,oldRect:null,newRect:null,dndZone:null,processing:!1,nr:{rects:null,hasChanged:!1,hasUpdated:!1}}},render:function(t){return t("transition-group",{props:{tag:this.tag,name:"dnd"},class:this.class,style:this.style,attrs:this.attrs},this.$slots.default)},methods:{addDataObject:function(t,e,n){0===this.dndModel.length||e>this.dndModel.length-1||n?this.dndModel.push(t):this.dndModel.splice(e,0,t)},removeDataObject:function(t){var e=this.dndModel.indexOf(t);this.dndModel.splice(e,1)},getDataObjectIndex:function(t){return this.dndModel.indexOf(t)},getDataObjectComponent:function(t){return this.$children[0].$children.filter((function(e){return e.dndModel===t}))},getRectangleMap:function(t){var e=[],n=1/0,i=-1/0,a=[],r=[],s=[];if(this.verticalSearch)for(var o=0;ot[d+1].right;l?(r.push(t[d].right),e.push([n,i]),a.push([],r),s.push(d+1-r.length,d+1-r.length),r=[],n=d===t.length-1?1/0:t[d+1].bottom):r.push((t[d].right+t[d+1].left)/2)}a.push([]),s.push(t.length)}return{map:e.flat(),rows:a,pointers:s}},getIndex:function(t,e){var n=this.getRectangleMap(this.nr.rects);if(this.verticalSearch)return this.binarySearch(n.map,e);var i=this.binarySearch(n.map,e);return this.binarySearch(n.rows[i],t)+n.pointers[i]},getDndZone:function(t){while(t.$parent){if(t.isDndZone)return t;t=t.$parent}return null},register:function(){this.dndZone=this.getDndZone(this),this.dndZone&&this.dndZone.registerContainer(this)},unregister:function(){this.dndZone&&this.dndZone.unregisterContainer(this,!0)},binarySearch:function(t,e){var n=0,i=t.length-1,a=t.length;while(n<=i){var r=Math.floor((n+i)/2);t[r]>e?(a=r,i=r-1):n=r+1}return a},setRect:function(t){this.$el.style.setProperty("height",t.height+"px","important"),this.$el.style.setProperty("width",t.width+"px","important")},unsetRect:function(){this.$el.style.removeProperty("height"),this.$el.style.removeProperty("width")},saveRects:function(t){var e=this,n=Object(St["a"])(this.$el.children);if(!t)for(var i=0;i ({
75 | // Application State
76 | isDndZone:true,
77 | dndState: 'Idle',
78 | positionCache:null,
79 | lockPosition:false,
80 | // Data Management
81 | dataObject:null, // Vue Observable Object
82 | dataObjectContainer:null, // Vue dnd-container Component
83 | registeredContainers:{}, // Vue dnd-container Registry
84 | // Animation Management
85 | shadow: null,
86 | mirror: null,
87 | transitions:{
88 | leaveContainer:{
89 | id:null,
90 | updated:null
91 | },
92 | enterContainer:{
93 | id:null,
94 | updated:null
95 | },
96 | },
97 | // shadowCache:null,
98 | dragOffset:{
99 | x:0,
100 | y:0
101 | },
102 | // Event Management
103 | intervalID: null,
104 | event: null,
105 | cursorX: null,
106 | cursorY: null,
107 | prevX:0,
108 | prevY:0,
109 | lastAction:0,
110 | cursorEl:null,
111 | passiveCallback:{
112 | passive:true
113 | },
114 | // Scroll Management
115 | scrollInvoked: {
116 | top: null,
117 | left: null,
118 | bottom: null,
119 | right: null
120 | },
121 | activeScroll:false,
122 | shadowPos:{
123 | top:0,
124 | left:0,
125 | pageXOffset:0,
126 | pageYOffset:0
127 | }
128 | }),
129 | methods:{
130 | // Event Management
131 | // React to mouse events
132 | routeEvent(e){
133 | if ( (e.type === 'mouseup') || (e.buttons === 0) ){
134 | this.clear()
135 | }else if ( (e.type === 'mousedown') && (e.buttons === 1) ){
136 | this.event = e
137 | this.init(e)
138 | }else if ( (e.type === 'mousemove') && (e.buttons === 1)){
139 | this.event = e
140 | this.animateMirror()
141 | if (!this.nativeScroll){
142 | let scrollState = this.canScroll()
143 | for (let direction in scrollState) {
144 | if ((scrollState[direction]) && (!this.scrollInvoked[direction])) {
145 | this.scroll(direction)
146 | }
147 | }
148 | }
149 | }
150 | },
151 | // React to touch events
152 | routeTouchEvent(e){
153 | if (e.touches.length > 1) {
154 | return false
155 | }
156 | if(e.type === 'touchend' && this.dndState === 'DragTrack'){
157 | e.preventDefault()
158 | e.stopPropagation()
159 | }
160 | if (e.type === 'touchend' || e.touches.length > 1){
161 | e.target.removeEventListener('touchmove', this.routeTouchEvent)
162 | e.target.removeEventListener('touchend', this.routeTouchEvent)
163 | this.clear()
164 | }else if (e.type === 'touchstart'){
165 | e.target.addEventListener('touchmove', this.routeTouchEvent)
166 | e.target.addEventListener('touchend', this.routeTouchEvent)
167 | this.setTouchEvent(e)
168 | this.init(e)
169 | }else if(e.type === 'touchmove'){
170 | if(this.dndState === 'DragTrack'){
171 | e.preventDefault()
172 | e.stopPropagation()
173 | this.setTouchEvent(e)
174 | this.animateMirror()
175 | if (!this.nativeScroll){
176 | let scrollState = this.canScroll()
177 | for (let direction in scrollState) {
178 | if ((scrollState[direction]) && (!this.scrollInvoked[direction])) {
179 | this.scroll(direction)
180 | }
181 | }
182 | }
183 | }
184 | if(this.dndState === 'DragStartBuffer'){
185 | this.setIdleState()
186 | }
187 | }
188 | },
189 | setTouchEvent(e){
190 | let screenX = e.touches[0] ? e.touches[0].screenX : 0
191 | let screenY = e.touches[0] ? e.touches[0].screenY : 0
192 | let clientX = e.touches[0] ? e.touches[0].clientX : 0
193 | let clientY = e.touches[0] ? e.touches[0].clientY : 0
194 | this.event = {
195 | screenX: screenX,
196 | screenY: screenY,
197 | clientX: clientX,
198 | clientY: clientY,
199 | target:(e.type === 'touchmove') ? document.elementFromPoint(clientX, clientY) || document.body : e.target
200 | }
201 | },
202 | // Start DND Event
203 | init(e){
204 | if (this.dndState === 'Idle'){
205 | this.dndState = 'DragStartBuffer'
206 | window.setTimeout(function () {
207 | if ( this.dndState === 'DragStartBuffer' ){
208 | if (this.handleClass && !e.target.classList.contains(this.handleClass)){
209 | this.dndState = 'Idle'
210 | return
211 | }
212 | let draggable = this.getValidItem(e.target)
213 | if (draggable){
214 | this.dataObject = draggable.dndModel
215 | }else{
216 | this.dndState = 'Idle'
217 | return
218 | }
219 | let nestable = this.getContainer(draggable)
220 | if (draggable && nestable){
221 | this.dataObject = draggable.dndModel
222 | this.updateDataObjectContainer()
223 | this.dataObjectContainer.$children[0].$vnode.componentInstance._hasMove = true
224 | this.addListeners()
225 | this.$el.classList.add('dnd-zone')
226 | document.documentElement.style.setProperty('--dnd-transition-duration', this.transitionDuration + 's')
227 | let source = draggable.$el
228 | let rect = draggable.$el.getBoundingClientRect()
229 | this.animateShadow(rect,source)
230 | this.animateMirror(rect,source)
231 | if (!this.nativeScroll){
232 | this.activeScroll = true
233 | }
234 | Object.keys(this.registeredContainers).forEach(key=>{
235 | this.registeredContainers[key].saveRects()
236 | })
237 | this.dataObjectDomElement.classList.add('dnd-dragged')
238 | clearInterval(this.intervalID)
239 | this.intervalID = window.setInterval(this.track, this.calcInterval)
240 | this.dndState = 'DragTrack'
241 | }else{
242 | this.dndState = 'Idle'
243 | }
244 | }
245 | }.bind(this),this.dragstartBuffer)
246 | }
247 | },
248 | animateShadow(rect,source){
249 | if (!this.shadow && rect && source){
250 | this.shadow = source.cloneNode(true)
251 | this.shadow.classList.add('dnd-shadow')
252 | if (this.shadowOpacity){
253 | this.shadow.style.setProperty('opacity', this.shadowOpacity, 'important')
254 | }
255 | if (this.shadowMargin){
256 | this.shadow.style.setProperty('margin', this.shadowMargin, 'important')
257 | }
258 | if (this.shadowPadding){
259 | this.shadow.style.setProperty('padding', this.shadowPadding, 'important')
260 | }
261 | this.setRect(this.shadow,rect)
262 | this.shadowAnchor().append(this.shadow)
263 | }else if(rect){
264 | this.setRect(this.shadow,rect)
265 | }
266 | },
267 | animateMirror(rect,source){
268 | if (!this.mirror && rect && source){
269 | // Mirror Element
270 | let mirrorWrapper = document.createElement(source.parentElement.tagName)
271 | let mirror = source.cloneNode(true)
272 | mirrorWrapper.append(mirror)
273 | // Clone attributes from original elements to mirror and mirror wrapper
274 | this.cloneAttributes(mirrorWrapper,source.parentElement)
275 | this.cloneAttributes(mirror,source)
276 | // Track offset between pointer location and element
277 | this.dragOffset.x = this.event.clientX - rect.left
278 | this.dragOffset.y = this.event.clientY - rect.top
279 | // Scale the mirror so it wouldnt take too much space
280 | let scaleX = this.mirrorMaxWidth / rect.width
281 | let scaleY = this.mirrorMinHeight / rect.height
282 | let scale = Math.min(1, Math.max(scaleX, scaleY))
283 | // Update dragOffset to scale
284 | this.dragOffset.x *= scale
285 | this.dragOffset.y *= scale
286 | // Set mirror class and style attributes
287 | mirror.style.setProperty('transform', 'scale(' + scale + ',' + scale + ')')
288 | mirror.style.setProperty('transform-origin', '0 0')
289 | mirror.style.setProperty('position', 'fixed', 'important')
290 | mirror.classList.add('dnd-mirror')
291 | mirror.style.setProperty('margin', '0', 'important')
292 | mirror.style.setProperty('width', rect.width + 'px', 'important')
293 | mirror.style.setProperty('height', rect.height + 'px', 'important')
294 | mirror.style.setProperty('pointer-events', 'none', 'important')
295 | mirror.style.setProperty('visibility', 'visible', 'important')
296 | mirrorWrapper.style.setProperty('padding', '0', 'important')
297 | mirrorWrapper.style.setProperty('visibility', 'hidden', 'important')
298 | mirrorWrapper.style.setProperty('position', 'fixed', 'important')
299 | mirrorWrapper.style.setProperty('pointer-events', 'none', 'important')
300 | mirrorWrapper.style.setProperty('width', '0px', 'important')
301 | mirrorWrapper.style.setProperty('height', '0px', 'important')
302 | this.mirror = mirror
303 | this.mirrorAnchor().append(mirrorWrapper)
304 | }
305 | // Update Mirror Location
306 | this.mirror.style.setProperty('top', (this.event.clientY - this.dragOffset.y) + 'px')
307 | this.mirror.style.setProperty('left', (this.event.clientX - this.dragOffset.x) + 'px')
308 | },
309 | containerUpdated(container){
310 | // Animate shadow
311 | if (this.transitions.leaveContainer.id === container.dndId){
312 | this.transitions.leaveContainer.updated = true
313 | }
314 | if (this.transitions.enterContainer.id === container.dndId){
315 | this.transitions.enterContainer.updated = true
316 | }
317 | if (this.transitions.enterContainer.updated && this.transitions.leaveContainer.updated){
318 | this.registeredContainers[this.transitions.enterContainer.id].saveRects()
319 | this.updateDataObjectContainer()
320 | let el = this.dataObjectDomElement
321 | while (el && el !== this.$el){
322 | el.classList.remove('dnd-move')
323 | el = el.parentElement
324 | }
325 | let rect = this.dataObjectDomElement.getBoundingClientRect()
326 | this.dataObjectDomElement.classList.add('dnd-dragged')
327 | window.requestAnimationFrame(()=>{
328 | this.animateShadow(rect)
329 | })
330 | this.animateContainer(this.registeredContainers[this.transitions.enterContainer.id])
331 | if ( this.transitions.enterContainer.id !== this.transitions.leaveContainer.id){
332 | this.animateContainer(this.registeredContainers[this.transitions.leaveContainer.id])
333 | }
334 | }
335 | },
336 | animateContainer(container){
337 | if ( (container.newRect.height !== container.oldRect.height) || (container.newRect.width !== container.oldRect.width) ){
338 | container.setRect(container.oldRect)
339 | window.requestAnimationFrame(()=>{
340 | container.setRect(container.newRect)
341 | container.$el.classList.add('dnd-transition')
342 | container.$el.addEventListener('transitionend',()=>{
343 | container.$el.classList.remove('dnd-transition')
344 | container.unsetRect()
345 | },{once:true})
346 | })
347 | }
348 | },
349 | track(){
350 | if (!this.event){
351 | return
352 | }
353 | if (this.dndState !== 'DragTrack'){
354 | return
355 | }
356 | if (this.lockPosition){
357 | let distance = Math.abs(this.event.clientX - this.cursorX) + Math.abs(this.event.clientY - this.cursorY)
358 | if (distance < this.lockDistance){
359 | return
360 | }else{
361 | this.lockPosition = false
362 | }
363 | }
364 | this.cursorEl = this.event.target
365 | this.cursorX = this.event.clientX
366 | this.cursorY = this.event.clientY
367 | },
368 | clear(){
369 | if (this.dndState !== 'Idle'){
370 | this.removeListeners()
371 | this.$el.classList.remove('dnd-zone')
372 | document.documentElement.style.removeProperty('--dnd-transition-duration')
373 | if (!this.dataObjectDomElement){
374 | this.setIdleState()
375 | return
376 | }
377 | let mirrorRect = this.mirror.getBoundingClientRect()
378 | this.dataObjectDomElement.classList.remove('dnd-move')
379 | let finalRect = this.dataObjectDomElement.getBoundingClientRect()
380 | let offset = Math.abs(mirrorRect.top - finalRect.top) + Math.abs(mirrorRect.left - finalRect.left) +
381 | Math.abs(mirrorRect.width - finalRect.width) + Math.abs(mirrorRect.height - finalRect.height)
382 | if (offset > 0){
383 | this.mirror.style.setProperty('top',finalRect.top + 'px','important')
384 | this.mirror.style.setProperty('left',finalRect.left + 'px','important')
385 | this.mirror.style.setProperty('width',finalRect.width + 'px','important')
386 | this.mirror.style.setProperty('height',finalRect.height + 'px','important')
387 | this.mirror.style.setProperty('transform', 'scale(1,1)', 'important')
388 | this.mirror.style.setProperty('transition-duration',this.transitionDuration + 's','important')
389 | this.mirror.style.setProperty('transition-property','all','important')
390 | this.mirror.classList.remove('dnd-mirror')
391 | this.shadow.style.setProperty('top',finalRect.top + 'px','important')
392 | this.shadow.style.setProperty('left',finalRect.left + 'px','important')
393 | this.shadow.style.setProperty('width',finalRect.width + 'px','important')
394 | this.shadow.style.setProperty('height',finalRect.height + 'px','important')
395 | let flag = true
396 | this.mirror.addEventListener('transitionend',function(){
397 | if (flag) {
398 | flag = false
399 | this.setIdleState()
400 | }
401 | }.bind(this))
402 | }else{
403 | this.setIdleState()
404 | }
405 | }
406 | },
407 | setIdleState(){
408 | this.dndState = 'Idle'
409 | if (this.shadow){
410 | this.shadow.parentElement.removeChild(this.shadow)
411 | }
412 | if (this.mirror){
413 | this.mirror.parentElement.parentElement.removeChild(this.mirror.parentElement)
414 | }
415 | if (this.dataObjectDomElement){
416 | this.dataObjectDomElement.classList.remove('dnd-dragged')
417 | }
418 | this.activeScroll = null
419 | this.dataObject = null
420 | this.dataObjectContainer = null
421 | this.shadow = null
422 | this.mirror = null
423 | this.event = null
424 | this.cursorX = null
425 | this.cursorY = null
426 | this.cursorEl = null
427 | this.prevX = null
428 | this.prevY = null
429 | Object.keys(this.registeredContainers).forEach(key=>{
430 | let container = this.registeredContainers[key]
431 | container.nr.hasChanged = false
432 | container.$el.classList.remove('dnd-transition')
433 | container.unsetRect()
434 | })
435 | },
436 | registerContainer(vnode){
437 | this.registeredContainers[vnode.dndId] = vnode
438 | },
439 | unregisterContainer(vnode){
440 | delete(this.registeredContainers[vnode.dndId])
441 | },
442 | updateDataObjectContainer(){
443 | let keys = Object.keys(this.registeredContainers)
444 | for (let i=0;i -1){
447 | this.dataObjectContainer = container
448 | return
449 | }
450 | }
451 | this.dataObjectContainer = null
452 | },
453 | // Scroll Controller
454 | scroll(direction){
455 | this.scrollInvoked[direction] = window.setInterval(function () {
456 | switch (direction) {
457 | case "top":
458 | window.scrollTo(window.pageXOffset, window.pageYOffset - this.scrollSpeed(this.event,document.documentElement))
459 | break;
460 | case "left":
461 | window.scrollTo(window.pageXOffset - this.scrollSpeed(this.event,document.documentElement), window.pageYOffset)
462 | break;
463 | case "bottom":
464 | window.scrollTo(window.pageXOffset, window.pageYOffset + this.scrollSpeed(this.event,document.documentElement))
465 | break;
466 | case "right":
467 | window.scrollTo(window.pageXOffset + this.scrollSpeed(this.event,document.documentElement), window.pageYOffset)
468 | break
469 | }
470 | this.shadow.style.setProperty('transition-duration','0s','important')
471 | this.shadow.style.setProperty('top',(this.shadowPos.top + this.shadowPos.pageYOffset - window.pageYOffset) + 'px')
472 | if ((!this.canScroll()[direction]) || (!this.activeScroll)) {
473 | clearInterval(this.scrollInvoked[direction])
474 | this.shadow.style.removeProperty('transition-duration')
475 | this.scrollInvoked[direction] = null
476 | this.dataObjectContainer.saveRects()
477 | }
478 | }.bind(this), 16)
479 | },
480 | scrollSpeed(e, el) {
481 | return Math.max(0, 20 + (Math.max(0 - e.clientY, 0 - e.clientX, e.clientY - el.clientHeight, e.clientX - el.clientWidth)))
482 | },
483 | canScroll(){
484 | return {
485 | top: (this.event.clientY <= 20) && (window.pageYOffset > 0),
486 | left: (this.event.clientX <= 20) && (window.pageXOffset > 0),
487 | bottom: (this.event.clientY >= document.documentElement.clientHeight - 20) && (window.pageYOffset < document.documentElement.scrollHeight - document.documentElement.clientHeight),
488 | right: (this.event.clientX >= document.documentElement.clientWidth - 20) && (window.pageXOffset < document.documentElement.scrollWidth - document.documentElement.clientWidth)
489 | }
490 | },
491 | // Helpers
492 | // Mute event
493 | muteEvent(e){
494 | e.preventDefault()
495 | e.stopPropagation()
496 | return false
497 | },
498 | // Convert touch events to mouse events
499 | simulateMouseEvent(e){
500 | if(e.type === 'touchstart'){
501 | e.target.addEventListener('touchmove', this.simulateMouseEvent)
502 | e.target.addEventListener('touchend', this.simulateMouseEvent)
503 | }
504 | if(e.type === 'touchend' && this.dndState === 'DragTrack'){
505 | e.preventDefault()
506 | e.stopPropagation()
507 | }
508 | if(e.type === 'touchend'){
509 | this.clear()
510 | return
511 | }
512 | if(e.type === 'touchmove' && this.dndState === 'DragTrack'){
513 | e.preventDefault()
514 | e.stopPropagation()
515 | }
516 | if(e.type === 'touchmove' && this.dndState === 'DragStartBuffer'){
517 | this.setIdleState()
518 | }
519 | if (e.touches.length > 1) {
520 | return false
521 | }
522 | let simulatedType = (e.type === 'touchstart') ? 'mousedown' : (e.type === 'touchend') ? 'mouseup' : 'mousemove'
523 | let simulatedEvent = new MouseEvent(simulatedType, {
524 | 'view': window,
525 | 'bubbles': true,
526 | 'cancelable': true,
527 | 'screenX': (e.touches[0]) ? e.touches[0].screenX : 0,
528 | 'screenY': (e.touches[0]) ? e.touches[0].screenY : 0,
529 | 'clientX': (e.touches[0]) ? e.touches[0].clientX : 0,
530 | 'clientY': (e.touches[0]) ? e.touches[0].clientY : 0,
531 | 'button': 0,
532 | 'buttons': 1
533 | })
534 | let eventTarget = (e.type === 'touchmove') ? document.elementFromPoint(simulatedEvent.clientX, simulatedEvent.clientY) || document.body : e.target
535 | eventTarget.dispatchEvent(simulatedEvent)
536 | },
537 | // Clone DOM element attributes to another element
538 | cloneAttributes(target, source) {
539 | [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName === "id" ? 'data-id' : attr.nodeName ,attr.nodeValue) })
540 | },
541 | // Add Event Listeners
542 | addListeners(){
543 | document.body.addEventListener('mousemove',this.routeEvent)
544 | document.addEventListener("mouseup",() => {
545 | this.clear()
546 | },
547 | { once: true }
548 | )
549 | },
550 | // Remove Event Listeners
551 | removeListeners(){
552 | document.body.removeEventListener('mousemove',this.routeEvent)
553 | this.$el.removeEventListener('mouseup',this.routeEvent)
554 | },
555 | // Get closest dnd-item component from vue component
556 | getItem(component){
557 | while (component && component.$parent){
558 | if (component.isDraggable && component.dndModel){
559 | return component
560 | }else{
561 | component = component.$parent
562 | }
563 | }
564 | return null
565 | },
566 | // Get closet valid dnd-item component from DOM element
567 | getValidItem(el){
568 | while (el !== this.$el){
569 | if (el.__vue__){
570 | return this.getItem(el.__vue__)
571 | }else{
572 | el = el.parentElement
573 | }
574 | }
575 | return null
576 | },
577 | // Get closest dnd-container component from vue component
578 | getContainer(component){
579 | if (!this.dataObject){
580 | return null
581 | }
582 | while (component && component.$parent){
583 | if (component.isNestable && component.dndModel && component.dndZone == this && !this.isSubset(component.dndModel,this.dataObject)){
584 | return component
585 | }else{
586 | component = component.$parent
587 | }
588 | }
589 | return null
590 | },
591 | // Get closet valid dnd-container component from DOM element
592 | getValidContainer(){
593 | let el = this.cursorEl
594 | while (el && el !== this.$el && el !== document.body){
595 | if (el.__vue__){
596 | return this.getContainer(el.__vue__)
597 | }else{
598 | el = el.parentElement
599 | }
600 | }
601 | return null
602 | },
603 | // Check if a dnd-container is a contained by a data object or its decendants
604 | isSubset(dataObjectContainer,dataObject){
605 | if ( dataObject.children && dataObject.children.length > 0 ){
606 | if ( dataObjectContainer !== dataObject.children ){
607 | return Object.keys(dataObject.children).some( key=>{
608 | this.isSubset (dataObjectContainer,dataObject.children[key])
609 | })
610 | }
611 | }
612 | return dataObjectContainer === dataObject.children
613 | },
614 | // Set width, height, top, left properties on a DOM element
615 | setRect(el,rect){
616 | let s = el.style
617 | this.shadowPos.left = rect.left
618 | this.shadowPos.top = rect.top
619 | this.shadowPos.pageXOffset = window.pageXOffset
620 | this.shadowPos.pageYOffset = window.pageYOffset
621 | s.setProperty('width', rect.width + 'px')
622 | s.setProperty('height', rect.height + 'px')
623 | s.setProperty('top', rect.top + 'px')
624 | s.setProperty('left', rect.left + 'px')
625 | },
626 | },
627 | computed:{
628 | // DATAOBJECT
629 | // dnd-item component containing the data object
630 | dataObjectComponent(){
631 | if (this.dataObjectContainer){
632 | return this.dataObjectContainer.getDataObjectComponent(this.dataObject)[0]
633 | }
634 | return null
635 | },
636 | // Data object DOM element
637 | dataObjectDomElement(){
638 | if (this.dataObjectComponent){
639 | return this.dataObjectComponent.$el
640 | }
641 | return null
642 | },
643 | // CURSOR
644 | // Closest valid dnd-container from cursor location
645 | cursorContainer(){
646 | if (this.cursorEl && this.dataObject){
647 | return this.getValidContainer(this.cursorEl)
648 | }
649 | return null
650 | },
651 | // Get cursor index inside dnd-container
652 | cursorIndex(){
653 | if (this.cursorContainer && this.cursorX && this.cursorY && !this.lockPosition){
654 | return this.cursorContainer.getIndex(this.cursorX,this.cursorY)
655 | }
656 | return null
657 | },
658 | // Combined value of cursor container and index
659 | cursorPosition(){
660 | if (this.cursorContainer){
661 | return this.cursorContainer.dndId + '-' + this.cursorIndex
662 | }
663 | return null
664 | },
665 | },
666 | watch: {
667 | cursorPosition(newVal) {
668 | if (this.lockPosition){
669 | return this.positionCache
670 | }
671 | if (newVal && this.dataObjectContainer){
672 | this.positionCache = newVal
673 | let newContainer = this.cursorContainer
674 | if (!newContainer){
675 | return
676 | }
677 | let index = Math.min(this.dataObjectContainer.dndModel.length - 1,this.cursorIndex)
678 | let oldIndex = this.dataObjectContainer.getDataObjectIndex(this.dataObject)
679 | if ( this.dataObjectContainer == newContainer ){
680 | let index = Math.min(this.dataObjectContainer.dndModel.length - 1,this.cursorIndex)
681 | let oldIndex = this.dataObjectContainer.getDataObjectIndex(this.dataObject)
682 | if ( oldIndex == index ){
683 | return
684 | }else{
685 | if ( !this.validate(this.dataObjectComponent,newContainer,this) ){
686 | return
687 | }
688 | this.$emit('move',{
689 | from:{
690 | container:newContainer,
691 | index:oldIndex
692 | },
693 | to:{
694 | container:newContainer,
695 | index:index
696 | }
697 | })
698 | this.dataObjectContainer.removeDataObject(this.dataObject)
699 | newContainer.addDataObject(this.dataObject,index)
700 | this.lockPosition = true
701 | newContainer.nr.hasChanged = true
702 | this.transitions.leaveContainer = {
703 | id:this.dataObjectContainer.dndId,
704 | updated:false
705 | }
706 | this.transitions.enterContainer = {
707 | id:newContainer.dndId,
708 | updated:false
709 | }
710 | }
711 | }else{
712 | // Same dnd-zone restriction
713 | if ( newContainer.dndZone !== this.dataObjectContainer.dndZone){
714 | return
715 | }
716 | // Drop Validation Hook
717 | if ( !this.validate(this.dataObjectComponent,newContainer,this) ){
718 | return
719 | }
720 | this.$emit('move',{
721 | from:{
722 | container:this.dataObjectContainer,
723 | index:oldIndex
724 | },
725 | to:{
726 | container:newContainer,
727 | index:index
728 | }
729 | })
730 | this.dataObjectContainer.removeDataObject(this.dataObject)
731 | this.dataObjectContainer.nr.hasChanged = true
732 | newContainer.addDataObject(this.dataObject,this.cursorIndex,this.pushToLast)
733 | newContainer.nr.hasChanged = true
734 | this.lockPosition = true
735 | this.transitions.leaveContainer = {
736 | id:this.dataObjectContainer.dndId,
737 | updated:false
738 | }
739 | this.transitions.enterContainer = {
740 | id:newContainer.dndId,
741 | updated:false
742 | }
743 | }
744 | }
745 | }
746 | },
747 | mounted(){
748 | document.documentElement.style.setProperty('--dnd-transition-duration', this.transitionDuration + 's')
749 | this.$el.addEventListener('mousedown',this.routeEvent)
750 | this.$el.addEventListener('touchstart', this.routeTouchEvent)
751 | this.$el.addEventListener('drag', this.muteEvent, false)
752 | this.$el.addEventListener('dragstart', this.muteEvent, false)
753 | },
754 | beforeDestroy(){
755 | this.$el.removeEventListener('mousedown',this.routeEvent)
756 | this.$el.removeEventListener('touchstart', this.routeTouchEvent)
757 | this.$el.removeEventListener('drag', this.muteEvent, false)
758 | this.$el.removeEventListener('dragstart', this.muteEvent, false)
759 | },
760 | render: function () {
761 | return this.$slots.default
762 | }
763 | })
764 | Vue.component('DndContainer',{
765 | props: {
766 | tag:{
767 | type: String,
768 | default: 'div'
769 | },
770 | dndId:{
771 | type: [Number,String],
772 | default: null
773 | },
774 | dndModel: {
775 | type: Array,
776 | default: function(){
777 | return []
778 | },
779 | },
780 | containerTransfer:{
781 | type: Object,
782 | default: function(){
783 | return {}
784 | }
785 | },
786 | verticalSearch: {
787 | type: Boolean,
788 | default: false,
789 | },
790 | isNestable: {
791 | type: Boolean,
792 | default: true,
793 | },
794 | },
795 | data: () => ({
796 | itemCount:null,
797 | oldRect:null,
798 | newRect:null,
799 | dndZone:null,
800 | processing:false,
801 | nr:{
802 | rects:null,
803 | hasChanged:false,
804 | hasUpdated:false
805 | }
806 | }),
807 | render:function(h) {
808 | return h('transition-group',{
809 | props:{
810 | tag:this.tag,
811 | name:'dnd'
812 | },
813 | class:this.class,
814 | style:this.style,
815 | attrs:this.attrs,
816 | },this.$slots.default)
817 | },
818 | methods:{
819 | // Data Management
820 | addDataObject(dataObject,index,edge){
821 | if (this.dndModel.length === 0){
822 | this.dndModel.push(dataObject)
823 | }else if ( index > this.dndModel.length - 1 ){
824 | this.dndModel.push(dataObject)
825 | }else if ( edge ){
826 | this.dndModel.push(dataObject)
827 | }
828 | else{
829 | this.dndModel.splice(index,0,dataObject)
830 | }
831 | },
832 | removeDataObject(dataObject){
833 | let index = this.dndModel.indexOf(dataObject)
834 | this.dndModel.splice(index,1)
835 | },
836 | getDataObjectIndex(dataObject){
837 | return this.dndModel.indexOf(dataObject)
838 | },
839 | getDataObjectComponent(dataObject){
840 | return this.$children[0].$children.filter(child=>{
841 | return child.dndModel === dataObject
842 | })
843 | },
844 | // DND management
845 | getRectangleMap(rectangles){
846 | let map = []
847 | let rowTop = Infinity
848 | let rowBottom = -Infinity
849 | let rows = []
850 | let row = []
851 | let pointers = []
852 | if (this.verticalSearch){
853 | for (let i=0; i < rectangles.length; i++){
854 | map.push(rectangles[i].bottom)
855 | }
856 | }else{
857 | for (let i=0; i < rectangles.length; i++){
858 | rowTop = Math.min(rowTop,rectangles[i].top)
859 | rowBottom = Math.max(rowBottom,rectangles[i].bottom)
860 | let isLastInRow = (i === rectangles.length - 1) || (rectangles[i].right > rectangles[i+1].right)
861 | if (isLastInRow){
862 | row.push( rectangles[i].right )
863 | map.push([rowTop,rowBottom])
864 | rows.push([],row)
865 | pointers.push(i + 1 - row.length,i + 1 - row.length)
866 | row = []
867 | rowTop = ( i === rectangles.length - 1 ) ? Infinity : rectangles[i+1].bottom
868 | }else{
869 | row.push( (rectangles[i].right + rectangles[i+1].left) / 2 )
870 | }
871 | }
872 | rows.push([])
873 | pointers.push(rectangles.length)
874 | }
875 | return {
876 | map: map.flat(),
877 | rows: rows,
878 | pointers: pointers
879 | }
880 | },
881 | getIndex(x,y){
882 | let rectangleMap = this.getRectangleMap(this.nr.rects)
883 | if (this.verticalSearch){
884 | return this.binarySearch(rectangleMap.map,y)
885 | }else{
886 | let row = this.binarySearch(rectangleMap.map,y)
887 | return this.binarySearch(rectangleMap.rows[row],x) + rectangleMap.pointers[row]
888 | }
889 | },
890 | getDndZone(vnode){
891 | while (vnode.$parent){
892 | if (vnode.isDndZone){
893 | return vnode
894 | }else{
895 | vnode = vnode.$parent
896 | }
897 | }
898 | return null
899 | },
900 | register(){
901 | this.dndZone = this.getDndZone(this)
902 | if (this.dndZone){
903 | this.dndZone.registerContainer(this)
904 | }
905 | },
906 | unregister(){
907 | if (this.dndZone){
908 | this.dndZone.unregisterContainer(this,true)
909 | }
910 | },
911 | //Helpers
912 | binarySearch(arr,x){
913 | let start = 0, end = arr.length-1, index = arr.length
914 | while (start <= end){
915 | let mid = Math.floor((start + end) / 2)
916 | if (arr[mid] > x){
917 | index = mid
918 | end = mid - 1
919 | }else{
920 | start = mid + 1
921 | }
922 | }
923 | return index
924 | },
925 | setRect(rect){
926 | this.$el.style.setProperty('height',rect.height + 'px','important')
927 | this.$el.style.setProperty('width',rect.width + 'px','important')
928 | },
929 | unsetRect(){
930 | this.$el.style.removeProperty('height')
931 | this.$el.style.removeProperty('width')
932 | },
933 | saveRects(skip){
934 | let els = [...this.$el.children]
935 | if (!skip){
936 | for (let i=0;i{
939 | this.saveRects(true)
940 | },{ once: true })
941 | return
942 | }
943 | }
944 | }
945 | this.nr.rects = els
946 | .map(child=>this.getValidItem(child))
947 | .filter(child=>child)
948 | .map(child=>child.$el.getBoundingClientRect())
949 | },
950 | // Get closest dnd-item component from vue component
951 | getItem(component){
952 | while (component && component.$parent){
953 | if (component.isDraggable && component.dndModel){
954 | return component
955 | }else{
956 | component = component.$parent
957 | }
958 | }
959 | return null
960 | },
961 | // Get closet valid dnd-item component from DOM element
962 | getValidItem(el){
963 | while (el !== this.$el){
964 | if (el.__vue__){
965 | return this.getItem(el.__vue__)
966 | }else{
967 | el = el.parentElement
968 | }
969 | }
970 | return null
971 | },
972 | },
973 | mounted(){
974 | this.itemCount = this.dndModel.length
975 | this.register()
976 | this.oldRect = this.$el.getBoundingClientRect()
977 | this.newRect = this.oldRect
978 | },
979 | beforeUpdate(){
980 | if (this.nr.hasChanged){
981 | this.unsetRect()
982 | this.oldRect = this.$el.getBoundingClientRect()
983 | }
984 | },
985 | updated(){
986 | if (this.nr.hasChanged){
987 | this.newRect = this.$el.getBoundingClientRect()
988 | this.nr.hasChanged = false
989 | this.dndZone.containerUpdated(this)
990 | }
991 | },
992 | beforeDestroy(){
993 | this.unsetRect()
994 | }
995 | })
996 | Vue.component('DndItem',{
997 | props: {
998 | dndId:{
999 | type: [Number,String],
1000 | default: null
1001 | },
1002 | handleClass:{
1003 | type: [Boolean,String],
1004 | default: false
1005 | },
1006 | dndModel: {
1007 | type: Object,
1008 | default: function(){
1009 | return {}
1010 | },
1011 | },
1012 | isDraggable: {
1013 | type: Boolean,
1014 | default: true,
1015 | },
1016 | },
1017 | render: function () {
1018 | return this.$slots.default
1019 | }
1020 | })
1021 | }
1022 | }
1023 | export default VueDndZone
1024 |
--------------------------------------------------------------------------------
/docs/js/app.a7ab0f70.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/0.gif","webpack:///./src/assets/5.gif","webpack:///./src/assets/3.gif","webpack:///./src/assets/dylan-1.jpg","webpack:///./src/assets/dylan-2.jpg","webpack:///./src/assets/dylan-0.jpg","webpack:///./src/App.vue?5f38","webpack:///./src/components/Examples.vue?ffcb","webpack:///./src/components/RecursiveGrid.vue?2cd8","webpack:///src/components/RecursiveGrid.vue","webpack:///./src/components/RecursiveGrid.vue?bd52","webpack:///./src/components/RecursiveGrid.vue","webpack:///src/components/Examples.vue","webpack:///./src/components/Examples.vue?3192","webpack:///./src/components/Examples.vue","webpack:///./src/components/API.vue?3d1c","webpack:///src/components/API.vue","webpack:///./src/components/API.vue?4de5","webpack:///./src/components/API.vue","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/plugins/vuetify.js","webpack:///./src/assets/vue-dnd-zone.js","webpack:///./src/main.js","webpack:///./src/assets/2.gif","webpack:///./src/assets/4.gif","webpack:///./src/assets/dylan-3.jpg","webpack:///./src/assets/1.gif"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","on","$event","drawer","_v","model","callback","$$v","expression","tab","staticClass","about","children","$vuetify","breakpoint","xs","_l","item","id","cols","dark","color","domProps","_s","title","staticStyle","_e","staticRenderFns","cardModel","artist","src","images","image","class","ordered","scopedSlots","_u","fn","proxy","validate","grid","addChild","edit","dialog","context","$set","removeContext","level","$emit","titleClass","style","minHeight","border","child","component","VBtn","VCard","VCardActions","VCardText","VCardTitle","VCol","VIcon","VSpacer","selectedListItem","noteCounter","listModel","listModel2","dndModel","VAlert","VAppBar","VAppBarNavIcon","VAvatar","VCardSubtitle","VContainer","VDialog","VImg","VProgressCircular","VRow","VSystemBar","VTab","VTabItem","VTabs","VTabsItems","VTextField","VToolbarTitle","VToolbar","VSimpleTable","components","Examples","text","html","custom","watch","VApp","VDivider","VListItem","VListItemContent","VList","VListItemSubtitle","VListItemTitle","VMain","VNavigationDrawer","Vue","use","Vuetify","VueDndZone","install","props","type","Function","default","container","zone","mirrorMinHeight","Number","mirrorMaxWidth","calcInterval","lockDistance","shadowAnchor","$el","mirrorAnchor","transitionDuration","shadowOpacity","shadowMargin","Boolean","String","shadowPadding","dragstartBuffer","nativeScroll","handleClass","pushToLast","isDndZone","dndState","positionCache","lockPosition","dataObject","dataObjectContainer","registeredContainers","shadow","mirror","transitions","leaveContainer","updated","enterContainer","dragOffset","x","y","intervalID","event","cursorX","cursorY","prevX","prevY","lastAction","cursorEl","passiveCallback","passive","scrollInvoked","top","left","bottom","right","activeScroll","shadowPos","pageXOffset","pageYOffset","methods","routeEvent","e","buttons","clear","init","animateMirror","scrollState","canScroll","direction","scroll","routeTouchEvent","touches","preventDefault","stopPropagation","target","removeEventListener","addEventListener","setTouchEvent","setIdleState","screenX","screenY","clientX","clientY","document","elementFromPoint","body","setTimeout","classList","contains","draggable","getValidItem","nestable","getContainer","updateDataObjectContainer","$children","$vnode","componentInstance","_hasMove","addListeners","add","documentElement","setProperty","source","rect","getBoundingClientRect","animateShadow","keys","forEach","saveRects","dataObjectDomElement","clearInterval","setInterval","track","cloneNode","setRect","append","mirrorWrapper","createElement","parentElement","tagName","cloneAttributes","scaleX","width","scaleY","height","scale","Math","min","max","containerUpdated","dndId","el","remove","requestAnimationFrame","animateContainer","newRect","oldRect","unsetRect","once","distance","abs","removeListeners","removeProperty","mirrorRect","finalRect","offset","flag","removeChild","nr","hasChanged","registerContainer","vnode","unregisterContainer","getDataObjectIndex","scrollTo","scrollSpeed","clientHeight","clientWidth","scrollHeight","scrollWidth","muteEvent","simulateMouseEvent","simulatedType","simulatedEvent","MouseEvent","eventTarget","dispatchEvent","attributes","attr","setAttribute","nodeName","nodeValue","getItem","$parent","isDraggable","__vue__","isNestable","dndZone","isSubset","getValidContainer","some","computed","dataObjectComponent","getDataObjectComponent","cursorContainer","cursorIndex","getIndex","cursorPosition","newVal","newContainer","index","oldIndex","from","to","removeDataObject","addDataObject","mounted","beforeDestroy","render","$slots","tag","Array","containerTransfer","verticalSearch","itemCount","processing","rects","hasUpdated","h","edge","indexOf","filter","getRectangleMap","rectangles","map","rowTop","Infinity","rowBottom","rows","row","pointers","isLastInRow","flat","rectangleMap","binarySearch","getDndZone","register","unregister","arr","start","end","mid","floor","skip","els","beforeUpdate","config","productionTip","vuetify","App","$mount"],"mappings":"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","file":"js/app.a7ab0f70.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/vue-dnd-zone/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"img/0.a99f52e0.gif\";","module.exports = __webpack_public_path__ + \"img/5.7c787298.gif\";","module.exports = __webpack_public_path__ + \"img/3.d078582e.gif\";","module.exports = __webpack_public_path__ + \"img/dylan-1.c74bc761.jpg\";","module.exports = __webpack_public_path__ + \"img/dylan-2.b7bb7ab3.jpg\";","module.exports = __webpack_public_path__ + \"img/dylan-0.45179feb.jpg\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-app-bar',{attrs:{\"app\":\"\",\"color\":\"black\",\"dark\":\"\"}},[_c('v-app-bar-nav-icon',{on:{\"click\":function($event){_vm.drawer=!_vm.drawer}}}),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(\"vue-dnd-zone\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"href\":\"https://github.com/supraniti/vue-dnd-zone\",\"target\":\"_blank\",\"large\":\"\",\"icon\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(\"mdi-github\")])],1)],1),_c('v-navigation-drawer',{attrs:{\"app\":\"\"},model:{value:(_vm.drawer),callback:function ($$v) {_vm.drawer=$$v},expression:\"drawer\"}},[_c('v-list-item',[_c('v-list-item-content',[_c('v-list-item-title',[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-drag\")]),_vm._v(\" DATA DRIVEN DND \")],1),_c('v-list-item-subtitle',[_vm._v(\" BUILT FOR VUE \")])],1)],1),_c('v-divider'),_c('v-tabs',{attrs:{\"vertical\":\"\",\"color\":\"black\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab',{staticClass:\"justify-start\"},[_vm._v(\" About \")]),_c('v-tab',{staticClass:\"justify-start\"},[_vm._v(\" Examples \")]),_c('v-tab',{staticClass:\"justify-start\"},[_vm._v(\" API \")])],1)],1),_c('v-main',[_c('v-tabs-items',{attrs:{\"touchless\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab-item',[_c('v-card',{staticClass:\"elevation-5\"},[_c('v-card-title',{staticClass:\"subtitle-1\"},[_vm._v(\"Move the cards around using the \"),_c('v-icon',[_vm._v(\"mdi-drag\")]),_vm._v(\"icon\")],1),_c('dnd-zone',{attrs:{\"handle-class\":\"handle\",\"native-scroll\":false}},[_c('v-card-text',[_c('dnd-container',{staticClass:\"row\",attrs:{\"dnd-model\":_vm.about.children,\"dnd-id\":\"about\",\"vertical-search\":_vm.$vuetify.breakpoint.xs}},[_vm._l((_vm.about.children),function(item){return [_c('dnd-item',{key:item.id,attrs:{\"dnd-id\":item.id,\"dnd-model\":item}},[_c('v-col',{attrs:{\"cols\":\"12\",\"sm\":item.cols}},[_c('v-card',{staticClass:\"elevation-10\",attrs:{\"dark\":item.dark,\"color\":item.color}},[_c('v-card-actions',{staticClass:\"pb-0\"},[_c('v-icon',{staticClass:\"handle\"},[_vm._v(\"mdi-drag\")]),_c('p',{staticClass:\"title my-2\",domProps:{\"textContent\":_vm._s(item.title)}}),_c('v-spacer')],1),_c('v-card-text',{staticClass:\"body-1 pt-0\",staticStyle:{\"opacity\":\"1\"}},[_vm._l((item.text),function(p,i){return _c('p',{key:i,staticClass:\"my-2\",domProps:{\"textContent\":_vm._s(p)}})}),_vm._l((item.html),function(p,i){return _c('div',{key:i,domProps:{\"innerHTML\":_vm._s(p)}})}),(item.custom)?_c('div',[_c('pre',[_c('code',{staticStyle:{\"display\":\"block\",\"white-space\":\"pre-wrap\"}},[_vm._v(\"\\n \\n \\n \\n \\n \\n \\n \\n\\n\")]),_vm._v(\"\\n \")]),_c('v-btn',{attrs:{\"text\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.tab=1}}},[_vm._v(\"Examples\")])],1):_vm._e()],2)],1)],1)],1)]})],2)],1)],1)],1)],1),_c('v-tab-item',[_c('Examples')],1),_c('v-tab-item',[_c('API')],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-tabs',{attrs:{\"color\":\"black\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab',[_vm._v(\" List \")]),_c('v-tab',[_vm._v(\" Grid \")]),_c('v-tab',[_vm._v(\" Nested Grid \")])],1),_c('v-tabs-items',{model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab-item',[_c('dnd-zone',[_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"400\"}},[_c('v-system-bar',{attrs:{\"color\":\"grey darken-2\",\"dark\":\"\"}},[_c('v-spacer'),_c('v-icon',[_vm._v(\"mdi-window-minimize\")]),_c('v-icon',[_vm._v(\"mdi-window-maximize\")]),_c('v-icon',[_vm._v(\"mdi-close\")])],1),_c('v-app-bar',{attrs:{\"dark\":\"\",\"color\":\"black\"}},[_c('v-app-bar-nav-icon'),_c('v-toolbar-title',[_vm._v(\"My Playlists\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-magnify\")])],1)],1),_c('v-container',[_c('dnd-container',{staticClass:\"row\",attrs:{\"dnd-model\":_vm.cardModel.children,\"dnd-id\":\"cards-example\",\"dense\":\"\",\"vertical-search\":\"\"}},[_c('v-col',{key:\"fixed\",attrs:{\"cols\":\"12\"}},[_c('v-card',{attrs:{\"color\":\"black\",\"dark\":\"\"}},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\" Bob Dylan \")]),_c('v-card-actions',[_c('v-btn',{attrs:{\"text\":\"\"}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play\")]),_vm._v(\" Play All \")],1)],1)],1)],1),_vm._l((_vm.cardModel.children),function(item){return [_c('dnd-item',{key:item.id,attrs:{\"dnd-model\":item,\"dnd-id\":item.id}},[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-card',{attrs:{\"color\":\"white\"}},[_c('div',{staticClass:\"d-flex flex-no-wrap justify-space-between\"},[_c('div',[_c('v-card-title',{staticClass:\"headline\",domProps:{\"textContent\":_vm._s(item.title)}}),_c('v-card-subtitle',{domProps:{\"textContent\":_vm._s(item.artist)}}),_c('v-card-actions',[_c('v-btn',{staticClass:\"ml-2 mt-3\",attrs:{\"fab\":\"\",\"icon\":\"\",\"height\":\"40px\",\"right\":\"\",\"width\":\"40px\"}},[_c('v-icon',[_vm._v(\"mdi-play\")])],1)],1)],1),_c('v-avatar',{staticClass:\"ma-3\",attrs:{\"size\":\"125\",\"tile\":\"\"}},[_c('v-img',{attrs:{\"src\":item.src}})],1)],1)])],1)],1)]})],2)],1)],1)],1),_c('div',[_c('v-alert',{staticClass:\"my-2\",attrs:{\"color\":\"grey darken-4\",\"dark\":\"\",\"border\":\"left\",\"prominent\":\"\"}},[_c('pre',[_c('code',{staticStyle:{\"display\":\"block\",\"white-space\":\"pre-wrap\"}},[_vm._v(\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\")]),_vm._v(\"\\n \")])])],1)],1),_c('v-tab-item',{staticClass:\"pb-0\"},[_c('v-card',{staticClass:\"pb-10\",attrs:{\"flat\":\"\"}},[_c('v-card-title',[(_vm.ordered)?_c('v-icon',{attrs:{\"color\":\"green\"}},[_vm._v(\"mdi-check\")]):_vm._e(),_vm._v(\"Pai Mei GIF Captcha\")],1),_c('v-card-text',[_c('dnd-zone',{attrs:{\"transition-duration\":0.3}},[_c('dnd-container',{staticClass:\"row row--dense\",staticStyle:{\"max-width\":\"500px\"},attrs:{\"dnd-model\":_vm.images,\"dnd-id\":\"images\"}},_vm._l((_vm.images),function(image){return _c('dnd-item',{key:image.id,attrs:{\"dnd-model\":image,\"dnd-id\":image.id}},[_c('v-col',{staticClass:\"d-flex child-flex handle\",class:_vm.ordered ? 'pa-0' : 'pa-2',attrs:{\"cols\":\"4\"}},[_c('v-img',{staticClass:\"grey lighten-2\",attrs:{\"src\":image.src,\"aspect-ratio\":\"1\"},scopedSlots:_vm._u([{key:\"placeholder\",fn:function(){return [_c('v-row',{staticClass:\"fill-height ma-0\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"grey lighten-5\"}})],1)]},proxy:true}],null,true)})],1)],1)}),1)],1)],1),_c('v-card-actions',{staticStyle:{\"max-width\":\"500px\"}},[_c('v-text-field',{attrs:{\"label\":\"E-mail\",\"required\":\"\",\"disabled\":!_vm.ordered}}),_c('v-spacer'),_c('v-text-field',{staticClass:\"ml-4\",attrs:{\"label\":\"Password\",\"required\":\"\",\"disabled\":!_vm.ordered}}),_c('v-spacer'),_c('v-btn',{staticClass:\"ml-4\",attrs:{\"disabled\":!_vm.ordered}},[_vm._v(\" submit \")])],1)],1),_c('v-alert',{staticClass:\"my-2 py-0\",attrs:{\"color\":\"grey darken-4\",\"dark\":\"\",\"border\":\"left\",\"prominent\":\"\"}},[_c('pre',[_c('code',{staticStyle:{\"display\":\"block\",\"white-space\":\"pre-wrap\"}},[_vm._v(\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\")]),_vm._v(\"\\n \")])])],1),_c('v-tab-item',[_c('dnd-zone',{attrs:{\"handle-class\":\"handle\",\"validate\":_vm.validate,\"native-scroll\":false}},[_c('recursive-grid',{attrs:{\"model\":_vm.grid},on:{\"addChild\":_vm.addChild,\"edit\":_vm.edit}})],1)],1)],1),_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"persistent\":\"\",\"max-width\":\"290\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[(_vm.context)?_c('v-card',[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\" Edit Note \")]),_c('v-card-text',[_c('v-text-field',{model:{value:(_vm.context.title),callback:function ($$v) {_vm.$set(_vm.context, \"title\", $$v)},expression:\"context.title\"}})],1),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"red darken-1\",\"text\":\"\"},on:{\"click\":_vm.removeContext}},[_vm._v(\" Delete Note \")]),_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"green darken-1\",\"text\":\"\"},on:{\"click\":function($event){_vm.context = null}}},[_vm._v(\" Save \")])],1)],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-col',{staticClass:\"pa-0\",attrs:{\"cols\":12,\"sm\":_vm.model.cols}},[_c('v-card',{staticClass:\"ma-2\",attrs:{\"color\":_vm.model.color,\"dark\":_vm.model.dark,\"light\":!_vm.model.dark}},[(_vm.model.id)?_c('v-card-actions',[_c('v-icon',{staticClass:\"handle\"},[_vm._v(\"mdi-drag\")]),_c('v-spacer'),(_vm.model.level == '2')?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$emit('edit',_vm.model)}}},[_c('v-icon',[_vm._v(\"mdi-folder-edit\")])],1):_vm._e(),(_vm.model.level == '1')?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.addChild}},[_c('v-icon',[_vm._v(\"mdi-folder-plus\")])],1):_vm._e()],1):_vm._e(),_c('v-card-title',{class:_vm.model.titleClass,domProps:{\"textContent\":_vm._s(_vm.model.title)}}),(_vm.model.level < 2)?_c('v-card-text',[_c('dnd-container',{staticClass:\"row row--dense\",style:({minHeight:'50px',border:_vm.model.dark ? '1px dotted white' : '1px dotted black'}),attrs:{\"dnd-id\":_vm.model.id,\"dnd-model\":_vm.model.children,\"container-transfer\":{level:_vm.model.level},\"vertical-search\":_vm.$vuetify.breakpoint.xs}},[_vm._l((_vm.model.children),function(child){return [_c('dnd-item',{key:child.id,attrs:{\"dnd-id\":child.id,\"dnd-model\":child}},[_c('recursive-grid',{attrs:{\"model\":child},on:{\"addChild\":_vm.addChild,\"edit\":_vm.edit}})],1)]})],2)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n \r\n \r\n mdi-drag \r\n \r\n \r\n mdi-folder-edit \r\n \r\n \r\n mdi-folder-plus \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecursiveGrid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecursiveGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RecursiveGrid.vue?vue&type=template&id=203ab1b4&\"\nimport script from \"./RecursiveGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./RecursiveGrid.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VCol,VIcon,VSpacer})\n","\r\n \r\n
\r\n \r\n List\r\n \r\n \r\n Grid\r\n \r\n \r\n Nested Grid\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n mdi-window-minimize \r\n mdi-window-maximize \r\n mdi-close \r\n \r\n \r\n \r\n My Playlists \r\n \r\n \r\n mdi-magnify \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Bob Dylan\r\n \r\n \r\n \r\n mdi-play \r\n Play All\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n mdi-play \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n<dnd-zone\r\n vertical-search\r\n>\r\n <dnd-container\r\n :dnd-model=\"cards\"\r\n dnd-id=\"list-example\"\r\n class=\"row\"\r\n >\r\n <template v-for=\"card in cards\">\r\n <dnd-item :dnd-model=\"card\" :key=\"card.id\" :dnd-id=\"card.id\">\r\n <v-col cols=\"12\">\r\n <!--Card Markup -->\r\n </v-col>\r\n </dnd-item>\r\n </template>\r\n </dnd-container>\r\n</dnd-zone>\r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n mdi-check Pai Mei GIF Captcha \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n submit\r\n \r\n \r\n \r\n \r\n\r\n\r\n<dnd-zone\r\n :transition-duration=\"0.3\"\r\n>\r\n <dnd-container\r\n :dnd-model=\"images\"\r\n dnd-id=\"grid-example\"\r\n class=\"row\"\r\n dense\r\n >\r\n <dnd-item\r\n v-for=\"image in images\"\r\n :key=\"image.id\"\r\n :dnd-id=\"image.id\"\r\n :dnd-model=\"image\"\r\n >\r\n <v-col cols=\"4\">\r\n <v-img :src=\"image.src\"/>\r\n </v-col>\r\n </dnd-item>\r\n </dnd-container>\r\n</dnd-zone>\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Edit Note\r\n \r\n \r\n \r\n \r\n \r\n \r\n Delete Note\r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Examples.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Examples.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Examples.vue?vue&type=template&id=21c1dab8&\"\nimport script from \"./Examples.vue?vue&type=script&lang=js&\"\nexport * from \"./Examples.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAppBarNavIcon } from 'vuetify/lib/components/VAppBar';\nimport { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSystemBar } from 'vuetify/lib/components/VSystemBar';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAlert,VAppBar,VAppBarNavIcon,VAvatar,VBtn,VCard,VCardActions,VCardSubtitle,VCardText,VCardTitle,VCol,VContainer,VDialog,VIcon,VImg,VProgressCircular,VRow,VSpacer,VSystemBar,VTab,VTabItem,VTabs,VTabsItems,VTextField,VToolbarTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"blue--text\"},[_vm._v(\"dnd-zone component\")]),_c('v-card-text',{staticClass:\"pb-0\"},[_c('p',[_vm._v(\"the 'dnd-zone' component manages the drag and drop event\")])]),_c('v-card-title',{staticClass:\"pb-0\"},[_vm._v(\"props:\")]),_c('v-card-text',{staticClass:\"pb-0\"},[_c('v-simple-table',{scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\"},[_vm._v(\" Name \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Type \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Default \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Description \")])])]),_c('tbody',[_c('tr',[_c('td',[_vm._v(\"transition-duration\")]),_c('td',[_vm._v(\"Number\")]),_c('td',[_vm._v(\"0.3\")]),_c('td',[_vm._v(\"drag and drop transition duration in seconds\")])]),_c('tr',[_c('td',[_vm._v(\"handle-class\")]),_c('td',[_vm._v(\"String\")]),_c('td',[_vm._v(\"None\")]),_c('td',[_vm._v(\"CSS class to limit drag selection to a specific element\")])]),_c('tr',[_c('td',[_vm._v(\"native-scroll\")]),_c('td',[_vm._v(\"Boolean\")]),_c('td',[_vm._v(\"true\")]),_c('td',[_vm._v(\"When set to false, vue-dnd-zone will use a custom scroll controller that allows scrolling while drag and dropping\")])]),_c('tr',[_c('td',[_vm._v(\"validate\")]),_c('td',[_vm._v(\"Function\")]),_c('td',[_c('code',[_vm._v(\" (item, container, zone) => true \")])]),_c('td',[_vm._v(\"Validation function with access to all components envolved in the drag and drop action\")])])])]},proxy:true}])})],1),_c('v-card-title',[_vm._v(\"events:\")]),_c('v-card-text',{staticClass:\"pb-0\"},[_c('p',[_vm._v(\"vue-dnd-zone will emit a 'move' event on any change to the data structure\")]),_c('p',[_vm._v(\"the event payload contains the following data:\")]),_c('pre',[_vm._v(\" \"),_c('code',{staticStyle:{\"display\":\"block\",\"white-space\":\"pre-wrap\"}},[_vm._v(\"\\n from:{\\n container:oldContainer,\\n index:oldIndex\\n },\\n to:{\\n container:newContainer,\\n index:index\\n }\\n \")]),_vm._v(\"\\n \")])]),_c('v-card-title',{staticClass:\"blue--text\"},[_vm._v(\"dnd-container component\")]),_c('v-card-text',[_c('p',[_vm._v(\"the 'dnd-container' component creates an html element that acts as a container for dnd items \")]),_c('p',[_vm._v(\"it also creates a native vue transition-group component to handle the transitions inside it\")])]),_c('v-card-title',[_vm._v(\"props:\")]),_c('v-card-text',[_c('v-simple-table',{scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\"},[_vm._v(\" Name \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Type \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Default \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Description \")])])]),_c('tbody',[_c('tr',[_c('td',[_vm._v(\"dnd-model\")]),_c('td',[_vm._v(\"Array\")]),_c('td',[_vm._v(\"[]\")]),_c('td',[_vm._v(\"*** Required, an array of objects serves as the data container\")])]),_c('tr',[_c('td',[_vm._v(\"dnd-id\")]),_c('td',[_vm._v(\"String\")]),_c('td',[_vm._v(\"null\")]),_c('td',[_vm._v(\"*** Required, a unique id for the data model (similar to 'key')\")])]),_c('tr',[_c('td',[_vm._v(\"tag\")]),_c('td',[_vm._v(\"String\")]),_c('td',[_vm._v(\"div\")]),_c('td',[_vm._v(\"tag for the container DOM element\")])]),_c('tr',[_c('td',[_vm._v(\"vertical-search\")]),_c('td',[_vm._v(\"Boolean\")]),_c('td',[_vm._v(\"false\")]),_c('td',[_vm._v(\"Set to true when items are ordered in a column\")])])])]},proxy:true}])})],1),_c('v-card-title',{staticClass:\"blue--text\"},[_vm._v(\"dnd-item component\")]),_c('v-card-text',[_c('p',[_vm._v(\"the 'dnd-item' component does not create any markup, it serves as a functional wrapper for the draggable element\")])]),_c('v-card-title',[_vm._v(\"props:\")]),_c('v-card-text',[_c('v-simple-table',{scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\"},[_vm._v(\" Name \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Type \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Default \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Description \")])])]),_c('tbody',[_c('tr',[_c('td',[_vm._v(\"dnd-model\")]),_c('td',[_vm._v(\"Object\")]),_c('td',[_vm._v(\"{}\")]),_c('td',[_vm._v(\"*** Required, the data Object corresponding to the dragged DOM element\")])]),_c('tr',[_c('td',[_vm._v(\"dnd-id\")]),_c('td',[_vm._v(\"String\")]),_c('td',[_vm._v(\"null\")]),_c('td',[_vm._v(\"*** Required, a unique id for the data model (similar to 'key')\")])])])]},proxy:true}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n dnd-zone component \r\n \r\n the 'dnd-zone' component manages the drag and drop event
\r\n \r\n props: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Name\r\n \r\n \r\n Type\r\n \r\n \r\n Default\r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n \r\n transition-duration \r\n Number \r\n 0.3 \r\n drag and drop transition duration in seconds \r\n \r\n \r\n handle-class \r\n String \r\n None \r\n CSS class to limit drag selection to a specific element \r\n \r\n \r\n native-scroll \r\n Boolean \r\n true \r\n When set to false, vue-dnd-zone will use a custom scroll controller that allows scrolling while drag and dropping \r\n \r\n \r\n validate \r\n Function \r\n \r\n \r\n (item, container, zone) => true\r\n \r\n \r\n Validation function with access to all components envolved in the drag and drop action \r\n \r\n \r\n \r\n \r\n \r\n events: \r\n \r\n vue-dnd-zone will emit a 'move' event on any change to the data structure
\r\n the event payload contains the following data:
\r\n \r\n \r\n from:{\r\n container:oldContainer,\r\n index:oldIndex\r\n },\r\n to:{\r\n container:newContainer,\r\n index:index\r\n }\r\n \r\n \r\n \r\n dnd-container component \r\n \r\n the 'dnd-container' component creates an html element that acts as a container for dnd items
\r\n it also creates a native vue transition-group component to handle the transitions inside it
\r\n \r\n props: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Name\r\n \r\n \r\n Type\r\n \r\n \r\n Default\r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n \r\n dnd-model \r\n Array \r\n [] \r\n *** Required, an array of objects serves as the data container \r\n \r\n \r\n dnd-id \r\n String \r\n null \r\n *** Required, a unique id for the data model (similar to 'key') \r\n \r\n \r\n tag \r\n String \r\n div \r\n tag for the container DOM element \r\n \r\n \r\n vertical-search \r\n Boolean \r\n false \r\n Set to true when items are ordered in a column \r\n \r\n \r\n \r\n \r\n \r\n dnd-item component \r\n \r\n the 'dnd-item' component does not create any markup, it serves as a functional wrapper for the draggable element
\r\n \r\n props: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Name\r\n \r\n \r\n Type\r\n \r\n \r\n Default\r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n \r\n dnd-model \r\n Object \r\n {} \r\n *** Required, the data Object corresponding to the dragged DOM element \r\n \r\n \r\n dnd-id \r\n String \r\n null \r\n *** Required, a unique id for the data model (similar to 'key') \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./API.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./API.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./API.vue?vue&type=template&id=4e8ebbed&\"\nimport script from \"./API.vue?vue&type=script&lang=js&\"\nexport * from \"./API.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\ninstallComponents(component, {VCard,VCardText,VCardTitle,VSimpleTable})\n","\n \n \n \n \n vue-dnd-zone \n \n \n mdi-github \n \n \n \n \n \n \n mdi-drag \n DATA DRIVEN DND\n \n \n BUILT FOR VUE\n \n \n \n \n \n \n About\n \n \n Examples\n \n \n API\n \n \n \n \n \n \n \n Move the cards around using the mdi-drag icon \n \n \n \n \n \n \n \n \n mdi-drag \n
\n \n \n \n
\n
\n \n
\n \n <dnd-zone>\n <dnd-container>\n <dnd-item>\n <!-- item markup goes here -->\n </dnd-item>\n </dnd-container>\n </dnd-zone>\n\n \n \n
Examples \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=0863717f&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAppBarNavIcon } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VApp,VAppBar,VAppBarNavIcon,VBtn,VCard,VCardActions,VCardText,VCardTitle,VCol,VDivider,VIcon,VListItem,VListItemContent,VListItemSubtitle,VListItemTitle,VMain,VNavigationDrawer,VSpacer,VTab,VTabItem,VTabs,VTabsItems,VToolbarTitle})\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n});\n","const VueDndZone = {\r\n install: function(Vue,) {\r\n Vue.component('DndZone',{\r\n props: {\r\n validate:{\r\n type: Function,\r\n default: function(item, container, zone){\r\n if(item && container && zone){\r\n return true\r\n }\r\n }\r\n },\r\n mirrorMinHeight:{\r\n type: Number,\r\n default: 150,\r\n },\r\n mirrorMaxWidth:{\r\n type: Number,\r\n default: 500,\r\n },\r\n calcInterval:{\r\n type: Number,\r\n default: 150,\r\n },\r\n lockDistance:{\r\n type: Number,\r\n default: 25,\r\n },\r\n shadowAnchor:{\r\n type: Function,\r\n default: function(){\r\n return this.$el\r\n }\r\n },\r\n mirrorAnchor:{\r\n type: Function,\r\n default: function(){\r\n return this.$el\r\n }\r\n },\r\n transitionDuration:{\r\n type: Number,\r\n default: 0.2,\r\n },\r\n shadowOpacity:{\r\n type: Number,\r\n default: 0.5,\r\n },\r\n shadowMargin:{\r\n type: [Boolean, String],\r\n default: '0px',\r\n },\r\n shadowPadding:{\r\n type: [Boolean, String],\r\n default: false,\r\n },\r\n dragstartBuffer: {\r\n type: Number,\r\n default: 50,\r\n },\r\n nativeScroll: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n handleClass:{\r\n type: [Boolean,String],\r\n default: false\r\n },\r\n pushToLast:{\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data: () => ({\r\n // Application State\r\n isDndZone:true,\r\n dndState: 'Idle',\r\n positionCache:null,\r\n lockPosition:false,\r\n // Data Management\r\n dataObject:null, // Vue Observable Object\r\n dataObjectContainer:null, // Vue dnd-container Component\r\n registeredContainers:{}, // Vue dnd-container Registry\r\n // Animation Management\r\n shadow: null,\r\n mirror: null,\r\n transitions:{\r\n leaveContainer:{\r\n id:null,\r\n updated:null\r\n },\r\n enterContainer:{\r\n id:null,\r\n updated:null\r\n },\r\n },\r\n // shadowCache:null,\r\n dragOffset:{\r\n x:0,\r\n y:0\r\n },\r\n // Event Management\r\n intervalID: null,\r\n event: null,\r\n cursorX: null,\r\n cursorY: null,\r\n prevX:0,\r\n prevY:0,\r\n lastAction:0,\r\n cursorEl:null,\r\n passiveCallback:{\r\n passive:true\r\n },\r\n // Scroll Management\r\n scrollInvoked: {\r\n top: null,\r\n left: null,\r\n bottom: null,\r\n right: null\r\n },\r\n activeScroll:false,\r\n shadowPos:{\r\n top:0,\r\n left:0,\r\n pageXOffset:0,\r\n pageYOffset:0\r\n }\r\n }),\r\n methods:{\r\n // Event Management\r\n // React to mouse events\r\n routeEvent(e){\r\n if ( (e.type === 'mouseup') || (e.buttons === 0) ){\r\n this.clear()\r\n }else if ( (e.type === 'mousedown') && (e.buttons === 1) ){\r\n this.event = e\r\n this.init(e)\r\n }else if ( (e.type === 'mousemove') && (e.buttons === 1)){\r\n this.event = e\r\n this.animateMirror()\r\n if (!this.nativeScroll){\r\n let scrollState = this.canScroll()\r\n for (let direction in scrollState) {\r\n if ((scrollState[direction]) && (!this.scrollInvoked[direction])) {\r\n this.scroll(direction)\r\n }\r\n }\r\n }\r\n }\r\n },\r\n // React to touch events\r\n routeTouchEvent(e){\r\n if (e.touches.length > 1) {\r\n return false\r\n }\r\n if(e.type === 'touchend' && this.dndState === 'DragTrack'){\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n if (e.type === 'touchend' || e.touches.length > 1){\r\n e.target.removeEventListener('touchmove', this.routeTouchEvent)\r\n e.target.removeEventListener('touchend', this.routeTouchEvent)\r\n this.clear()\r\n }else if (e.type === 'touchstart'){\r\n e.target.addEventListener('touchmove', this.routeTouchEvent)\r\n e.target.addEventListener('touchend', this.routeTouchEvent)\r\n this.setTouchEvent(e)\r\n this.init(e)\r\n }else if(e.type === 'touchmove'){\r\n if(this.dndState === 'DragTrack'){\r\n e.preventDefault()\r\n e.stopPropagation()\r\n this.setTouchEvent(e)\r\n this.animateMirror()\r\n if (!this.nativeScroll){\r\n let scrollState = this.canScroll()\r\n for (let direction in scrollState) {\r\n if ((scrollState[direction]) && (!this.scrollInvoked[direction])) {\r\n this.scroll(direction)\r\n }\r\n }\r\n }\r\n }\r\n if(this.dndState === 'DragStartBuffer'){\r\n this.setIdleState()\r\n }\r\n }\r\n },\r\n setTouchEvent(e){\r\n let screenX = e.touches[0] ? e.touches[0].screenX : 0\r\n let screenY = e.touches[0] ? e.touches[0].screenY : 0\r\n let clientX = e.touches[0] ? e.touches[0].clientX : 0\r\n let clientY = e.touches[0] ? e.touches[0].clientY : 0\r\n this.event = {\r\n screenX: screenX,\r\n screenY: screenY,\r\n clientX: clientX,\r\n clientY: clientY,\r\n target:(e.type === 'touchmove') ? document.elementFromPoint(clientX, clientY) || document.body : e.target\r\n }\r\n },\r\n // Start DND Event\r\n init(e){\r\n if (this.dndState === 'Idle'){\r\n this.dndState = 'DragStartBuffer'\r\n window.setTimeout(function () {\r\n if ( this.dndState === 'DragStartBuffer' ){\r\n if (this.handleClass && !e.target.classList.contains(this.handleClass)){\r\n this.dndState = 'Idle'\r\n return\r\n }\r\n let draggable = this.getValidItem(e.target)\r\n if (draggable){\r\n this.dataObject = draggable.dndModel\r\n }else{\r\n this.dndState = 'Idle'\r\n return\r\n }\r\n let nestable = this.getContainer(draggable)\r\n if (draggable && nestable){\r\n this.dataObject = draggable.dndModel\r\n this.updateDataObjectContainer()\r\n this.dataObjectContainer.$children[0].$vnode.componentInstance._hasMove = true\r\n this.addListeners()\r\n this.$el.classList.add('dnd-zone')\r\n document.documentElement.style.setProperty('--dnd-transition-duration', this.transitionDuration + 's')\r\n let source = draggable.$el\r\n let rect = draggable.$el.getBoundingClientRect()\r\n this.animateShadow(rect,source)\r\n this.animateMirror(rect,source)\r\n if (!this.nativeScroll){\r\n this.activeScroll = true\r\n }\r\n Object.keys(this.registeredContainers).forEach(key=>{\r\n this.registeredContainers[key].saveRects()\r\n })\r\n this.dataObjectDomElement.classList.add('dnd-dragged')\r\n clearInterval(this.intervalID)\r\n this.intervalID = window.setInterval(this.track, this.calcInterval)\r\n this.dndState = 'DragTrack'\r\n }else{\r\n this.dndState = 'Idle'\r\n }\r\n }\r\n }.bind(this),this.dragstartBuffer)\r\n }\r\n },\r\n animateShadow(rect,source){\r\n if (!this.shadow && rect && source){\r\n this.shadow = source.cloneNode(true)\r\n this.shadow.classList.add('dnd-shadow')\r\n if (this.shadowOpacity){\r\n this.shadow.style.setProperty('opacity', this.shadowOpacity, 'important')\r\n }\r\n if (this.shadowMargin){\r\n this.shadow.style.setProperty('margin', this.shadowMargin, 'important')\r\n }\r\n if (this.shadowPadding){\r\n this.shadow.style.setProperty('padding', this.shadowPadding, 'important')\r\n }\r\n this.setRect(this.shadow,rect)\r\n this.shadowAnchor().append(this.shadow)\r\n }else if(rect){\r\n this.setRect(this.shadow,rect)\r\n }\r\n },\r\n animateMirror(rect,source){\r\n if (!this.mirror && rect && source){\r\n // Mirror Element\r\n let mirrorWrapper = document.createElement(source.parentElement.tagName)\r\n let mirror = source.cloneNode(true)\r\n mirrorWrapper.append(mirror)\r\n // Clone attributes from original elements to mirror and mirror wrapper\r\n this.cloneAttributes(mirrorWrapper,source.parentElement)\r\n this.cloneAttributes(mirror,source)\r\n // Track offset between pointer location and element\r\n this.dragOffset.x = this.event.clientX - rect.left\r\n this.dragOffset.y = this.event.clientY - rect.top\r\n // Scale the mirror so it wouldnt take too much space\r\n let scaleX = this.mirrorMaxWidth / rect.width\r\n let scaleY = this.mirrorMinHeight / rect.height\r\n let scale = Math.min(1, Math.max(scaleX, scaleY))\r\n // Update dragOffset to scale\r\n this.dragOffset.x *= scale\r\n this.dragOffset.y *= scale\r\n // Set mirror class and style attributes\r\n mirror.style.setProperty('transform', 'scale(' + scale + ',' + scale + ')')\r\n mirror.style.setProperty('transform-origin', '0 0')\r\n mirror.style.setProperty('position', 'fixed', 'important')\r\n mirror.classList.add('dnd-mirror')\r\n mirror.style.setProperty('margin', '0', 'important')\r\n mirror.style.setProperty('width', rect.width + 'px', 'important')\r\n mirror.style.setProperty('height', rect.height + 'px', 'important')\r\n mirror.style.setProperty('pointer-events', 'none', 'important')\r\n mirror.style.setProperty('visibility', 'visible', 'important')\r\n mirrorWrapper.style.setProperty('padding', '0', 'important')\r\n mirrorWrapper.style.setProperty('visibility', 'hidden', 'important')\r\n mirrorWrapper.style.setProperty('position', 'fixed', 'important')\r\n mirrorWrapper.style.setProperty('pointer-events', 'none', 'important')\r\n mirrorWrapper.style.setProperty('width', '0px', 'important')\r\n mirrorWrapper.style.setProperty('height', '0px', 'important')\r\n this.mirror = mirror\r\n this.mirrorAnchor().append(mirrorWrapper)\r\n }\r\n // Update Mirror Location\r\n this.mirror.style.setProperty('top', (this.event.clientY - this.dragOffset.y) + 'px')\r\n this.mirror.style.setProperty('left', (this.event.clientX - this.dragOffset.x) + 'px')\r\n },\r\n containerUpdated(container){\r\n // Animate shadow\r\n if (this.transitions.leaveContainer.id === container.dndId){\r\n this.transitions.leaveContainer.updated = true\r\n }\r\n if (this.transitions.enterContainer.id === container.dndId){\r\n this.transitions.enterContainer.updated = true\r\n }\r\n if (this.transitions.enterContainer.updated && this.transitions.leaveContainer.updated){\r\n this.registeredContainers[this.transitions.enterContainer.id].saveRects()\r\n this.updateDataObjectContainer()\r\n let el = this.dataObjectDomElement\r\n while (el && el !== this.$el){\r\n el.classList.remove('dnd-move')\r\n el = el.parentElement\r\n }\r\n let rect = this.dataObjectDomElement.getBoundingClientRect()\r\n this.dataObjectDomElement.classList.add('dnd-dragged')\r\n window.requestAnimationFrame(()=>{\r\n this.animateShadow(rect)\r\n })\r\n this.animateContainer(this.registeredContainers[this.transitions.enterContainer.id])\r\n if ( this.transitions.enterContainer.id !== this.transitions.leaveContainer.id){\r\n this.animateContainer(this.registeredContainers[this.transitions.leaveContainer.id])\r\n }\r\n }\r\n },\r\n animateContainer(container){\r\n if ( (container.newRect.height !== container.oldRect.height) || (container.newRect.width !== container.oldRect.width) ){\r\n container.setRect(container.oldRect)\r\n window.requestAnimationFrame(()=>{\r\n container.setRect(container.newRect)\r\n container.$el.classList.add('dnd-transition')\r\n container.$el.addEventListener('transitionend',()=>{\r\n container.$el.classList.remove('dnd-transition')\r\n container.unsetRect()\r\n },{once:true})\r\n })\r\n }\r\n },\r\n track(){\r\n if (!this.event){\r\n return\r\n }\r\n if (this.dndState !== 'DragTrack'){\r\n return\r\n }\r\n if (this.lockPosition){\r\n let distance = Math.abs(this.event.clientX - this.cursorX) + Math.abs(this.event.clientY - this.cursorY)\r\n if (distance < this.lockDistance){\r\n return\r\n }else{\r\n this.lockPosition = false\r\n }\r\n }\r\n this.cursorEl = this.event.target\r\n this.cursorX = this.event.clientX\r\n this.cursorY = this.event.clientY\r\n },\r\n clear(){\r\n if (this.dndState !== 'Idle'){\r\n this.removeListeners()\r\n this.$el.classList.remove('dnd-zone')\r\n document.documentElement.style.removeProperty('--dnd-transition-duration')\r\n if (!this.dataObjectDomElement){\r\n this.setIdleState()\r\n return\r\n }\r\n let mirrorRect = this.mirror.getBoundingClientRect()\r\n this.dataObjectDomElement.classList.remove('dnd-move')\r\n let finalRect = this.dataObjectDomElement.getBoundingClientRect()\r\n let offset = Math.abs(mirrorRect.top - finalRect.top) + Math.abs(mirrorRect.left - finalRect.left) +\r\n Math.abs(mirrorRect.width - finalRect.width) + Math.abs(mirrorRect.height - finalRect.height)\r\n if (offset > 0){\r\n this.mirror.style.setProperty('top',finalRect.top + 'px','important')\r\n this.mirror.style.setProperty('left',finalRect.left + 'px','important')\r\n this.mirror.style.setProperty('width',finalRect.width + 'px','important')\r\n this.mirror.style.setProperty('height',finalRect.height + 'px','important')\r\n this.mirror.style.setProperty('transform', 'scale(1,1)', 'important')\r\n this.mirror.style.setProperty('transition-duration',this.transitionDuration + 's','important')\r\n this.mirror.style.setProperty('transition-property','all','important')\r\n this.mirror.classList.remove('dnd-mirror')\r\n this.shadow.style.setProperty('top',finalRect.top + 'px','important')\r\n this.shadow.style.setProperty('left',finalRect.left + 'px','important')\r\n this.shadow.style.setProperty('width',finalRect.width + 'px','important')\r\n this.shadow.style.setProperty('height',finalRect.height + 'px','important')\r\n let flag = true\r\n this.mirror.addEventListener('transitionend',function(){\r\n if (flag) {\r\n flag = false\r\n this.setIdleState()\r\n }\r\n }.bind(this))\r\n }else{\r\n this.setIdleState()\r\n }\r\n }\r\n },\r\n setIdleState(){\r\n this.dndState = 'Idle'\r\n if (this.shadow){\r\n this.shadow.parentElement.removeChild(this.shadow)\r\n }\r\n if (this.mirror){\r\n this.mirror.parentElement.parentElement.removeChild(this.mirror.parentElement)\r\n }\r\n if (this.dataObjectDomElement){\r\n this.dataObjectDomElement.classList.remove('dnd-dragged')\r\n }\r\n this.activeScroll = null\r\n this.dataObject = null\r\n this.dataObjectContainer = null\r\n this.shadow = null\r\n this.mirror = null\r\n this.event = null\r\n this.cursorX = null\r\n this.cursorY = null\r\n this.cursorEl = null\r\n this.prevX = null\r\n this.prevY = null\r\n Object.keys(this.registeredContainers).forEach(key=>{\r\n let container = this.registeredContainers[key]\r\n container.nr.hasChanged = false\r\n container.$el.classList.remove('dnd-transition')\r\n container.unsetRect()\r\n })\r\n },\r\n registerContainer(vnode){\r\n this.registeredContainers[vnode.dndId] = vnode\r\n },\r\n unregisterContainer(vnode){\r\n delete(this.registeredContainers[vnode.dndId])\r\n },\r\n updateDataObjectContainer(){\r\n let keys = Object.keys(this.registeredContainers)\r\n for (let i=0;i -1){\r\n this.dataObjectContainer = container\r\n return\r\n }\r\n }\r\n this.dataObjectContainer = null\r\n },\r\n // Scroll Controller\r\n scroll(direction){\r\n this.scrollInvoked[direction] = window.setInterval(function () {\r\n switch (direction) {\r\n case \"top\":\r\n window.scrollTo(window.pageXOffset, window.pageYOffset - this.scrollSpeed(this.event,document.documentElement))\r\n break;\r\n case \"left\":\r\n window.scrollTo(window.pageXOffset - this.scrollSpeed(this.event,document.documentElement), window.pageYOffset)\r\n break;\r\n case \"bottom\":\r\n window.scrollTo(window.pageXOffset, window.pageYOffset + this.scrollSpeed(this.event,document.documentElement))\r\n break;\r\n case \"right\":\r\n window.scrollTo(window.pageXOffset + this.scrollSpeed(this.event,document.documentElement), window.pageYOffset)\r\n break\r\n }\r\n this.shadow.style.setProperty('transition-duration','0s','important')\r\n this.shadow.style.setProperty('top',(this.shadowPos.top + this.shadowPos.pageYOffset - window.pageYOffset) + 'px')\r\n if ((!this.canScroll()[direction]) || (!this.activeScroll)) {\r\n clearInterval(this.scrollInvoked[direction])\r\n this.shadow.style.removeProperty('transition-duration')\r\n this.scrollInvoked[direction] = null\r\n this.dataObjectContainer.saveRects()\r\n }\r\n }.bind(this), 16)\r\n },\r\n scrollSpeed(e, el) {\r\n return Math.max(0, 20 + (Math.max(0 - e.clientY, 0 - e.clientX, e.clientY - el.clientHeight, e.clientX - el.clientWidth)))\r\n },\r\n canScroll(){\r\n return {\r\n top: (this.event.clientY <= 20) && (window.pageYOffset > 0),\r\n left: (this.event.clientX <= 20) && (window.pageXOffset > 0),\r\n bottom: (this.event.clientY >= document.documentElement.clientHeight - 20) && (window.pageYOffset < document.documentElement.scrollHeight - document.documentElement.clientHeight),\r\n right: (this.event.clientX >= document.documentElement.clientWidth - 20) && (window.pageXOffset < document.documentElement.scrollWidth - document.documentElement.clientWidth)\r\n }\r\n },\r\n // Helpers\r\n // Mute event\r\n muteEvent(e){\r\n e.preventDefault()\r\n e.stopPropagation()\r\n return false\r\n },\r\n // Convert touch events to mouse events\r\n simulateMouseEvent(e){\r\n if(e.type === 'touchstart'){\r\n e.target.addEventListener('touchmove', this.simulateMouseEvent)\r\n e.target.addEventListener('touchend', this.simulateMouseEvent)\r\n }\r\n if(e.type === 'touchend' && this.dndState === 'DragTrack'){\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n if(e.type === 'touchend'){\r\n this.clear()\r\n return\r\n }\r\n if(e.type === 'touchmove' && this.dndState === 'DragTrack'){\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n if(e.type === 'touchmove' && this.dndState === 'DragStartBuffer'){\r\n this.setIdleState()\r\n }\r\n if (e.touches.length > 1) {\r\n return false\r\n }\r\n let simulatedType = (e.type === 'touchstart') ? 'mousedown' : (e.type === 'touchend') ? 'mouseup' : 'mousemove'\r\n let simulatedEvent = new MouseEvent(simulatedType, {\r\n 'view': window,\r\n 'bubbles': true,\r\n 'cancelable': true,\r\n 'screenX': (e.touches[0]) ? e.touches[0].screenX : 0,\r\n 'screenY': (e.touches[0]) ? e.touches[0].screenY : 0,\r\n 'clientX': (e.touches[0]) ? e.touches[0].clientX : 0,\r\n 'clientY': (e.touches[0]) ? e.touches[0].clientY : 0,\r\n 'button': 0,\r\n 'buttons': 1\r\n })\r\n let eventTarget = (e.type === 'touchmove') ? document.elementFromPoint(simulatedEvent.clientX, simulatedEvent.clientY) || document.body : e.target\r\n eventTarget.dispatchEvent(simulatedEvent)\r\n },\r\n // Clone DOM element attributes to another element\r\n cloneAttributes(target, source) {\r\n [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName === \"id\" ? 'data-id' : attr.nodeName ,attr.nodeValue) })\r\n },\r\n // Add Event Listeners\r\n addListeners(){\r\n document.body.addEventListener('mousemove',this.routeEvent)\r\n document.addEventListener(\"mouseup\",() => {\r\n this.clear()\r\n },\r\n { once: true }\r\n )\r\n },\r\n // Remove Event Listeners\r\n removeListeners(){\r\n document.body.removeEventListener('mousemove',this.routeEvent)\r\n this.$el.removeEventListener('mouseup',this.routeEvent)\r\n },\r\n // Get closest dnd-item component from vue component\r\n getItem(component){\r\n while (component && component.$parent){\r\n if (component.isDraggable && component.dndModel){\r\n return component\r\n }else{\r\n component = component.$parent\r\n }\r\n }\r\n return null\r\n },\r\n // Get closet valid dnd-item component from DOM element\r\n getValidItem(el){\r\n while (el !== this.$el){\r\n if (el.__vue__){\r\n return this.getItem(el.__vue__)\r\n }else{\r\n el = el.parentElement\r\n }\r\n }\r\n return null\r\n },\r\n // Get closest dnd-container component from vue component\r\n getContainer(component){\r\n if (!this.dataObject){\r\n return null\r\n }\r\n while (component && component.$parent){\r\n if (component.isNestable && component.dndModel && component.dndZone == this && !this.isSubset(component.dndModel,this.dataObject)){\r\n return component\r\n }else{\r\n component = component.$parent\r\n }\r\n }\r\n return null\r\n },\r\n // Get closet valid dnd-container component from DOM element\r\n getValidContainer(){\r\n let el = this.cursorEl\r\n while (el && el !== this.$el && el !== document.body){\r\n if (el.__vue__){\r\n return this.getContainer(el.__vue__)\r\n }else{\r\n el = el.parentElement\r\n }\r\n }\r\n return null\r\n },\r\n // Check if a dnd-container is a contained by a data object or its decendants\r\n isSubset(dataObjectContainer,dataObject){\r\n if ( dataObject.children && dataObject.children.length > 0 ){\r\n if ( dataObjectContainer !== dataObject.children ){\r\n return Object.keys(dataObject.children).some( key=>{\r\n this.isSubset (dataObjectContainer,dataObject.children[key])\r\n })\r\n }\r\n }\r\n return dataObjectContainer === dataObject.children\r\n },\r\n // Set width, height, top, left properties on a DOM element\r\n setRect(el,rect){\r\n let s = el.style\r\n this.shadowPos.left = rect.left\r\n this.shadowPos.top = rect.top\r\n this.shadowPos.pageXOffset = window.pageXOffset\r\n this.shadowPos.pageYOffset = window.pageYOffset\r\n s.setProperty('width', rect.width + 'px')\r\n s.setProperty('height', rect.height + 'px')\r\n s.setProperty('top', rect.top + 'px')\r\n s.setProperty('left', rect.left + 'px')\r\n },\r\n },\r\n computed:{\r\n // DATAOBJECT\r\n // dnd-item component containing the data object\r\n dataObjectComponent(){\r\n if (this.dataObjectContainer){\r\n return this.dataObjectContainer.getDataObjectComponent(this.dataObject)[0]\r\n }\r\n return null\r\n },\r\n // Data object DOM element\r\n dataObjectDomElement(){\r\n if (this.dataObjectComponent){\r\n return this.dataObjectComponent.$el\r\n }\r\n return null\r\n },\r\n // CURSOR\r\n // Closest valid dnd-container from cursor location\r\n cursorContainer(){\r\n if (this.cursorEl && this.dataObject){\r\n return this.getValidContainer(this.cursorEl)\r\n }\r\n return null\r\n },\r\n // Get cursor index inside dnd-container\r\n cursorIndex(){\r\n if (this.cursorContainer && this.cursorX && this.cursorY && !this.lockPosition){\r\n return this.cursorContainer.getIndex(this.cursorX,this.cursorY)\r\n }\r\n return null\r\n },\r\n // Combined value of cursor container and index\r\n cursorPosition(){\r\n if (this.cursorContainer){\r\n return this.cursorContainer.dndId + '-' + this.cursorIndex\r\n }\r\n return null\r\n },\r\n },\r\n watch: {\r\n cursorPosition(newVal) {\r\n if (this.lockPosition){\r\n return this.positionCache\r\n }\r\n if (newVal && this.dataObjectContainer){\r\n this.positionCache = newVal\r\n let newContainer = this.cursorContainer\r\n if (!newContainer){\r\n return\r\n }\r\n let index = Math.min(this.dataObjectContainer.dndModel.length - 1,this.cursorIndex)\r\n let oldIndex = this.dataObjectContainer.getDataObjectIndex(this.dataObject)\r\n if ( this.dataObjectContainer == newContainer ){\r\n let index = Math.min(this.dataObjectContainer.dndModel.length - 1,this.cursorIndex)\r\n let oldIndex = this.dataObjectContainer.getDataObjectIndex(this.dataObject)\r\n if ( oldIndex == index ){\r\n return\r\n }else{\r\n if ( !this.validate(this.dataObjectComponent,newContainer,this) ){\r\n return\r\n }\r\n this.$emit('move',{\r\n from:{\r\n container:newContainer,\r\n index:oldIndex\r\n },\r\n to:{\r\n container:newContainer,\r\n index:index\r\n }\r\n })\r\n this.dataObjectContainer.removeDataObject(this.dataObject)\r\n newContainer.addDataObject(this.dataObject,index)\r\n this.lockPosition = true\r\n newContainer.nr.hasChanged = true\r\n this.transitions.leaveContainer = {\r\n id:this.dataObjectContainer.dndId,\r\n updated:false\r\n }\r\n this.transitions.enterContainer = {\r\n id:newContainer.dndId,\r\n updated:false\r\n }\r\n }\r\n }else{\r\n // Same dnd-zone restriction\r\n if ( newContainer.dndZone !== this.dataObjectContainer.dndZone){\r\n return\r\n }\r\n // Drop Validation Hook\r\n if ( !this.validate(this.dataObjectComponent,newContainer,this) ){\r\n return\r\n }\r\n this.$emit('move',{\r\n from:{\r\n container:this.dataObjectContainer,\r\n index:oldIndex\r\n },\r\n to:{\r\n container:newContainer,\r\n index:index\r\n }\r\n })\r\n this.dataObjectContainer.removeDataObject(this.dataObject)\r\n this.dataObjectContainer.nr.hasChanged = true\r\n newContainer.addDataObject(this.dataObject,this.cursorIndex,this.pushToLast)\r\n newContainer.nr.hasChanged = true\r\n this.lockPosition = true\r\n this.transitions.leaveContainer = {\r\n id:this.dataObjectContainer.dndId,\r\n updated:false\r\n }\r\n this.transitions.enterContainer = {\r\n id:newContainer.dndId,\r\n updated:false\r\n }\r\n }\r\n }\r\n }\r\n },\r\n mounted(){\r\n document.documentElement.style.setProperty('--dnd-transition-duration', this.transitionDuration + 's')\r\n this.$el.addEventListener('mousedown',this.routeEvent)\r\n this.$el.addEventListener('touchstart', this.routeTouchEvent)\r\n this.$el.addEventListener('drag', this.muteEvent, false)\r\n this.$el.addEventListener('dragstart', this.muteEvent, false)\r\n },\r\n beforeDestroy(){\r\n this.$el.removeEventListener('mousedown',this.routeEvent)\r\n this.$el.removeEventListener('touchstart', this.routeTouchEvent)\r\n this.$el.removeEventListener('drag', this.muteEvent, false)\r\n this.$el.removeEventListener('dragstart', this.muteEvent, false)\r\n },\r\n render: function () {\r\n return this.$slots.default\r\n }\r\n })\r\n Vue.component('DndContainer',{\r\n props: {\r\n tag:{\r\n type: String,\r\n default: 'div'\r\n },\r\n dndId:{\r\n type: [Number,String],\r\n default: null\r\n },\r\n dndModel: {\r\n type: Array,\r\n default: function(){\r\n return []\r\n },\r\n },\r\n containerTransfer:{\r\n type: Object,\r\n default: function(){\r\n return {}\r\n }\r\n },\r\n verticalSearch: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isNestable: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n data: () => ({\r\n itemCount:null,\r\n oldRect:null,\r\n newRect:null,\r\n dndZone:null,\r\n processing:false,\r\n nr:{\r\n rects:null,\r\n hasChanged:false,\r\n hasUpdated:false\r\n }\r\n }),\r\n render:function(h) {\r\n return h('transition-group',{\r\n props:{\r\n tag:this.tag,\r\n name:'dnd'\r\n },\r\n class:this.class,\r\n style:this.style,\r\n attrs:this.attrs,\r\n },this.$slots.default)\r\n },\r\n methods:{\r\n // Data Management\r\n addDataObject(dataObject,index,edge){\r\n if (this.dndModel.length === 0){\r\n this.dndModel.push(dataObject)\r\n }else if ( index > this.dndModel.length - 1 ){\r\n this.dndModel.push(dataObject)\r\n }else if ( edge ){\r\n this.dndModel.push(dataObject)\r\n }\r\n else{\r\n this.dndModel.splice(index,0,dataObject)\r\n }\r\n },\r\n removeDataObject(dataObject){\r\n let index = this.dndModel.indexOf(dataObject)\r\n this.dndModel.splice(index,1)\r\n },\r\n getDataObjectIndex(dataObject){\r\n return this.dndModel.indexOf(dataObject)\r\n },\r\n getDataObjectComponent(dataObject){\r\n return this.$children[0].$children.filter(child=>{\r\n return child.dndModel === dataObject\r\n })\r\n },\r\n // DND management\r\n getRectangleMap(rectangles){\r\n let map = []\r\n let rowTop = Infinity\r\n let rowBottom = -Infinity\r\n let rows = []\r\n let row = []\r\n let pointers = []\r\n if (this.verticalSearch){\r\n for (let i=0; i < rectangles.length; i++){\r\n map.push(rectangles[i].bottom)\r\n }\r\n }else{\r\n for (let i=0; i < rectangles.length; i++){\r\n rowTop = Math.min(rowTop,rectangles[i].top)\r\n rowBottom = Math.max(rowBottom,rectangles[i].bottom)\r\n let isLastInRow = (i === rectangles.length - 1) || (rectangles[i].right > rectangles[i+1].right)\r\n if (isLastInRow){\r\n row.push( rectangles[i].right )\r\n map.push([rowTop,rowBottom])\r\n rows.push([],row)\r\n pointers.push(i + 1 - row.length,i + 1 - row.length)\r\n row = []\r\n rowTop = ( i === rectangles.length - 1 ) ? Infinity : rectangles[i+1].bottom\r\n }else{\r\n row.push( (rectangles[i].right + rectangles[i+1].left) / 2 )\r\n }\r\n }\r\n rows.push([])\r\n pointers.push(rectangles.length)\r\n }\r\n return {\r\n map: map.flat(),\r\n rows: rows,\r\n pointers: pointers\r\n }\r\n },\r\n getIndex(x,y){\r\n let rectangleMap = this.getRectangleMap(this.nr.rects)\r\n if (this.verticalSearch){\r\n return this.binarySearch(rectangleMap.map,y)\r\n }else{\r\n let row = this.binarySearch(rectangleMap.map,y)\r\n return this.binarySearch(rectangleMap.rows[row],x) + rectangleMap.pointers[row]\r\n }\r\n },\r\n getDndZone(vnode){\r\n while (vnode.$parent){\r\n if (vnode.isDndZone){\r\n return vnode\r\n }else{\r\n vnode = vnode.$parent\r\n }\r\n }\r\n return null\r\n },\r\n register(){\r\n this.dndZone = this.getDndZone(this)\r\n if (this.dndZone){\r\n this.dndZone.registerContainer(this)\r\n }\r\n },\r\n unregister(){\r\n if (this.dndZone){\r\n this.dndZone.unregisterContainer(this,true)\r\n }\r\n },\r\n //Helpers\r\n binarySearch(arr,x){\r\n let start = 0, end = arr.length-1, index = arr.length\r\n while (start <= end){\r\n let mid = Math.floor((start + end) / 2)\r\n if (arr[mid] > x){\r\n index = mid\r\n end = mid - 1\r\n }else{\r\n start = mid + 1\r\n }\r\n }\r\n return index\r\n },\r\n setRect(rect){\r\n this.$el.style.setProperty('height',rect.height + 'px','important')\r\n this.$el.style.setProperty('width',rect.width + 'px','important')\r\n },\r\n unsetRect(){\r\n this.$el.style.removeProperty('height')\r\n this.$el.style.removeProperty('width')\r\n },\r\n saveRects(skip){\r\n let els = [...this.$el.children]\r\n if (!skip){\r\n for (let i=0;i{\r\n this.saveRects(true)\r\n },{ once: true })\r\n return\r\n }\r\n }\r\n }\r\n this.nr.rects = els\r\n .map(child=>this.getValidItem(child))\r\n .filter(child=>child)\r\n .map(child=>child.$el.getBoundingClientRect())\r\n },\r\n // Get closest dnd-item component from vue component\r\n getItem(component){\r\n while (component && component.$parent){\r\n if (component.isDraggable && component.dndModel){\r\n return component\r\n }else{\r\n component = component.$parent\r\n }\r\n }\r\n return null\r\n },\r\n // Get closet valid dnd-item component from DOM element\r\n getValidItem(el){\r\n while (el !== this.$el){\r\n if (el.__vue__){\r\n return this.getItem(el.__vue__)\r\n }else{\r\n el = el.parentElement\r\n }\r\n }\r\n return null\r\n },\r\n },\r\n mounted(){\r\n this.itemCount = this.dndModel.length\r\n this.register()\r\n this.oldRect = this.$el.getBoundingClientRect()\r\n this.newRect = this.oldRect\r\n },\r\n beforeUpdate(){\r\n if (this.nr.hasChanged){\r\n this.unsetRect()\r\n this.oldRect = this.$el.getBoundingClientRect()\r\n }\r\n },\r\n updated(){\r\n if (this.nr.hasChanged){\r\n this.newRect = this.$el.getBoundingClientRect()\r\n this.nr.hasChanged = false\r\n this.dndZone.containerUpdated(this)\r\n }\r\n },\r\n beforeDestroy(){\r\n this.unsetRect()\r\n }\r\n })\r\n Vue.component('DndItem',{\r\n props: {\r\n dndId:{\r\n type: [Number,String],\r\n default: null\r\n },\r\n handleClass:{\r\n type: [Boolean,String],\r\n default: false\r\n },\r\n dndModel: {\r\n type: Object,\r\n default: function(){\r\n return {}\r\n },\r\n },\r\n isDraggable: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n render: function () {\r\n return this.$slots.default\r\n }\r\n })\r\n }\r\n}\r\nexport default VueDndZone\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport vuetify from './plugins/vuetify'\r\n\r\n/* Production Syntax (npm module) */\r\n\r\n// import VueDndZone from 'vue-dnd-zone'\r\n// import 'vue-dnd-zone/vue-dnd-zone.css'\r\n\r\n/* Development Syntax (local files) */\r\nimport VueDndZone from './assets/vue-dnd-zone.js'\r\nimport './assets/vue-dnd-zone.css'\r\n\r\nVue.use(VueDndZone)\r\nVue.config.productionTip = false\r\nnew Vue({\r\n vuetify,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","module.exports = __webpack_public_path__ + \"img/2.d4ca4874.gif\";","module.exports = __webpack_public_path__ + \"img/4.627abd19.gif\";","module.exports = __webpack_public_path__ + \"img/dylan-3.54c22a11.jpg\";","module.exports = __webpack_public_path__ + \"img/1.b6a5bef8.gif\";"],"sourceRoot":""}
--------------------------------------------------------------------------------