{"version":3,"file":"kendo.treeview.draganddrop.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendotreeview","draganddrop","js","this","$","undefined$1","kendo","window","ui","extend","VISIBILITY","DRAG_STATUS","DRAG_STATUS_ELEMENT","KSTATEHOVER","HierarchicalDragAndDrop","Class","init","element","options","hovered","dragstart","noop","drag","drop","dragend","_draggable","Draggable","ignore","filter","autoScroll","cursorOffset","left","top","support","mobileOS","zoomLevel","hint","_hint","bind","dragcancel","hintDestroyed","holdToDrag","clickMoveClick","hintText","_removeTouchHover","touch","find","removeClass","_hintStatus","newStatus","statusElement","status","icon","replaceWith","e","dropHint","remove","source","currentTarget","closest","itemSelector","preventDefault","reorderable","css","appendTo","hoveredItem","itemHeight","itemTop","itemContent","delta","insertOnTop","insertOnBottom","addChild","itemData","position","target","dropTarget","eventTarget","container","allowedContainers","length","contains","hasClass","itemFromTarget","item","_outerHeight","content","getOffset","y","location","_lastHover","toggleClass","dropHintContainer","first","last","originalEvent","pageY","pageX","x","setStatus","value","indexOf","destination","eventArgs","dropPrevented","requireTarget","dropPositionFrom","valid","setValid","newValid","dropped","destroy","jQuery"],"sources":["kendo.treeview.draganddrop.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.data.js'), require('kendo.draganddrop.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.draganddrop'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendotreeview = global.kendotreeview || {}, global.kendotreeview.draganddrop = global.kendotreeview.draganddrop || {}, global.kendotreeview.draganddrop.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"treeview.draganddrop\",\n name: \"Hierarchical Drag & Drop\",\n category: \"framework\",\n depends: [ \"core\", \"draganddrop\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo;\n var ui = kendo.ui;\n var extend = $.extend;\n var VISIBILITY = \"visibility\";\n var DRAG_STATUS = \"k-drag-status\";\n var DRAG_STATUS_ELEMENT = ``;\n var KSTATEHOVER = \"k-hover\";\n var INPUTSELECTOR = \"input,a:not(.k-treeview-leaf),textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,.k-button>.k-button-text,button.k-button>.k-icon,span.k-toggle-icon,a.k-button>.k-svg-icon,button.k-button>.k-svg-icon,.k-button>.k-svg-icon>svg,.k-button>.k-svg-icon>svg>path\";\n var DROPHINTTEMPLATE = \"
\" +\n \"
\" +\n \"
\" +\n \"
\";\n\n ui.HierarchicalDragAndDrop = kendo.Class.extend({\n init: function(element, options) {\n this.element = element;\n this.hovered = element;\n this.options = extend({\n dragstart: $.noop, drag: $.noop, drop: $.noop, dragend: $.noop\n }, options);\n\n this._draggable = new ui.Draggable(element, {\n ignore: INPUTSELECTOR,\n filter: options.filter,\n autoScroll: options.autoScroll,\n cursorOffset: {\n left: 10,\n top: kendo.support.mobileOS ? -40 / kendo.support.zoomLevel() : 10\n },\n hint: this._hint.bind(this),\n dragstart: this.dragstart.bind(this),\n dragcancel: this.dragcancel.bind(this),\n hintDestroyed: this.dragcancel.bind(this),\n drag: this.drag.bind(this),\n dragend: this.dragend.bind(this),\n holdToDrag: options.holdToDrag,\n clickMoveClick: options.clickMoveClick\n });\n },\n\n _hint: function(element) {\n return \"
\" +\n DRAG_STATUS_ELEMENT +\n this.options.hintText(element) +\n \"
\";\n },\n\n _removeTouchHover: function() {\n if (kendo.support.touch && this.hovered) {\n this.hovered.find(\".\" + KSTATEHOVER).removeClass(KSTATEHOVER);\n this.hovered = false;\n }\n },\n\n _hintStatus: function(newStatus) {\n var statusElement = this._draggable.hint.find(`.${DRAG_STATUS}`);\n if (newStatus) {\n this.status = newStatus;\n ui.icon(statusElement, {\n icon: newStatus\n });\n } else {\n this.status = '';\n statusElement.replaceWith(DRAG_STATUS_ELEMENT);\n }\n },\n\n dragstart: function(e) {\n if (this.dropHint) {\n this.dropHint.remove();\n }\n\n this.source = e.currentTarget.closest(this.options.itemSelector);\n\n if (this.options.dragstart(this.source)) {\n e.preventDefault();\n }\n\n if (this.options.reorderable) {\n this.dropHint = $(DROPHINTTEMPLATE)\n .css(VISIBILITY, \"hidden\")\n .appendTo(this.element);\n } else {\n this.dropHint = $();\n }\n },\n\n drag: function(e) {\n var options = this.options;\n var source = this.source;\n var target = this.dropTarget = $(kendo.eventTarget(e));\n var container = target.closest(options.allowedContainers);\n var hoveredItem, itemHeight, itemTop, itemContent, delta;\n var insertOnTop, insertOnBottom, addChild;\n var itemData, position, status;\n\n if (!container.length) {\n // dragging outside of allowed elements\n status = \"cancel\";\n this._removeTouchHover();\n } else if (source[0] == target[0] || options.contains(source[0], target[0])) {\n // dragging item within itself\n status = \"cancel\";\n } else if (e.clickMoveClick && e.currentTarget.hasClass(\"k-drag-cell\") && target.closest(\".k-drag-cell\").length === 0) {\n // click-move-click interaction with drag cell\n status = \"cancel\";\n } else if (e.clickMoveClick && e.currentTarget.hasClass(\"k-treeview-leaf\") && target.closest(\".k-treeview-leaf\").length === 0) {\n // click-move-click interaction with TreeView\n status = \"cancel\";\n } else {\n // moving or reordering item\n status = \"insert-middle\";\n\n itemData = options.itemFromTarget(target);\n hoveredItem = itemData.item;\n\n if (hoveredItem.length) {\n this._removeTouchHover();\n itemHeight = kendo._outerHeight(hoveredItem);\n itemContent = itemData.content;\n\n if (options.reorderable) {\n delta = itemHeight / (itemContent.length > 0 ? 4 : 2);\n itemTop = kendo.getOffset(hoveredItem).top;\n\n insertOnTop = e.y.location < (itemTop + delta);\n insertOnBottom = (itemTop + itemHeight - delta) < e.y.location;\n addChild = itemContent.length && !insertOnTop && !insertOnBottom;\n } else {\n addChild = true;\n insertOnTop = false;\n insertOnBottom = false;\n }\n\n this.hovered = addChild ? container : false;\n\n this.dropHint.css(VISIBILITY, addChild ? \"hidden\" : \"visible\");\n\n if (this._lastHover && this._lastHover[0] != itemContent[0]) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n\n this._lastHover = itemContent.toggleClass(KSTATEHOVER, addChild);\n\n if (addChild) {\n status = \"plus\";\n } else {\n position = hoveredItem.position();\n position.top += insertOnTop ? 0 : itemHeight;\n\n this.dropHint.css(position)\n [insertOnTop ? \"prependTo\" : \"appendTo\"]\n (options.dropHintContainer(hoveredItem));\n\n if (insertOnTop && itemData.first) {\n status = \"insert-top\";\n }\n\n if (insertOnBottom && itemData.last) {\n status = \"insert-bottom\";\n }\n }\n } else if (target[0] != this.dropHint[0]) {\n if (this._lastHover) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n\n if (!$.contains(this.element[0], container[0])) {\n // moving node to different element\n status = \"plus\";\n } else {\n status = \"cancel\";\n }\n }\n }\n\n this.options.drag({\n originalEvent: e.originalEvent,\n source: source,\n target: target,\n pageY: e.y.location,\n pageX: e.x.location,\n status: status,\n setStatus: function(value) {\n status = value;\n }\n });\n\n if (status.indexOf(\"insert\") !== 0) {\n this.dropHint.css(VISIBILITY, \"hidden\");\n }\n\n this._hintStatus(status);\n },\n\n dragcancel: function() {\n if (this.dropHint) {\n this.dropHint.remove();\n }\n },\n\n dragend: function(e) {\n var position = \"over\",\n source = this.source,\n destination,\n dropHint = this.dropHint,\n dropTarget = this.dropTarget || $(kendo.eventTarget(e)),\n eventArgs, dropPrevented, requireTarget;\n\n if (dropHint && dropHint.css(VISIBILITY) == \"visible\") {\n position = this.options.dropPositionFrom(dropHint);\n destination = dropHint.closest(this.options.itemSelector);\n requireTarget = true;\n } else if (dropTarget) {\n destination = dropTarget.closest(this.options.itemSelector);\n\n // moving node to root element\n if (!destination.length) {\n destination = dropTarget.closest(this.options.allowedContainers);\n }\n }\n\n if (requireTarget && !destination.length) {\n this.dragcancel();\n return;\n }\n\n eventArgs = {\n originalEvent: e.originalEvent,\n source: source[0],\n destination: destination[0],\n valid: this.status != \"cancel\",\n setValid: function(newValid) {\n this.valid = newValid;\n },\n dropTarget: dropTarget[0],\n position: position\n };\n\n dropPrevented = this.options.drop(eventArgs);\n\n dropHint.remove();\n this._removeTouchHover();\n if (this._lastHover) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n\n if (!eventArgs.valid || dropPrevented) {\n this._draggable.dropped = eventArgs.valid;\n return;\n }\n\n this._draggable.dropped = true;\n\n this.options.dragend({\n originalEvent: e.originalEvent,\n source: source,\n destination: destination,\n position: position\n });\n },\n\n destroy: function() {\n this._lastHover = this.hovered = null;\n this._draggable.destroy();\n }\n });\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}