diff --git a/dist/x-bubbles.js b/dist/x-bubbles.js index 4635d54..c293b55 100644 --- a/dist/x-bubbles.js +++ b/dist/x-bubbles.js @@ -268,6 +268,7 @@ var XBubbles = exports.scrollX = scrollX; exports.scrollY = scrollY; + exports.dispatch = dispatch; exports.pageX = function (event) { return event.pageX === null && event.clientX !== null ? event.clientX + scrollX() : event.pageX; @@ -828,7 +829,12 @@ var XBubbles = exports.EV = { BUBBLE_EDIT: 'bubble-edit', BUBBLE_INPUT: 'bubble-input', - CHANGE: 'change' + CHANGE: 'change', + DRAGEND: 'dragend', + DRAGENTER: 'dragenter', + DRAGLEAVE: 'dragleave', + DRAGSTART: 'dragstart', + DROP: 'drop' }; /***/ }, @@ -2022,6 +2028,7 @@ var XBubbles = var _require = __webpack_require__(7); var CLS = _require.CLS; + var EV = _require.EV; var _require2 = __webpack_require__(15); @@ -2059,8 +2066,8 @@ var XBubbles = onMouseup: onMouseup.bind(this, nodeSet), onMousemove: events.throttle(onMousemove.bind(this, nodeSet)), onScroll: events.throttle(onScroll.bind(this, nodeSet)), - nodeOffsetX: events.pageX(event) - nodeBubble.offsetLeft, - nodeOffsetY: events.pageY(event) - nodeBubble.offsetTop, + nodeOffsetX: event.offsetX, + nodeOffsetY: event.offsetY, x: 0, y: 0 }; @@ -2090,8 +2097,11 @@ var XBubbles = } if (currentMoveSet) { - currentMoveSet.classList.remove(CLS.DROPZONE); + var _ = currentMoveSet; currentMoveSet = null; + + _.classList.remove(CLS.DROPZONE); + events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false }); } if (currentDragSet) { @@ -2113,8 +2123,12 @@ var XBubbles = } } - currentDragSet.classList.remove(CLS.DRAGSTART); + var _ = currentDragSet; currentDragSet = null; + + _.classList.remove(CLS.DRAGSTART); + events.dispatch(_, EV.DROP, { bubbles: false, cancelable: false }); + events.dispatch(_, EV.DRAGEND, { bubbles: false, cancelable: false }); })(); } } @@ -2151,6 +2165,8 @@ var XBubbles = currentDragElement = document.body.appendChild(document.createElement('div')); currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;'; currentDragElement.appendChild(moveElement); + + events.dispatch(currentDragSet, EV.DRAGSTART, { bubbles: false, cancelable: false }); } drag.x = event.clientX; @@ -2163,13 +2179,18 @@ var XBubbles = currentMoveSet.classList.remove(CLS.DROPZONE); nodeSet.classList.add(CLS.DROPZONE); currentMoveSet = nodeSet; + events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false }); } else if (!currentMoveSet) { nodeSet.classList.add(CLS.DROPZONE); currentMoveSet = nodeSet; + events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false }); } } else if (currentMoveSet) { - currentMoveSet.classList.remove(CLS.DROPZONE); + var _ = currentMoveSet; currentMoveSet = null; + + _.classList.remove(CLS.DROPZONE); + events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false }); } } diff --git a/dist/x-bubbles.min.js b/dist/x-bubbles.min.js index 029581d..f181a22 100644 --- a/dist/x-bubbles.min.js +++ b/dist/x-bubbles.min.js @@ -1,2 +1,2 @@ -var XBubbles=function(e){function t(n){if(u[n])return u[n].exports;var r=u[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var u={};return t.m=e,t.c=u,t.p="",t(0)}([function(e,t,u){"use strict";function n(e){for(var t in b){var u=r(b[t],2),n=u[0],o=u[1];e[t]=v[n](e[t]),"undefined"==typeof e[t]&&(e[t]=o)}}var r=function(){function e(e,t){var u=[],n=!0,r=!1,o=void 0;try{for(var i,a=e[Symbol.iterator]();!(n=(i=a.next()).done)&&(u.push(i.value),!t||u.length!==t);n=!0);}catch(l){r=!0,o=l}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw o}}return u}return function(t,u){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,u);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{};e.dispatchEvent(new F(t,u))}var a=u(3),l=u(1),c=u(6),s=u(7),f=s.EV,d=u(8);t.scrollX=r,t.scrollY=o,t.pageX=function(e){return null===e.pageX&&null!==e.clientX?e.clientX+r():e.pageX},t.pageY=function(e){return null===e.pageY&&null!==e.clientY?e.clientY+o():e.pageY},t.one=function(e,t,u){return e.addEventListener(t,function n(r){e.removeEventListener(t,n),u(r)})},t.on=function(e,t,u){var r=u?n({},t,u):t;for(var o in r)e.addEventListener(o,r[o])},t.off=function(e,t,u){var r=u?n({},t,u):t;for(var o in r)e.removeEventListener(o,r[o])},t.prevent=function(e){return e.cancelBubble=!0,e.returnValue=!1,e.stopPropagation(),e.preventDefault(),!1},t.fireEdit=function(e){i(this,f.BUBBLE_EDIT,{bubbles:!1,cancelable:!1,detail:{data:e}})},t.fireChange=function(){i(this,f.CHANGE,{bubbles:!1,cancelable:!1})},t.fireInput=function(){var e=d.currentTextRange(),t=e&&d.textClean(e.toString())||"";this._bubbleValue!==t&&(this._bubbleValue=t,i(this,f.BUBBLE_INPUT,{bubbles:!1,cancelable:!1,detail:{data:t}}))},t.throttle=function(e){var t=0,u=function(){t=0};return function(){t||(t=a(u),e.apply(this,arguments))}};var F=function(){return"function"==typeof l.CustomEvent?l.CustomEvent:c}()},function(e,t,u){(function(t){for(var n=u(4),r="undefined"==typeof window?t:window,o=["moz","webkit"],i="AnimationFrame",a=r["request"+i],l=r["cancel"+i]||r["cancelRequest"+i],c=0;!a&&c1)for(var u=1;us)l=l.nextSibling,c=0;else{var f=l.nodeValue.substring(c,c+1);if(!F(f))break;c+=1}}if(!l)return!1;if(t){var d=Boolean(e.extend);if(d)e.extend(l,c+1);else{var p=g.document.createRange();a?(p.setStart(l,c+1),p.setEnd(r,i)):(p.setStart(n,o),p.setEnd(l,c+1)),e.removeAllRanges(),e.addRange(p)}}else e.collapse(l,c+1);return!0}function s(e){if(!e)return"";var t=g.document.implementation.createHTMLDocument("").body;return t.innerText=e,t.innerText.replace(/^[\u0020\u00a0]+$/gm,"").replace(/\n/gm," ").trim()}function f(e,t){e=e||g.getSelection();var u=e&&e.anchorNode;if(!u||u.nodeType!==Node.TEXT_NODE)return!1;for(var n=void 0,r=void 0,o=u;o&&o.nodeType===Node.TEXT_NODE;)n=o,o=o.previousSibling;for(o=u;o&&o.nodeType===Node.TEXT_NODE;)r=o,o=o.nextSibling;var i=A.hasBubbles(t),a=g.document.createRange();a.setStartBefore(n),a.setEndAfter(r);var l=p(a.toString());return!(!l&&(l||i))&&(l||a.collapse(),e.removeAllRanges(),e.addRange(a),!0)}function d(){return g.document.createTextNode(h)}function F(e){return D.test(e)}function p(e){return String(e||"").trim().replace(E,"")}function b(e){var t=e.anchorNode,u=e.focusNode,n=e.anchorOffset,r=e.focusOffset,o=!1;if(t===u)n=Math.min(e.anchorOffset,e.focusOffset),r=Math.max(e.anchorOffset,e.focusOffset),o=e.anchorOffset>e.focusOffset;else{var i=e.anchorNode.compareDocumentPosition(e.focusNode);i&Node.DOCUMENT_POSITION_PRECEDING&&(t=e.focusNode,n=e.focusOffset,u=e.anchorNode,r=e.anchorOffset,o=!0)}return{startNode:t,endNode:u,startOffset:n,endOffset:r,revert:o}}var g=u(1),v=u(9),A=u(11),E=/[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g,D=/\u200B/,h="​";t.arrowRight=c,t.arrowLeft=l,t.remove=o,t.html2text=s,t.currentTextRange=r,t.text2bubble=n,t.replaceString=a,t.selectAll=f,t.textClean=p,t.checkZws=F,t.createZws=d},function(e,t,u){"use strict";function n(e){return!(!e||e.nodeType!==Node.ELEMENT_NODE)&&e.hasAttribute("bubble")}function r(e,t){if(t.hasAttribute("readonly"))return!1;var u=d.getSelection();if(!u)return!1;var n=e.options("bubbleDeformation"),r=n(t);if(!r){var o=F.textClean(t.innerText);r={text:o,startOffset:0,endOffset:o.length}}var i=F.createZws(),a=d.document.createTextNode(r.text);e.fireEdit(t),e.replaceChild(a,t),e.insertBefore(i,a);var l=d.document.createRange();return l.setStart(a,r.startOffset),l.setEnd(a,r.endOffset),u.removeAllRanges(),u.addRange(l),!0}function o(e,t){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t=F.textClean(t)){var n=e.options("bubbleFormation"),r=e.options("classBubble"),o=g()&&e.options("draggable"),i=d.document.createElement("span");i.innerText=t,o&&i.setAttribute("draggable","true");for(var a in u)u[a]&&i.setAttribute("data-"+a,b(u[a]));if(n(i),r)for(var l=String(r).trim().split(/\s+/),c=l.length;c--;)i.classList.add(l[c]);return i.setAttribute("bubble",""),i.setAttribute("contenteditable","false"),i}}function i(e){var t=e.options("separator"),u=e.options("ending"),n=e.options("begining"),r=a(e),i=[];return r.forEach(function(r){var a=F.textClean(r.toString());if(!a)return void r.deleteContents();var p=[a];t&&(p=a.split(t).map(l).filter(c)),u?p=p.reduce(function(e,t){return e.concat(s(t,u))},[]).map(l).filter(c):n&&(p=p.reduce(function(e,t){return e.concat(f(t,n))},[]).map(l).filter(c)),p.length||r.deleteContents();var b=d.document.createDocumentFragment();p.forEach(function(t){var u=o(e,t);u&&(b.appendChild(u),i.push(u))}),r.deleteContents(),r.insertNode(b)}),e.fireInput(),i.length&&e.fireChange(),i}function a(e){for(var t=[],u=e.childNodes,r=void 0,o=void 0,i=0;i":">",'"':""","'":"'","`":"`"},a={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},l=/&(?:amp|lt|gt|quot|#39|#96);/g,c=/[&<>"'`]/g,s=RegExp(l.source),f=RegExp(c.source),d=/Trident|Edge/;t.escape=function(e){return e=String(e),e&&f.test(e)?e.replace(c,r):e},t.unescape=function(e){return e=String(e),e&&s.test(e)?e.replace(l,n):e},t.canUseDrag=function(){return!d.test(o.navigator.userAgent)}},function(e,t,u){"use strict";function n(e){return e.querySelector("[bubble]:last-child")}function r(e){return e.querySelector("[bubble]:first-child")}function o(e){return Array.prototype.slice.call(e.querySelectorAll("[bubble]"))}function i(e){return Boolean(e.querySelector("[bubble]"))}function a(e){if(e.focusNode&&e.anchorNode){var t=e.focusNode.previousSibling;for(e.anchorNode!==e.focusNode&&e.anchorNode.compareDocumentPosition(e.focusNode)&Node.DOCUMENT_POSITION_FOLLOWING&&(t=e.anchorNode.previousSibling);t;){if(d.isBubbleNode(t))return t;if(t.nodeType===Node.TEXT_NODE&&F.textClean(t.nodeValue))return;t=t.previousSibling}}}function l(e){for(;e;){if(e.nodeType===Node.ELEMENT_NODE&&"x-bubbles"===e.getAttribute("is"))return e;e=e.parentNode}}function c(e){for(;e;){if(d.isBubbleNode(e))return e;e=e.parentNode}}function s(e){for(var t=e&&e.previousSibling;t;){if(d.isBubbleNode(t))return t;t=t.previousSibling}}function f(e){for(var t=e&&e.nextSibling;t;){if(d.isBubbleNode(t))return t;t=t.nextSibling}}var d=u(9),F=u(8);t.closestNodeBubble=c,t.closestNodeSet=l,t.findBubbleLeft=a,t.getBubbles=o,t.hasBubbles=i,t.headBubble=r,t.lastBubble=n,t.nextBubble=f,t.prevBubble=s},function(e,t,u){"use strict";var n=u(13),r=u(17),o=u(10),i=o.canUseDrag;t.init=function(e){return i()?n.init(e):r.init(e)},t.destroy=function(e){return i()?n.destroy(e):r.destroy(e)}},function(e,t,u){"use strict";function n(e){e.stopPropagation();var t=f.closestNodeSet(e.target),u=f.closestNodeBubble(e.target);if(!t||!u)return void e.preventDefault();var n=c.getSelection();n&&n.removeAllRanges(),E=t,t.classList.add(p.DRAGSTART),s.add(u),e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain","");var r=s.get(E);r.length>1&&e.dataTransfer.setDragImage(g(),v,v)}function r(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);if(t&&t!==E){var u=s.get(E);u.length&&(u.forEach(function(e){return t.appendChild(e)}),setTimeout(function(){t.focus(),t.fireChange()},0))}}}function o(e){e.stopPropagation(),e.preventDefault(),E&&(e.dataTransfer.dropEffect="move")}function i(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.add(p.DROPZONE)}}function a(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.remove(p.DROPZONE)}}function l(e){if(e.stopPropagation(),e.preventDefault(),E){E.classList.remove(p.DRAGSTART);var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.remove(p.DROPZONE),E=null}}var c=u(1),s=u(14),f=u(11),d=u(2),F=u(7),p=F.CLS,b=u(15),g=b.getDragImage,v=b.DRAG_IMG_WIDTH,A={dragend:l,dragenter:i,dragleave:a,dragover:o,dragstart:n,drop:r},E=null;t.init=function(e){d.on(e,A)},t.destroy=function(e){d.off(e,A)}},function(e,t,u){"use strict";function n(e){if(v.isBubbleNode(e)){var t=e.parentNode,u=l(t);if(!u.length)return void f(e);c(t);var n=u[0],r=u[u.length-1];n!==r&&t.startRangeSelect||(t.startRangeSelect=n);var o=void 0,i=void 0,a=e.compareDocumentPosition(t.startRangeSelect);if(a&Node.DOCUMENT_POSITION_PRECEDING?(o=t.startRangeSelect,i=e):(o=e,i=t.startRangeSelect),o&&i){for(var s=o;s&&p(s)&&s!==i;)s=s.nextSibling;v.bubbling(t)}}}function r(e){E.call(e.querySelectorAll(h)).forEach(function(e){return p(e)}),e.startRangeSelect=e.querySelector(D),v.bubbling(e);var t=g.getSelection();t&&t.removeAllRanges()}function o(e){return Boolean(e.querySelector(D))}function i(e){return l(e)[0]}function a(e){var t=l(e);return t[t.length-1]}function l(e){return E.call(e.querySelectorAll(D))}function c(e){l(e).forEach(function(e){return e.removeAttribute("selected")})}function s(e){if(p(e)){var t=A.closestNodeSet(e);return t.startRangeSelect=e,v.bubbling(t),!0}return!1}function f(e){if(!v.isBubbleNode(e))return!1;var t=A.closestNodeSet(e),u=g.getSelection();return u&&u.removeAllRanges(),c(t),s(e)}function d(e){if(F(e)){var t=A.closestNodeSet(e);if(1===l(t).length)return b(e)}return f(e)}function F(e){return v.isBubbleNode(e)&&e.hasAttribute("selected")||!1}function p(e){return!!v.isBubbleNode(e)&&(e.setAttribute("selected",""),!0)}function b(e){return!!v.isBubbleNode(e)&&(e.removeAttribute("selected"),!0)}var g=u(1),v=u(9),A=u(11),E=Array.prototype.slice,D="[bubble][selected]",h="[bubble]:not([selected])";t.all=r,t.add=s,t.clear=c,t.get=l,t.uniq=f,t.head=i,t.last=a,t.has=o,t.range=n,t.toggleUniq=d},function(e,t,u){"use strict";var n=16,r=null;t.DRAG_IMG_WIDTH=n,t.getDragImage=function(){return r||(r=new Image,r.src=u(16)),r}},function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg=="},function(e,t,u){"use strict";function n(e){var t=s.closestNodeBubble(e.target);if(t){var u=s.closestNodeSet(e.target);if(u){e.preventDefault(),u.focus();var n=u.__drag__={onMouseup:r.bind(this,u),onMousemove:l.throttle(o.bind(this,u)),onScroll:l.throttle(i.bind(this,u)),nodeOffsetX:l.pageX(e)-t.offsetLeft,nodeOffsetY:l.pageY(e)-t.offsetTop,x:0,y:0};v=null,A=null,E=null,l.one(document,"mouseup",n.onMouseup),l.on(document,"mousemove",n.onMousemove),l.on(document,"scroll",n.onScroll)}}}function r(e,t){var u=e.__drag__;u&&(l.off(document,"mousemove",u.onMousemove),l.off(document,"scroll",u.onScroll),delete e.__drag__,E&&(E.parentNode&&E.parentNode.removeChild(E),E=null),A&&(A.classList.remove(F.DROPZONE),A=null),v&&!function(){var e=s.closestNodeSet(t.target);if(e&&e!==v){var u=c.get(v);u.length&&(u.forEach(function(t){return e.appendChild(t)}),setTimeout(function(){e.focus(),e.fireChange()},0))}v.classList.remove(F.DRAGSTART),v=null}())}function o(e,t){var u=e.__drag__;if(u){if(!v){var n=a.getSelection();n&&n.removeAllRanges(),v=e,v.classList.add(F.DRAGSTART);var r=s.closestNodeBubble(t.target),o=void 0;r&&(c.add(r),1===c.get(v).length&&(o=r.cloneNode(!0))),o||(o=b(),u.nodeOffsetX=g,u.nodeOffsetY=g),E=document.body.appendChild(document.createElement("div")),E.style.cssText="position:absolute;z-index:9999;pointer-events:none;top:0;left:0;",E.appendChild(o)}u.x=t.clientX,u.y=t.clientY,i(e);var l=s.closestNodeSet(t.target);l&&l!==v?A&&A!==l?(A.classList.remove(F.DROPZONE),l.classList.add(F.DROPZONE),A=l):A||(l.classList.add(F.DROPZONE),A=l):A&&(A.classList.remove(F.DROPZONE),A=null)}}function i(e){var t=e.__drag__;if(t&&E){var u=t.x-t.nodeOffsetX+l.scrollX(),n=t.y-t.nodeOffsetY+l.scrollY();f.csstransforms3d?E.style.transform="translate3d("+u+"px, "+n+"px, 0px)":f.csstransforms?E.style.transform="translate("+u+"px, "+n+"px)":(E.style.top=n+"px",E.style.left=u+"px")}}var a=u(1),l=u(2),c=u(14),s=u(11),f=u(18),d=u(7),F=d.CLS,p=u(15),b=p.getDragImage,g=p.DRAG_IMG_WIDTH,v=null,A=null,E=null;t.init=function(e){l.on(e,"mousedown",n)},t.destroy=function(e){l.off(e,"mousedown",n)}},function(e,t){e.exports=Modernizr},function(e,t,u){"use strict";function n(e){A.clear(e.currentTarget),g.bubbling(e.currentTarget)}function r(e){v.restore(e.currentTarget)}function o(e){var t=e.charCode||e.keyCode,u=e.key?1===e.key.length:(t>47||t===D.Space||t===D.Backspace)&&t!==D.Cmd;u&&e.currentTarget.fireInput()}function i(e){var t=e.charCode||e.keyCode,u=e.currentTarget;switch(t){case D.Enter:e.preventDefault(),u.hasAttribute("disable-controls")||(g.bubbling(u),v.restore(u));break;case D.Comma:case D.Semicolon:e.preventDefault(),g.bubbling(u),v.restore(u)}}function a(e){var t=e.charCode||e.keyCode,u=e.ctrlKey||e.metaKey,n=e.currentTarget,r=!n.hasAttribute("disable-controls");switch(t){case D.Esc:e.preventDefault(),g.bubbling(n),v.restore(n);break;case D.Backspace:e.preventDefault(),s(e);break;case D.Left:e.preventDefault(),l(e);break;case D.Top:if(e.preventDefault(),r){var o=b.headBubble(n);o&&A.uniq(o)}break;case D.Right:e.preventDefault(),c(e);break;case D.Bottom:e.preventDefault(),r&&A.has(n)&&v.restore(n);break;case D.a:u&&(e.preventDefault(),h.selectAll(null,e.currentTarget)||A.all(n))}}function l(e){var t=p.getSelection();if(!h.arrowLeft(t,e.shiftKey)){if(t.anchorNode&&t.anchorNode.nodeType===Node.TEXT_NODE){var u=b.prevBubble(t.anchorNode);return void(u&&A.uniq(u))}var n=e.currentTarget,r=A.get(n),o=r.length>1&&r[0]===n.startRangeSelect?r[r.length-1]:r[0],i=b.prevBubble(o);i&&(e.shiftKey?A.range(i):A.uniq(i))}}function c(e){var t=p.getSelection();if(!h.arrowRight(t,e.shiftKey)){if(t.focusNode&&t.focusNode.nodeType===Node.TEXT_NODE){var u=b.nextBubble(t.focusNode);return void(u&&A.uniq(u))}var n=e.currentTarget,r=A.get(n),o=r.length>1&&r[r.length-1]===n.startRangeSelect?r[0]:r[r.length-1],i=b.nextBubble(o);i?e.shiftKey?A.range(i):A.uniq(i):o&&o.nextSibling&&o.nextSibling.nodeType===Node.TEXT_NODE?(A.clear(n),t.collapse(o.nextSibling,0)):v.restore(n)}}function s(e){var t=e.currentTarget;t.normalize();var u=p.getSelection();if(u){if(!u.isCollapsed)return h.remove(u),void t.fireInput();if(h.arrowLeft(u,!0))return h.remove(u),void t.fireInput();var n=b.findBubbleLeft(u);if(n)return void A.uniq(n);var r=A.get(t);if(r.length){var o=r[0].previousSibling,i=r[r.length-1].nextSibling;r.forEach(function(e){return e.parentNode.removeChild(e)}),g.isBubbleNode(o)?A.uniq(o):g.isBubbleNode(i)?A.uniq(i):(t.focus(),v.restore(t)),t.fireChange()}}}function f(e){e.preventDefault();var t=e.clipboardData;if(t){var u="text/plain",n=t.getData&&t.getData(u);!h.replaceString(n)&&t.items&&Array.prototype.slice.call(t.items).filter(function(e){return"string"===e.kind&&e.type===u}).some(function(e){return e.getAsString(h.replaceString),!0})}}function d(e){var t=b.closestNodeSet(e.target),u=b.closestNodeBubble(e.target);t&&u&&(e.preventDefault(),g.edit(t,u))}function F(e){var t=b.closestNodeSet(e.target);if(t){var u=b.closestNodeBubble(e.target);if(u)e.metaKey||e.ctrlKey?A.add(u):e.shiftKey?t.startRangeSelect?A.range(u):A.uniq(u):A.toggleUniq(u);else{A.clear(t);var n=p.getSelection();n&&n.anchorNode&&n.anchorNode.nodeType===Node.TEXT_NODE||v.restore(t)}}}var p=u(1),b=u(11),g=u(9),v=u(20),A=u(14),E=u(7),D=E.KEY,h=u(8),B=u(2),C={blur:n,click:F,dblclick:d,focus:r,keydown:a,keypress:i,keyup:o,paste:f};t.init=function(e){B.on(e,C)},t.destroy=function(e){B.off(e,C)}},function(e,t,u){"use strict";function n(e){a.clear(e);var t=r(e),u=o.getSelection();u.removeAllRanges(),u.collapse(t,1)}function r(e){var t=i.createZws();if(e.hasChildNodes()){var u=e.childNodes[e.childNodes.length-1];u.isEqualNode(t)?t=u:e.appendChild(t)}else e.appendChild(t);return t}var o=u(1),i=u(8),a=u(14);t.restore=n,t.restoreBasis=r}]); +var XBubbles=function(e){function t(n){if(u[n])return u[n].exports;var r=u[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var u={};return t.m=e,t.c=u,t.p="",t(0)}([function(e,t,u){"use strict";function n(e){for(var t in p){var u=r(p[t],2),n=u[0],o=u[1];e[t]=g[n](e[t]),"undefined"==typeof e[t]&&(e[t]=o)}}var r=function(){function e(e,t){var u=[],n=!0,r=!1,o=void 0;try{for(var i,a=e[Symbol.iterator]();!(n=(i=a.next()).done)&&(u.push(i.value),!t||u.length!==t);n=!0);}catch(l){r=!0,o=l}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw o}}return u}return function(t,u){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,u);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{};e.dispatchEvent(new b(t,u))}var a=u(3),l=u(1),c=u(6),s=u(7),f=s.EV,d=u(8);t.scrollX=r,t.scrollY=o,t.dispatch=i,t.pageX=function(e){return null===e.pageX&&null!==e.clientX?e.clientX+r():e.pageX},t.pageY=function(e){return null===e.pageY&&null!==e.clientY?e.clientY+o():e.pageY},t.one=function(e,t,u){return e.addEventListener(t,function n(r){e.removeEventListener(t,n),u(r)})},t.on=function(e,t,u){var r=u?n({},t,u):t;for(var o in r)e.addEventListener(o,r[o])},t.off=function(e,t,u){var r=u?n({},t,u):t;for(var o in r)e.removeEventListener(o,r[o])},t.prevent=function(e){return e.cancelBubble=!0,e.returnValue=!1,e.stopPropagation(),e.preventDefault(),!1},t.fireEdit=function(e){i(this,f.BUBBLE_EDIT,{bubbles:!1,cancelable:!1,detail:{data:e}})},t.fireChange=function(){i(this,f.CHANGE,{bubbles:!1,cancelable:!1})},t.fireInput=function(){var e=d.currentTextRange(),t=e&&d.textClean(e.toString())||"";this._bubbleValue!==t&&(this._bubbleValue=t,i(this,f.BUBBLE_INPUT,{bubbles:!1,cancelable:!1,detail:{data:t}}))},t.throttle=function(e){var t=0,u=function(){t=0};return function(){t||(t=a(u),e.apply(this,arguments))}};var b=function(){return"function"==typeof l.CustomEvent?l.CustomEvent:c}()},function(e,t,u){(function(t){for(var n=u(4),r="undefined"==typeof window?t:window,o=["moz","webkit"],i="AnimationFrame",a=r["request"+i],l=r["cancel"+i]||r["cancelRequest"+i],c=0;!a&&c1)for(var u=1;us)l=l.nextSibling,c=0;else{var f=l.nodeValue.substring(c,c+1);if(!b(f))break;c+=1}}if(!l)return!1;if(t){var d=Boolean(e.extend);if(d)e.extend(l,c+1);else{var F=A.document.createRange();a?(F.setStart(l,c+1),F.setEnd(r,i)):(F.setStart(n,o),F.setEnd(l,c+1)),e.removeAllRanges(),e.addRange(F)}}else e.collapse(l,c+1);return!0}function s(e){if(!e)return"";var t=A.document.implementation.createHTMLDocument("").body;return t.innerText=e,t.innerText.replace(/^[\u0020\u00a0]+$/gm,"").replace(/\n/gm," ").trim()}function f(e,t){e=e||A.getSelection();var u=e&&e.anchorNode;if(!u||u.nodeType!==Node.TEXT_NODE)return!1;for(var n=void 0,r=void 0,o=u;o&&o.nodeType===Node.TEXT_NODE;)n=o,o=o.previousSibling;for(o=u;o&&o.nodeType===Node.TEXT_NODE;)r=o,o=o.nextSibling;var i=v.hasBubbles(t),a=A.document.createRange();a.setStartBefore(n),a.setEndAfter(r);var l=F(a.toString());return!(!l&&(l||i))&&(l||a.collapse(),e.removeAllRanges(),e.addRange(a),!0)}function d(){return A.document.createTextNode(h)}function b(e){return D.test(e)}function F(e){return String(e||"").trim().replace(E,"")}function p(e){var t=e.anchorNode,u=e.focusNode,n=e.anchorOffset,r=e.focusOffset,o=!1;if(t===u)n=Math.min(e.anchorOffset,e.focusOffset),r=Math.max(e.anchorOffset,e.focusOffset),o=e.anchorOffset>e.focusOffset;else{var i=e.anchorNode.compareDocumentPosition(e.focusNode);i&Node.DOCUMENT_POSITION_PRECEDING&&(t=e.focusNode,n=e.focusOffset,u=e.anchorNode,r=e.anchorOffset,o=!0)}return{startNode:t,endNode:u,startOffset:n,endOffset:r,revert:o}}var A=u(1),g=u(9),v=u(11),E=/[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g,D=/\u200B/,h="​";t.arrowRight=c,t.arrowLeft=l,t.remove=o,t.html2text=s,t.currentTextRange=r,t.text2bubble=n,t.replaceString=a,t.selectAll=f,t.textClean=F,t.checkZws=b,t.createZws=d},function(e,t,u){"use strict";function n(e){return!(!e||e.nodeType!==Node.ELEMENT_NODE)&&e.hasAttribute("bubble")}function r(e,t){if(t.hasAttribute("readonly"))return!1;var u=d.getSelection();if(!u)return!1;var n=e.options("bubbleDeformation"),r=n(t);if(!r){var o=b.textClean(t.innerText);r={text:o,startOffset:0,endOffset:o.length}}var i=b.createZws(),a=d.document.createTextNode(r.text);e.fireEdit(t),e.replaceChild(a,t),e.insertBefore(i,a);var l=d.document.createRange();return l.setStart(a,r.startOffset),l.setEnd(a,r.endOffset),u.removeAllRanges(),u.addRange(l),!0}function o(e,t){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t=b.textClean(t)){var n=e.options("bubbleFormation"),r=e.options("classBubble"),o=A()&&e.options("draggable"),i=d.document.createElement("span");i.innerText=t,o&&i.setAttribute("draggable","true");for(var a in u)u[a]&&i.setAttribute("data-"+a,p(u[a]));if(n(i),r)for(var l=String(r).trim().split(/\s+/),c=l.length;c--;)i.classList.add(l[c]);return i.setAttribute("bubble",""),i.setAttribute("contenteditable","false"),i}}function i(e){var t=e.options("separator"),u=e.options("ending"),n=e.options("begining"),r=a(e),i=[];return r.forEach(function(r){var a=b.textClean(r.toString());if(!a)return void r.deleteContents();var F=[a];t&&(F=a.split(t).map(l).filter(c)),u?F=F.reduce(function(e,t){return e.concat(s(t,u))},[]).map(l).filter(c):n&&(F=F.reduce(function(e,t){return e.concat(f(t,n))},[]).map(l).filter(c)),F.length||r.deleteContents();var p=d.document.createDocumentFragment();F.forEach(function(t){var u=o(e,t);u&&(p.appendChild(u),i.push(u))}),r.deleteContents(),r.insertNode(p)}),e.fireInput(),i.length&&e.fireChange(),i}function a(e){for(var t=[],u=e.childNodes,r=void 0,o=void 0,i=0;i":">",'"':""","'":"'","`":"`"},a={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},l=/&(?:amp|lt|gt|quot|#39|#96);/g,c=/[&<>"'`]/g,s=RegExp(l.source),f=RegExp(c.source),d=/Trident|Edge/;t.escape=function(e){return e=String(e),e&&f.test(e)?e.replace(c,r):e},t.unescape=function(e){return e=String(e),e&&s.test(e)?e.replace(l,n):e},t.canUseDrag=function(){return!d.test(o.navigator.userAgent)}},function(e,t,u){"use strict";function n(e){return e.querySelector("[bubble]:last-child")}function r(e){return e.querySelector("[bubble]:first-child")}function o(e){return Array.prototype.slice.call(e.querySelectorAll("[bubble]"))}function i(e){return Boolean(e.querySelector("[bubble]"))}function a(e){if(e.focusNode&&e.anchorNode){var t=e.focusNode.previousSibling;for(e.anchorNode!==e.focusNode&&e.anchorNode.compareDocumentPosition(e.focusNode)&Node.DOCUMENT_POSITION_FOLLOWING&&(t=e.anchorNode.previousSibling);t;){if(d.isBubbleNode(t))return t;if(t.nodeType===Node.TEXT_NODE&&b.textClean(t.nodeValue))return;t=t.previousSibling}}}function l(e){for(;e;){if(e.nodeType===Node.ELEMENT_NODE&&"x-bubbles"===e.getAttribute("is"))return e;e=e.parentNode}}function c(e){for(;e;){if(d.isBubbleNode(e))return e;e=e.parentNode}}function s(e){for(var t=e&&e.previousSibling;t;){if(d.isBubbleNode(t))return t;t=t.previousSibling}}function f(e){for(var t=e&&e.nextSibling;t;){if(d.isBubbleNode(t))return t;t=t.nextSibling}}var d=u(9),b=u(8);t.closestNodeBubble=c,t.closestNodeSet=l,t.findBubbleLeft=a,t.getBubbles=o,t.hasBubbles=i,t.headBubble=r,t.lastBubble=n,t.nextBubble=f,t.prevBubble=s},function(e,t,u){"use strict";var n=u(13),r=u(17),o=u(10),i=o.canUseDrag;t.init=function(e){return i()?n.init(e):r.init(e)},t.destroy=function(e){return i()?n.destroy(e):r.destroy(e)}},function(e,t,u){"use strict";function n(e){e.stopPropagation();var t=f.closestNodeSet(e.target),u=f.closestNodeBubble(e.target);if(!t||!u)return void e.preventDefault();var n=c.getSelection();n&&n.removeAllRanges(),E=t,t.classList.add(F.DRAGSTART),s.add(u),e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain","");var r=s.get(E);r.length>1&&e.dataTransfer.setDragImage(A(),g,g)}function r(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);if(t&&t!==E){var u=s.get(E);u.length&&(u.forEach(function(e){return t.appendChild(e)}),setTimeout(function(){t.focus(),t.fireChange()},0))}}}function o(e){e.stopPropagation(),e.preventDefault(),E&&(e.dataTransfer.dropEffect="move")}function i(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.add(F.DROPZONE)}}function a(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.remove(F.DROPZONE)}}function l(e){if(e.stopPropagation(),e.preventDefault(),E){E.classList.remove(F.DRAGSTART);var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.remove(F.DROPZONE),E=null}}var c=u(1),s=u(14),f=u(11),d=u(2),b=u(7),F=b.CLS,p=u(15),A=p.getDragImage,g=p.DRAG_IMG_WIDTH,v={dragend:l,dragenter:i,dragleave:a,dragover:o,dragstart:n,drop:r},E=null;t.init=function(e){d.on(e,v)},t.destroy=function(e){d.off(e,v)}},function(e,t,u){"use strict";function n(e){if(g.isBubbleNode(e)){var t=e.parentNode,u=l(t);if(!u.length)return void f(e);c(t);var n=u[0],r=u[u.length-1];n!==r&&t.startRangeSelect||(t.startRangeSelect=n);var o=void 0,i=void 0,a=e.compareDocumentPosition(t.startRangeSelect);if(a&Node.DOCUMENT_POSITION_PRECEDING?(o=t.startRangeSelect,i=e):(o=e,i=t.startRangeSelect),o&&i){for(var s=o;s&&F(s)&&s!==i;)s=s.nextSibling;g.bubbling(t)}}}function r(e){E.call(e.querySelectorAll(h)).forEach(function(e){return F(e)}),e.startRangeSelect=e.querySelector(D),g.bubbling(e);var t=A.getSelection();t&&t.removeAllRanges()}function o(e){return Boolean(e.querySelector(D))}function i(e){return l(e)[0]}function a(e){var t=l(e);return t[t.length-1]}function l(e){return E.call(e.querySelectorAll(D))}function c(e){l(e).forEach(function(e){return e.removeAttribute("selected")})}function s(e){if(F(e)){var t=v.closestNodeSet(e);return t.startRangeSelect=e,g.bubbling(t),!0}return!1}function f(e){if(!g.isBubbleNode(e))return!1;var t=v.closestNodeSet(e),u=A.getSelection();return u&&u.removeAllRanges(),c(t),s(e)}function d(e){if(b(e)){var t=v.closestNodeSet(e);if(1===l(t).length)return p(e)}return f(e)}function b(e){return g.isBubbleNode(e)&&e.hasAttribute("selected")||!1}function F(e){return!!g.isBubbleNode(e)&&(e.setAttribute("selected",""),!0)}function p(e){return!!g.isBubbleNode(e)&&(e.removeAttribute("selected"),!0)}var A=u(1),g=u(9),v=u(11),E=Array.prototype.slice,D="[bubble][selected]",h="[bubble]:not([selected])";t.all=r,t.add=s,t.clear=c,t.get=l,t.uniq=f,t.head=i,t.last=a,t.has=o,t.range=n,t.toggleUniq=d},function(e,t,u){"use strict";var n=16,r=null;t.DRAG_IMG_WIDTH=n,t.getDragImage=function(){return r||(r=new Image,r.src=u(16)),r}},function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg=="},function(e,t,u){"use strict";function n(e){var t=s.closestNodeBubble(e.target);if(t){var u=s.closestNodeSet(e.target);if(u){e.preventDefault(),u.focus();var n=u.__drag__={onMouseup:r.bind(this,u),onMousemove:l.throttle(o.bind(this,u)),onScroll:l.throttle(i.bind(this,u)),nodeOffsetX:e.offsetX,nodeOffsetY:e.offsetY,x:0,y:0};v=null,E=null,D=null,l.one(document,"mouseup",n.onMouseup),l.on(document,"mousemove",n.onMousemove),l.on(document,"scroll",n.onScroll)}}}function r(e,t){var u=e.__drag__;if(u){if(l.off(document,"mousemove",u.onMousemove),l.off(document,"scroll",u.onScroll),delete e.__drag__,D&&(D.parentNode&&D.parentNode.removeChild(D),D=null),E){var n=E;E=null,n.classList.remove(b.DROPZONE),l.dispatch(n,F.DRAGLEAVE,{bubbles:!1,cancelable:!1})}v&&!function(){var e=s.closestNodeSet(t.target);if(e&&e!==v){var u=c.get(v);u.length&&(u.forEach(function(t){return e.appendChild(t)}),setTimeout(function(){e.focus(),e.fireChange()},0))}var n=v;v=null,n.classList.remove(b.DRAGSTART),l.dispatch(n,F.DROP,{bubbles:!1,cancelable:!1}),l.dispatch(n,F.DRAGEND,{bubbles:!1,cancelable:!1})}()}}function o(e,t){var u=e.__drag__;if(u){if(!v){var n=a.getSelection();n&&n.removeAllRanges(),v=e,v.classList.add(b.DRAGSTART);var r=s.closestNodeBubble(t.target),o=void 0;r&&(c.add(r),1===c.get(v).length&&(o=r.cloneNode(!0))),o||(o=A(),u.nodeOffsetX=g,u.nodeOffsetY=g),D=document.body.appendChild(document.createElement("div")),D.style.cssText="position:absolute;z-index:9999;pointer-events:none;top:0;left:0;",D.appendChild(o),l.dispatch(v,F.DRAGSTART,{bubbles:!1,cancelable:!1})}u.x=t.clientX,u.y=t.clientY,i(e);var f=s.closestNodeSet(t.target);if(f&&f!==v)E&&E!==f?(E.classList.remove(b.DROPZONE),f.classList.add(b.DROPZONE),E=f,l.dispatch(E,F.DRAGENTER,{bubbles:!1,cancelable:!1})):E||(f.classList.add(b.DROPZONE),E=f,l.dispatch(E,F.DRAGENTER,{bubbles:!1,cancelable:!1}));else if(E){var d=E;E=null,d.classList.remove(b.DROPZONE),l.dispatch(d,F.DRAGLEAVE,{bubbles:!1,cancelable:!1})}}}function i(e){var t=e.__drag__;if(t&&D){var u=t.x-t.nodeOffsetX+l.scrollX(),n=t.y-t.nodeOffsetY+l.scrollY();f.csstransforms3d?D.style.transform="translate3d("+u+"px, "+n+"px, 0px)":f.csstransforms?D.style.transform="translate("+u+"px, "+n+"px)":(D.style.top=n+"px",D.style.left=u+"px")}}var a=u(1),l=u(2),c=u(14),s=u(11),f=u(18),d=u(7),b=d.CLS,F=d.EV,p=u(15),A=p.getDragImage,g=p.DRAG_IMG_WIDTH,v=null,E=null,D=null;t.init=function(e){l.on(e,"mousedown",n)},t.destroy=function(e){l.off(e,"mousedown",n)}},function(e,t){e.exports=Modernizr},function(e,t,u){"use strict";function n(e){v.clear(e.currentTarget),A.bubbling(e.currentTarget)}function r(e){g.restore(e.currentTarget)}function o(e){var t=e.charCode||e.keyCode,u=e.key?1===e.key.length:(t>47||t===D.Space||t===D.Backspace)&&t!==D.Cmd;u&&e.currentTarget.fireInput()}function i(e){var t=e.charCode||e.keyCode,u=e.currentTarget;switch(t){case D.Enter:e.preventDefault(),u.hasAttribute("disable-controls")||(A.bubbling(u),g.restore(u));break;case D.Comma:case D.Semicolon:e.preventDefault(),A.bubbling(u),g.restore(u)}}function a(e){var t=e.charCode||e.keyCode,u=e.ctrlKey||e.metaKey,n=e.currentTarget,r=!n.hasAttribute("disable-controls");switch(t){case D.Esc:e.preventDefault(),A.bubbling(n),g.restore(n);break;case D.Backspace:e.preventDefault(),s(e);break;case D.Left:e.preventDefault(),l(e);break;case D.Top:if(e.preventDefault(),r){var o=p.headBubble(n);o&&v.uniq(o)}break;case D.Right:e.preventDefault(),c(e);break;case D.Bottom:e.preventDefault(),r&&v.has(n)&&g.restore(n);break;case D.a:u&&(e.preventDefault(),h.selectAll(null,e.currentTarget)||v.all(n))}}function l(e){var t=F.getSelection();if(!h.arrowLeft(t,e.shiftKey)){if(t.anchorNode&&t.anchorNode.nodeType===Node.TEXT_NODE){var u=p.prevBubble(t.anchorNode);return void(u&&v.uniq(u))}var n=e.currentTarget,r=v.get(n),o=r.length>1&&r[0]===n.startRangeSelect?r[r.length-1]:r[0],i=p.prevBubble(o);i&&(e.shiftKey?v.range(i):v.uniq(i))}}function c(e){var t=F.getSelection();if(!h.arrowRight(t,e.shiftKey)){if(t.focusNode&&t.focusNode.nodeType===Node.TEXT_NODE){var u=p.nextBubble(t.focusNode);return void(u&&v.uniq(u))}var n=e.currentTarget,r=v.get(n),o=r.length>1&&r[r.length-1]===n.startRangeSelect?r[0]:r[r.length-1],i=p.nextBubble(o);i?e.shiftKey?v.range(i):v.uniq(i):o&&o.nextSibling&&o.nextSibling.nodeType===Node.TEXT_NODE?(v.clear(n),t.collapse(o.nextSibling,0)):g.restore(n)}}function s(e){var t=e.currentTarget;t.normalize();var u=F.getSelection();if(u){if(!u.isCollapsed)return h.remove(u),void t.fireInput();if(h.arrowLeft(u,!0))return h.remove(u),void t.fireInput();var n=p.findBubbleLeft(u);if(n)return void v.uniq(n);var r=v.get(t);if(r.length){var o=r[0].previousSibling,i=r[r.length-1].nextSibling;r.forEach(function(e){return e.parentNode.removeChild(e)}),A.isBubbleNode(o)?v.uniq(o):A.isBubbleNode(i)?v.uniq(i):(t.focus(),g.restore(t)),t.fireChange()}}}function f(e){e.preventDefault();var t=e.clipboardData;if(t){var u="text/plain",n=t.getData&&t.getData(u);!h.replaceString(n)&&t.items&&Array.prototype.slice.call(t.items).filter(function(e){return"string"===e.kind&&e.type===u}).some(function(e){return e.getAsString(h.replaceString),!0})}}function d(e){var t=p.closestNodeSet(e.target),u=p.closestNodeBubble(e.target);t&&u&&(e.preventDefault(),A.edit(t,u))}function b(e){var t=p.closestNodeSet(e.target);if(t){var u=p.closestNodeBubble(e.target);if(u)e.metaKey||e.ctrlKey?v.add(u):e.shiftKey?t.startRangeSelect?v.range(u):v.uniq(u):v.toggleUniq(u);else{v.clear(t);var n=F.getSelection();n&&n.anchorNode&&n.anchorNode.nodeType===Node.TEXT_NODE||g.restore(t)}}}var F=u(1),p=u(11),A=u(9),g=u(20),v=u(14),E=u(7),D=E.KEY,h=u(8),B=u(2),C={blur:n,click:b,dblclick:d,focus:r,keydown:a,keypress:i,keyup:o,paste:f};t.init=function(e){B.on(e,C)},t.destroy=function(e){B.off(e,C)}},function(e,t,u){"use strict";function n(e){a.clear(e);var t=r(e),u=o.getSelection();u.removeAllRanges(),u.collapse(t,1)}function r(e){var t=i.createZws();if(e.hasChildNodes()){var u=e.childNodes[e.childNodes.length-1];u.isEqualNode(t)?t=u:e.appendChild(t)}else e.appendChild(t);return t}var o=u(1),i=u(8),a=u(14);t.restore=n,t.restoreBasis=r}]); //# sourceMappingURL=x-bubbles.min.js.map \ No newline at end of file diff --git a/dist/x-bubbles.min.js.map b/dist/x-bubbles.min.js.map index 477fbee..63ec8b4 100644 --- a/dist/x-bubbles.min.js.map +++ b/dist/x-bubbles.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///x-bubbles.min.js","webpack:///webpack/bootstrap 5e5d19a86e2d62aae1b3","webpack:///./index.js","webpack:///./context.js","webpack:///./core/events.js","webpack:///../~/raf/index.js","webpack:///../~/performance-now/lib/performance-now.js","webpack:///../~/process/browser.js","webpack:///./polyfills/CustomEventCommon.js","webpack:///./core/constant.js","webpack:///./core/text.js","webpack:///./core/bubble.js","webpack:///./core/utils.js","webpack:///./core/bubbleset.js","webpack:///./core/drag.js","webpack:///./core/drag/native.js","webpack:///./core/select.js","webpack:///./core/drag/common.js","webpack:///./core/drag/bubbles.png","webpack:///./core/drag/mouse.js","webpack:///external {\"var\":\"Modernizr\",\"root\":\"modernizr\",\"commonjs2\":\"modernizr\",\"commonjs\":\"modernizr\",\"amd\":\"modernizr\"}","webpack:///./core/editor.js","webpack:///./core/cursor.js"],"names":["XBubbles","modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","optionsPrepare","options","name","OPTIONS","_OPTIONS$name","_slicedToArray","type","def","OPTIONS_PREPARE","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","length","err","Array","isArray","Object","TypeError","_typeof","obj","constructor","prototype","_extends","assign","target","arguments","source","key","hasOwnProperty","context","events","drag","editor","bubble","bubbleset","text","cursor","begining","bubbleDeformation","bubbleFormation","classBubble","draggable","ending","separator","create","HTMLDivElement","createdCallback","this","setAttribute","fireChange","throttle","fireEdit","fireInput","addEventListener","prevent","attachedCallback","init","bubbling","detachedCallback","destroy","_options","keys","reduce","result","item","dataset","items","get","getBubbles","setContent","data","firstChild","removeChild","html2text","appendChild","document","createTextNode","restore","addBubble","bubbleText","nodeBubble","text2bubble","removeBubble","contains","editBubble","edit","registerElement","extends","funk","Function","bool","noop","eval","_defineProperty","defineProperty","enumerable","configurable","writable","scrollX","html","documentElement","body","scrollLeft","clientLeft","scrollY","scrollTop","clientTop","dispatch","element","params","dispatchEvent","Custom","raf","CustomEventCommon","_require","EV","pageX","event","clientX","pageY","clientY","one","eventName","userCallback","callback","removeEventListener","on","off","cancelBubble","returnValue","stopPropagation","preventDefault","BUBBLE_EDIT","bubbles","cancelable","detail","CHANGE","textRange","currentTextRange","editText","textClean","toString","_bubbleValue","BUBBLE_INPUT","animationCallback","apply","CustomEvent","global","now","root","window","vendors","suffix","caf","last","queue","frameDuration","_now","Math","max","setTimeout","cp","slice","cancelled","e","round","handle","fn","cancel","polyfill","requestAnimationFrame","cancelAnimationFrame","process","getNanoSeconds","hrtime","loadTime","performance","hr","Date","getTime","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","nextTick","args","title","browser","env","argv","version","versions","addListener","once","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask","doc","protoEvent","Event","issetCustomEvent","Boolean","createEvent","stopImmediatePropagation","immediatePropagationStopped","evt","initCustomEvent","initEvent","KEY","a","Backspace","Bottom","Cmd","Comma","Enter","Esc","Left","Right","Semicolon","Space","Tab","Top","CLS","DRAGSTART","DROPZONE","nodeSet","selection","getSelection","range","removeAllRanges","addRange","replace","pointNode","focusNode","nodeType","Node","TEXT_NODE","anchorNode","createRange","startNode","endNode","previousSibling","nextSibling","setStartBefore","setEndAfter","remove","createZws","node","rangeCount","anchor","createElement","getRangeAt","surroundContents","parentNode","replaceChild","collapse","replaceString","textNode","nodeValue","arrowLeft","extend","_selectionCorrect","selectionCorrect","startOffset","endOffset","revert","isCollapsed","isNativeExtend","offset","substring","checkZws","setStart","setEnd","arrowRight","_selectionCorrect2","DOMContainer","implementation","createHTMLDocument","innerText","trim","selectAll","fromNode","toNode","hasBubbles","dataText","TEXT_ZWS","REG_ZWS","test","String","REG_REPLACE_NON_PRINTABLE","anchorOffset","focusOffset","min","position","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","isBubbleNode","ELEMENT_NODE","hasAttribute","rangeParams","textFake","insertBefore","canUseDrag","wrap","escape","classes","split","classList","add","ranges","getBubbleRanges","nodes","forEach","deleteContents","textParts","map","trimIterator","filter","nonEmptyIterator","parts","str","parseFragmentByEnding","parseFragmentByBeginning","fragment","createDocumentFragment","textPart","insertNode","children","childNodes","setEndBefore","reg","lastIndex","loop","exec","res","index","unescapeHtmlChar","chr","HTML_UNESCAPES","escapeHtmlChar","HTML_ESCAPES","&","<",">","\"","'","`","&","<",">",""","'","`","REG_ESCAPED_HTML","REG_UNESCAPED_HTML","REG_HAS_ESCAPED_HTML","RegExp","REG_HAS_UNESCAPED_HTML","REG_IE","unescape","navigator","userAgent","lastBubble","querySelector","headBubble","querySelectorAll","findBubbleLeft","DOCUMENT_POSITION_FOLLOWING","closestNodeSet","getAttribute","closestNodeBubble","prevBubble","nextBubble","native","mouse","onDragstart","currentDragSet","select","dataTransfer","effectAllowed","setData","list","setDragImage","getDragImage","DRAG_IMG_WIDTH","onDrop","focus","onDragover","dropEffect","onDragenter","onDragleave","onDragend","_require2","EVENTS","dragend","dragenter","dragleave","dragover","dragstart","drop","set","uniq","clear","headList","lastList","startRangeSelect","setSelected","all","PATH_NOT_SELECTED","PATH_SELECTED","has","head","removeAttribute","toggleUniq","isSelected","removeSelected","dragImage","Image","src","onMousedown","__drag__","onMouseup","bind","onMousemove","onScroll","nodeOffsetX","offsetLeft","nodeOffsetY","offsetTop","x","y","currentMoveSet","currentDragElement","dragSet","moveElement","cloneNode","style","cssText","Modernizr","csstransforms3d","transform","csstransforms","top","left","onBlur","currentTarget","onFocus","onKeyup","code","charCode","keyCode","isPrintableChar","onKeypress","onKeydown","metaKey","ctrlKey","enable","backSpace","shiftKey","begin","normalize","onPaste","clipboardData","contentType","getData","kind","some","getAsString","onDblclick","onClick","blur","click","dblclick","keydown","keypress","keyup","paste","basis","restoreBasis","fakeText","hasChildNodes","lastNode","isEqualNode"],"mappings":"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","file":"x-bubbles.min.js","sourcesContent":["var XBubbles =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar drag = __webpack_require__(12);\n\tvar editor = __webpack_require__(19);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\tvar text = __webpack_require__(8);\n\tvar cursor = __webpack_require__(20);\n\t\n\tvar OPTIONS = {\n\t begining: ['noop', null],\n\t bubbleDeformation: ['funk', function () {}],\n\t bubbleFormation: ['funk', function () {}],\n\t classBubble: ['noop', 'bubble'],\n\t draggable: ['bool', true],\n\t ending: ['noop', null], // /\\@ya\\.ru/g;\n\t separator: ['noop', /[,;]/]\n\t};\n\t\n\tvar XBubbles = Object.create(HTMLDivElement.prototype, {\n\t createdCallback: {\n\t value: function value() {\n\t this.setAttribute('contenteditable', 'true');\n\t this.setAttribute('spellcheck', 'false');\n\t\n\t this.fireChange = events.throttle(events.fireChange);\n\t this.fireEdit = events.throttle(events.fireEdit);\n\t this.fireInput = events.throttle(events.fireInput);\n\t\n\t this.addEventListener('resize', events.prevent);\n\t this.addEventListener('resizestart', events.prevent);\n\t this.addEventListener('mscontrolselect', events.prevent);\n\t }\n\t },\n\t\n\t attachedCallback: {\n\t value: function value() {\n\t drag.init(this);\n\t editor.init(this);\n\t bubble.bubbling(this);\n\t }\n\t },\n\t\n\t detachedCallback: {\n\t value: function value() {\n\t drag.destroy(this);\n\t editor.destroy(this);\n\t }\n\t },\n\t\n\t /*\n\t attributeChangedCallback: {\n\t value: function (name, prevValue, value) {}\n\t },\n\t */\n\t\n\t options: {\n\t value: function value(name, _value) {\n\t if (!this._options) {\n\t this._options = _extends({}, Object.keys(OPTIONS).reduce(function (result, item) {\n\t result[item] = undefined;\n\t return result;\n\t }, {}), this.dataset);\n\t\n\t optionsPrepare(this._options);\n\t }\n\t\n\t if (typeof _value !== 'undefined') {\n\t this._options[name] = _value;\n\t optionsPrepare(this._options);\n\t } else {\n\t return this._options[name];\n\t }\n\t }\n\t },\n\t\n\t items: {\n\t get: function get() {\n\t return bubbleset.getBubbles(this);\n\t }\n\t },\n\t\n\t setContent: {\n\t value: function value(data) {\n\t while (this.firstChild) {\n\t this.removeChild(this.firstChild);\n\t }\n\t\n\t data = text.html2text(data);\n\t this.appendChild(context.document.createTextNode(data));\n\t bubble.bubbling(this);\n\t cursor.restore(this);\n\t }\n\t },\n\t\n\t addBubble: {\n\t value: function value(bubbleText, data) {\n\t var nodeBubble = bubble.create(this, bubbleText, data);\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (text.text2bubble(this, nodeBubble)) {\n\t cursor.restore(this);\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t removeBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t this.removeChild(nodeBubble);\n\t this.fireChange();\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t editBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t return bubble.edit(this, nodeBubble);\n\t }\n\t\n\t return false;\n\t }\n\t }\n\t});\n\t\n\tmodule.exports = context.document.registerElement('x-bubbles', {\n\t extends: 'div',\n\t prototype: XBubbles\n\t});\n\t\n\tvar OPTIONS_PREPARE = {\n\t funk: function funk(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return new Function('context', 'return context.' + value + ';')(context);\n\t\n\t case 'function':\n\t return value;\n\t }\n\t },\n\t bool: function bool(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return value === 'true' || value === 'on';\n\t\n\t case 'boolean':\n\t return value;\n\t }\n\t },\n\t noop: function noop(value) {\n\t return value;\n\t }\n\t};\n\t\n\tfunction optionsPrepare(options) {\n\t for (var name in OPTIONS) {\n\t var _OPTIONS$name = _slicedToArray(OPTIONS[name], 2);\n\t\n\t var type = _OPTIONS$name[0];\n\t var def = _OPTIONS$name[1];\n\t\n\t options[name] = OPTIONS_PREPARE[type](options[name]);\n\t if (typeof options[name] === 'undefined') {\n\t options[name] = def;\n\t }\n\t }\n\t}\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t /* eslint no-eval: 0 */\n\t return this || (1, eval)('this');\n\t}();\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\t/**\n\t * @module x-bubbles/event\n\t */\n\t\n\tvar raf = __webpack_require__(3);\n\tvar context = __webpack_require__(1);\n\tvar CustomEventCommon = __webpack_require__(6);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar EV = _require.EV;\n\t\n\tvar text = __webpack_require__(8);\n\t\n\texports.scrollX = scrollX;\n\texports.scrollY = scrollY;\n\t\n\texports.pageX = function (event) {\n\t return event.pageX === null && event.clientX !== null ? event.clientX + scrollX() : event.pageX;\n\t};\n\t\n\texports.pageY = function (event) {\n\t return event.pageY === null && event.clientY !== null ? event.clientY + scrollY() : event.pageY;\n\t};\n\t\n\texports.one = function (target, eventName, userCallback) {\n\t return target.addEventListener(eventName, function callback(event) {\n\t target.removeEventListener(eventName, callback);\n\t userCallback(event);\n\t });\n\t};\n\t\n\texports.on = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.addEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.off = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.removeEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.prevent = function (event) {\n\t event.cancelBubble = true;\n\t event.returnValue = false;\n\t event.stopPropagation();\n\t event.preventDefault();\n\t return false;\n\t};\n\t\n\texports.fireEdit = function (nodeBubble) {\n\t dispatch(this, EV.BUBBLE_EDIT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: nodeBubble }\n\t });\n\t};\n\t\n\texports.fireChange = function () {\n\t dispatch(this, EV.CHANGE, {\n\t bubbles: false,\n\t cancelable: false\n\t });\n\t};\n\t\n\texports.fireInput = function () {\n\t var textRange = text.currentTextRange();\n\t var editText = textRange && text.textClean(textRange.toString()) || '';\n\t\n\t if (this._bubbleValue !== editText) {\n\t this._bubbleValue = editText;\n\t\n\t dispatch(this, EV.BUBBLE_INPUT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: editText }\n\t });\n\t }\n\t};\n\t\n\texports.throttle = function (callback) {\n\t var throttle = 0;\n\t var animationCallback = function animationCallback() {\n\t throttle = 0;\n\t };\n\t\n\t return function () {\n\t if (throttle) {\n\t return;\n\t }\n\t\n\t throttle = raf(animationCallback);\n\t\n\t callback.apply(this, arguments);\n\t };\n\t};\n\t\n\tfunction scrollX() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n\t}\n\t\n\tfunction scrollY() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n\t}\n\t\n\t/**\n\t * Designer events.\n\t *\n\t * @example\n\t * const { Custom } = require('event');\n\t *\n\t * new Custom('custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event~Custom\n\t * @constructor\n\t */\n\tvar Custom = function () {\n\t if (typeof context.CustomEvent === 'function') {\n\t return context.CustomEvent;\n\t }\n\t\n\t return CustomEventCommon;\n\t}();\n\t\n\t/**\n\t * Dispatch event.\n\t *\n\t * @example\n\t * const { dispatch } = require('event');\n\t * dispatch(node, 'custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event.dispatch\n\t * @param {HTMLElement} element node events\n\t * @param {string} name event name\n\t * @param {Object} params the event parameters\n\t * @param {boolean} [params.bubbles=false]\n\t * @param {boolean} [params.cancelable=false]\n\t * @param {*} [params.detail]\n\t */\n\tfunction dispatch(element, name) {\n\t var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t element.dispatchEvent(new Custom(name, params));\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var now = __webpack_require__(4)\n\t , root = typeof window === 'undefined' ? global : window\n\t , vendors = ['moz', 'webkit']\n\t , suffix = 'AnimationFrame'\n\t , raf = root['request' + suffix]\n\t , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\t\n\tfor(var i = 0; !raf && i < vendors.length; i++) {\n\t raf = root[vendors[i] + 'Request' + suffix]\n\t caf = root[vendors[i] + 'Cancel' + suffix]\n\t || root[vendors[i] + 'CancelRequest' + suffix]\n\t}\n\t\n\t// Some versions of FF have rAF but not cAF\n\tif(!raf || !caf) {\n\t var last = 0\n\t , id = 0\n\t , queue = []\n\t , frameDuration = 1000 / 60\n\t\n\t raf = function(callback) {\n\t if(queue.length === 0) {\n\t var _now = now()\n\t , next = Math.max(0, frameDuration - (_now - last))\n\t last = next + _now\n\t setTimeout(function() {\n\t var cp = queue.slice(0)\n\t // Clear queue here to prevent\n\t // callbacks from appending listeners\n\t // to the current frame's queue\n\t queue.length = 0\n\t for(var i = 0; i < cp.length; i++) {\n\t if(!cp[i].cancelled) {\n\t try{\n\t cp[i].callback(last)\n\t } catch(e) {\n\t setTimeout(function() { throw e }, 0)\n\t }\n\t }\n\t }\n\t }, Math.round(next))\n\t }\n\t queue.push({\n\t handle: ++id,\n\t callback: callback,\n\t cancelled: false\n\t })\n\t return id\n\t }\n\t\n\t caf = function(handle) {\n\t for(var i = 0; i < queue.length; i++) {\n\t if(queue[i].handle === handle) {\n\t queue[i].cancelled = true\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = function(fn) {\n\t // Wrap in a new function to prevent\n\t // `cancel` potentially being assigned\n\t // to the native rAF function\n\t return raf.call(root, fn)\n\t}\n\tmodule.exports.cancel = function() {\n\t caf.apply(root, arguments)\n\t}\n\tmodule.exports.polyfill = function() {\n\t root.requestAnimationFrame = raf\n\t root.cancelAnimationFrame = caf\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {// Generated by CoffeeScript 1.7.1\n\t(function() {\n\t var getNanoSeconds, hrtime, loadTime;\n\t\n\t if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n\t module.exports = function() {\n\t return performance.now();\n\t };\n\t } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n\t module.exports = function() {\n\t return (getNanoSeconds() - loadTime) / 1e6;\n\t };\n\t hrtime = process.hrtime;\n\t getNanoSeconds = function() {\n\t var hr;\n\t hr = hrtime();\n\t return hr[0] * 1e9 + hr[1];\n\t };\n\t loadTime = getNanoSeconds();\n\t } else if (Date.now) {\n\t module.exports = function() {\n\t return Date.now() - loadTime;\n\t };\n\t loadTime = Date.now();\n\t } else {\n\t module.exports = function() {\n\t return new Date().getTime() - loadTime;\n\t };\n\t loadTime = new Date().getTime();\n\t }\n\t\n\t}).call(this);\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/**\n\t * @constant {Document}\n\t * @private\n\t */\n\tvar doc = context.document;\n\t\n\t/**\n\t * @constant {Object}\n\t * @private\n\t */\n\tvar protoEvent = context.Event.prototype;\n\t\n\tvar issetCustomEvent = false;\n\t\n\ttry {\n\t issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n\t} catch (e) {}\n\t// do nothing\n\t\n\t\n\t/**\n\t * The original function \"stopImmediatePropagation\"\n\t * @constant {function}\n\t * @private\n\t */\n\tvar stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\t\n\t/**\n\t * Override function to set properties \"immediatePropagationStopped\"\n\t */\n\tprotoEvent.stopImmediatePropagation = function () {\n\t this.immediatePropagationStopped = true;\n\t\n\t if (stopImmediatePropagation) {\n\t stopImmediatePropagation.call(this);\n\t } else {\n\t this.stopPropagation();\n\t }\n\t};\n\t\n\tvar CustomEventCommon = function () {\n\t if (issetCustomEvent) {\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('CustomEvent');\n\t\n\t evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\t\n\t return evt;\n\t };\n\t }\n\t\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('Event');\n\t\n\t evt.initEvent(eventName, bubbles, cancelable);\n\t evt.detail = params.detail;\n\t\n\t return evt;\n\t };\n\t}();\n\t\n\tCustomEventCommon.prototype = protoEvent;\n\t\n\tmodule.exports = CustomEventCommon;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.KEY = {\n\t a: 65,\n\t Backspace: 8,\n\t Bottom: 40,\n\t Cmd: 91,\n\t Comma: 44, // ,\n\t Enter: 13, // Enter\n\t Esc: 27,\n\t Left: 37,\n\t Right: 39,\n\t Semicolon: 59, // ;\n\t Space: 32,\n\t Tab: 9,\n\t Top: 38\n\t};\n\t\n\texports.CLS = {\n\t DRAGSTART: 'drag',\n\t DROPZONE: 'dropzone'\n\t};\n\t\n\texports.EV = {\n\t BUBBLE_EDIT: 'bubble-edit',\n\t BUBBLE_INPUT: 'bubble-input',\n\t CHANGE: 'change'\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\t/* eslint-disable max-len */\n\tvar REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n\tvar REG_ZWS = /\\u200B/;\n\tvar TEXT_ZWS = '\\u200B';\n\t\n\texports.arrowRight = arrowRight;\n\texports.arrowLeft = arrowLeft;\n\texports.remove = remove;\n\texports.html2text = html2text;\n\texports.currentTextRange = currentTextRange;\n\texports.text2bubble = text2bubble;\n\texports.replaceString = replaceString;\n\texports.selectAll = selectAll;\n\texports.textClean = textClean;\n\texports.checkZws = checkZws;\n\texports.createZws = createZws;\n\t\n\tfunction text2bubble(nodeSet, nodeBubble, selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var range = currentTextRange(selection);\n\t\n\t if (range && !nodeBubble) {\n\t nodeBubble = bubble.create(nodeSet, range.toString());\n\t }\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (range) {\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t replace(selection, nodeBubble);\n\t } else {\n\t nodeSet.appendChild(nodeBubble);\n\t }\n\t\n\t nodeSet.fireInput();\n\t nodeSet.fireChange();\n\t return true;\n\t}\n\t\n\tfunction currentTextRange(selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t var pointNode = selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE ? selection.focusNode : selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE ? selection.anchorNode : undefined;\n\t\n\t if (!pointNode) {\n\t return;\n\t }\n\t\n\t var range = context.document.createRange();\n\t var startNode = pointNode;\n\t var endNode = pointNode;\n\t var item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t startNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t endNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t range.setStartBefore(startNode);\n\t range.setEndAfter(endNode);\n\t\n\t return range;\n\t}\n\t\n\tfunction remove(selection) {\n\t return replace(selection, createZws());\n\t}\n\t\n\tfunction replace(selection, node) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.rangeCount) {\n\t return false;\n\t }\n\t\n\t var anchor = context.document.createElement('span');\n\t selection.getRangeAt(0).surroundContents(anchor);\n\t anchor.parentNode.replaceChild(node, anchor);\n\t\n\t selection.removeAllRanges();\n\t selection.collapse(node, 0);\n\t\n\t return true;\n\t}\n\t\n\tfunction replaceString(data, selection) {\n\t data = textClean(data);\n\t if (!data) {\n\t return false;\n\t }\n\t\n\t selection = selection || context.getSelection();\n\t var textNode = context.document.createTextNode(data);\n\t\n\t if (!replace(selection, textNode)) {\n\t return false;\n\t }\n\t\n\t selection.collapse(textNode, textNode.nodeValue.length);\n\t return true;\n\t}\n\t\n\tfunction arrowLeft(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect.startNode;\n\t var endNode = _selectionCorrect.endNode;\n\t var startOffset = _selectionCorrect.startOffset;\n\t var endOffset = _selectionCorrect.endOffset;\n\t var revert = _selectionCorrect.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(startNode, startOffset);\n\t return true;\n\t }\n\t\n\t var isNativeExtend = Boolean(selection.extend);\n\t revert = isNativeExtend ? revert : !revert;\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t if (offset === null) {\n\t offset = node.nodeValue.length;\n\t }\n\t\n\t if (offset - 1 < 0) {\n\t node = node.previousSibling;\n\t offset = null;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset - 1, offset);\n\t\n\t if (checkZws(text)) {\n\t offset = offset - 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node || offset === null) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t if (isNativeExtend) {\n\t selection.extend(node, offset - 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset - 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset - 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset - 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction arrowRight(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.focusNode || selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect2 = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect2.startNode;\n\t var endNode = _selectionCorrect2.endNode;\n\t var startOffset = _selectionCorrect2.startOffset;\n\t var endOffset = _selectionCorrect2.endOffset;\n\t var revert = _selectionCorrect2.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(endNode, endOffset);\n\t return true;\n\t }\n\t\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var len = node.nodeValue.length;\n\t\n\t if (offset + 1 > len) {\n\t node = node.nextSibling;\n\t offset = 0;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset, offset + 1);\n\t\n\t if (checkZws(text)) {\n\t offset = offset + 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t var isNativeExtend = Boolean(selection.extend);\n\t\n\t if (isNativeExtend) {\n\t selection.extend(node, offset + 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset + 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset + 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset + 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction html2text(value) {\n\t if (!value) {\n\t return '';\n\t }\n\t\n\t var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n\t DOMContainer.innerText = value;\n\t\n\t return DOMContainer.innerText.replace(/^[\\u0020\\u00a0]+$/gm, '').replace(/\\n/gm, ' ').trim();\n\t}\n\t\n\tfunction selectAll(selection, nodeSet) {\n\t selection = selection || context.getSelection();\n\t var node = selection && selection.anchorNode;\n\t\n\t if (!node || node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t fromNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t toNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t var hasBubbles = bubbleset.hasBubbles(nodeSet);\n\t var range = context.document.createRange();\n\t range.setStartBefore(fromNode);\n\t range.setEndAfter(toNode);\n\t\n\t var dataText = textClean(range.toString());\n\t\n\t if (dataText || !dataText && !hasBubbles) {\n\t if (!dataText) {\n\t range.collapse();\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createZws() {\n\t return context.document.createTextNode(TEXT_ZWS);\n\t}\n\t\n\tfunction checkZws(value) {\n\t return REG_ZWS.test(value);\n\t}\n\t\n\tfunction textClean(value) {\n\t return String(value || '').trim().replace(REG_REPLACE_NON_PRINTABLE, '');\n\t}\n\t\n\tfunction selectionCorrect(selection) {\n\t var startNode = selection.anchorNode;\n\t var endNode = selection.focusNode;\n\t var startOffset = selection.anchorOffset;\n\t var endOffset = selection.focusOffset;\n\t var revert = false;\n\t\n\t if (startNode === endNode) {\n\t startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n\t endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n\t revert = selection.anchorOffset > selection.focusOffset;\n\t } else {\n\t var position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t startNode = selection.focusNode;\n\t startOffset = selection.focusOffset;\n\t endNode = selection.anchorNode;\n\t endOffset = selection.anchorOffset;\n\t revert = true;\n\t }\n\t }\n\t\n\t return { startNode: startNode, endNode: endNode, startOffset: startOffset, endOffset: endOffset, revert: revert };\n\t}\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar escape = _require.escape;\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.isBubbleNode = isBubbleNode;\n\texports.bubbling = bubbling;\n\texports.create = create;\n\texports.edit = edit;\n\t\n\tfunction isBubbleNode(node) {\n\t if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n\t return false;\n\t }\n\t\n\t return node.hasAttribute('bubble');\n\t}\n\t\n\tfunction edit(nodeSet, nodeBubble) {\n\t if (nodeBubble.hasAttribute('readonly')) {\n\t return false;\n\t }\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var bubbleDeformation = nodeSet.options('bubbleDeformation');\n\t var rangeParams = bubbleDeformation(nodeBubble);\n\t\n\t if (!rangeParams) {\n\t var dataText = text.textClean(nodeBubble.innerText);\n\t\n\t rangeParams = {\n\t text: dataText,\n\t startOffset: 0,\n\t endOffset: dataText.length\n\t };\n\t }\n\t\n\t var textFake = text.createZws();\n\t var textNode = context.document.createTextNode(rangeParams.text);\n\t\n\t nodeSet.fireEdit(nodeBubble);\n\t nodeSet.replaceChild(textNode, nodeBubble);\n\t nodeSet.insertBefore(textFake, textNode);\n\t\n\t var range = context.document.createRange();\n\t range.setStart(textNode, rangeParams.startOffset);\n\t range.setEnd(textNode, rangeParams.endOffset);\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t}\n\t\n\tfunction create(nodeSet, dataText) {\n\t var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t dataText = text.textClean(dataText);\n\t\n\t if (!dataText) {\n\t return;\n\t }\n\t\n\t var bubbleFormation = nodeSet.options('bubbleFormation');\n\t var classBubble = nodeSet.options('classBubble');\n\t var draggable = canUseDrag() && nodeSet.options('draggable');\n\t var wrap = context.document.createElement('span');\n\t\n\t wrap.innerText = dataText;\n\t\n\t if (draggable) {\n\t wrap.setAttribute('draggable', 'true');\n\t }\n\t\n\t for (var key in data) {\n\t if (data[key]) {\n\t wrap.setAttribute('data-' + key, escape(data[key]));\n\t }\n\t }\n\t\n\t bubbleFormation(wrap);\n\t\n\t if (classBubble) {\n\t var classes = String(classBubble).trim().split(/\\s+/);\n\t var len = classes.length;\n\t\n\t while (len--) {\n\t wrap.classList.add(classes[len]);\n\t }\n\t }\n\t\n\t wrap.setAttribute('bubble', '');\n\t wrap.setAttribute('contenteditable', 'false');\n\t\n\t return wrap;\n\t}\n\t\n\tfunction bubbling(nodeSet) {\n\t var separator = nodeSet.options('separator');\n\t var ending = nodeSet.options('ending');\n\t var begining = nodeSet.options('begining');\n\t var ranges = getBubbleRanges(nodeSet);\n\t var nodes = [];\n\t\n\t ranges.forEach(function (range) {\n\t var dataText = text.textClean(range.toString());\n\t\n\t if (!dataText) {\n\t range.deleteContents();\n\t return;\n\t }\n\t\n\t var textParts = [dataText];\n\t\n\t if (separator) {\n\t textParts = dataText.split(separator).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (ending) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByEnding(str, ending));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t } else if (begining) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByBeginning(str, begining));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (!textParts.length) {\n\t range.deleteContents();\n\t }\n\t\n\t var fragment = context.document.createDocumentFragment();\n\t\n\t textParts.forEach(function (textPart) {\n\t var nodeBubble = create(nodeSet, textPart);\n\t if (nodeBubble) {\n\t fragment.appendChild(nodeBubble);\n\t nodes.push(nodeBubble);\n\t }\n\t });\n\t\n\t range.deleteContents();\n\t range.insertNode(fragment);\n\t });\n\t\n\t nodeSet.fireInput();\n\t\n\t if (nodes.length) {\n\t nodeSet.fireChange();\n\t }\n\t\n\t return nodes;\n\t}\n\t\n\tfunction getBubbleRanges(nodeSet) {\n\t var ranges = [];\n\t var children = nodeSet.childNodes;\n\t var range = void 0;\n\t var node = void 0;\n\t\n\t for (var i = 0; i < children.length; i++) {\n\t node = children[i];\n\t\n\t if (isBubbleNode(node)) {\n\t if (range) {\n\t range.setEndBefore(node);\n\t ranges.push(range);\n\t range = undefined;\n\t }\n\t } else {\n\t if (!range) {\n\t range = context.document.createRange();\n\t range.setStartBefore(node);\n\t }\n\t }\n\t }\n\t\n\t if (range) {\n\t range.setEndAfter(node);\n\t ranges.push(range);\n\t }\n\t\n\t return ranges;\n\t}\n\t\n\tfunction trimIterator(str) {\n\t return str.trim();\n\t}\n\t\n\tfunction nonEmptyIterator(str) {\n\t return Boolean(str);\n\t}\n\t\n\tfunction parseFragmentByEnding(str, reg) {\n\t var parts = [];\n\t var lastIndex = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while (reg.exec(str) !== null && loop) {\n\t loop--;\n\t parts.push(str.substring(lastIndex, reg.lastIndex));\n\t lastIndex = reg.lastIndex;\n\t }\n\t\n\t return parts;\n\t}\n\t\n\tfunction parseFragmentByBeginning(str, reg) {\n\t var parts = [];\n\t var res = void 0;\n\t var index = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while ((res = reg.exec(str)) !== null && loop) {\n\t loop--;\n\t if (index !== res.index) {\n\t parts.push(str.substring(index, res.index));\n\t index = res.index;\n\t }\n\t }\n\t\n\t parts.push(str.substring(index, str.length));\n\t return parts;\n\t}\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/* eslint quotes: 0 */\n\t\n\tvar HTML_ESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`'\n\t};\n\t\n\tvar HTML_UNESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '"': '\"',\n\t ''': \"'\",\n\t '`': '`'\n\t};\n\t\n\tvar REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\n\tvar REG_UNESCAPED_HTML = /[&<>\"'`]/g;\n\tvar REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\n\tvar REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\n\tvar REG_IE = /Trident|Edge/;\n\t\n\texports.escape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n\t return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.unescape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n\t return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.canUseDrag = function () {\n\t return !REG_IE.test(context.navigator.userAgent);\n\t};\n\t\n\tfunction unescapeHtmlChar(chr) {\n\t return HTML_UNESCAPES[chr];\n\t}\n\t\n\tfunction escapeHtmlChar(chr) {\n\t return HTML_ESCAPES[chr];\n\t}\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bubble = __webpack_require__(9);\n\tvar text = __webpack_require__(8);\n\t\n\texports.closestNodeBubble = closestNodeBubble;\n\texports.closestNodeSet = closestNodeSet;\n\texports.findBubbleLeft = findBubbleLeft;\n\texports.getBubbles = getBubbles;\n\texports.hasBubbles = hasBubbles;\n\texports.headBubble = headBubble;\n\texports.lastBubble = lastBubble;\n\texports.nextBubble = nextBubble;\n\texports.prevBubble = prevBubble;\n\t\n\tfunction lastBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:last-child');\n\t}\n\t\n\tfunction headBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:first-child');\n\t}\n\t\n\tfunction getBubbles(nodeSet) {\n\t return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n\t}\n\t\n\tfunction hasBubbles(nodeSet) {\n\t return Boolean(nodeSet.querySelector('[bubble]'));\n\t}\n\t\n\tfunction findBubbleLeft(selection) {\n\t if (!selection.focusNode || !selection.anchorNode) {\n\t return;\n\t }\n\t\n\t var node = selection.focusNode.previousSibling;\n\t\n\t if (selection.anchorNode !== selection.focusNode && selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t node = selection.anchorNode.previousSibling;\n\t }\n\t\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n\t return;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction closestNodeSet(node) {\n\t while (node) {\n\t if (node.nodeType === Node.ELEMENT_NODE && node.getAttribute('is') === 'x-bubbles') {\n\t\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction closestNodeBubble(node) {\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction prevBubble(target) {\n\t var node = target && target.previousSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction nextBubble(target) {\n\t var node = target && target.nextSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.nextSibling;\n\t }\n\t}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar native = __webpack_require__(13);\n\tvar mouse = __webpack_require__(17);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.init = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.init(nodeSet);\n\t }\n\t\n\t return mouse.init(nodeSet);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.destroy(nodeSet);\n\t }\n\t\n\t return mouse.destroy(nodeSet);\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar events = __webpack_require__(2);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar EVENTS = {\n\t dragend: onDragend,\n\t dragenter: onDragenter,\n\t dragleave: onDragleave,\n\t dragover: onDragover,\n\t dragstart: onDragstart,\n\t drop: onDrop\n\t};\n\t\n\tvar currentDragSet = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onDragstart(event) {\n\t event.stopPropagation();\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (!nodeSet || !nodeBubble) {\n\t event.preventDefault();\n\t return;\n\t }\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = nodeSet;\n\t nodeSet.classList.add(CLS.DRAGSTART);\n\t select.add(nodeBubble);\n\t\n\t event.dataTransfer.effectAllowed = 'move';\n\t event.dataTransfer.setData('text/plain', '');\n\t\n\t var list = select.get(currentDragSet);\n\t if (list.length > 1) {\n\t event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n\t }\n\t}\n\t\n\tfunction onDrop(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet || nodeSet === currentDragSet) {\n\t return;\n\t }\n\t\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t}\n\t\n\tfunction onDragover(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t event.dataTransfer.dropEffect = 'move';\n\t}\n\t\n\tfunction onDragenter(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragleave(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragend(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t currentDragSet.classList.remove(CLS.DRAGSTART);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t\n\t currentDragSet = null;\n\t}\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\tvar slice = Array.prototype.slice;\n\tvar PATH_SELECTED = '[bubble][selected]';\n\tvar PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\t\n\texports.all = all;\n\texports.add = add;\n\texports.clear = clear;\n\texports.get = get;\n\texports.uniq = uniq;\n\texports.head = head;\n\texports.last = last;\n\texports.has = has;\n\texports.range = range;\n\texports.toggleUniq = toggleUniq;\n\t\n\tfunction range(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return;\n\t }\n\t\n\t var set = node.parentNode;\n\t var list = get(set);\n\t\n\t if (!list.length) {\n\t uniq(node);\n\t return;\n\t }\n\t\n\t clear(set);\n\t\n\t var headList = list[0];\n\t var lastList = list[list.length - 1];\n\t\n\t if (headList === lastList || !set.startRangeSelect) {\n\t set.startRangeSelect = headList;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var position = node.compareDocumentPosition(set.startRangeSelect);\n\t\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t fromNode = set.startRangeSelect;\n\t toNode = node;\n\t } else {\n\t fromNode = node;\n\t toNode = set.startRangeSelect;\n\t }\n\t\n\t if (fromNode && toNode) {\n\t var item = fromNode;\n\t\n\t while (item) {\n\t if (!setSelected(item)) {\n\t break;\n\t }\n\t\n\t if (item === toNode) {\n\t break;\n\t }\n\t\n\t item = item.nextSibling;\n\t }\n\t\n\t bubble.bubbling(set);\n\t }\n\t}\n\t\n\tfunction all(nodeSet) {\n\t slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(function (item) {\n\t return setSelected(item);\n\t });\n\t nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\t\n\t bubble.bubbling(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t}\n\t\n\tfunction has(nodeSet) {\n\t return Boolean(nodeSet.querySelector(PATH_SELECTED));\n\t}\n\t\n\tfunction head(set) {\n\t return get(set)[0];\n\t}\n\t\n\tfunction last(set) {\n\t var list = get(set);\n\t return list[list.length - 1];\n\t}\n\t\n\tfunction get(nodeSet) {\n\t return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n\t}\n\t\n\tfunction clear(nodeSet) {\n\t get(nodeSet).forEach(function (item) {\n\t return item.removeAttribute('selected');\n\t });\n\t}\n\t\n\tfunction add(node) {\n\t if (setSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t nodeSet.startRangeSelect = node;\n\t // ???\n\t bubble.bubbling(nodeSet);\n\t\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction uniq(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return false;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t var selection = context.getSelection();\n\t\n\t selection && selection.removeAllRanges();\n\t clear(nodeSet);\n\t\n\t return add(node);\n\t}\n\t\n\tfunction toggleUniq(node) {\n\t if (isSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t if (get(nodeSet).length === 1) {\n\t return removeSelected(node);\n\t }\n\t }\n\t\n\t return uniq(node);\n\t}\n\t\n\tfunction isSelected(node) {\n\t return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n\t}\n\t\n\tfunction setSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.setAttribute('selected', '');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction removeSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.removeAttribute('selected');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar DRAG_IMG_WIDTH = 16;\n\t\n\tvar dragImage = null;\n\t\n\texports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\t\n\texports.getDragImage = function () {\n\t if (!dragImage) {\n\t dragImage = new Image();\n\t dragImage.src = __webpack_require__(16);\n\t }\n\t\n\t return dragImage;\n\t};\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar Modernizr = __webpack_require__(18);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar currentDragSet = null;\n\tvar currentMoveSet = null;\n\tvar currentDragElement = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\tfunction onMousedown(event) {\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t if (!nodeBubble) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t event.preventDefault();\n\t nodeSet.focus();\n\t\n\t var drag = nodeSet.__drag__ = {\n\t onMouseup: onMouseup.bind(this, nodeSet),\n\t onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n\t onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n\t nodeOffsetX: events.pageX(event) - nodeBubble.offsetLeft,\n\t nodeOffsetY: events.pageY(event) - nodeBubble.offsetTop,\n\t x: 0,\n\t y: 0\n\t };\n\t\n\t currentDragSet = null;\n\t currentMoveSet = null;\n\t currentDragElement = null;\n\t\n\t events.one(document, 'mouseup', drag.onMouseup);\n\t events.on(document, 'mousemove', drag.onMousemove);\n\t events.on(document, 'scroll', drag.onScroll);\n\t}\n\t\n\tfunction onMouseup(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t events.off(document, 'mousemove', drag.onMousemove);\n\t events.off(document, 'scroll', drag.onScroll);\n\t delete dragSet.__drag__;\n\t\n\t if (currentDragElement) {\n\t currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n\t currentDragElement = null;\n\t }\n\t\n\t if (currentMoveSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t currentMoveSet = null;\n\t }\n\t\n\t if (currentDragSet) {\n\t (function () {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t }\n\t\n\t currentDragSet.classList.remove(CLS.DRAGSTART);\n\t currentDragSet = null;\n\t })();\n\t }\n\t}\n\t\n\tfunction onMousemove(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t if (!currentDragSet) {\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = dragSet;\n\t currentDragSet.classList.add(CLS.DRAGSTART);\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t var moveElement = void 0;\n\t\n\t if (nodeBubble) {\n\t select.add(nodeBubble);\n\t if (select.get(currentDragSet).length === 1) {\n\t moveElement = nodeBubble.cloneNode(true);\n\t }\n\t }\n\t\n\t if (!moveElement) {\n\t moveElement = getDragImage();\n\t drag.nodeOffsetX = DRAG_IMG_WIDTH;\n\t drag.nodeOffsetY = DRAG_IMG_WIDTH;\n\t }\n\t\n\t currentDragElement = document.body.appendChild(document.createElement('div'));\n\t currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n\t currentDragElement.appendChild(moveElement);\n\t }\n\t\n\t drag.x = event.clientX;\n\t drag.y = event.clientY;\n\t onScroll(dragSet);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t if (currentMoveSet && currentMoveSet !== nodeSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t } else if (!currentMoveSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t }\n\t } else if (currentMoveSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t currentMoveSet = null;\n\t }\n\t}\n\t\n\tfunction onScroll(dragSet) {\n\t var drag = dragSet.__drag__;\n\t if (!drag || !currentDragElement) {\n\t return;\n\t }\n\t\n\t var x = drag.x - drag.nodeOffsetX + events.scrollX();\n\t var y = drag.y - drag.nodeOffsetY + events.scrollY();\n\t\n\t if (Modernizr.csstransforms3d) {\n\t currentDragElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n\t } else if (Modernizr.csstransforms) {\n\t currentDragElement.style.transform = 'translate(' + x + 'px, ' + y + 'px)';\n\t } else {\n\t currentDragElement.style.top = y + 'px';\n\t currentDragElement.style.left = x + 'px';\n\t }\n\t}\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = Modernizr;\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubbleset = __webpack_require__(11);\n\tvar bubble = __webpack_require__(9);\n\tvar cursor = __webpack_require__(20);\n\tvar select = __webpack_require__(14);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar KEY = _require.KEY;\n\t\n\tvar text = __webpack_require__(8);\n\tvar events = __webpack_require__(2);\n\t\n\tvar EVENTS = {\n\t blur: onBlur,\n\t click: onClick,\n\t dblclick: onDblclick,\n\t focus: onFocus,\n\t keydown: onKeydown,\n\t keypress: onKeypress,\n\t keyup: onKeyup,\n\t paste: onPaste\n\t};\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onBlur(event) {\n\t select.clear(event.currentTarget);\n\t bubble.bubbling(event.currentTarget);\n\t}\n\t\n\tfunction onFocus(event) {\n\t cursor.restore(event.currentTarget);\n\t}\n\t\n\tfunction onKeyup(event) {\n\t var code = event.charCode || event.keyCode;\n\t var isPrintableChar = event.key ? event.key.length === 1 : (code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd;\n\t\n\t if (isPrintableChar) {\n\t event.currentTarget.fireInput();\n\t }\n\t}\n\t\n\tfunction onKeypress(event) {\n\t var code = event.charCode || event.keyCode;\n\t var nodeSet = event.currentTarget;\n\t\n\t /* eslint no-case-declarations: 0 */\n\t switch (code) {\n\t case KEY.Enter:\n\t event.preventDefault();\n\t if (!nodeSet.hasAttribute('disable-controls')) {\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.Comma:\n\t case KEY.Semicolon:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t }\n\t}\n\t\n\tfunction onKeydown(event) {\n\t var code = event.charCode || event.keyCode;\n\t var metaKey = event.ctrlKey || event.metaKey;\n\t var nodeSet = event.currentTarget;\n\t var enable = !nodeSet.hasAttribute('disable-controls');\n\t\n\t switch (code) {\n\t case KEY.Esc:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t\n\t case KEY.Backspace:\n\t event.preventDefault();\n\t backSpace(event);\n\t break;\n\t\n\t case KEY.Left:\n\t event.preventDefault();\n\t arrowLeft(event);\n\t break;\n\t\n\t // сдвигаем курсор в начало списка\n\t case KEY.Top:\n\t event.preventDefault();\n\t if (enable) {\n\t var headBubble = bubbleset.headBubble(nodeSet);\n\t headBubble && select.uniq(headBubble);\n\t }\n\t break;\n\t\n\t case KEY.Right:\n\t event.preventDefault();\n\t arrowRight(event);\n\t break;\n\t\n\t // сдвигаем курсор в конец списка\n\t // case KEY.Tab:\n\t case KEY.Bottom:\n\t event.preventDefault();\n\t if (enable && select.has(nodeSet)) {\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.a:\n\t if (metaKey) {\n\t event.preventDefault();\n\t\n\t if (!text.selectAll(null, event.currentTarget)) {\n\t select.all(nodeSet);\n\t }\n\t }\n\t break;\n\t }\n\t}\n\t\n\tfunction arrowLeft(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowLeft(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[0] === nodeSet.startRangeSelect ? list[list.length - 1] : list[0];\n\t\n\t var node = bubbleset.prevBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t }\n\t}\n\t\n\tfunction arrowRight(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowRight(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.nextBubble(selection.focusNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[list.length - 1] === nodeSet.startRangeSelect ? list[0] : list[list.length - 1];\n\t\n\t var node = bubbleset.nextBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n\t select.clear(nodeSet);\n\t selection.collapse(begin.nextSibling, 0);\n\t } else {\n\t cursor.restore(nodeSet);\n\t }\n\t}\n\t\n\tfunction backSpace(event) {\n\t var nodeSet = event.currentTarget;\n\t nodeSet.normalize();\n\t\n\t var selection = context.getSelection();\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t if (selection.isCollapsed) {\n\t if (text.arrowLeft(selection, true)) {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t } else {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t\n\t var node = bubbleset.findBubbleLeft(selection);\n\t if (node) {\n\t select.uniq(node);\n\t return;\n\t }\n\t\n\t var list = select.get(nodeSet);\n\t\n\t if (list.length) {\n\t var prevBubble = list[0].previousSibling;\n\t var nextBubble = list[list.length - 1].nextSibling;\n\t list.forEach(function (item) {\n\t return item.parentNode.removeChild(item);\n\t });\n\t\n\t if (bubble.isBubbleNode(prevBubble)) {\n\t select.uniq(prevBubble);\n\t } else if (bubble.isBubbleNode(nextBubble)) {\n\t select.uniq(nextBubble);\n\t } else {\n\t nodeSet.focus();\n\t cursor.restore(nodeSet);\n\t }\n\t\n\t nodeSet.fireChange();\n\t }\n\t}\n\t\n\tfunction onPaste(event) {\n\t event.preventDefault();\n\t\n\t var clipboardData = event.clipboardData;\n\t if (!clipboardData) {\n\t return;\n\t }\n\t\n\t var contentType = 'text/plain';\n\t var data = clipboardData.getData && clipboardData.getData(contentType);\n\t\n\t if (!text.replaceString(data) && clipboardData.items) {\n\t Array.prototype.slice.call(clipboardData.items).filter(function (item) {\n\t return item.kind === 'string' && item.type === contentType;\n\t }).some(function (item) {\n\t item.getAsString(text.replaceString);\n\t return true;\n\t });\n\t }\n\t}\n\t\n\tfunction onDblclick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeSet && nodeBubble) {\n\t event.preventDefault();\n\t bubble.edit(nodeSet, nodeBubble);\n\t }\n\t}\n\t\n\tfunction onClick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeBubble) {\n\t if (event.metaKey || event.ctrlKey) {\n\t select.add(nodeBubble);\n\t } else if (event.shiftKey) {\n\t if (!nodeSet.startRangeSelect) {\n\t select.uniq(nodeBubble);\n\t } else {\n\t select.range(nodeBubble);\n\t }\n\t } else {\n\t select.toggleUniq(nodeBubble);\n\t }\n\t } else {\n\t select.clear(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t cursor.restore(nodeSet);\n\t }\n\t }\n\t}\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * @module x-bubbles/cursor\n\t */\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\tvar select = __webpack_require__(14);\n\t\n\texports.restore = restore;\n\texports.restoreBasis = restoreBasis;\n\t\n\t/**\n\t * Reset the cursor position to the end of the input field.\n\t * @alias module:x-bubbles/cursor.restore\n\t * @param {HTMLElement} nodeSet\n\t */\n\tfunction restore(nodeSet) {\n\t select.clear(nodeSet);\n\t var basis = restoreBasis(nodeSet);\n\t var selection = context.getSelection();\n\t selection.removeAllRanges();\n\t selection.collapse(basis, 1);\n\t}\n\t\n\t/**\n\t * The creation of the fake text at the end childNodes\n\t * @alias module:x-bubbles/cursor.restoreBasis\n\t * @param {HTMLElement} nodeSet\n\t * @returns {HTMLTextElement} fake text node\n\t */\n\tfunction restoreBasis(nodeSet) {\n\t var fakeText = text.createZws();\n\t\n\t if (nodeSet.hasChildNodes()) {\n\t var lastNode = nodeSet.childNodes[nodeSet.childNodes.length - 1];\n\t\n\t if (lastNode.isEqualNode(fakeText)) {\n\t fakeText = lastNode;\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t\n\t return fakeText;\n\t}\n\n/***/ }\n/******/ ]);\n\n\n/** WEBPACK FOOTER **\n ** x-bubbles.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5e5d19a86e2d62aae1b3\n **/","const context = require('./context');\nconst events = require('./core/events');\nconst drag = require('./core/drag');\nconst editor = require('./core/editor');\nconst bubble = require('./core/bubble');\nconst bubbleset = require('./core/bubbleset');\nconst text = require('./core/text');\nconst cursor = require('./core/cursor');\n\nconst OPTIONS = {\n begining: [ 'noop', null ],\n bubbleDeformation: [ 'funk', function () {} ],\n bubbleFormation: [ 'funk', function () {} ],\n classBubble: [ 'noop', 'bubble' ],\n draggable: [ 'bool', true ],\n ending: [ 'noop', null ], // /\\@ya\\.ru/g;\n separator: [ 'noop', /[,;]/ ],\n};\n\nconst XBubbles = Object.create(HTMLDivElement.prototype, {\n createdCallback: {\n value: function () {\n this.setAttribute('contenteditable', 'true');\n this.setAttribute('spellcheck', 'false');\n\n this.fireChange = events.throttle(events.fireChange);\n this.fireEdit = events.throttle(events.fireEdit);\n this.fireInput = events.throttle(events.fireInput);\n\n this.addEventListener('resize', events.prevent);\n this.addEventListener('resizestart', events.prevent);\n this.addEventListener('mscontrolselect', events.prevent);\n }\n },\n\n attachedCallback: {\n value: function () {\n drag.init(this);\n editor.init(this);\n bubble.bubbling(this);\n }\n },\n\n detachedCallback: {\n value: function () {\n drag.destroy(this);\n editor.destroy(this);\n }\n },\n\n /*\n attributeChangedCallback: {\n value: function (name, prevValue, value) {}\n },\n */\n\n options: {\n value: function (name, value) {\n if (!this._options) {\n this._options = {\n ...Object.keys(OPTIONS).reduce(function (result, item) {\n result[ item ] = undefined;\n return result;\n }, {}),\n\n ...this.dataset\n };\n\n optionsPrepare(this._options);\n }\n\n if (typeof value !== 'undefined') {\n this._options[ name ] = value;\n optionsPrepare(this._options);\n\n } else {\n return this._options[ name ];\n }\n }\n },\n\n items: {\n get: function () {\n return bubbleset.getBubbles(this);\n }\n },\n\n setContent: {\n value: function (data) {\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n\n data = text.html2text(data);\n this.appendChild(context.document.createTextNode(data));\n bubble.bubbling(this);\n cursor.restore(this);\n }\n },\n\n addBubble: {\n value: function (bubbleText, data) {\n const nodeBubble = bubble.create(this, bubbleText, data);\n\n if (!nodeBubble) {\n return false;\n }\n\n if (text.text2bubble(this, nodeBubble)) {\n cursor.restore(this);\n return true;\n }\n\n return false;\n }\n },\n\n removeBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n this.removeChild(nodeBubble);\n this.fireChange();\n return true;\n }\n\n return false;\n }\n },\n\n editBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n return bubble.edit(this, nodeBubble);\n }\n\n return false;\n }\n }\n});\n\nmodule.exports = context.document.registerElement('x-bubbles', {\n extends: 'div',\n prototype: XBubbles\n});\n\nconst OPTIONS_PREPARE = {\n funk: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return new Function('context', `return context.${value};`)(context);\n\n case 'function':\n return value;\n }\n },\n bool: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return (value === 'true' || value === 'on');\n\n case 'boolean':\n return value;\n }\n },\n noop: function (value) {\n return value;\n },\n};\n\nfunction optionsPrepare(options) {\n for (let name in OPTIONS) {\n const [ type, def ] = OPTIONS[ name ];\n options[ name ] = OPTIONS_PREPARE[ type ](options[ name ]);\n if (typeof options[ name ] === 'undefined') {\n options[ name ] = def;\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","module.exports = (function () {\n /* eslint no-eval: 0 */\n return this || (1, eval)('this');\n})();\n\n\n\n/** WEBPACK FOOTER **\n ** ./context.js\n **/","/**\n * @module x-bubbles/event\n */\n\nconst raf = require('raf');\nconst context = require('../context');\nconst CustomEventCommon = require('../polyfills/CustomEventCommon');\nconst { EV } = require('./constant');\nconst text = require('./text');\n\nexports.scrollX = scrollX;\nexports.scrollY = scrollY;\n\nexports.pageX = function (event) {\n return (event.pageX === null && event.clientX !== null) ?\n event.clientX + scrollX() :\n event.pageX;\n};\n\nexports.pageY = function (event) {\n return (event.pageY === null && event.clientY !== null) ?\n event.clientY + scrollY() :\n event.pageY;\n};\n\nexports.one = function (target, eventName, userCallback) {\n return target.addEventListener(eventName, function callback(event) {\n target.removeEventListener(eventName, callback);\n userCallback(event);\n });\n};\n\nexports.on = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.addEventListener(name, events[ name ]);\n }\n};\n\nexports.off = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.removeEventListener(name, events[ name ]);\n }\n};\n\nexports.prevent = function (event) {\n event.cancelBubble = true;\n event.returnValue = false;\n event.stopPropagation();\n event.preventDefault();\n return false;\n};\n\nexports.fireEdit = function (nodeBubble) {\n dispatch(this, EV.BUBBLE_EDIT, {\n bubbles: false,\n cancelable: false,\n detail: { data: nodeBubble }\n });\n};\n\nexports.fireChange = function () {\n dispatch(this, EV.CHANGE, {\n bubbles: false,\n cancelable: false\n });\n};\n\nexports.fireInput = function () {\n const textRange = text.currentTextRange();\n const editText = textRange && text.textClean(textRange.toString()) || '';\n\n if (this._bubbleValue !== editText) {\n this._bubbleValue = editText;\n\n dispatch(this, EV.BUBBLE_INPUT, {\n bubbles: false,\n cancelable: false,\n detail: { data: editText }\n });\n }\n};\n\nexports.throttle = function (callback) {\n let throttle = 0;\n const animationCallback = function () {\n throttle = 0;\n };\n\n return function () {\n if (throttle) {\n return;\n }\n\n throttle = raf(animationCallback);\n\n callback.apply(this, arguments);\n };\n};\n\nfunction scrollX() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n}\n\nfunction scrollY() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n}\n\n/**\n * Designer events.\n *\n * @example\n * const { Custom } = require('event');\n *\n * new Custom('custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event~Custom\n * @constructor\n */\nconst Custom = (function () {\n if (typeof context.CustomEvent === 'function') {\n return context.CustomEvent;\n }\n\n return CustomEventCommon;\n}());\n\n/**\n * Dispatch event.\n *\n * @example\n * const { dispatch } = require('event');\n * dispatch(node, 'custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event.dispatch\n * @param {HTMLElement} element node events\n * @param {string} name event name\n * @param {Object} params the event parameters\n * @param {boolean} [params.bubbles=false]\n * @param {boolean} [params.cancelable=false]\n * @param {*} [params.detail]\n */\nfunction dispatch(element, name, params = {}) {\n element.dispatchEvent(new Custom(name, params));\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/events.js\n **/","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function() {\n root.requestAnimationFrame = raf\n root.cancelAnimationFrame = caf\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/raf/index.js\n ** module id = 3\n ** module chunks = 0\n **/","// Generated by CoffeeScript 1.7.1\n(function() {\n var getNanoSeconds, hrtime, loadTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - loadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n loadTime = getNanoSeconds();\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/performance-now/lib/performance-now.js\n ** module id = 4\n ** module chunks = 0\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/process/browser.js\n ** module id = 5\n ** module chunks = 0\n **/","const context = require('../context');\n\n/**\n * @constant {Document}\n * @private\n */\nconst doc = context.document;\n\n/**\n * @constant {Object}\n * @private\n */\nconst protoEvent = context.Event.prototype;\n\nlet issetCustomEvent = false;\n\ntry {\n issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n} catch (e) {\n // do nothing\n}\n\n/**\n * The original function \"stopImmediatePropagation\"\n * @constant {function}\n * @private\n */\nconst stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\n/**\n * Override function to set properties \"immediatePropagationStopped\"\n */\nprotoEvent.stopImmediatePropagation = function () {\n this.immediatePropagationStopped = true;\n\n if (stopImmediatePropagation) {\n stopImmediatePropagation.call(this);\n\n } else {\n this.stopPropagation();\n }\n};\n\nlet CustomEventCommon = (function () {\n if (issetCustomEvent) {\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('CustomEvent');\n\n evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\n return evt;\n };\n }\n\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('Event');\n\n evt.initEvent(eventName, bubbles, cancelable);\n evt.detail = params.detail;\n\n return evt;\n };\n}());\n\nCustomEventCommon.prototype = protoEvent;\n\nmodule.exports = CustomEventCommon;\n\n\n\n/** WEBPACK FOOTER **\n ** ./polyfills/CustomEventCommon.js\n **/","exports.KEY = {\n a: 65,\n Backspace: 8,\n Bottom: 40,\n Cmd: 91,\n Comma: 44, // ,\n Enter: 13, // Enter\n Esc: 27,\n Left: 37,\n Right: 39,\n Semicolon: 59, // ;\n Space: 32,\n Tab: 9,\n Top: 38,\n};\n\nexports.CLS = {\n DRAGSTART: 'drag',\n DROPZONE: 'dropzone',\n};\n\nexports.EV = {\n BUBBLE_EDIT: 'bubble-edit',\n BUBBLE_INPUT: 'bubble-input',\n CHANGE: 'change',\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/constant.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\n/* eslint-disable max-len */\nconst REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\nconst REG_ZWS = /\\u200B/;\nconst TEXT_ZWS = '\\u200B';\n\nexports.arrowRight = arrowRight;\nexports.arrowLeft = arrowLeft;\nexports.remove = remove;\nexports.html2text = html2text;\nexports.currentTextRange = currentTextRange;\nexports.text2bubble = text2bubble;\nexports.replaceString = replaceString;\nexports.selectAll = selectAll;\nexports.textClean = textClean;\nexports.checkZws = checkZws;\nexports.createZws = createZws;\n\nfunction text2bubble(nodeSet, nodeBubble, selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const range = currentTextRange(selection);\n\n if (range && !nodeBubble) {\n nodeBubble = bubble.create(nodeSet, range.toString());\n }\n\n if (!nodeBubble) {\n return false;\n }\n\n if (range) {\n selection.removeAllRanges();\n selection.addRange(range);\n replace(selection, nodeBubble);\n\n } else {\n nodeSet.appendChild(nodeBubble);\n }\n\n nodeSet.fireInput();\n nodeSet.fireChange();\n return true;\n}\n\nfunction currentTextRange(selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return;\n }\n\n const pointNode = do {\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n selection.focusNode;\n\n } else if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n selection.anchorNode;\n\n } else {\n undefined;\n }\n };\n\n if (!pointNode) {\n return;\n }\n\n const range = context.document.createRange();\n let startNode = pointNode;\n let endNode = pointNode;\n let item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n startNode = item;\n item = item.previousSibling;\n }\n\n item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n endNode = item;\n item = item.nextSibling;\n }\n\n range.setStartBefore(startNode);\n range.setEndAfter(endNode);\n\n return range;\n}\n\nfunction remove(selection) {\n return replace(selection, createZws());\n}\n\nfunction replace(selection, node) {\n selection = selection || context.getSelection();\n\n if (!selection || !selection.rangeCount) {\n return false;\n }\n\n const anchor = context.document.createElement('span');\n selection.getRangeAt(0).surroundContents(anchor);\n anchor.parentNode.replaceChild(node, anchor);\n\n selection.removeAllRanges();\n selection.collapse(node, 0);\n\n return true;\n}\n\nfunction replaceString(data, selection) {\n data = textClean(data);\n if (!data) {\n return false;\n }\n\n selection = selection || context.getSelection();\n const textNode = context.document.createTextNode(data);\n\n if (!replace(selection, textNode)) {\n return false;\n }\n\n selection.collapse(textNode, textNode.nodeValue.length);\n return true;\n}\n\nfunction arrowLeft(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(startNode, startOffset);\n return true;\n }\n\n const isNativeExtend = Boolean(selection.extend);\n revert = isNativeExtend ? revert : !revert;\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n if (offset === null) {\n offset = node.nodeValue.length;\n }\n\n if (offset - 1 < 0) {\n node = node.previousSibling;\n offset = null;\n continue;\n }\n\n const text = node.nodeValue.substring(offset - 1, offset);\n\n if (checkZws(text)) {\n offset = offset - 1;\n continue;\n }\n\n break;\n }\n\n if (!node || offset === null) {\n return false;\n }\n\n if (extend) {\n if (isNativeExtend) {\n selection.extend(node, offset - 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset - 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset - 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset - 1);\n }\n\n return true;\n}\n\nfunction arrowRight(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.focusNode ||\n selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(endNode, endOffset);\n return true;\n }\n\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n const len = node.nodeValue.length;\n\n if (offset + 1 > len) {\n node = node.nextSibling;\n offset = 0;\n continue;\n }\n\n const text = node.nodeValue.substring(offset, offset + 1);\n\n if (checkZws(text)) {\n offset = offset + 1;\n continue;\n }\n\n break;\n }\n\n if (!node) {\n return false;\n }\n\n if (extend) {\n const isNativeExtend = Boolean(selection.extend);\n\n if (isNativeExtend) {\n selection.extend(node, offset + 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset + 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset + 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset + 1);\n }\n\n return true;\n}\n\nfunction html2text(value) {\n if (!value) {\n return '';\n }\n\n var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n DOMContainer.innerText = value;\n\n return DOMContainer.innerText\n .replace(/^[\\u0020\\u00a0]+$/gm, '')\n .replace(/\\n/gm, ' ')\n .trim();\n}\n\nfunction selectAll(selection, nodeSet) {\n selection = selection || context.getSelection();\n const node = selection && selection.anchorNode;\n\n if (!node || node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n let fromNode;\n let toNode;\n let item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n fromNode = item;\n item = item.previousSibling;\n }\n\n item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n toNode = item;\n item = item.nextSibling;\n }\n\n const hasBubbles = bubbleset.hasBubbles(nodeSet);\n const range = context.document.createRange();\n range.setStartBefore(fromNode);\n range.setEndAfter(toNode);\n\n const dataText = textClean(range.toString());\n\n if (dataText || (!dataText && !hasBubbles)) {\n if (!dataText) {\n range.collapse();\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n }\n\n return false;\n}\n\nfunction createZws() {\n return context.document.createTextNode(TEXT_ZWS);\n}\n\nfunction checkZws(value) {\n return REG_ZWS.test(value);\n}\n\nfunction textClean(value) {\n return String(value || '')\n .trim()\n .replace(REG_REPLACE_NON_PRINTABLE, '');\n}\n\nfunction selectionCorrect(selection) {\n let startNode = selection.anchorNode;\n let endNode = selection.focusNode;\n let startOffset = selection.anchorOffset;\n let endOffset = selection.focusOffset;\n let revert = false;\n\n if (startNode === endNode) {\n startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n revert = selection.anchorOffset > selection.focusOffset;\n\n } else {\n const position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n startNode = selection.focusNode;\n startOffset = selection.focusOffset;\n endNode = selection.anchorNode;\n endOffset = selection.anchorOffset;\n revert = true;\n }\n }\n\n return { startNode, endNode, startOffset, endOffset, revert };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/text.js\n **/","const context = require('../context');\nconst text = require('./text');\nconst { escape, canUseDrag } = require('./utils');\n\nexports.isBubbleNode = isBubbleNode;\nexports.bubbling = bubbling;\nexports.create = create;\nexports.edit = edit;\n\nfunction isBubbleNode(node) {\n if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n return node.hasAttribute('bubble');\n}\n\nfunction edit(nodeSet, nodeBubble) {\n if (nodeBubble.hasAttribute('readonly')) {\n return false;\n }\n\n const selection = context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const bubbleDeformation = nodeSet.options('bubbleDeformation');\n let rangeParams = bubbleDeformation(nodeBubble);\n\n if (!rangeParams) {\n const dataText = text.textClean(nodeBubble.innerText);\n\n rangeParams = {\n text: dataText,\n startOffset: 0,\n endOffset: dataText.length\n };\n }\n\n const textFake = text.createZws();\n const textNode = context.document.createTextNode(rangeParams.text);\n\n nodeSet.fireEdit(nodeBubble);\n nodeSet.replaceChild(textNode, nodeBubble);\n nodeSet.insertBefore(textFake, textNode);\n\n const range = context.document.createRange();\n range.setStart(textNode, rangeParams.startOffset);\n range.setEnd(textNode, rangeParams.endOffset);\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n}\n\nfunction create(nodeSet, dataText, data = {}) {\n dataText = text.textClean(dataText);\n\n if (!dataText) {\n return;\n }\n\n const bubbleFormation = nodeSet.options('bubbleFormation');\n const classBubble = nodeSet.options('classBubble');\n const draggable = canUseDrag() && nodeSet.options('draggable');\n const wrap = context.document.createElement('span');\n\n wrap.innerText = dataText;\n\n if (draggable) {\n wrap.setAttribute('draggable', 'true');\n }\n\n for (let key in data) {\n if (data[ key ]) {\n wrap.setAttribute(`data-${key}`, escape(data[ key ]));\n }\n }\n\n bubbleFormation(wrap);\n\n if (classBubble) {\n const classes = String(classBubble).trim().split(/\\s+/);\n let len = classes.length;\n\n while (len--) {\n wrap.classList.add(classes[ len ]);\n }\n }\n\n wrap.setAttribute('bubble', '');\n wrap.setAttribute('contenteditable', 'false');\n\n return wrap;\n}\n\nfunction bubbling(nodeSet) {\n const separator = nodeSet.options('separator');\n const ending = nodeSet.options('ending');\n const begining = nodeSet.options('begining');\n const ranges = getBubbleRanges(nodeSet);\n const nodes = [];\n\n ranges.forEach(function (range) {\n const dataText = text.textClean(range.toString());\n\n if (!dataText) {\n range.deleteContents();\n return;\n }\n\n let textParts = [ dataText ];\n\n if (separator) {\n textParts = dataText\n .split(separator)\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (ending) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByEnding(str, ending)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n\n } else if (begining) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByBeginning(str, begining)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (!textParts.length) {\n range.deleteContents();\n }\n\n const fragment = context.document.createDocumentFragment();\n\n textParts.forEach(function (textPart) {\n const nodeBubble = create(nodeSet, textPart);\n if (nodeBubble) {\n fragment.appendChild(nodeBubble);\n nodes.push(nodeBubble);\n }\n });\n\n range.deleteContents();\n range.insertNode(fragment);\n });\n\n nodeSet.fireInput();\n\n if (nodes.length) {\n nodeSet.fireChange();\n }\n\n return nodes;\n}\n\nfunction getBubbleRanges(nodeSet) {\n const ranges = [];\n const children = nodeSet.childNodes;\n let range;\n let node;\n\n for (let i = 0; i < children.length; i++) {\n node = children[ i ];\n\n if (isBubbleNode(node)) {\n if (range) {\n range.setEndBefore(node);\n ranges.push(range);\n range = undefined;\n }\n\n } else {\n if (!range) {\n range = context.document.createRange();\n range.setStartBefore(node);\n }\n }\n }\n\n if (range) {\n range.setEndAfter(node);\n ranges.push(range);\n }\n\n return ranges;\n}\n\nfunction trimIterator(str) {\n return str.trim();\n}\n\nfunction nonEmptyIterator(str) {\n return Boolean(str);\n}\n\nfunction parseFragmentByEnding(str, reg) {\n const parts = [];\n let lastIndex = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while (reg.exec(str) !== null && loop) {\n loop--;\n parts.push(str.substring(lastIndex, reg.lastIndex));\n lastIndex = reg.lastIndex;\n }\n\n return parts;\n}\n\nfunction parseFragmentByBeginning(str, reg) {\n const parts = [];\n let res;\n let index = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while ((res = reg.exec(str)) !== null && loop) {\n loop--;\n if (index !== res.index) {\n parts.push(str.substring(index, res.index));\n index = res.index;\n }\n }\n\n parts.push(str.substring(index, str.length));\n return parts;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubble.js\n **/","const context = require('../context');\n\n/* eslint quotes: 0 */\n\nconst HTML_ESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n\nconst HTML_UNESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '`': '`'\n};\n\nconst REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\nconst REG_UNESCAPED_HTML = /[&<>\"'`]/g;\nconst REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\nconst REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\nconst REG_IE = /Trident|Edge/;\n\nexports.escape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n }\n\n return data;\n};\n\n\nexports.unescape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n }\n\n return data;\n};\n\nexports.canUseDrag = function () {\n return !REG_IE.test(context.navigator.userAgent);\n};\n\nfunction unescapeHtmlChar(chr) {\n return HTML_UNESCAPES[ chr ];\n}\n\nfunction escapeHtmlChar(chr) {\n return HTML_ESCAPES[ chr ];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/utils.js\n **/","const bubble = require('./bubble');\nconst text = require('./text');\n\nexports.closestNodeBubble = closestNodeBubble;\nexports.closestNodeSet = closestNodeSet;\nexports.findBubbleLeft = findBubbleLeft;\nexports.getBubbles = getBubbles;\nexports.hasBubbles = hasBubbles;\nexports.headBubble = headBubble;\nexports.lastBubble = lastBubble;\nexports.nextBubble = nextBubble;\nexports.prevBubble = prevBubble;\n\nfunction lastBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:last-child');\n}\n\nfunction headBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:first-child');\n}\n\nfunction getBubbles(nodeSet) {\n return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n}\n\nfunction hasBubbles(nodeSet) {\n return Boolean(nodeSet.querySelector('[bubble]'));\n}\n\nfunction findBubbleLeft(selection) {\n if (!selection.focusNode || !selection.anchorNode) {\n return;\n }\n\n let node = selection.focusNode.previousSibling;\n\n if (selection.anchorNode !== selection.focusNode &&\n selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n node = selection.anchorNode.previousSibling;\n }\n\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n return;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction closestNodeSet(node) {\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE &&\n node.getAttribute('is') === 'x-bubbles') {\n\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction closestNodeBubble(node) {\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction prevBubble(target) {\n let node = target && target.previousSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction nextBubble(target) {\n let node = target && target.nextSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.nextSibling;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubbleset.js\n **/","const native = require('./drag/native');\nconst mouse = require('./drag/mouse');\nconst { canUseDrag } = require('./utils');\n\nexports.init = function (nodeSet) {\n if (canUseDrag()) {\n return native.init(nodeSet);\n }\n\n return mouse.init(nodeSet);\n};\n\nexports.destroy = function (nodeSet) {\n if (canUseDrag()) {\n return native.destroy(nodeSet);\n }\n\n return mouse.destroy(nodeSet);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag.js\n **/","const context = require('../../context');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst events = require('../events');\nconst { CLS } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nconst EVENTS = {\n dragend: onDragend,\n dragenter: onDragenter,\n dragleave: onDragleave,\n dragover: onDragover,\n dragstart: onDragstart,\n drop: onDrop,\n};\n\nlet currentDragSet = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onDragstart(event) {\n event.stopPropagation();\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (!nodeSet || !nodeBubble) {\n event.preventDefault();\n return;\n }\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = nodeSet;\n nodeSet.classList.add(CLS.DRAGSTART);\n select.add(nodeBubble);\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', '');\n\n const list = select.get(currentDragSet);\n if (list.length > 1) {\n event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n }\n}\n\nfunction onDrop(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet || nodeSet === currentDragSet) {\n return;\n }\n\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n}\n\nfunction onDragover(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n event.dataTransfer.dropEffect = 'move';\n}\n\nfunction onDragenter(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n }\n}\n\nfunction onDragleave(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n}\n\nfunction onDragend(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n currentDragSet.classList.remove(CLS.DRAGSTART);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n\n currentDragSet = null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/native.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\nconst slice = Array.prototype.slice;\nconst PATH_SELECTED = '[bubble][selected]';\nconst PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\nexports.all = all;\nexports.add = add;\nexports.clear = clear;\nexports.get = get;\nexports.uniq = uniq;\nexports.head = head;\nexports.last = last;\nexports.has = has;\nexports.range = range;\nexports.toggleUniq = toggleUniq;\n\nfunction range(node) {\n if (!bubble.isBubbleNode(node)) {\n return;\n }\n\n const set = node.parentNode;\n const list = get(set);\n\n if (!list.length) {\n uniq(node);\n return;\n }\n\n clear(set);\n\n const headList = list[0];\n const lastList = list[ list.length - 1 ];\n\n if (headList === lastList || !set.startRangeSelect) {\n set.startRangeSelect = headList;\n }\n\n let fromNode;\n let toNode;\n const position = node.compareDocumentPosition(set.startRangeSelect);\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n fromNode = set.startRangeSelect;\n toNode = node;\n\n } else {\n fromNode = node;\n toNode = set.startRangeSelect;\n }\n\n if (fromNode && toNode) {\n let item = fromNode;\n\n while (item) {\n if (!setSelected(item)) {\n break;\n }\n\n if (item === toNode) {\n break;\n }\n\n item = item.nextSibling;\n }\n\n bubble.bubbling(set);\n }\n}\n\nfunction all(nodeSet) {\n slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(item => setSelected(item));\n nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\n bubble.bubbling(nodeSet);\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n}\n\nfunction has(nodeSet) {\n return Boolean(nodeSet.querySelector(PATH_SELECTED));\n}\n\nfunction head(set) {\n return get(set)[0];\n}\n\nfunction last(set) {\n const list = get(set);\n return list[ list.length - 1 ];\n}\n\nfunction get(nodeSet) {\n return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n}\n\nfunction clear(nodeSet) {\n get(nodeSet).forEach(item => item.removeAttribute('selected'));\n}\n\nfunction add(node) {\n if (setSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n nodeSet.startRangeSelect = node;\n // ???\n bubble.bubbling(nodeSet);\n\n return true;\n }\n\n return false;\n}\n\nfunction uniq(node) {\n if (!bubble.isBubbleNode(node)) {\n return false;\n }\n\n const nodeSet = bubbleset.closestNodeSet(node);\n const selection = context.getSelection();\n\n selection && selection.removeAllRanges();\n clear(nodeSet);\n\n return add(node);\n}\n\nfunction toggleUniq(node) {\n if (isSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n if (get(nodeSet).length === 1) {\n return removeSelected(node);\n }\n }\n\n return uniq(node);\n}\n\nfunction isSelected(node) {\n return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n}\n\nfunction setSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.setAttribute('selected', '');\n return true;\n }\n\n return false;\n}\n\nfunction removeSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.removeAttribute('selected');\n return true;\n }\n\n return false;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/select.js\n **/","const DRAG_IMG_WIDTH = 16;\n\nlet dragImage = null;\n\nexports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\nexports.getDragImage = function () {\n if (!dragImage) {\n dragImage = new Image();\n dragImage.src = require('url?mimetype=image/png!./bubbles.png');\n }\n\n return dragImage;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/common.js\n **/","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/url-loader?mimetype=image/png!./core/drag/bubbles.png\n ** module id = 16\n ** module chunks = 0\n **/","const context = require('../../context');\nconst events = require('../events');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst Modernizr = require('modernizr');\nconst { CLS } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nlet currentDragSet = null;\nlet currentMoveSet = null;\nlet currentDragElement = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, 'mousedown', onMousedown);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, 'mousedown', onMousedown);\n};\n\nfunction onMousedown(event) {\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n if (!nodeBubble) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (!nodeSet) {\n return;\n }\n\n event.preventDefault();\n nodeSet.focus();\n\n const drag = nodeSet.__drag__ = {\n onMouseup: onMouseup.bind(this, nodeSet),\n onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n nodeOffsetX: events.pageX(event) - nodeBubble.offsetLeft,\n nodeOffsetY: events.pageY(event) - nodeBubble.offsetTop,\n x: 0,\n y: 0\n };\n\n currentDragSet = null;\n currentMoveSet = null;\n currentDragElement = null;\n\n events.one(document, 'mouseup', drag.onMouseup);\n events.on(document, 'mousemove', drag.onMousemove);\n events.on(document, 'scroll', drag.onScroll);\n}\n\nfunction onMouseup(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n events.off(document, 'mousemove', drag.onMousemove);\n events.off(document, 'scroll', drag.onScroll);\n delete dragSet.__drag__;\n\n if (currentDragElement) {\n currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n currentDragElement = null;\n }\n\n if (currentMoveSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n currentMoveSet = null;\n }\n\n if (currentDragSet) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n }\n\n currentDragSet.classList.remove(CLS.DRAGSTART);\n currentDragSet = null;\n }\n}\n\nfunction onMousemove(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n if (!currentDragSet) {\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = dragSet;\n currentDragSet.classList.add(CLS.DRAGSTART);\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n let moveElement;\n\n if (nodeBubble) {\n select.add(nodeBubble);\n if (select.get(currentDragSet).length === 1) {\n moveElement = nodeBubble.cloneNode(true);\n }\n }\n\n if (!moveElement) {\n moveElement = getDragImage();\n drag.nodeOffsetX = DRAG_IMG_WIDTH;\n drag.nodeOffsetY = DRAG_IMG_WIDTH;\n }\n\n currentDragElement = document.body.appendChild(document.createElement('div'));\n currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n currentDragElement.appendChild(moveElement);\n }\n\n drag.x = event.clientX;\n drag.y = event.clientY;\n onScroll(dragSet);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n if (currentMoveSet && currentMoveSet !== nodeSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n\n } else if (!currentMoveSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n }\n\n } else if (currentMoveSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n currentMoveSet = null;\n }\n}\n\nfunction onScroll(dragSet) {\n const drag = dragSet.__drag__;\n if (!drag || !currentDragElement) {\n return;\n }\n\n const x = drag.x - drag.nodeOffsetX + events.scrollX();\n const y = drag.y - drag.nodeOffsetY + events.scrollY();\n\n if (Modernizr.csstransforms3d) {\n currentDragElement.style.transform = `translate3d(${x}px, ${y}px, 0px)`;\n\n } else if (Modernizr.csstransforms) {\n currentDragElement.style.transform = `translate(${x}px, ${y}px)`;\n\n } else {\n currentDragElement.style.top = `${y}px`;\n currentDragElement.style.left = `${x}px`;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/mouse.js\n **/","module.exports = Modernizr;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"var\":\"Modernizr\",\"root\":\"modernizr\",\"commonjs2\":\"modernizr\",\"commonjs\":\"modernizr\",\"amd\":\"modernizr\"}\n ** module id = 18\n ** module chunks = 0\n **/","const context = require('../context');\nconst bubbleset = require('./bubbleset');\nconst bubble = require('./bubble');\nconst cursor = require('./cursor');\nconst select = require('./select');\nconst { KEY } = require('./constant');\nconst text = require('./text');\nconst events = require('./events');\n\nconst EVENTS = {\n blur: onBlur,\n click: onClick,\n dblclick: onDblclick,\n focus: onFocus,\n keydown: onKeydown,\n keypress: onKeypress,\n keyup: onKeyup,\n paste: onPaste,\n};\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onBlur(event) {\n select.clear(event.currentTarget);\n bubble.bubbling(event.currentTarget);\n}\n\nfunction onFocus(event) {\n cursor.restore(event.currentTarget);\n}\n\nfunction onKeyup(event) {\n const code = event.charCode || event.keyCode;\n const isPrintableChar = do {\n if (event.key) {\n event.key.length === 1;\n } else {\n ((code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd);\n }\n };\n\n if (isPrintableChar) {\n event.currentTarget.fireInput();\n }\n}\n\nfunction onKeypress(event) {\n const code = event.charCode || event.keyCode;\n const nodeSet = event.currentTarget;\n\n /* eslint no-case-declarations: 0 */\n switch (code) {\n case KEY.Enter:\n event.preventDefault();\n if (!nodeSet.hasAttribute('disable-controls')) {\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.Comma:\n case KEY.Semicolon:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n }\n}\n\nfunction onKeydown(event) {\n const code = event.charCode || event.keyCode;\n const metaKey = event.ctrlKey || event.metaKey;\n const nodeSet = event.currentTarget;\n const enable = !nodeSet.hasAttribute('disable-controls');\n\n switch (code) {\n case KEY.Esc:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n\n case KEY.Backspace:\n event.preventDefault();\n backSpace(event);\n break;\n\n case KEY.Left:\n event.preventDefault();\n arrowLeft(event);\n break;\n\n // сдвигаем курсор в начало списка\n case KEY.Top:\n event.preventDefault();\n if (enable) {\n const headBubble = bubbleset.headBubble(nodeSet);\n headBubble && select.uniq(headBubble);\n }\n break;\n\n case KEY.Right:\n event.preventDefault();\n arrowRight(event);\n break;\n\n // сдвигаем курсор в конец списка\n // case KEY.Tab:\n case KEY.Bottom:\n event.preventDefault();\n if (enable && select.has(nodeSet)) {\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.a:\n if (metaKey) {\n event.preventDefault();\n\n if (!text.selectAll(null, event.currentTarget)) {\n select.all(nodeSet);\n }\n }\n break;\n }\n}\n\nfunction arrowLeft(event) {\n const selection = context.getSelection();\n\n if (text.arrowLeft(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ 0 ] === nodeSet.startRangeSelect) {\n list[ list.length - 1 ];\n\n } else {\n list[ 0 ];\n }\n };\n\n const node = bubbleset.prevBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n }\n}\n\nfunction arrowRight(event) {\n const selection = context.getSelection();\n\n if (text.arrowRight(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.nextBubble(selection.focusNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ list.length - 1 ] === nodeSet.startRangeSelect) {\n list[ 0 ];\n\n } else {\n list[ list.length - 1 ];\n }\n };\n\n const node = bubbleset.nextBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n\n } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n select.clear(nodeSet);\n selection.collapse(begin.nextSibling, 0);\n\n } else {\n cursor.restore(nodeSet);\n }\n}\n\nfunction backSpace(event) {\n const nodeSet = event.currentTarget;\n nodeSet.normalize();\n\n const selection = context.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n if (text.arrowLeft(selection, true)) {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n } else {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n let node = bubbleset.findBubbleLeft(selection);\n if (node) {\n select.uniq(node);\n return;\n }\n\n const list = select.get(nodeSet);\n\n if (list.length) {\n const prevBubble = list[ 0 ].previousSibling;\n const nextBubble = list[ list.length - 1 ].nextSibling;\n list.forEach(item => item.parentNode.removeChild(item));\n\n if (bubble.isBubbleNode(prevBubble)) {\n select.uniq(prevBubble);\n\n } else if (bubble.isBubbleNode(nextBubble)) {\n select.uniq(nextBubble);\n\n } else {\n nodeSet.focus();\n cursor.restore(nodeSet);\n }\n\n nodeSet.fireChange();\n }\n}\n\nfunction onPaste(event) {\n event.preventDefault();\n\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n return;\n }\n\n const contentType = 'text/plain';\n let data = clipboardData.getData && clipboardData.getData(contentType);\n\n if (!text.replaceString(data) && clipboardData.items) {\n Array.prototype.slice.call(clipboardData.items)\n .filter(item => item.kind === 'string' && item.type === contentType)\n .some(function (item) {\n item.getAsString(text.replaceString);\n return true;\n });\n }\n}\n\nfunction onDblclick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeSet && nodeBubble) {\n event.preventDefault();\n bubble.edit(nodeSet, nodeBubble);\n }\n}\n\nfunction onClick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet) {\n return;\n }\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeBubble) {\n if (event.metaKey || event.ctrlKey) {\n select.add(nodeBubble);\n\n } else if (event.shiftKey) {\n if (!nodeSet.startRangeSelect) {\n select.uniq(nodeBubble);\n\n } else {\n select.range(nodeBubble);\n }\n\n } else {\n select.toggleUniq(nodeBubble);\n }\n\n } else {\n select.clear(nodeSet);\n\n const selection = context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n cursor.restore(nodeSet);\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/editor.js\n **/","/**\n * @module x-bubbles/cursor\n */\n\nconst context = require('../context');\nconst text = require('./text');\nconst select = require('./select');\n\nexports.restore = restore;\nexports.restoreBasis = restoreBasis;\n\n/**\n * Reset the cursor position to the end of the input field.\n * @alias module:x-bubbles/cursor.restore\n * @param {HTMLElement} nodeSet\n */\nfunction restore(nodeSet) {\n select.clear(nodeSet);\n const basis = restoreBasis(nodeSet);\n const selection = context.getSelection();\n selection.removeAllRanges();\n selection.collapse(basis, 1);\n}\n\n/**\n * The creation of the fake text at the end childNodes\n * @alias module:x-bubbles/cursor.restoreBasis\n * @param {HTMLElement} nodeSet\n * @returns {HTMLTextElement} fake text node\n */\nfunction restoreBasis(nodeSet) {\n let fakeText = text.createZws();\n\n if (nodeSet.hasChildNodes()) {\n const lastNode = nodeSet.childNodes[ nodeSet.childNodes.length - 1 ];\n\n if (lastNode.isEqualNode(fakeText)) {\n fakeText = lastNode;\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n return fakeText;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/cursor.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///x-bubbles.min.js","webpack:///webpack/bootstrap 2e7287ebb13d5df3e100","webpack:///./index.js","webpack:///./context.js","webpack:///./core/events.js","webpack:///../~/raf/index.js","webpack:///../~/performance-now/lib/performance-now.js","webpack:///../~/process/browser.js","webpack:///./polyfills/CustomEventCommon.js","webpack:///./core/constant.js","webpack:///./core/text.js","webpack:///./core/bubble.js","webpack:///./core/utils.js","webpack:///./core/bubbleset.js","webpack:///./core/drag.js","webpack:///./core/drag/native.js","webpack:///./core/select.js","webpack:///./core/drag/common.js","webpack:///./core/drag/bubbles.png","webpack:///./core/drag/mouse.js","webpack:///external {\"var\":\"Modernizr\",\"root\":\"modernizr\",\"commonjs2\":\"modernizr\",\"commonjs\":\"modernizr\",\"amd\":\"modernizr\"}","webpack:///./core/editor.js","webpack:///./core/cursor.js"],"names":["XBubbles","modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","optionsPrepare","options","name","OPTIONS","_OPTIONS$name","_slicedToArray","type","def","OPTIONS_PREPARE","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","length","err","Array","isArray","Object","TypeError","_typeof","obj","constructor","prototype","_extends","assign","target","arguments","source","key","hasOwnProperty","context","events","drag","editor","bubble","bubbleset","text","cursor","begining","bubbleDeformation","bubbleFormation","classBubble","draggable","ending","separator","create","HTMLDivElement","createdCallback","this","setAttribute","fireChange","throttle","fireEdit","fireInput","addEventListener","prevent","attachedCallback","init","bubbling","detachedCallback","destroy","_options","keys","reduce","result","item","dataset","items","get","getBubbles","setContent","data","firstChild","removeChild","html2text","appendChild","document","createTextNode","restore","addBubble","bubbleText","nodeBubble","text2bubble","removeBubble","contains","editBubble","edit","registerElement","extends","funk","Function","bool","noop","eval","_defineProperty","defineProperty","enumerable","configurable","writable","scrollX","html","documentElement","body","scrollLeft","clientLeft","scrollY","scrollTop","clientTop","dispatch","element","params","dispatchEvent","Custom","raf","CustomEventCommon","_require","EV","pageX","event","clientX","pageY","clientY","one","eventName","userCallback","callback","removeEventListener","on","off","cancelBubble","returnValue","stopPropagation","preventDefault","BUBBLE_EDIT","bubbles","cancelable","detail","CHANGE","textRange","currentTextRange","editText","textClean","toString","_bubbleValue","BUBBLE_INPUT","animationCallback","apply","CustomEvent","global","now","root","window","vendors","suffix","caf","last","queue","frameDuration","_now","Math","max","setTimeout","cp","slice","cancelled","e","round","handle","fn","cancel","polyfill","requestAnimationFrame","cancelAnimationFrame","process","getNanoSeconds","hrtime","loadTime","performance","hr","Date","getTime","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","nextTick","args","title","browser","env","argv","version","versions","addListener","once","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask","doc","protoEvent","Event","issetCustomEvent","Boolean","createEvent","stopImmediatePropagation","immediatePropagationStopped","evt","initCustomEvent","initEvent","KEY","a","Backspace","Bottom","Cmd","Comma","Enter","Esc","Left","Right","Semicolon","Space","Tab","Top","CLS","DRAGSTART","DROPZONE","DRAGEND","DRAGENTER","DRAGLEAVE","DROP","nodeSet","selection","getSelection","range","removeAllRanges","addRange","replace","pointNode","focusNode","nodeType","Node","TEXT_NODE","anchorNode","createRange","startNode","endNode","previousSibling","nextSibling","setStartBefore","setEndAfter","remove","createZws","node","rangeCount","anchor","createElement","getRangeAt","surroundContents","parentNode","replaceChild","collapse","replaceString","textNode","nodeValue","arrowLeft","extend","_selectionCorrect","selectionCorrect","startOffset","endOffset","revert","isCollapsed","isNativeExtend","offset","substring","checkZws","setStart","setEnd","arrowRight","_selectionCorrect2","DOMContainer","implementation","createHTMLDocument","innerText","trim","selectAll","fromNode","toNode","hasBubbles","dataText","TEXT_ZWS","REG_ZWS","test","String","REG_REPLACE_NON_PRINTABLE","anchorOffset","focusOffset","min","position","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","isBubbleNode","ELEMENT_NODE","hasAttribute","rangeParams","textFake","insertBefore","canUseDrag","wrap","escape","classes","split","classList","add","ranges","getBubbleRanges","nodes","forEach","deleteContents","textParts","map","trimIterator","filter","nonEmptyIterator","parts","str","parseFragmentByEnding","parseFragmentByBeginning","fragment","createDocumentFragment","textPart","insertNode","children","childNodes","setEndBefore","reg","lastIndex","loop","exec","res","index","unescapeHtmlChar","chr","HTML_UNESCAPES","escapeHtmlChar","HTML_ESCAPES","&","<",">","\"","'","`","&","<",">",""","'","`","REG_ESCAPED_HTML","REG_UNESCAPED_HTML","REG_HAS_ESCAPED_HTML","RegExp","REG_HAS_UNESCAPED_HTML","REG_IE","unescape","navigator","userAgent","lastBubble","querySelector","headBubble","querySelectorAll","findBubbleLeft","DOCUMENT_POSITION_FOLLOWING","closestNodeSet","getAttribute","closestNodeBubble","prevBubble","nextBubble","native","mouse","onDragstart","currentDragSet","select","dataTransfer","effectAllowed","setData","list","setDragImage","getDragImage","DRAG_IMG_WIDTH","onDrop","focus","onDragover","dropEffect","onDragenter","onDragleave","onDragend","_require2","EVENTS","dragend","dragenter","dragleave","dragover","dragstart","drop","set","uniq","clear","headList","lastList","startRangeSelect","setSelected","all","PATH_NOT_SELECTED","PATH_SELECTED","has","head","removeAttribute","toggleUniq","isSelected","removeSelected","dragImage","Image","src","onMousedown","__drag__","onMouseup","bind","onMousemove","onScroll","nodeOffsetX","offsetX","nodeOffsetY","offsetY","x","y","currentMoveSet","currentDragElement","dragSet","_","moveElement","cloneNode","style","cssText","Modernizr","csstransforms3d","transform","csstransforms","top","left","onBlur","currentTarget","onFocus","onKeyup","code","charCode","keyCode","isPrintableChar","onKeypress","onKeydown","metaKey","ctrlKey","enable","backSpace","shiftKey","begin","normalize","onPaste","clipboardData","contentType","getData","kind","some","getAsString","onDblclick","onClick","blur","click","dblclick","keydown","keypress","keyup","paste","basis","restoreBasis","fakeText","hasChildNodes","lastNode","isEqualNode"],"mappings":"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","file":"x-bubbles.min.js","sourcesContent":["var XBubbles =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar drag = __webpack_require__(12);\n\tvar editor = __webpack_require__(19);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\tvar text = __webpack_require__(8);\n\tvar cursor = __webpack_require__(20);\n\t\n\tvar OPTIONS = {\n\t begining: ['noop', null],\n\t bubbleDeformation: ['funk', function () {}],\n\t bubbleFormation: ['funk', function () {}],\n\t classBubble: ['noop', 'bubble'],\n\t draggable: ['bool', true],\n\t ending: ['noop', null], // /\\@ya\\.ru/g;\n\t separator: ['noop', /[,;]/]\n\t};\n\t\n\tvar XBubbles = Object.create(HTMLDivElement.prototype, {\n\t createdCallback: {\n\t value: function value() {\n\t this.setAttribute('contenteditable', 'true');\n\t this.setAttribute('spellcheck', 'false');\n\t\n\t this.fireChange = events.throttle(events.fireChange);\n\t this.fireEdit = events.throttle(events.fireEdit);\n\t this.fireInput = events.throttle(events.fireInput);\n\t\n\t this.addEventListener('resize', events.prevent);\n\t this.addEventListener('resizestart', events.prevent);\n\t this.addEventListener('mscontrolselect', events.prevent);\n\t }\n\t },\n\t\n\t attachedCallback: {\n\t value: function value() {\n\t drag.init(this);\n\t editor.init(this);\n\t bubble.bubbling(this);\n\t }\n\t },\n\t\n\t detachedCallback: {\n\t value: function value() {\n\t drag.destroy(this);\n\t editor.destroy(this);\n\t }\n\t },\n\t\n\t /*\n\t attributeChangedCallback: {\n\t value: function (name, prevValue, value) {}\n\t },\n\t */\n\t\n\t options: {\n\t value: function value(name, _value) {\n\t if (!this._options) {\n\t this._options = _extends({}, Object.keys(OPTIONS).reduce(function (result, item) {\n\t result[item] = undefined;\n\t return result;\n\t }, {}), this.dataset);\n\t\n\t optionsPrepare(this._options);\n\t }\n\t\n\t if (typeof _value !== 'undefined') {\n\t this._options[name] = _value;\n\t optionsPrepare(this._options);\n\t } else {\n\t return this._options[name];\n\t }\n\t }\n\t },\n\t\n\t items: {\n\t get: function get() {\n\t return bubbleset.getBubbles(this);\n\t }\n\t },\n\t\n\t setContent: {\n\t value: function value(data) {\n\t while (this.firstChild) {\n\t this.removeChild(this.firstChild);\n\t }\n\t\n\t data = text.html2text(data);\n\t this.appendChild(context.document.createTextNode(data));\n\t bubble.bubbling(this);\n\t cursor.restore(this);\n\t }\n\t },\n\t\n\t addBubble: {\n\t value: function value(bubbleText, data) {\n\t var nodeBubble = bubble.create(this, bubbleText, data);\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (text.text2bubble(this, nodeBubble)) {\n\t cursor.restore(this);\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t removeBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t this.removeChild(nodeBubble);\n\t this.fireChange();\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t editBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t return bubble.edit(this, nodeBubble);\n\t }\n\t\n\t return false;\n\t }\n\t }\n\t});\n\t\n\tmodule.exports = context.document.registerElement('x-bubbles', {\n\t extends: 'div',\n\t prototype: XBubbles\n\t});\n\t\n\tvar OPTIONS_PREPARE = {\n\t funk: function funk(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return new Function('context', 'return context.' + value + ';')(context);\n\t\n\t case 'function':\n\t return value;\n\t }\n\t },\n\t bool: function bool(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return value === 'true' || value === 'on';\n\t\n\t case 'boolean':\n\t return value;\n\t }\n\t },\n\t noop: function noop(value) {\n\t return value;\n\t }\n\t};\n\t\n\tfunction optionsPrepare(options) {\n\t for (var name in OPTIONS) {\n\t var _OPTIONS$name = _slicedToArray(OPTIONS[name], 2);\n\t\n\t var type = _OPTIONS$name[0];\n\t var def = _OPTIONS$name[1];\n\t\n\t options[name] = OPTIONS_PREPARE[type](options[name]);\n\t if (typeof options[name] === 'undefined') {\n\t options[name] = def;\n\t }\n\t }\n\t}\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t /* eslint no-eval: 0 */\n\t return this || (1, eval)('this');\n\t}();\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\t/**\n\t * @module x-bubbles/event\n\t */\n\t\n\tvar raf = __webpack_require__(3);\n\tvar context = __webpack_require__(1);\n\tvar CustomEventCommon = __webpack_require__(6);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar EV = _require.EV;\n\t\n\tvar text = __webpack_require__(8);\n\t\n\texports.scrollX = scrollX;\n\texports.scrollY = scrollY;\n\texports.dispatch = dispatch;\n\t\n\texports.pageX = function (event) {\n\t return event.pageX === null && event.clientX !== null ? event.clientX + scrollX() : event.pageX;\n\t};\n\t\n\texports.pageY = function (event) {\n\t return event.pageY === null && event.clientY !== null ? event.clientY + scrollY() : event.pageY;\n\t};\n\t\n\texports.one = function (target, eventName, userCallback) {\n\t return target.addEventListener(eventName, function callback(event) {\n\t target.removeEventListener(eventName, callback);\n\t userCallback(event);\n\t });\n\t};\n\t\n\texports.on = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.addEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.off = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.removeEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.prevent = function (event) {\n\t event.cancelBubble = true;\n\t event.returnValue = false;\n\t event.stopPropagation();\n\t event.preventDefault();\n\t return false;\n\t};\n\t\n\texports.fireEdit = function (nodeBubble) {\n\t dispatch(this, EV.BUBBLE_EDIT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: nodeBubble }\n\t });\n\t};\n\t\n\texports.fireChange = function () {\n\t dispatch(this, EV.CHANGE, {\n\t bubbles: false,\n\t cancelable: false\n\t });\n\t};\n\t\n\texports.fireInput = function () {\n\t var textRange = text.currentTextRange();\n\t var editText = textRange && text.textClean(textRange.toString()) || '';\n\t\n\t if (this._bubbleValue !== editText) {\n\t this._bubbleValue = editText;\n\t\n\t dispatch(this, EV.BUBBLE_INPUT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: editText }\n\t });\n\t }\n\t};\n\t\n\texports.throttle = function (callback) {\n\t var throttle = 0;\n\t var animationCallback = function animationCallback() {\n\t throttle = 0;\n\t };\n\t\n\t return function () {\n\t if (throttle) {\n\t return;\n\t }\n\t\n\t throttle = raf(animationCallback);\n\t\n\t callback.apply(this, arguments);\n\t };\n\t};\n\t\n\tfunction scrollX() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n\t}\n\t\n\tfunction scrollY() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n\t}\n\t\n\t/**\n\t * Designer events.\n\t *\n\t * @example\n\t * const { Custom } = require('event');\n\t *\n\t * new Custom('custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event~Custom\n\t * @constructor\n\t */\n\tvar Custom = function () {\n\t if (typeof context.CustomEvent === 'function') {\n\t return context.CustomEvent;\n\t }\n\t\n\t return CustomEventCommon;\n\t}();\n\t\n\t/**\n\t * Dispatch event.\n\t *\n\t * @example\n\t * const { dispatch } = require('event');\n\t * dispatch(node, 'custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event.dispatch\n\t * @param {HTMLElement} element node events\n\t * @param {string} name event name\n\t * @param {Object} params the event parameters\n\t * @param {boolean} [params.bubbles=false]\n\t * @param {boolean} [params.cancelable=false]\n\t * @param {*} [params.detail]\n\t */\n\tfunction dispatch(element, name) {\n\t var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t element.dispatchEvent(new Custom(name, params));\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var now = __webpack_require__(4)\n\t , root = typeof window === 'undefined' ? global : window\n\t , vendors = ['moz', 'webkit']\n\t , suffix = 'AnimationFrame'\n\t , raf = root['request' + suffix]\n\t , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\t\n\tfor(var i = 0; !raf && i < vendors.length; i++) {\n\t raf = root[vendors[i] + 'Request' + suffix]\n\t caf = root[vendors[i] + 'Cancel' + suffix]\n\t || root[vendors[i] + 'CancelRequest' + suffix]\n\t}\n\t\n\t// Some versions of FF have rAF but not cAF\n\tif(!raf || !caf) {\n\t var last = 0\n\t , id = 0\n\t , queue = []\n\t , frameDuration = 1000 / 60\n\t\n\t raf = function(callback) {\n\t if(queue.length === 0) {\n\t var _now = now()\n\t , next = Math.max(0, frameDuration - (_now - last))\n\t last = next + _now\n\t setTimeout(function() {\n\t var cp = queue.slice(0)\n\t // Clear queue here to prevent\n\t // callbacks from appending listeners\n\t // to the current frame's queue\n\t queue.length = 0\n\t for(var i = 0; i < cp.length; i++) {\n\t if(!cp[i].cancelled) {\n\t try{\n\t cp[i].callback(last)\n\t } catch(e) {\n\t setTimeout(function() { throw e }, 0)\n\t }\n\t }\n\t }\n\t }, Math.round(next))\n\t }\n\t queue.push({\n\t handle: ++id,\n\t callback: callback,\n\t cancelled: false\n\t })\n\t return id\n\t }\n\t\n\t caf = function(handle) {\n\t for(var i = 0; i < queue.length; i++) {\n\t if(queue[i].handle === handle) {\n\t queue[i].cancelled = true\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = function(fn) {\n\t // Wrap in a new function to prevent\n\t // `cancel` potentially being assigned\n\t // to the native rAF function\n\t return raf.call(root, fn)\n\t}\n\tmodule.exports.cancel = function() {\n\t caf.apply(root, arguments)\n\t}\n\tmodule.exports.polyfill = function() {\n\t root.requestAnimationFrame = raf\n\t root.cancelAnimationFrame = caf\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {// Generated by CoffeeScript 1.7.1\n\t(function() {\n\t var getNanoSeconds, hrtime, loadTime;\n\t\n\t if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n\t module.exports = function() {\n\t return performance.now();\n\t };\n\t } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n\t module.exports = function() {\n\t return (getNanoSeconds() - loadTime) / 1e6;\n\t };\n\t hrtime = process.hrtime;\n\t getNanoSeconds = function() {\n\t var hr;\n\t hr = hrtime();\n\t return hr[0] * 1e9 + hr[1];\n\t };\n\t loadTime = getNanoSeconds();\n\t } else if (Date.now) {\n\t module.exports = function() {\n\t return Date.now() - loadTime;\n\t };\n\t loadTime = Date.now();\n\t } else {\n\t module.exports = function() {\n\t return new Date().getTime() - loadTime;\n\t };\n\t loadTime = new Date().getTime();\n\t }\n\t\n\t}).call(this);\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/**\n\t * @constant {Document}\n\t * @private\n\t */\n\tvar doc = context.document;\n\t\n\t/**\n\t * @constant {Object}\n\t * @private\n\t */\n\tvar protoEvent = context.Event.prototype;\n\t\n\tvar issetCustomEvent = false;\n\t\n\ttry {\n\t issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n\t} catch (e) {}\n\t// do nothing\n\t\n\t\n\t/**\n\t * The original function \"stopImmediatePropagation\"\n\t * @constant {function}\n\t * @private\n\t */\n\tvar stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\t\n\t/**\n\t * Override function to set properties \"immediatePropagationStopped\"\n\t */\n\tprotoEvent.stopImmediatePropagation = function () {\n\t this.immediatePropagationStopped = true;\n\t\n\t if (stopImmediatePropagation) {\n\t stopImmediatePropagation.call(this);\n\t } else {\n\t this.stopPropagation();\n\t }\n\t};\n\t\n\tvar CustomEventCommon = function () {\n\t if (issetCustomEvent) {\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('CustomEvent');\n\t\n\t evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\t\n\t return evt;\n\t };\n\t }\n\t\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('Event');\n\t\n\t evt.initEvent(eventName, bubbles, cancelable);\n\t evt.detail = params.detail;\n\t\n\t return evt;\n\t };\n\t}();\n\t\n\tCustomEventCommon.prototype = protoEvent;\n\t\n\tmodule.exports = CustomEventCommon;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.KEY = {\n\t a: 65,\n\t Backspace: 8,\n\t Bottom: 40,\n\t Cmd: 91,\n\t Comma: 44, // ,\n\t Enter: 13, // Enter\n\t Esc: 27,\n\t Left: 37,\n\t Right: 39,\n\t Semicolon: 59, // ;\n\t Space: 32,\n\t Tab: 9,\n\t Top: 38\n\t};\n\t\n\texports.CLS = {\n\t DRAGSTART: 'drag',\n\t DROPZONE: 'dropzone'\n\t};\n\t\n\texports.EV = {\n\t BUBBLE_EDIT: 'bubble-edit',\n\t BUBBLE_INPUT: 'bubble-input',\n\t CHANGE: 'change',\n\t DRAGEND: 'dragend',\n\t DRAGENTER: 'dragenter',\n\t DRAGLEAVE: 'dragleave',\n\t DRAGSTART: 'dragstart',\n\t DROP: 'drop'\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\t/* eslint-disable max-len */\n\tvar REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n\tvar REG_ZWS = /\\u200B/;\n\tvar TEXT_ZWS = '\\u200B';\n\t\n\texports.arrowRight = arrowRight;\n\texports.arrowLeft = arrowLeft;\n\texports.remove = remove;\n\texports.html2text = html2text;\n\texports.currentTextRange = currentTextRange;\n\texports.text2bubble = text2bubble;\n\texports.replaceString = replaceString;\n\texports.selectAll = selectAll;\n\texports.textClean = textClean;\n\texports.checkZws = checkZws;\n\texports.createZws = createZws;\n\t\n\tfunction text2bubble(nodeSet, nodeBubble, selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var range = currentTextRange(selection);\n\t\n\t if (range && !nodeBubble) {\n\t nodeBubble = bubble.create(nodeSet, range.toString());\n\t }\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (range) {\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t replace(selection, nodeBubble);\n\t } else {\n\t nodeSet.appendChild(nodeBubble);\n\t }\n\t\n\t nodeSet.fireInput();\n\t nodeSet.fireChange();\n\t return true;\n\t}\n\t\n\tfunction currentTextRange(selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t var pointNode = selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE ? selection.focusNode : selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE ? selection.anchorNode : undefined;\n\t\n\t if (!pointNode) {\n\t return;\n\t }\n\t\n\t var range = context.document.createRange();\n\t var startNode = pointNode;\n\t var endNode = pointNode;\n\t var item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t startNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t endNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t range.setStartBefore(startNode);\n\t range.setEndAfter(endNode);\n\t\n\t return range;\n\t}\n\t\n\tfunction remove(selection) {\n\t return replace(selection, createZws());\n\t}\n\t\n\tfunction replace(selection, node) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.rangeCount) {\n\t return false;\n\t }\n\t\n\t var anchor = context.document.createElement('span');\n\t selection.getRangeAt(0).surroundContents(anchor);\n\t anchor.parentNode.replaceChild(node, anchor);\n\t\n\t selection.removeAllRanges();\n\t selection.collapse(node, 0);\n\t\n\t return true;\n\t}\n\t\n\tfunction replaceString(data, selection) {\n\t data = textClean(data);\n\t if (!data) {\n\t return false;\n\t }\n\t\n\t selection = selection || context.getSelection();\n\t var textNode = context.document.createTextNode(data);\n\t\n\t if (!replace(selection, textNode)) {\n\t return false;\n\t }\n\t\n\t selection.collapse(textNode, textNode.nodeValue.length);\n\t return true;\n\t}\n\t\n\tfunction arrowLeft(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect.startNode;\n\t var endNode = _selectionCorrect.endNode;\n\t var startOffset = _selectionCorrect.startOffset;\n\t var endOffset = _selectionCorrect.endOffset;\n\t var revert = _selectionCorrect.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(startNode, startOffset);\n\t return true;\n\t }\n\t\n\t var isNativeExtend = Boolean(selection.extend);\n\t revert = isNativeExtend ? revert : !revert;\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t if (offset === null) {\n\t offset = node.nodeValue.length;\n\t }\n\t\n\t if (offset - 1 < 0) {\n\t node = node.previousSibling;\n\t offset = null;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset - 1, offset);\n\t\n\t if (checkZws(text)) {\n\t offset = offset - 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node || offset === null) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t if (isNativeExtend) {\n\t selection.extend(node, offset - 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset - 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset - 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset - 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction arrowRight(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.focusNode || selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect2 = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect2.startNode;\n\t var endNode = _selectionCorrect2.endNode;\n\t var startOffset = _selectionCorrect2.startOffset;\n\t var endOffset = _selectionCorrect2.endOffset;\n\t var revert = _selectionCorrect2.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(endNode, endOffset);\n\t return true;\n\t }\n\t\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var len = node.nodeValue.length;\n\t\n\t if (offset + 1 > len) {\n\t node = node.nextSibling;\n\t offset = 0;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset, offset + 1);\n\t\n\t if (checkZws(text)) {\n\t offset = offset + 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t var isNativeExtend = Boolean(selection.extend);\n\t\n\t if (isNativeExtend) {\n\t selection.extend(node, offset + 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset + 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset + 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset + 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction html2text(value) {\n\t if (!value) {\n\t return '';\n\t }\n\t\n\t var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n\t DOMContainer.innerText = value;\n\t\n\t return DOMContainer.innerText.replace(/^[\\u0020\\u00a0]+$/gm, '').replace(/\\n/gm, ' ').trim();\n\t}\n\t\n\tfunction selectAll(selection, nodeSet) {\n\t selection = selection || context.getSelection();\n\t var node = selection && selection.anchorNode;\n\t\n\t if (!node || node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t fromNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t toNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t var hasBubbles = bubbleset.hasBubbles(nodeSet);\n\t var range = context.document.createRange();\n\t range.setStartBefore(fromNode);\n\t range.setEndAfter(toNode);\n\t\n\t var dataText = textClean(range.toString());\n\t\n\t if (dataText || !dataText && !hasBubbles) {\n\t if (!dataText) {\n\t range.collapse();\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createZws() {\n\t return context.document.createTextNode(TEXT_ZWS);\n\t}\n\t\n\tfunction checkZws(value) {\n\t return REG_ZWS.test(value);\n\t}\n\t\n\tfunction textClean(value) {\n\t return String(value || '').trim().replace(REG_REPLACE_NON_PRINTABLE, '');\n\t}\n\t\n\tfunction selectionCorrect(selection) {\n\t var startNode = selection.anchorNode;\n\t var endNode = selection.focusNode;\n\t var startOffset = selection.anchorOffset;\n\t var endOffset = selection.focusOffset;\n\t var revert = false;\n\t\n\t if (startNode === endNode) {\n\t startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n\t endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n\t revert = selection.anchorOffset > selection.focusOffset;\n\t } else {\n\t var position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t startNode = selection.focusNode;\n\t startOffset = selection.focusOffset;\n\t endNode = selection.anchorNode;\n\t endOffset = selection.anchorOffset;\n\t revert = true;\n\t }\n\t }\n\t\n\t return { startNode: startNode, endNode: endNode, startOffset: startOffset, endOffset: endOffset, revert: revert };\n\t}\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar escape = _require.escape;\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.isBubbleNode = isBubbleNode;\n\texports.bubbling = bubbling;\n\texports.create = create;\n\texports.edit = edit;\n\t\n\tfunction isBubbleNode(node) {\n\t if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n\t return false;\n\t }\n\t\n\t return node.hasAttribute('bubble');\n\t}\n\t\n\tfunction edit(nodeSet, nodeBubble) {\n\t if (nodeBubble.hasAttribute('readonly')) {\n\t return false;\n\t }\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var bubbleDeformation = nodeSet.options('bubbleDeformation');\n\t var rangeParams = bubbleDeformation(nodeBubble);\n\t\n\t if (!rangeParams) {\n\t var dataText = text.textClean(nodeBubble.innerText);\n\t\n\t rangeParams = {\n\t text: dataText,\n\t startOffset: 0,\n\t endOffset: dataText.length\n\t };\n\t }\n\t\n\t var textFake = text.createZws();\n\t var textNode = context.document.createTextNode(rangeParams.text);\n\t\n\t nodeSet.fireEdit(nodeBubble);\n\t nodeSet.replaceChild(textNode, nodeBubble);\n\t nodeSet.insertBefore(textFake, textNode);\n\t\n\t var range = context.document.createRange();\n\t range.setStart(textNode, rangeParams.startOffset);\n\t range.setEnd(textNode, rangeParams.endOffset);\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t}\n\t\n\tfunction create(nodeSet, dataText) {\n\t var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t dataText = text.textClean(dataText);\n\t\n\t if (!dataText) {\n\t return;\n\t }\n\t\n\t var bubbleFormation = nodeSet.options('bubbleFormation');\n\t var classBubble = nodeSet.options('classBubble');\n\t var draggable = canUseDrag() && nodeSet.options('draggable');\n\t var wrap = context.document.createElement('span');\n\t\n\t wrap.innerText = dataText;\n\t\n\t if (draggable) {\n\t wrap.setAttribute('draggable', 'true');\n\t }\n\t\n\t for (var key in data) {\n\t if (data[key]) {\n\t wrap.setAttribute('data-' + key, escape(data[key]));\n\t }\n\t }\n\t\n\t bubbleFormation(wrap);\n\t\n\t if (classBubble) {\n\t var classes = String(classBubble).trim().split(/\\s+/);\n\t var len = classes.length;\n\t\n\t while (len--) {\n\t wrap.classList.add(classes[len]);\n\t }\n\t }\n\t\n\t wrap.setAttribute('bubble', '');\n\t wrap.setAttribute('contenteditable', 'false');\n\t\n\t return wrap;\n\t}\n\t\n\tfunction bubbling(nodeSet) {\n\t var separator = nodeSet.options('separator');\n\t var ending = nodeSet.options('ending');\n\t var begining = nodeSet.options('begining');\n\t var ranges = getBubbleRanges(nodeSet);\n\t var nodes = [];\n\t\n\t ranges.forEach(function (range) {\n\t var dataText = text.textClean(range.toString());\n\t\n\t if (!dataText) {\n\t range.deleteContents();\n\t return;\n\t }\n\t\n\t var textParts = [dataText];\n\t\n\t if (separator) {\n\t textParts = dataText.split(separator).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (ending) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByEnding(str, ending));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t } else if (begining) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByBeginning(str, begining));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (!textParts.length) {\n\t range.deleteContents();\n\t }\n\t\n\t var fragment = context.document.createDocumentFragment();\n\t\n\t textParts.forEach(function (textPart) {\n\t var nodeBubble = create(nodeSet, textPart);\n\t if (nodeBubble) {\n\t fragment.appendChild(nodeBubble);\n\t nodes.push(nodeBubble);\n\t }\n\t });\n\t\n\t range.deleteContents();\n\t range.insertNode(fragment);\n\t });\n\t\n\t nodeSet.fireInput();\n\t\n\t if (nodes.length) {\n\t nodeSet.fireChange();\n\t }\n\t\n\t return nodes;\n\t}\n\t\n\tfunction getBubbleRanges(nodeSet) {\n\t var ranges = [];\n\t var children = nodeSet.childNodes;\n\t var range = void 0;\n\t var node = void 0;\n\t\n\t for (var i = 0; i < children.length; i++) {\n\t node = children[i];\n\t\n\t if (isBubbleNode(node)) {\n\t if (range) {\n\t range.setEndBefore(node);\n\t ranges.push(range);\n\t range = undefined;\n\t }\n\t } else {\n\t if (!range) {\n\t range = context.document.createRange();\n\t range.setStartBefore(node);\n\t }\n\t }\n\t }\n\t\n\t if (range) {\n\t range.setEndAfter(node);\n\t ranges.push(range);\n\t }\n\t\n\t return ranges;\n\t}\n\t\n\tfunction trimIterator(str) {\n\t return str.trim();\n\t}\n\t\n\tfunction nonEmptyIterator(str) {\n\t return Boolean(str);\n\t}\n\t\n\tfunction parseFragmentByEnding(str, reg) {\n\t var parts = [];\n\t var lastIndex = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while (reg.exec(str) !== null && loop) {\n\t loop--;\n\t parts.push(str.substring(lastIndex, reg.lastIndex));\n\t lastIndex = reg.lastIndex;\n\t }\n\t\n\t return parts;\n\t}\n\t\n\tfunction parseFragmentByBeginning(str, reg) {\n\t var parts = [];\n\t var res = void 0;\n\t var index = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while ((res = reg.exec(str)) !== null && loop) {\n\t loop--;\n\t if (index !== res.index) {\n\t parts.push(str.substring(index, res.index));\n\t index = res.index;\n\t }\n\t }\n\t\n\t parts.push(str.substring(index, str.length));\n\t return parts;\n\t}\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/* eslint quotes: 0 */\n\t\n\tvar HTML_ESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`'\n\t};\n\t\n\tvar HTML_UNESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '"': '\"',\n\t ''': \"'\",\n\t '`': '`'\n\t};\n\t\n\tvar REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\n\tvar REG_UNESCAPED_HTML = /[&<>\"'`]/g;\n\tvar REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\n\tvar REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\n\tvar REG_IE = /Trident|Edge/;\n\t\n\texports.escape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n\t return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.unescape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n\t return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.canUseDrag = function () {\n\t return !REG_IE.test(context.navigator.userAgent);\n\t};\n\t\n\tfunction unescapeHtmlChar(chr) {\n\t return HTML_UNESCAPES[chr];\n\t}\n\t\n\tfunction escapeHtmlChar(chr) {\n\t return HTML_ESCAPES[chr];\n\t}\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bubble = __webpack_require__(9);\n\tvar text = __webpack_require__(8);\n\t\n\texports.closestNodeBubble = closestNodeBubble;\n\texports.closestNodeSet = closestNodeSet;\n\texports.findBubbleLeft = findBubbleLeft;\n\texports.getBubbles = getBubbles;\n\texports.hasBubbles = hasBubbles;\n\texports.headBubble = headBubble;\n\texports.lastBubble = lastBubble;\n\texports.nextBubble = nextBubble;\n\texports.prevBubble = prevBubble;\n\t\n\tfunction lastBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:last-child');\n\t}\n\t\n\tfunction headBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:first-child');\n\t}\n\t\n\tfunction getBubbles(nodeSet) {\n\t return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n\t}\n\t\n\tfunction hasBubbles(nodeSet) {\n\t return Boolean(nodeSet.querySelector('[bubble]'));\n\t}\n\t\n\tfunction findBubbleLeft(selection) {\n\t if (!selection.focusNode || !selection.anchorNode) {\n\t return;\n\t }\n\t\n\t var node = selection.focusNode.previousSibling;\n\t\n\t if (selection.anchorNode !== selection.focusNode && selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t node = selection.anchorNode.previousSibling;\n\t }\n\t\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n\t return;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction closestNodeSet(node) {\n\t while (node) {\n\t if (node.nodeType === Node.ELEMENT_NODE && node.getAttribute('is') === 'x-bubbles') {\n\t\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction closestNodeBubble(node) {\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction prevBubble(target) {\n\t var node = target && target.previousSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction nextBubble(target) {\n\t var node = target && target.nextSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.nextSibling;\n\t }\n\t}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar native = __webpack_require__(13);\n\tvar mouse = __webpack_require__(17);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.init = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.init(nodeSet);\n\t }\n\t\n\t return mouse.init(nodeSet);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.destroy(nodeSet);\n\t }\n\t\n\t return mouse.destroy(nodeSet);\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar events = __webpack_require__(2);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar EVENTS = {\n\t dragend: onDragend,\n\t dragenter: onDragenter,\n\t dragleave: onDragleave,\n\t dragover: onDragover,\n\t dragstart: onDragstart,\n\t drop: onDrop\n\t};\n\t\n\tvar currentDragSet = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onDragstart(event) {\n\t event.stopPropagation();\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (!nodeSet || !nodeBubble) {\n\t event.preventDefault();\n\t return;\n\t }\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = nodeSet;\n\t nodeSet.classList.add(CLS.DRAGSTART);\n\t select.add(nodeBubble);\n\t\n\t event.dataTransfer.effectAllowed = 'move';\n\t event.dataTransfer.setData('text/plain', '');\n\t\n\t var list = select.get(currentDragSet);\n\t if (list.length > 1) {\n\t event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n\t }\n\t}\n\t\n\tfunction onDrop(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet || nodeSet === currentDragSet) {\n\t return;\n\t }\n\t\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t}\n\t\n\tfunction onDragover(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t event.dataTransfer.dropEffect = 'move';\n\t}\n\t\n\tfunction onDragenter(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragleave(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragend(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t currentDragSet.classList.remove(CLS.DRAGSTART);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t\n\t currentDragSet = null;\n\t}\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\tvar slice = Array.prototype.slice;\n\tvar PATH_SELECTED = '[bubble][selected]';\n\tvar PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\t\n\texports.all = all;\n\texports.add = add;\n\texports.clear = clear;\n\texports.get = get;\n\texports.uniq = uniq;\n\texports.head = head;\n\texports.last = last;\n\texports.has = has;\n\texports.range = range;\n\texports.toggleUniq = toggleUniq;\n\t\n\tfunction range(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return;\n\t }\n\t\n\t var set = node.parentNode;\n\t var list = get(set);\n\t\n\t if (!list.length) {\n\t uniq(node);\n\t return;\n\t }\n\t\n\t clear(set);\n\t\n\t var headList = list[0];\n\t var lastList = list[list.length - 1];\n\t\n\t if (headList === lastList || !set.startRangeSelect) {\n\t set.startRangeSelect = headList;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var position = node.compareDocumentPosition(set.startRangeSelect);\n\t\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t fromNode = set.startRangeSelect;\n\t toNode = node;\n\t } else {\n\t fromNode = node;\n\t toNode = set.startRangeSelect;\n\t }\n\t\n\t if (fromNode && toNode) {\n\t var item = fromNode;\n\t\n\t while (item) {\n\t if (!setSelected(item)) {\n\t break;\n\t }\n\t\n\t if (item === toNode) {\n\t break;\n\t }\n\t\n\t item = item.nextSibling;\n\t }\n\t\n\t bubble.bubbling(set);\n\t }\n\t}\n\t\n\tfunction all(nodeSet) {\n\t slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(function (item) {\n\t return setSelected(item);\n\t });\n\t nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\t\n\t bubble.bubbling(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t}\n\t\n\tfunction has(nodeSet) {\n\t return Boolean(nodeSet.querySelector(PATH_SELECTED));\n\t}\n\t\n\tfunction head(set) {\n\t return get(set)[0];\n\t}\n\t\n\tfunction last(set) {\n\t var list = get(set);\n\t return list[list.length - 1];\n\t}\n\t\n\tfunction get(nodeSet) {\n\t return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n\t}\n\t\n\tfunction clear(nodeSet) {\n\t get(nodeSet).forEach(function (item) {\n\t return item.removeAttribute('selected');\n\t });\n\t}\n\t\n\tfunction add(node) {\n\t if (setSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t nodeSet.startRangeSelect = node;\n\t // ???\n\t bubble.bubbling(nodeSet);\n\t\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction uniq(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return false;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t var selection = context.getSelection();\n\t\n\t selection && selection.removeAllRanges();\n\t clear(nodeSet);\n\t\n\t return add(node);\n\t}\n\t\n\tfunction toggleUniq(node) {\n\t if (isSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t if (get(nodeSet).length === 1) {\n\t return removeSelected(node);\n\t }\n\t }\n\t\n\t return uniq(node);\n\t}\n\t\n\tfunction isSelected(node) {\n\t return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n\t}\n\t\n\tfunction setSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.setAttribute('selected', '');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction removeSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.removeAttribute('selected');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar DRAG_IMG_WIDTH = 16;\n\t\n\tvar dragImage = null;\n\t\n\texports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\t\n\texports.getDragImage = function () {\n\t if (!dragImage) {\n\t dragImage = new Image();\n\t dragImage.src = __webpack_require__(16);\n\t }\n\t\n\t return dragImage;\n\t};\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar Modernizr = __webpack_require__(18);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\tvar EV = _require.EV;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar currentDragSet = null;\n\tvar currentMoveSet = null;\n\tvar currentDragElement = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\tfunction onMousedown(event) {\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t if (!nodeBubble) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t event.preventDefault();\n\t nodeSet.focus();\n\t\n\t var drag = nodeSet.__drag__ = {\n\t onMouseup: onMouseup.bind(this, nodeSet),\n\t onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n\t onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n\t nodeOffsetX: event.offsetX,\n\t nodeOffsetY: event.offsetY,\n\t x: 0,\n\t y: 0\n\t };\n\t\n\t currentDragSet = null;\n\t currentMoveSet = null;\n\t currentDragElement = null;\n\t\n\t events.one(document, 'mouseup', drag.onMouseup);\n\t events.on(document, 'mousemove', drag.onMousemove);\n\t events.on(document, 'scroll', drag.onScroll);\n\t}\n\t\n\tfunction onMouseup(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t events.off(document, 'mousemove', drag.onMousemove);\n\t events.off(document, 'scroll', drag.onScroll);\n\t delete dragSet.__drag__;\n\t\n\t if (currentDragElement) {\n\t currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n\t currentDragElement = null;\n\t }\n\t\n\t if (currentMoveSet) {\n\t var _ = currentMoveSet;\n\t currentMoveSet = null;\n\t\n\t _.classList.remove(CLS.DROPZONE);\n\t events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n\t }\n\t\n\t if (currentDragSet) {\n\t (function () {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t }\n\t\n\t var _ = currentDragSet;\n\t currentDragSet = null;\n\t\n\t _.classList.remove(CLS.DRAGSTART);\n\t events.dispatch(_, EV.DROP, { bubbles: false, cancelable: false });\n\t events.dispatch(_, EV.DRAGEND, { bubbles: false, cancelable: false });\n\t })();\n\t }\n\t}\n\t\n\tfunction onMousemove(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t if (!currentDragSet) {\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = dragSet;\n\t currentDragSet.classList.add(CLS.DRAGSTART);\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t var moveElement = void 0;\n\t\n\t if (nodeBubble) {\n\t select.add(nodeBubble);\n\t if (select.get(currentDragSet).length === 1) {\n\t moveElement = nodeBubble.cloneNode(true);\n\t }\n\t }\n\t\n\t if (!moveElement) {\n\t moveElement = getDragImage();\n\t drag.nodeOffsetX = DRAG_IMG_WIDTH;\n\t drag.nodeOffsetY = DRAG_IMG_WIDTH;\n\t }\n\t\n\t currentDragElement = document.body.appendChild(document.createElement('div'));\n\t currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n\t currentDragElement.appendChild(moveElement);\n\t\n\t events.dispatch(currentDragSet, EV.DRAGSTART, { bubbles: false, cancelable: false });\n\t }\n\t\n\t drag.x = event.clientX;\n\t drag.y = event.clientY;\n\t onScroll(dragSet);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t if (currentMoveSet && currentMoveSet !== nodeSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n\t } else if (!currentMoveSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n\t }\n\t } else if (currentMoveSet) {\n\t var _ = currentMoveSet;\n\t currentMoveSet = null;\n\t\n\t _.classList.remove(CLS.DROPZONE);\n\t events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n\t }\n\t}\n\t\n\tfunction onScroll(dragSet) {\n\t var drag = dragSet.__drag__;\n\t if (!drag || !currentDragElement) {\n\t return;\n\t }\n\t\n\t var x = drag.x - drag.nodeOffsetX + events.scrollX();\n\t var y = drag.y - drag.nodeOffsetY + events.scrollY();\n\t\n\t if (Modernizr.csstransforms3d) {\n\t currentDragElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n\t } else if (Modernizr.csstransforms) {\n\t currentDragElement.style.transform = 'translate(' + x + 'px, ' + y + 'px)';\n\t } else {\n\t currentDragElement.style.top = y + 'px';\n\t currentDragElement.style.left = x + 'px';\n\t }\n\t}\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = Modernizr;\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubbleset = __webpack_require__(11);\n\tvar bubble = __webpack_require__(9);\n\tvar cursor = __webpack_require__(20);\n\tvar select = __webpack_require__(14);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar KEY = _require.KEY;\n\t\n\tvar text = __webpack_require__(8);\n\tvar events = __webpack_require__(2);\n\t\n\tvar EVENTS = {\n\t blur: onBlur,\n\t click: onClick,\n\t dblclick: onDblclick,\n\t focus: onFocus,\n\t keydown: onKeydown,\n\t keypress: onKeypress,\n\t keyup: onKeyup,\n\t paste: onPaste\n\t};\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onBlur(event) {\n\t select.clear(event.currentTarget);\n\t bubble.bubbling(event.currentTarget);\n\t}\n\t\n\tfunction onFocus(event) {\n\t cursor.restore(event.currentTarget);\n\t}\n\t\n\tfunction onKeyup(event) {\n\t var code = event.charCode || event.keyCode;\n\t var isPrintableChar = event.key ? event.key.length === 1 : (code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd;\n\t\n\t if (isPrintableChar) {\n\t event.currentTarget.fireInput();\n\t }\n\t}\n\t\n\tfunction onKeypress(event) {\n\t var code = event.charCode || event.keyCode;\n\t var nodeSet = event.currentTarget;\n\t\n\t /* eslint no-case-declarations: 0 */\n\t switch (code) {\n\t case KEY.Enter:\n\t event.preventDefault();\n\t if (!nodeSet.hasAttribute('disable-controls')) {\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.Comma:\n\t case KEY.Semicolon:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t }\n\t}\n\t\n\tfunction onKeydown(event) {\n\t var code = event.charCode || event.keyCode;\n\t var metaKey = event.ctrlKey || event.metaKey;\n\t var nodeSet = event.currentTarget;\n\t var enable = !nodeSet.hasAttribute('disable-controls');\n\t\n\t switch (code) {\n\t case KEY.Esc:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t\n\t case KEY.Backspace:\n\t event.preventDefault();\n\t backSpace(event);\n\t break;\n\t\n\t case KEY.Left:\n\t event.preventDefault();\n\t arrowLeft(event);\n\t break;\n\t\n\t // сдвигаем курсор в начало списка\n\t case KEY.Top:\n\t event.preventDefault();\n\t if (enable) {\n\t var headBubble = bubbleset.headBubble(nodeSet);\n\t headBubble && select.uniq(headBubble);\n\t }\n\t break;\n\t\n\t case KEY.Right:\n\t event.preventDefault();\n\t arrowRight(event);\n\t break;\n\t\n\t // сдвигаем курсор в конец списка\n\t // case KEY.Tab:\n\t case KEY.Bottom:\n\t event.preventDefault();\n\t if (enable && select.has(nodeSet)) {\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.a:\n\t if (metaKey) {\n\t event.preventDefault();\n\t\n\t if (!text.selectAll(null, event.currentTarget)) {\n\t select.all(nodeSet);\n\t }\n\t }\n\t break;\n\t }\n\t}\n\t\n\tfunction arrowLeft(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowLeft(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[0] === nodeSet.startRangeSelect ? list[list.length - 1] : list[0];\n\t\n\t var node = bubbleset.prevBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t }\n\t}\n\t\n\tfunction arrowRight(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowRight(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.nextBubble(selection.focusNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[list.length - 1] === nodeSet.startRangeSelect ? list[0] : list[list.length - 1];\n\t\n\t var node = bubbleset.nextBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n\t select.clear(nodeSet);\n\t selection.collapse(begin.nextSibling, 0);\n\t } else {\n\t cursor.restore(nodeSet);\n\t }\n\t}\n\t\n\tfunction backSpace(event) {\n\t var nodeSet = event.currentTarget;\n\t nodeSet.normalize();\n\t\n\t var selection = context.getSelection();\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t if (selection.isCollapsed) {\n\t if (text.arrowLeft(selection, true)) {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t } else {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t\n\t var node = bubbleset.findBubbleLeft(selection);\n\t if (node) {\n\t select.uniq(node);\n\t return;\n\t }\n\t\n\t var list = select.get(nodeSet);\n\t\n\t if (list.length) {\n\t var prevBubble = list[0].previousSibling;\n\t var nextBubble = list[list.length - 1].nextSibling;\n\t list.forEach(function (item) {\n\t return item.parentNode.removeChild(item);\n\t });\n\t\n\t if (bubble.isBubbleNode(prevBubble)) {\n\t select.uniq(prevBubble);\n\t } else if (bubble.isBubbleNode(nextBubble)) {\n\t select.uniq(nextBubble);\n\t } else {\n\t nodeSet.focus();\n\t cursor.restore(nodeSet);\n\t }\n\t\n\t nodeSet.fireChange();\n\t }\n\t}\n\t\n\tfunction onPaste(event) {\n\t event.preventDefault();\n\t\n\t var clipboardData = event.clipboardData;\n\t if (!clipboardData) {\n\t return;\n\t }\n\t\n\t var contentType = 'text/plain';\n\t var data = clipboardData.getData && clipboardData.getData(contentType);\n\t\n\t if (!text.replaceString(data) && clipboardData.items) {\n\t Array.prototype.slice.call(clipboardData.items).filter(function (item) {\n\t return item.kind === 'string' && item.type === contentType;\n\t }).some(function (item) {\n\t item.getAsString(text.replaceString);\n\t return true;\n\t });\n\t }\n\t}\n\t\n\tfunction onDblclick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeSet && nodeBubble) {\n\t event.preventDefault();\n\t bubble.edit(nodeSet, nodeBubble);\n\t }\n\t}\n\t\n\tfunction onClick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeBubble) {\n\t if (event.metaKey || event.ctrlKey) {\n\t select.add(nodeBubble);\n\t } else if (event.shiftKey) {\n\t if (!nodeSet.startRangeSelect) {\n\t select.uniq(nodeBubble);\n\t } else {\n\t select.range(nodeBubble);\n\t }\n\t } else {\n\t select.toggleUniq(nodeBubble);\n\t }\n\t } else {\n\t select.clear(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t cursor.restore(nodeSet);\n\t }\n\t }\n\t}\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * @module x-bubbles/cursor\n\t */\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\tvar select = __webpack_require__(14);\n\t\n\texports.restore = restore;\n\texports.restoreBasis = restoreBasis;\n\t\n\t/**\n\t * Reset the cursor position to the end of the input field.\n\t * @alias module:x-bubbles/cursor.restore\n\t * @param {HTMLElement} nodeSet\n\t */\n\tfunction restore(nodeSet) {\n\t select.clear(nodeSet);\n\t var basis = restoreBasis(nodeSet);\n\t var selection = context.getSelection();\n\t selection.removeAllRanges();\n\t selection.collapse(basis, 1);\n\t}\n\t\n\t/**\n\t * The creation of the fake text at the end childNodes\n\t * @alias module:x-bubbles/cursor.restoreBasis\n\t * @param {HTMLElement} nodeSet\n\t * @returns {HTMLTextElement} fake text node\n\t */\n\tfunction restoreBasis(nodeSet) {\n\t var fakeText = text.createZws();\n\t\n\t if (nodeSet.hasChildNodes()) {\n\t var lastNode = nodeSet.childNodes[nodeSet.childNodes.length - 1];\n\t\n\t if (lastNode.isEqualNode(fakeText)) {\n\t fakeText = lastNode;\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t\n\t return fakeText;\n\t}\n\n/***/ }\n/******/ ]);\n\n\n/** WEBPACK FOOTER **\n ** x-bubbles.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2e7287ebb13d5df3e100\n **/","const context = require('./context');\nconst events = require('./core/events');\nconst drag = require('./core/drag');\nconst editor = require('./core/editor');\nconst bubble = require('./core/bubble');\nconst bubbleset = require('./core/bubbleset');\nconst text = require('./core/text');\nconst cursor = require('./core/cursor');\n\nconst OPTIONS = {\n begining: [ 'noop', null ],\n bubbleDeformation: [ 'funk', function () {} ],\n bubbleFormation: [ 'funk', function () {} ],\n classBubble: [ 'noop', 'bubble' ],\n draggable: [ 'bool', true ],\n ending: [ 'noop', null ], // /\\@ya\\.ru/g;\n separator: [ 'noop', /[,;]/ ],\n};\n\nconst XBubbles = Object.create(HTMLDivElement.prototype, {\n createdCallback: {\n value: function () {\n this.setAttribute('contenteditable', 'true');\n this.setAttribute('spellcheck', 'false');\n\n this.fireChange = events.throttle(events.fireChange);\n this.fireEdit = events.throttle(events.fireEdit);\n this.fireInput = events.throttle(events.fireInput);\n\n this.addEventListener('resize', events.prevent);\n this.addEventListener('resizestart', events.prevent);\n this.addEventListener('mscontrolselect', events.prevent);\n }\n },\n\n attachedCallback: {\n value: function () {\n drag.init(this);\n editor.init(this);\n bubble.bubbling(this);\n }\n },\n\n detachedCallback: {\n value: function () {\n drag.destroy(this);\n editor.destroy(this);\n }\n },\n\n /*\n attributeChangedCallback: {\n value: function (name, prevValue, value) {}\n },\n */\n\n options: {\n value: function (name, value) {\n if (!this._options) {\n this._options = {\n ...Object.keys(OPTIONS).reduce(function (result, item) {\n result[ item ] = undefined;\n return result;\n }, {}),\n\n ...this.dataset\n };\n\n optionsPrepare(this._options);\n }\n\n if (typeof value !== 'undefined') {\n this._options[ name ] = value;\n optionsPrepare(this._options);\n\n } else {\n return this._options[ name ];\n }\n }\n },\n\n items: {\n get: function () {\n return bubbleset.getBubbles(this);\n }\n },\n\n setContent: {\n value: function (data) {\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n\n data = text.html2text(data);\n this.appendChild(context.document.createTextNode(data));\n bubble.bubbling(this);\n cursor.restore(this);\n }\n },\n\n addBubble: {\n value: function (bubbleText, data) {\n const nodeBubble = bubble.create(this, bubbleText, data);\n\n if (!nodeBubble) {\n return false;\n }\n\n if (text.text2bubble(this, nodeBubble)) {\n cursor.restore(this);\n return true;\n }\n\n return false;\n }\n },\n\n removeBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n this.removeChild(nodeBubble);\n this.fireChange();\n return true;\n }\n\n return false;\n }\n },\n\n editBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n return bubble.edit(this, nodeBubble);\n }\n\n return false;\n }\n }\n});\n\nmodule.exports = context.document.registerElement('x-bubbles', {\n extends: 'div',\n prototype: XBubbles\n});\n\nconst OPTIONS_PREPARE = {\n funk: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return new Function('context', `return context.${value};`)(context);\n\n case 'function':\n return value;\n }\n },\n bool: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return (value === 'true' || value === 'on');\n\n case 'boolean':\n return value;\n }\n },\n noop: function (value) {\n return value;\n },\n};\n\nfunction optionsPrepare(options) {\n for (let name in OPTIONS) {\n const [ type, def ] = OPTIONS[ name ];\n options[ name ] = OPTIONS_PREPARE[ type ](options[ name ]);\n if (typeof options[ name ] === 'undefined') {\n options[ name ] = def;\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","module.exports = (function () {\n /* eslint no-eval: 0 */\n return this || (1, eval)('this');\n})();\n\n\n\n/** WEBPACK FOOTER **\n ** ./context.js\n **/","/**\n * @module x-bubbles/event\n */\n\nconst raf = require('raf');\nconst context = require('../context');\nconst CustomEventCommon = require('../polyfills/CustomEventCommon');\nconst { EV } = require('./constant');\nconst text = require('./text');\n\nexports.scrollX = scrollX;\nexports.scrollY = scrollY;\nexports.dispatch = dispatch;\n\nexports.pageX = function (event) {\n return (event.pageX === null && event.clientX !== null) ?\n event.clientX + scrollX() :\n event.pageX;\n};\n\nexports.pageY = function (event) {\n return (event.pageY === null && event.clientY !== null) ?\n event.clientY + scrollY() :\n event.pageY;\n};\n\nexports.one = function (target, eventName, userCallback) {\n return target.addEventListener(eventName, function callback(event) {\n target.removeEventListener(eventName, callback);\n userCallback(event);\n });\n};\n\nexports.on = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.addEventListener(name, events[ name ]);\n }\n};\n\nexports.off = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.removeEventListener(name, events[ name ]);\n }\n};\n\nexports.prevent = function (event) {\n event.cancelBubble = true;\n event.returnValue = false;\n event.stopPropagation();\n event.preventDefault();\n return false;\n};\n\nexports.fireEdit = function (nodeBubble) {\n dispatch(this, EV.BUBBLE_EDIT, {\n bubbles: false,\n cancelable: false,\n detail: { data: nodeBubble }\n });\n};\n\nexports.fireChange = function () {\n dispatch(this, EV.CHANGE, {\n bubbles: false,\n cancelable: false\n });\n};\n\nexports.fireInput = function () {\n const textRange = text.currentTextRange();\n const editText = textRange && text.textClean(textRange.toString()) || '';\n\n if (this._bubbleValue !== editText) {\n this._bubbleValue = editText;\n\n dispatch(this, EV.BUBBLE_INPUT, {\n bubbles: false,\n cancelable: false,\n detail: { data: editText }\n });\n }\n};\n\nexports.throttle = function (callback) {\n let throttle = 0;\n const animationCallback = function () {\n throttle = 0;\n };\n\n return function () {\n if (throttle) {\n return;\n }\n\n throttle = raf(animationCallback);\n\n callback.apply(this, arguments);\n };\n};\n\nfunction scrollX() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n}\n\nfunction scrollY() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n}\n\n/**\n * Designer events.\n *\n * @example\n * const { Custom } = require('event');\n *\n * new Custom('custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event~Custom\n * @constructor\n */\nconst Custom = (function () {\n if (typeof context.CustomEvent === 'function') {\n return context.CustomEvent;\n }\n\n return CustomEventCommon;\n}());\n\n/**\n * Dispatch event.\n *\n * @example\n * const { dispatch } = require('event');\n * dispatch(node, 'custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event.dispatch\n * @param {HTMLElement} element node events\n * @param {string} name event name\n * @param {Object} params the event parameters\n * @param {boolean} [params.bubbles=false]\n * @param {boolean} [params.cancelable=false]\n * @param {*} [params.detail]\n */\nfunction dispatch(element, name, params = {}) {\n element.dispatchEvent(new Custom(name, params));\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/events.js\n **/","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function() {\n root.requestAnimationFrame = raf\n root.cancelAnimationFrame = caf\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/raf/index.js\n ** module id = 3\n ** module chunks = 0\n **/","// Generated by CoffeeScript 1.7.1\n(function() {\n var getNanoSeconds, hrtime, loadTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - loadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n loadTime = getNanoSeconds();\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/performance-now/lib/performance-now.js\n ** module id = 4\n ** module chunks = 0\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/process/browser.js\n ** module id = 5\n ** module chunks = 0\n **/","const context = require('../context');\n\n/**\n * @constant {Document}\n * @private\n */\nconst doc = context.document;\n\n/**\n * @constant {Object}\n * @private\n */\nconst protoEvent = context.Event.prototype;\n\nlet issetCustomEvent = false;\n\ntry {\n issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n} catch (e) {\n // do nothing\n}\n\n/**\n * The original function \"stopImmediatePropagation\"\n * @constant {function}\n * @private\n */\nconst stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\n/**\n * Override function to set properties \"immediatePropagationStopped\"\n */\nprotoEvent.stopImmediatePropagation = function () {\n this.immediatePropagationStopped = true;\n\n if (stopImmediatePropagation) {\n stopImmediatePropagation.call(this);\n\n } else {\n this.stopPropagation();\n }\n};\n\nlet CustomEventCommon = (function () {\n if (issetCustomEvent) {\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('CustomEvent');\n\n evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\n return evt;\n };\n }\n\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('Event');\n\n evt.initEvent(eventName, bubbles, cancelable);\n evt.detail = params.detail;\n\n return evt;\n };\n}());\n\nCustomEventCommon.prototype = protoEvent;\n\nmodule.exports = CustomEventCommon;\n\n\n\n/** WEBPACK FOOTER **\n ** ./polyfills/CustomEventCommon.js\n **/","exports.KEY = {\n a: 65,\n Backspace: 8,\n Bottom: 40,\n Cmd: 91,\n Comma: 44, // ,\n Enter: 13, // Enter\n Esc: 27,\n Left: 37,\n Right: 39,\n Semicolon: 59, // ;\n Space: 32,\n Tab: 9,\n Top: 38,\n};\n\nexports.CLS = {\n DRAGSTART: 'drag',\n DROPZONE: 'dropzone',\n};\n\nexports.EV = {\n BUBBLE_EDIT: 'bubble-edit',\n BUBBLE_INPUT: 'bubble-input',\n CHANGE: 'change',\n DRAGEND: 'dragend',\n DRAGENTER: 'dragenter',\n DRAGLEAVE: 'dragleave',\n DRAGSTART: 'dragstart',\n DROP: 'drop',\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/constant.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\n/* eslint-disable max-len */\nconst REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\nconst REG_ZWS = /\\u200B/;\nconst TEXT_ZWS = '\\u200B';\n\nexports.arrowRight = arrowRight;\nexports.arrowLeft = arrowLeft;\nexports.remove = remove;\nexports.html2text = html2text;\nexports.currentTextRange = currentTextRange;\nexports.text2bubble = text2bubble;\nexports.replaceString = replaceString;\nexports.selectAll = selectAll;\nexports.textClean = textClean;\nexports.checkZws = checkZws;\nexports.createZws = createZws;\n\nfunction text2bubble(nodeSet, nodeBubble, selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const range = currentTextRange(selection);\n\n if (range && !nodeBubble) {\n nodeBubble = bubble.create(nodeSet, range.toString());\n }\n\n if (!nodeBubble) {\n return false;\n }\n\n if (range) {\n selection.removeAllRanges();\n selection.addRange(range);\n replace(selection, nodeBubble);\n\n } else {\n nodeSet.appendChild(nodeBubble);\n }\n\n nodeSet.fireInput();\n nodeSet.fireChange();\n return true;\n}\n\nfunction currentTextRange(selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return;\n }\n\n const pointNode = do {\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n selection.focusNode;\n\n } else if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n selection.anchorNode;\n\n } else {\n undefined;\n }\n };\n\n if (!pointNode) {\n return;\n }\n\n const range = context.document.createRange();\n let startNode = pointNode;\n let endNode = pointNode;\n let item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n startNode = item;\n item = item.previousSibling;\n }\n\n item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n endNode = item;\n item = item.nextSibling;\n }\n\n range.setStartBefore(startNode);\n range.setEndAfter(endNode);\n\n return range;\n}\n\nfunction remove(selection) {\n return replace(selection, createZws());\n}\n\nfunction replace(selection, node) {\n selection = selection || context.getSelection();\n\n if (!selection || !selection.rangeCount) {\n return false;\n }\n\n const anchor = context.document.createElement('span');\n selection.getRangeAt(0).surroundContents(anchor);\n anchor.parentNode.replaceChild(node, anchor);\n\n selection.removeAllRanges();\n selection.collapse(node, 0);\n\n return true;\n}\n\nfunction replaceString(data, selection) {\n data = textClean(data);\n if (!data) {\n return false;\n }\n\n selection = selection || context.getSelection();\n const textNode = context.document.createTextNode(data);\n\n if (!replace(selection, textNode)) {\n return false;\n }\n\n selection.collapse(textNode, textNode.nodeValue.length);\n return true;\n}\n\nfunction arrowLeft(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(startNode, startOffset);\n return true;\n }\n\n const isNativeExtend = Boolean(selection.extend);\n revert = isNativeExtend ? revert : !revert;\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n if (offset === null) {\n offset = node.nodeValue.length;\n }\n\n if (offset - 1 < 0) {\n node = node.previousSibling;\n offset = null;\n continue;\n }\n\n const text = node.nodeValue.substring(offset - 1, offset);\n\n if (checkZws(text)) {\n offset = offset - 1;\n continue;\n }\n\n break;\n }\n\n if (!node || offset === null) {\n return false;\n }\n\n if (extend) {\n if (isNativeExtend) {\n selection.extend(node, offset - 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset - 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset - 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset - 1);\n }\n\n return true;\n}\n\nfunction arrowRight(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.focusNode ||\n selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(endNode, endOffset);\n return true;\n }\n\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n const len = node.nodeValue.length;\n\n if (offset + 1 > len) {\n node = node.nextSibling;\n offset = 0;\n continue;\n }\n\n const text = node.nodeValue.substring(offset, offset + 1);\n\n if (checkZws(text)) {\n offset = offset + 1;\n continue;\n }\n\n break;\n }\n\n if (!node) {\n return false;\n }\n\n if (extend) {\n const isNativeExtend = Boolean(selection.extend);\n\n if (isNativeExtend) {\n selection.extend(node, offset + 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset + 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset + 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset + 1);\n }\n\n return true;\n}\n\nfunction html2text(value) {\n if (!value) {\n return '';\n }\n\n var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n DOMContainer.innerText = value;\n\n return DOMContainer.innerText\n .replace(/^[\\u0020\\u00a0]+$/gm, '')\n .replace(/\\n/gm, ' ')\n .trim();\n}\n\nfunction selectAll(selection, nodeSet) {\n selection = selection || context.getSelection();\n const node = selection && selection.anchorNode;\n\n if (!node || node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n let fromNode;\n let toNode;\n let item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n fromNode = item;\n item = item.previousSibling;\n }\n\n item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n toNode = item;\n item = item.nextSibling;\n }\n\n const hasBubbles = bubbleset.hasBubbles(nodeSet);\n const range = context.document.createRange();\n range.setStartBefore(fromNode);\n range.setEndAfter(toNode);\n\n const dataText = textClean(range.toString());\n\n if (dataText || (!dataText && !hasBubbles)) {\n if (!dataText) {\n range.collapse();\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n }\n\n return false;\n}\n\nfunction createZws() {\n return context.document.createTextNode(TEXT_ZWS);\n}\n\nfunction checkZws(value) {\n return REG_ZWS.test(value);\n}\n\nfunction textClean(value) {\n return String(value || '')\n .trim()\n .replace(REG_REPLACE_NON_PRINTABLE, '');\n}\n\nfunction selectionCorrect(selection) {\n let startNode = selection.anchorNode;\n let endNode = selection.focusNode;\n let startOffset = selection.anchorOffset;\n let endOffset = selection.focusOffset;\n let revert = false;\n\n if (startNode === endNode) {\n startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n revert = selection.anchorOffset > selection.focusOffset;\n\n } else {\n const position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n startNode = selection.focusNode;\n startOffset = selection.focusOffset;\n endNode = selection.anchorNode;\n endOffset = selection.anchorOffset;\n revert = true;\n }\n }\n\n return { startNode, endNode, startOffset, endOffset, revert };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/text.js\n **/","const context = require('../context');\nconst text = require('./text');\nconst { escape, canUseDrag } = require('./utils');\n\nexports.isBubbleNode = isBubbleNode;\nexports.bubbling = bubbling;\nexports.create = create;\nexports.edit = edit;\n\nfunction isBubbleNode(node) {\n if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n return node.hasAttribute('bubble');\n}\n\nfunction edit(nodeSet, nodeBubble) {\n if (nodeBubble.hasAttribute('readonly')) {\n return false;\n }\n\n const selection = context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const bubbleDeformation = nodeSet.options('bubbleDeformation');\n let rangeParams = bubbleDeformation(nodeBubble);\n\n if (!rangeParams) {\n const dataText = text.textClean(nodeBubble.innerText);\n\n rangeParams = {\n text: dataText,\n startOffset: 0,\n endOffset: dataText.length\n };\n }\n\n const textFake = text.createZws();\n const textNode = context.document.createTextNode(rangeParams.text);\n\n nodeSet.fireEdit(nodeBubble);\n nodeSet.replaceChild(textNode, nodeBubble);\n nodeSet.insertBefore(textFake, textNode);\n\n const range = context.document.createRange();\n range.setStart(textNode, rangeParams.startOffset);\n range.setEnd(textNode, rangeParams.endOffset);\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n}\n\nfunction create(nodeSet, dataText, data = {}) {\n dataText = text.textClean(dataText);\n\n if (!dataText) {\n return;\n }\n\n const bubbleFormation = nodeSet.options('bubbleFormation');\n const classBubble = nodeSet.options('classBubble');\n const draggable = canUseDrag() && nodeSet.options('draggable');\n const wrap = context.document.createElement('span');\n\n wrap.innerText = dataText;\n\n if (draggable) {\n wrap.setAttribute('draggable', 'true');\n }\n\n for (let key in data) {\n if (data[ key ]) {\n wrap.setAttribute(`data-${key}`, escape(data[ key ]));\n }\n }\n\n bubbleFormation(wrap);\n\n if (classBubble) {\n const classes = String(classBubble).trim().split(/\\s+/);\n let len = classes.length;\n\n while (len--) {\n wrap.classList.add(classes[ len ]);\n }\n }\n\n wrap.setAttribute('bubble', '');\n wrap.setAttribute('contenteditable', 'false');\n\n return wrap;\n}\n\nfunction bubbling(nodeSet) {\n const separator = nodeSet.options('separator');\n const ending = nodeSet.options('ending');\n const begining = nodeSet.options('begining');\n const ranges = getBubbleRanges(nodeSet);\n const nodes = [];\n\n ranges.forEach(function (range) {\n const dataText = text.textClean(range.toString());\n\n if (!dataText) {\n range.deleteContents();\n return;\n }\n\n let textParts = [ dataText ];\n\n if (separator) {\n textParts = dataText\n .split(separator)\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (ending) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByEnding(str, ending)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n\n } else if (begining) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByBeginning(str, begining)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (!textParts.length) {\n range.deleteContents();\n }\n\n const fragment = context.document.createDocumentFragment();\n\n textParts.forEach(function (textPart) {\n const nodeBubble = create(nodeSet, textPart);\n if (nodeBubble) {\n fragment.appendChild(nodeBubble);\n nodes.push(nodeBubble);\n }\n });\n\n range.deleteContents();\n range.insertNode(fragment);\n });\n\n nodeSet.fireInput();\n\n if (nodes.length) {\n nodeSet.fireChange();\n }\n\n return nodes;\n}\n\nfunction getBubbleRanges(nodeSet) {\n const ranges = [];\n const children = nodeSet.childNodes;\n let range;\n let node;\n\n for (let i = 0; i < children.length; i++) {\n node = children[ i ];\n\n if (isBubbleNode(node)) {\n if (range) {\n range.setEndBefore(node);\n ranges.push(range);\n range = undefined;\n }\n\n } else {\n if (!range) {\n range = context.document.createRange();\n range.setStartBefore(node);\n }\n }\n }\n\n if (range) {\n range.setEndAfter(node);\n ranges.push(range);\n }\n\n return ranges;\n}\n\nfunction trimIterator(str) {\n return str.trim();\n}\n\nfunction nonEmptyIterator(str) {\n return Boolean(str);\n}\n\nfunction parseFragmentByEnding(str, reg) {\n const parts = [];\n let lastIndex = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while (reg.exec(str) !== null && loop) {\n loop--;\n parts.push(str.substring(lastIndex, reg.lastIndex));\n lastIndex = reg.lastIndex;\n }\n\n return parts;\n}\n\nfunction parseFragmentByBeginning(str, reg) {\n const parts = [];\n let res;\n let index = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while ((res = reg.exec(str)) !== null && loop) {\n loop--;\n if (index !== res.index) {\n parts.push(str.substring(index, res.index));\n index = res.index;\n }\n }\n\n parts.push(str.substring(index, str.length));\n return parts;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubble.js\n **/","const context = require('../context');\n\n/* eslint quotes: 0 */\n\nconst HTML_ESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n\nconst HTML_UNESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '`': '`'\n};\n\nconst REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\nconst REG_UNESCAPED_HTML = /[&<>\"'`]/g;\nconst REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\nconst REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\nconst REG_IE = /Trident|Edge/;\n\nexports.escape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n }\n\n return data;\n};\n\n\nexports.unescape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n }\n\n return data;\n};\n\nexports.canUseDrag = function () {\n return !REG_IE.test(context.navigator.userAgent);\n};\n\nfunction unescapeHtmlChar(chr) {\n return HTML_UNESCAPES[ chr ];\n}\n\nfunction escapeHtmlChar(chr) {\n return HTML_ESCAPES[ chr ];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/utils.js\n **/","const bubble = require('./bubble');\nconst text = require('./text');\n\nexports.closestNodeBubble = closestNodeBubble;\nexports.closestNodeSet = closestNodeSet;\nexports.findBubbleLeft = findBubbleLeft;\nexports.getBubbles = getBubbles;\nexports.hasBubbles = hasBubbles;\nexports.headBubble = headBubble;\nexports.lastBubble = lastBubble;\nexports.nextBubble = nextBubble;\nexports.prevBubble = prevBubble;\n\nfunction lastBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:last-child');\n}\n\nfunction headBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:first-child');\n}\n\nfunction getBubbles(nodeSet) {\n return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n}\n\nfunction hasBubbles(nodeSet) {\n return Boolean(nodeSet.querySelector('[bubble]'));\n}\n\nfunction findBubbleLeft(selection) {\n if (!selection.focusNode || !selection.anchorNode) {\n return;\n }\n\n let node = selection.focusNode.previousSibling;\n\n if (selection.anchorNode !== selection.focusNode &&\n selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n node = selection.anchorNode.previousSibling;\n }\n\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n return;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction closestNodeSet(node) {\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE &&\n node.getAttribute('is') === 'x-bubbles') {\n\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction closestNodeBubble(node) {\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction prevBubble(target) {\n let node = target && target.previousSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction nextBubble(target) {\n let node = target && target.nextSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.nextSibling;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubbleset.js\n **/","const native = require('./drag/native');\nconst mouse = require('./drag/mouse');\nconst { canUseDrag } = require('./utils');\n\nexports.init = function (nodeSet) {\n if (canUseDrag()) {\n return native.init(nodeSet);\n }\n\n return mouse.init(nodeSet);\n};\n\nexports.destroy = function (nodeSet) {\n if (canUseDrag()) {\n return native.destroy(nodeSet);\n }\n\n return mouse.destroy(nodeSet);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag.js\n **/","const context = require('../../context');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst events = require('../events');\nconst { CLS } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nconst EVENTS = {\n dragend: onDragend,\n dragenter: onDragenter,\n dragleave: onDragleave,\n dragover: onDragover,\n dragstart: onDragstart,\n drop: onDrop,\n};\n\nlet currentDragSet = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onDragstart(event) {\n event.stopPropagation();\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (!nodeSet || !nodeBubble) {\n event.preventDefault();\n return;\n }\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = nodeSet;\n nodeSet.classList.add(CLS.DRAGSTART);\n select.add(nodeBubble);\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', '');\n\n const list = select.get(currentDragSet);\n if (list.length > 1) {\n event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n }\n}\n\nfunction onDrop(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet || nodeSet === currentDragSet) {\n return;\n }\n\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n}\n\nfunction onDragover(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n event.dataTransfer.dropEffect = 'move';\n}\n\nfunction onDragenter(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n }\n}\n\nfunction onDragleave(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n}\n\nfunction onDragend(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n currentDragSet.classList.remove(CLS.DRAGSTART);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n\n currentDragSet = null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/native.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\nconst slice = Array.prototype.slice;\nconst PATH_SELECTED = '[bubble][selected]';\nconst PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\nexports.all = all;\nexports.add = add;\nexports.clear = clear;\nexports.get = get;\nexports.uniq = uniq;\nexports.head = head;\nexports.last = last;\nexports.has = has;\nexports.range = range;\nexports.toggleUniq = toggleUniq;\n\nfunction range(node) {\n if (!bubble.isBubbleNode(node)) {\n return;\n }\n\n const set = node.parentNode;\n const list = get(set);\n\n if (!list.length) {\n uniq(node);\n return;\n }\n\n clear(set);\n\n const headList = list[0];\n const lastList = list[ list.length - 1 ];\n\n if (headList === lastList || !set.startRangeSelect) {\n set.startRangeSelect = headList;\n }\n\n let fromNode;\n let toNode;\n const position = node.compareDocumentPosition(set.startRangeSelect);\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n fromNode = set.startRangeSelect;\n toNode = node;\n\n } else {\n fromNode = node;\n toNode = set.startRangeSelect;\n }\n\n if (fromNode && toNode) {\n let item = fromNode;\n\n while (item) {\n if (!setSelected(item)) {\n break;\n }\n\n if (item === toNode) {\n break;\n }\n\n item = item.nextSibling;\n }\n\n bubble.bubbling(set);\n }\n}\n\nfunction all(nodeSet) {\n slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(item => setSelected(item));\n nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\n bubble.bubbling(nodeSet);\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n}\n\nfunction has(nodeSet) {\n return Boolean(nodeSet.querySelector(PATH_SELECTED));\n}\n\nfunction head(set) {\n return get(set)[0];\n}\n\nfunction last(set) {\n const list = get(set);\n return list[ list.length - 1 ];\n}\n\nfunction get(nodeSet) {\n return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n}\n\nfunction clear(nodeSet) {\n get(nodeSet).forEach(item => item.removeAttribute('selected'));\n}\n\nfunction add(node) {\n if (setSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n nodeSet.startRangeSelect = node;\n // ???\n bubble.bubbling(nodeSet);\n\n return true;\n }\n\n return false;\n}\n\nfunction uniq(node) {\n if (!bubble.isBubbleNode(node)) {\n return false;\n }\n\n const nodeSet = bubbleset.closestNodeSet(node);\n const selection = context.getSelection();\n\n selection && selection.removeAllRanges();\n clear(nodeSet);\n\n return add(node);\n}\n\nfunction toggleUniq(node) {\n if (isSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n if (get(nodeSet).length === 1) {\n return removeSelected(node);\n }\n }\n\n return uniq(node);\n}\n\nfunction isSelected(node) {\n return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n}\n\nfunction setSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.setAttribute('selected', '');\n return true;\n }\n\n return false;\n}\n\nfunction removeSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.removeAttribute('selected');\n return true;\n }\n\n return false;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/select.js\n **/","const DRAG_IMG_WIDTH = 16;\n\nlet dragImage = null;\n\nexports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\nexports.getDragImage = function () {\n if (!dragImage) {\n dragImage = new Image();\n dragImage.src = require('url?mimetype=image/png!./bubbles.png');\n }\n\n return dragImage;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/common.js\n **/","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/url-loader?mimetype=image/png!./core/drag/bubbles.png\n ** module id = 16\n ** module chunks = 0\n **/","const context = require('../../context');\nconst events = require('../events');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst Modernizr = require('modernizr');\nconst { CLS, EV } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nlet currentDragSet = null;\nlet currentMoveSet = null;\nlet currentDragElement = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, 'mousedown', onMousedown);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, 'mousedown', onMousedown);\n};\n\nfunction onMousedown(event) {\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n if (!nodeBubble) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (!nodeSet) {\n return;\n }\n\n event.preventDefault();\n nodeSet.focus();\n\n const drag = nodeSet.__drag__ = {\n onMouseup: onMouseup.bind(this, nodeSet),\n onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n nodeOffsetX: event.offsetX,\n nodeOffsetY: event.offsetY,\n x: 0,\n y: 0\n };\n\n currentDragSet = null;\n currentMoveSet = null;\n currentDragElement = null;\n\n events.one(document, 'mouseup', drag.onMouseup);\n events.on(document, 'mousemove', drag.onMousemove);\n events.on(document, 'scroll', drag.onScroll);\n}\n\nfunction onMouseup(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n events.off(document, 'mousemove', drag.onMousemove);\n events.off(document, 'scroll', drag.onScroll);\n delete dragSet.__drag__;\n\n if (currentDragElement) {\n currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n currentDragElement = null;\n }\n\n if (currentMoveSet) {\n const _ = currentMoveSet;\n currentMoveSet = null;\n\n _.classList.remove(CLS.DROPZONE);\n events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n }\n\n if (currentDragSet) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n }\n\n const _ = currentDragSet;\n currentDragSet = null;\n\n _.classList.remove(CLS.DRAGSTART);\n events.dispatch(_, EV.DROP, { bubbles: false, cancelable: false });\n events.dispatch(_, EV.DRAGEND, { bubbles: false, cancelable: false });\n }\n}\n\nfunction onMousemove(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n if (!currentDragSet) {\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = dragSet;\n currentDragSet.classList.add(CLS.DRAGSTART);\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n let moveElement;\n\n if (nodeBubble) {\n select.add(nodeBubble);\n if (select.get(currentDragSet).length === 1) {\n moveElement = nodeBubble.cloneNode(true);\n }\n }\n\n if (!moveElement) {\n moveElement = getDragImage();\n drag.nodeOffsetX = DRAG_IMG_WIDTH;\n drag.nodeOffsetY = DRAG_IMG_WIDTH;\n }\n\n currentDragElement = document.body.appendChild(document.createElement('div'));\n currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n currentDragElement.appendChild(moveElement);\n\n events.dispatch(currentDragSet, EV.DRAGSTART, { bubbles: false, cancelable: false });\n }\n\n drag.x = event.clientX;\n drag.y = event.clientY;\n onScroll(dragSet);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n if (currentMoveSet && currentMoveSet !== nodeSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n\n } else if (!currentMoveSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n }\n\n } else if (currentMoveSet) {\n const _ = currentMoveSet;\n currentMoveSet = null;\n\n _.classList.remove(CLS.DROPZONE);\n events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n }\n}\n\nfunction onScroll(dragSet) {\n const drag = dragSet.__drag__;\n if (!drag || !currentDragElement) {\n return;\n }\n\n const x = drag.x - drag.nodeOffsetX + events.scrollX();\n const y = drag.y - drag.nodeOffsetY + events.scrollY();\n\n if (Modernizr.csstransforms3d) {\n currentDragElement.style.transform = `translate3d(${x}px, ${y}px, 0px)`;\n\n } else if (Modernizr.csstransforms) {\n currentDragElement.style.transform = `translate(${x}px, ${y}px)`;\n\n } else {\n currentDragElement.style.top = `${y}px`;\n currentDragElement.style.left = `${x}px`;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/mouse.js\n **/","module.exports = Modernizr;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"var\":\"Modernizr\",\"root\":\"modernizr\",\"commonjs2\":\"modernizr\",\"commonjs\":\"modernizr\",\"amd\":\"modernizr\"}\n ** module id = 18\n ** module chunks = 0\n **/","const context = require('../context');\nconst bubbleset = require('./bubbleset');\nconst bubble = require('./bubble');\nconst cursor = require('./cursor');\nconst select = require('./select');\nconst { KEY } = require('./constant');\nconst text = require('./text');\nconst events = require('./events');\n\nconst EVENTS = {\n blur: onBlur,\n click: onClick,\n dblclick: onDblclick,\n focus: onFocus,\n keydown: onKeydown,\n keypress: onKeypress,\n keyup: onKeyup,\n paste: onPaste,\n};\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onBlur(event) {\n select.clear(event.currentTarget);\n bubble.bubbling(event.currentTarget);\n}\n\nfunction onFocus(event) {\n cursor.restore(event.currentTarget);\n}\n\nfunction onKeyup(event) {\n const code = event.charCode || event.keyCode;\n const isPrintableChar = do {\n if (event.key) {\n event.key.length === 1;\n } else {\n ((code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd);\n }\n };\n\n if (isPrintableChar) {\n event.currentTarget.fireInput();\n }\n}\n\nfunction onKeypress(event) {\n const code = event.charCode || event.keyCode;\n const nodeSet = event.currentTarget;\n\n /* eslint no-case-declarations: 0 */\n switch (code) {\n case KEY.Enter:\n event.preventDefault();\n if (!nodeSet.hasAttribute('disable-controls')) {\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.Comma:\n case KEY.Semicolon:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n }\n}\n\nfunction onKeydown(event) {\n const code = event.charCode || event.keyCode;\n const metaKey = event.ctrlKey || event.metaKey;\n const nodeSet = event.currentTarget;\n const enable = !nodeSet.hasAttribute('disable-controls');\n\n switch (code) {\n case KEY.Esc:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n\n case KEY.Backspace:\n event.preventDefault();\n backSpace(event);\n break;\n\n case KEY.Left:\n event.preventDefault();\n arrowLeft(event);\n break;\n\n // сдвигаем курсор в начало списка\n case KEY.Top:\n event.preventDefault();\n if (enable) {\n const headBubble = bubbleset.headBubble(nodeSet);\n headBubble && select.uniq(headBubble);\n }\n break;\n\n case KEY.Right:\n event.preventDefault();\n arrowRight(event);\n break;\n\n // сдвигаем курсор в конец списка\n // case KEY.Tab:\n case KEY.Bottom:\n event.preventDefault();\n if (enable && select.has(nodeSet)) {\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.a:\n if (metaKey) {\n event.preventDefault();\n\n if (!text.selectAll(null, event.currentTarget)) {\n select.all(nodeSet);\n }\n }\n break;\n }\n}\n\nfunction arrowLeft(event) {\n const selection = context.getSelection();\n\n if (text.arrowLeft(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ 0 ] === nodeSet.startRangeSelect) {\n list[ list.length - 1 ];\n\n } else {\n list[ 0 ];\n }\n };\n\n const node = bubbleset.prevBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n }\n}\n\nfunction arrowRight(event) {\n const selection = context.getSelection();\n\n if (text.arrowRight(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.nextBubble(selection.focusNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ list.length - 1 ] === nodeSet.startRangeSelect) {\n list[ 0 ];\n\n } else {\n list[ list.length - 1 ];\n }\n };\n\n const node = bubbleset.nextBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n\n } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n select.clear(nodeSet);\n selection.collapse(begin.nextSibling, 0);\n\n } else {\n cursor.restore(nodeSet);\n }\n}\n\nfunction backSpace(event) {\n const nodeSet = event.currentTarget;\n nodeSet.normalize();\n\n const selection = context.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n if (text.arrowLeft(selection, true)) {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n } else {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n let node = bubbleset.findBubbleLeft(selection);\n if (node) {\n select.uniq(node);\n return;\n }\n\n const list = select.get(nodeSet);\n\n if (list.length) {\n const prevBubble = list[ 0 ].previousSibling;\n const nextBubble = list[ list.length - 1 ].nextSibling;\n list.forEach(item => item.parentNode.removeChild(item));\n\n if (bubble.isBubbleNode(prevBubble)) {\n select.uniq(prevBubble);\n\n } else if (bubble.isBubbleNode(nextBubble)) {\n select.uniq(nextBubble);\n\n } else {\n nodeSet.focus();\n cursor.restore(nodeSet);\n }\n\n nodeSet.fireChange();\n }\n}\n\nfunction onPaste(event) {\n event.preventDefault();\n\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n return;\n }\n\n const contentType = 'text/plain';\n let data = clipboardData.getData && clipboardData.getData(contentType);\n\n if (!text.replaceString(data) && clipboardData.items) {\n Array.prototype.slice.call(clipboardData.items)\n .filter(item => item.kind === 'string' && item.type === contentType)\n .some(function (item) {\n item.getAsString(text.replaceString);\n return true;\n });\n }\n}\n\nfunction onDblclick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeSet && nodeBubble) {\n event.preventDefault();\n bubble.edit(nodeSet, nodeBubble);\n }\n}\n\nfunction onClick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet) {\n return;\n }\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeBubble) {\n if (event.metaKey || event.ctrlKey) {\n select.add(nodeBubble);\n\n } else if (event.shiftKey) {\n if (!nodeSet.startRangeSelect) {\n select.uniq(nodeBubble);\n\n } else {\n select.range(nodeBubble);\n }\n\n } else {\n select.toggleUniq(nodeBubble);\n }\n\n } else {\n select.clear(nodeSet);\n\n const selection = context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n cursor.restore(nodeSet);\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/editor.js\n **/","/**\n * @module x-bubbles/cursor\n */\n\nconst context = require('../context');\nconst text = require('./text');\nconst select = require('./select');\n\nexports.restore = restore;\nexports.restoreBasis = restoreBasis;\n\n/**\n * Reset the cursor position to the end of the input field.\n * @alias module:x-bubbles/cursor.restore\n * @param {HTMLElement} nodeSet\n */\nfunction restore(nodeSet) {\n select.clear(nodeSet);\n const basis = restoreBasis(nodeSet);\n const selection = context.getSelection();\n selection.removeAllRanges();\n selection.collapse(basis, 1);\n}\n\n/**\n * The creation of the fake text at the end childNodes\n * @alias module:x-bubbles/cursor.restoreBasis\n * @param {HTMLElement} nodeSet\n * @returns {HTMLTextElement} fake text node\n */\nfunction restoreBasis(nodeSet) {\n let fakeText = text.createZws();\n\n if (nodeSet.hasChildNodes()) {\n const lastNode = nodeSet.childNodes[ nodeSet.childNodes.length - 1 ];\n\n if (lastNode.isEqualNode(fakeText)) {\n fakeText = lastNode;\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n return fakeText;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/cursor.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/x-bubbles.min.js b/docs/x-bubbles.min.js index be57c2e..f181a22 100644 --- a/docs/x-bubbles.min.js +++ b/docs/x-bubbles.min.js @@ -1,3 +1,2 @@ -var XBubbles=function(e){function t(u){if(n[u])return n[u].exports;var r=n[u]={exports:{},id:u,loaded:!1};return e[u].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function u(e){for(var t in g){var n=r(g[t],2),u=n[0],o=n[1];e[t]=b[u](e[t]),"undefined"==typeof e[t]&&(e[t]=o)}}var r=function(){function e(e,t){var n=[],u=!0,r=!1,o=void 0;try{for(var i,a=e[Symbol.iterator]();!(u=(i=a.next()).done)&&(n.push(i.value),!t||n.length!==t);u=!0);}catch(s){r=!0,o=s}finally{try{!u&&a["return"]&&a["return"]()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{};e.dispatchEvent(new p(t,n))}var a=n(3),s=n(1),l=n(6),c=n(7),f=c.EV,d=n(8);t.scrollX=r,t.scrollY=o,t.pageX=function(e){return null===e.pageX&&null!==e.clientX?e.clientX+r():e.pageX},t.pageY=function(e){return null===e.pageY&&null!==e.clientY?e.clientY+o():e.pageY},t.one=function(e,t,n){return e.addEventListener(t,function u(r){e.removeEventListener(t,u),n(r)})},t.on=function(e,t,n){var r=n?u({},t,n):t;for(var o in r)e.addEventListener(o,r[o])},t.off=function(e,t,n){var r=n?u({},t,n):t;for(var o in r)e.removeEventListener(o,r[o])},t.prevent=function(e){return e.cancelBubble=!0,e.returnValue=!1,e.stopPropagation(),e.preventDefault(),!1},t.fireEdit=function(e){i(this,f.BUBBLE_EDIT,{bubbles:!1,cancelable:!1,detail:{data:e}})},t.fireChange=function(){i(this,f.CHANGE,{bubbles:!1,cancelable:!1})},t.fireInput=function(){var e=d.currentTextRange(),t=e&&d.textClean(e.toString())||"";this._bubbleValue!==t&&(this._bubbleValue=t,i(this,f.BUBBLE_INPUT,{bubbles:!1,cancelable:!1,detail:{data:t}}))},t.throttle=function(e){var t=0,n=function(){t=0};return function(){t||(t=a(n),e.apply(this,arguments))}};var p=function(){return"function"==typeof s.CustomEvent?s.CustomEvent:l}()},function(e,t,n){(function(t){for(var u=n(4),r="undefined"==typeof window?t:window,o=["moz","webkit"],i="AnimationFrame",a=r["request"+i],s=r["cancel"+i]||r["cancelRequest"+i],l=0;!a&&l1)for(var n=1;nc)s=s.nextSibling,l=0;else{var f=s.nodeValue.substring(l,l+1);if(!p(f))break;l+=1}}if(!s)return!1;if(t){var d=Boolean(e.extend);if(d)e.extend(s,l+1);else{var v=F.document.createRange();a?(v.setStart(s,l+1),v.setEnd(r,i)):(v.setStart(u,o),v.setEnd(s,l+1)),e.removeAllRanges(),e.addRange(v)}}else e.collapse(s,l+1);return!0}function c(e){if(!e)return"";var t=F.document.implementation.createHTMLDocument("").body;return t.innerText=e,t.innerText.replace(/^[\u0020\u00a0]+$/gm,"").replace(/\n/gm," ").trim()}function f(e,t){e=e||F.getSelection();var n=e&&e.anchorNode;if(!n||n.nodeType!==Node.TEXT_NODE)return!1;for(var u=void 0,r=void 0,o=n;o&&o.nodeType===Node.TEXT_NODE;)u=o,o=o.previousSibling;for(o=n;o&&o.nodeType===Node.TEXT_NODE;)r=o,o=o.nextSibling;var i=A.hasBubbles(t),a=F.document.createRange();a.setStartBefore(u),a.setEndAfter(r);var s=v(a.toString());return!(!s&&(s||i))&&(s||a.collapse(),e.removeAllRanges(),e.addRange(a),!0)}function d(){return F.document.createTextNode(m)}function p(e){return E.test(e)}function v(e){return String(e||"").trim().replace(h,"")}function g(e){var t=e.anchorNode,n=e.focusNode,u=e.anchorOffset,r=e.focusOffset,o=!1;if(t===n)u=Math.min(e.anchorOffset,e.focusOffset),r=Math.max(e.anchorOffset,e.focusOffset),o=e.anchorOffset>e.focusOffset;else{var i=e.anchorNode.compareDocumentPosition(e.focusNode);i&Node.DOCUMENT_POSITION_PRECEDING&&(t=e.focusNode,u=e.focusOffset,n=e.anchorNode,r=e.anchorOffset,o=!0)}return{startNode:t,endNode:n,startOffset:u,endOffset:r,revert:o}}var F=n(1),b=n(9),A=n(11),h=/[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g,E=/\u200B/,m="​";t.arrowRight=l,t.arrowLeft=s,t.remove=o,t.html2text=c,t.currentTextRange=r,t.text2bubble=u,t.replaceString=a,t.selectAll=f,t.textClean=v,t.checkZws=p,t.createZws=d},function(e,t,n){"use strict";function u(e){return!(!e||e.nodeType!==Node.ELEMENT_NODE)&&e.hasAttribute("bubble")}function r(e,t){if(t.hasAttribute("readonly"))return!1;var n=d.getSelection();if(!n)return!1;var u=e.options("bubbleDeformation"),r=u(t);if(!r){var o=p.textClean(t.innerText);r={text:o,startOffset:0,endOffset:o.length}}var i=p.createZws(),a=d.document.createTextNode(r.text);e.fireEdit(t),e.replaceChild(a,t),e.insertBefore(i,a);var s=d.document.createRange();return s.setStart(a,r.startOffset),s.setEnd(a,r.endOffset),n.removeAllRanges(),n.addRange(s),!0}function o(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t=p.textClean(t)){var u=e.options("bubbleFormation"),r=e.options("classBubble"),o=F()&&e.options("draggable"),i=d.document.createElement("span");i.innerText=t,o&&i.setAttribute("draggable","true");for(var a in n)n[a]&&i.setAttribute("data-"+a,g(n[a]));if(u(i),r)for(var s=String(r).trim().split(/\s+/),l=s.length;l--;)i.classList.add(s[l]);return i.setAttribute("bubble",""),i.setAttribute("contenteditable","false"),i}}function i(e){var t=e.options("separator"),n=e.options("ending"),u=e.options("begining"),r=a(e),i=[];return r.forEach(function(r){var a=p.textClean(r.toString());if(!a)return void r.deleteContents();var v=[a];t&&(v=a.split(t).map(s).filter(l)),n?v=v.reduce(function(e,t){return e.concat(c(t,n))},[]).map(s).filter(l):u&&(v=v.reduce(function(e,t){return e.concat(f(t,u))},[]).map(s).filter(l)),v.length||r.deleteContents();var g=d.document.createDocumentFragment();v.forEach(function(t){var n=o(e,t);n&&(g.appendChild(n),i.push(n))}),r.deleteContents(),r.insertNode(g)}),e.fireInput(),i.length&&e.fireChange(),i}function a(e){for(var t=[],n=e.childNodes,r=void 0,o=void 0,i=0;i":">",'"':""","'":"'","`":"`"},a={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},s=/&(?:amp|lt|gt|quot|#39|#96);/g,l=/[&<>"'`]/g,c=RegExp(s.source),f=RegExp(l.source),d=/Trident|Edge/;t.escape=function(e){return e=String(e),e&&f.test(e)?e.replace(l,r):e},t.unescape=function(e){return e=String(e),e&&c.test(e)?e.replace(s,u):e},t.canUseDrag=function(){return!d.test(o.navigator.userAgent)}},function(e,t,n){"use strict";function u(e){return e.querySelector("[bubble]:last-child")}function r(e){return e.querySelector("[bubble]:first-child")}function o(e){return Array.prototype.slice.call(e.querySelectorAll("[bubble]"))}function i(e){return Boolean(e.querySelector("[bubble]"))}function a(e){if(e.focusNode&&e.anchorNode){var t=e.focusNode.previousSibling;for(e.anchorNode!==e.focusNode&&e.anchorNode.compareDocumentPosition(e.focusNode)&Node.DOCUMENT_POSITION_FOLLOWING&&(t=e.anchorNode.previousSibling);t;){if(d.isBubbleNode(t))return t;if(t.nodeType===Node.TEXT_NODE&&p.textClean(t.nodeValue))return;t=t.previousSibling}}}function s(e){for(;e;){if(e.nodeType===Node.ELEMENT_NODE&&"x-bubbles"===e.getAttribute("is"))return e;e=e.parentNode}}function l(e){for(;e;){if(d.isBubbleNode(e))return e;e=e.parentNode}}function c(e){for(var t=e&&e.previousSibling;t;){if(d.isBubbleNode(t))return t;t=t.previousSibling}}function f(e){for(var t=e&&e.nextSibling;t;){if(d.isBubbleNode(t))return t;t=t.nextSibling}}var d=n(9),p=n(8);t.closestNodeBubble=l,t.closestNodeSet=s,t.findBubbleLeft=a,t.getBubbles=o,t.hasBubbles=i,t.headBubble=r,t.lastBubble=u,t.nextBubble=f,t.prevBubble=c},function(e,t,n){"use strict";var u=n(13),r=n(17),o=n(10),i=o.canUseDrag;t.init=function(e){return i()?u.init(e):r.init(e)},t.destroy=function(e){return i()?u.destroy(e):r.destroy(e)}},function(e,t,n){"use strict";function u(e){e.stopPropagation();var t=f.closestNodeSet(e.target),n=f.closestNodeBubble(e.target);if(!t||!n)return void e.preventDefault();var u=l.getSelection();u&&u.removeAllRanges(),h=t,t.classList.add(v.DRAGSTART),c.add(n),e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain","");var r=c.get(h);r.length>1&&e.dataTransfer.setDragImage(F(),b,b)}function r(e){if(e.stopPropagation(),e.preventDefault(),h){var t=f.closestNodeSet(e.target);if(t&&t!==h){var n=c.get(h);n.length&&(n.forEach(function(e){return t.appendChild(e)}),setTimeout(function(){t.focus(),t.fireChange()},0))}}}function o(e){e.stopPropagation(),e.preventDefault(),h&&(e.dataTransfer.dropEffect="move")}function i(e){if(e.stopPropagation(),e.preventDefault(),h){var t=f.closestNodeSet(e.target);t&&t!==h&&t.classList.add(v.DROPZONE)}}function a(e){if(e.stopPropagation(),e.preventDefault(),h){var t=f.closestNodeSet(e.target);t&&t!==h&&t.classList.remove(v.DROPZONE)}}function s(e){if(e.stopPropagation(),e.preventDefault(),h){h.classList.remove(v.DRAGSTART);var t=f.closestNodeSet(e.target);t&&t!==h&&t.classList.remove(v.DROPZONE),h=null}}var l=n(1),c=n(14),f=n(11),d=n(2),p=n(7),v=p.CLS,g=n(15),F=g.getDragImage,b=g.DRAG_IMG_WIDTH,A={dragend:s,dragenter:i,dragleave:a,dragover:o,dragstart:u,drop:r},h=null;t.init=function(e){d.on(e,A)},t.destroy=function(e){d.off(e,A)}},function(e,t,n){"use strict";function u(e){if(b.isBubbleNode(e)){var t=e.parentNode,n=s(t);if(!n.length)return void f(e);l(t);var u=n[0],r=n[n.length-1];u!==r&&t.startRangeSelect||(t.startRangeSelect=u);var o=void 0,i=void 0,a=e.compareDocumentPosition(t.startRangeSelect);if(a&Node.DOCUMENT_POSITION_PRECEDING?(o=t.startRangeSelect,i=e):(o=e,i=t.startRangeSelect),o&&i){for(var c=o;c&&v(c)&&c!==i;)c=c.nextSibling;b.bubbling(t)}}}function r(e){h.call(e.querySelectorAll(m)).forEach(function(e){return v(e)}),e.startRangeSelect=e.querySelector(E),b.bubbling(e);var t=F.getSelection();t&&t.removeAllRanges()}function o(e){return Boolean(e.querySelector(E))}function i(e){return s(e)[0]}function a(e){var t=s(e);return t[t.length-1]}function s(e){return h.call(e.querySelectorAll(E))}function l(e){s(e).forEach(function(e){return e.removeAttribute("selected")})}function c(e){if(v(e)){var t=A.closestNodeSet(e);return t.startRangeSelect=e,b.bubbling(t),!0}return!1}function f(e){if(!b.isBubbleNode(e))return!1;var t=A.closestNodeSet(e),n=F.getSelection();return n&&n.removeAllRanges(),l(t),c(e)}function d(e){if(p(e)){var t=A.closestNodeSet(e);if(1===s(t).length)return g(e)}return f(e)}function p(e){return b.isBubbleNode(e)&&e.hasAttribute("selected")||!1}function v(e){return!!b.isBubbleNode(e)&&(e.setAttribute("selected",""),!0)}function g(e){return!!b.isBubbleNode(e)&&(e.removeAttribute("selected"),!0)}var F=n(1),b=n(9),A=n(11),h=Array.prototype.slice,E="[bubble][selected]",m="[bubble]:not([selected])";t.all=r,t.add=c,t.clear=l,t.get=s,t.uniq=f,t.head=i,t.last=a,t.has=o,t.range=u,t.toggleUniq=d},function(e,t,n){"use strict";var u=16,r=null;t.DRAG_IMG_WIDTH=u,t.getDragImage=function(){return r||(r=new Image,r.src=n(16)),r}},function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg=="},function(e,t,n){"use strict";function u(e){var t=c.closestNodeBubble(e.target);if(t){var n=c.closestNodeSet(e.target);if(n){e.preventDefault(),n.focus();var u=n.__drag__={onMouseup:r.bind(this,n),onMousemove:s.throttle(o.bind(this,n)),onScroll:s.throttle(i.bind(this,n)),nodeOffsetX:s.pageX(e)-t.offsetLeft,nodeOffsetY:s.pageY(e)-t.offsetTop,x:0,y:0};b=null,A=null,h=null,s.one(document,"mouseup",u.onMouseup),s.on(document,"mousemove",u.onMousemove),s.on(document,"scroll",u.onScroll)}}}function r(e,t){var n=e.__drag__;n&&(s.off(document,"mousemove",n.onMousemove),s.off(document,"scroll",n.onScroll),delete e.__drag__,h&&(h.parentNode&&h.parentNode.removeChild(h),h=null),A&&(A.classList.remove(p.DROPZONE),A=null),b&&!function(){var e=c.closestNodeSet(t.target);if(e&&e!==b){var n=l.get(b);n.length&&(n.forEach(function(t){return e.appendChild(t)}),setTimeout(function(){e.focus(),e.fireChange()},0))}b.classList.remove(p.DRAGSTART),b=null}())}function o(e,t){var n=e.__drag__;if(n){if(!b){var u=a.getSelection();u&&u.removeAllRanges(),b=e,b.classList.add(p.DRAGSTART);var r=c.closestNodeBubble(t.target),o=void 0;r&&(l.add(r),1===l.get(b).length&&(o=r.cloneNode(!0))),o||(o=g(),n.nodeOffsetX=F,n.nodeOffsetY=F),h=document.body.appendChild(document.createElement("div")),h.style.cssText="position:absolute;z-index:9999;pointer-events:none;top:0;left:0;",h.appendChild(o)}n.x=t.clientX,n.y=t.clientY,i(e);var s=c.closestNodeSet(t.target);s&&s!==b?A&&A!==s?(A.classList.remove(p.DROPZONE),s.classList.add(p.DROPZONE),A=s):A||(s.classList.add(p.DROPZONE),A=s):A&&(A.classList.remove(p.DROPZONE),A=null)}}function i(e){var t=e.__drag__;if(t&&h){var n=t.x-t.nodeOffsetX+s.scrollX(),u=t.y-t.nodeOffsetY+s.scrollY();f.csstransforms3d?h.style.transform="translate3d("+n+"px, "+u+"px, 0px)":f.csstransforms?h.style.transform="translate("+n+"px, "+u+"px)":(h.style.top=u+"px",h.style.left=n+"px")}}var a=n(1),s=n(2),l=n(14),c=n(11),f=n(18),d=n(7),p=d.CLS,v=n(15),g=v.getDragImage,F=v.DRAG_IMG_WIDTH,b=null,A=null,h=null;t.init=function(e){s.on(e,"mousedown",u)},t.destroy=function(e){s.off(e,"mousedown",u)}},function(e,t){!function(t){!function(e,t,n){function u(e,t){return typeof e===t}function r(){var e,t,n,r,o,i,a;for(var s in b)if(b.hasOwnProperty(s)){if(e=[],t=b[s],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;n47||t===E.Space||t===E.Backspace)&&t!==E.Cmd;n&&e.currentTarget.fireInput()}function i(e){var t=e.charCode||e.keyCode,n=e.currentTarget;switch(t){case E.Enter:e.preventDefault(),n.hasAttribute("disable-controls")||(F.bubbling(n),b.restore(n));break;case E.Comma:case E.Semicolon:e.preventDefault(),F.bubbling(n),b.restore(n)}}function a(e){var t=e.charCode||e.keyCode,n=e.ctrlKey||e.metaKey,u=e.currentTarget,r=!u.hasAttribute("disable-controls");switch(t){case E.Esc:e.preventDefault(),F.bubbling(u),b.restore(u);break;case E.Backspace:e.preventDefault(),c(e);break;case E.Left:e.preventDefault(),s(e);break;case E.Top:if(e.preventDefault(),r){var o=g.headBubble(u);o&&A.uniq(o)}break;case E.Right:e.preventDefault(),l(e);break;case E.Bottom: -e.preventDefault(),r&&A.has(u)&&b.restore(u);break;case E.a:n&&(e.preventDefault(),m.selectAll(null,e.currentTarget)||A.all(u))}}function s(e){var t=v.getSelection();if(!m.arrowLeft(t,e.shiftKey)){if(t.anchorNode&&t.anchorNode.nodeType===Node.TEXT_NODE){var n=g.prevBubble(t.anchorNode);return void(n&&A.uniq(n))}var u=e.currentTarget,r=A.get(u),o=r.length>1&&r[0]===u.startRangeSelect?r[r.length-1]:r[0],i=g.prevBubble(o);i&&(e.shiftKey?A.range(i):A.uniq(i))}}function l(e){var t=v.getSelection();if(!m.arrowRight(t,e.shiftKey)){if(t.focusNode&&t.focusNode.nodeType===Node.TEXT_NODE){var n=g.nextBubble(t.focusNode);return void(n&&A.uniq(n))}var u=e.currentTarget,r=A.get(u),o=r.length>1&&r[r.length-1]===u.startRangeSelect?r[0]:r[r.length-1],i=g.nextBubble(o);i?e.shiftKey?A.range(i):A.uniq(i):o&&o.nextSibling&&o.nextSibling.nodeType===Node.TEXT_NODE?(A.clear(u),t.collapse(o.nextSibling,0)):b.restore(u)}}function c(e){var t=e.currentTarget;t.normalize();var n=v.getSelection();if(n){if(!n.isCollapsed)return m.remove(n),void t.fireInput();if(m.arrowLeft(n,!0))return m.remove(n),void t.fireInput();var u=g.findBubbleLeft(n);if(u)return void A.uniq(u);var r=A.get(t);if(r.length){var o=r[0].previousSibling,i=r[r.length-1].nextSibling;r.forEach(function(e){return e.parentNode.removeChild(e)}),F.isBubbleNode(o)?A.uniq(o):F.isBubbleNode(i)?A.uniq(i):(t.focus(),b.restore(t)),t.fireChange()}}}function f(e){e.preventDefault();var t=e.clipboardData;if(t){var n="text/plain",u=t.getData&&t.getData(n);!m.replaceString(u)&&t.items&&Array.prototype.slice.call(t.items).filter(function(e){return"string"===e.kind&&e.type===n}).some(function(e){return e.getAsString(m.replaceString),!0})}}function d(e){var t=g.closestNodeSet(e.target),n=g.closestNodeBubble(e.target);t&&n&&(e.preventDefault(),F.edit(t,n))}function p(e){var t=g.closestNodeSet(e.target);if(t){var n=g.closestNodeBubble(e.target);if(n)e.metaKey||e.ctrlKey?A.add(n):e.shiftKey?t.startRangeSelect?A.range(n):A.uniq(n):A.toggleUniq(n);else{A.clear(t);var u=v.getSelection();u&&u.anchorNode&&u.anchorNode.nodeType===Node.TEXT_NODE||b.restore(t)}}}var v=n(1),g=n(11),F=n(9),b=n(20),A=n(14),h=n(7),E=h.KEY,m=n(8),C=n(2),D={blur:u,click:p,dblclick:d,focus:r,keydown:a,keypress:i,keyup:o,paste:f};t.init=function(e){C.on(e,D)},t.destroy=function(e){C.off(e,D)}},function(e,t,n){"use strict";function u(e){a.clear(e);var t=r(e),n=o.getSelection();n.removeAllRanges(),n.collapse(t,1)}function r(e){var t=i.createZws();if(e.hasChildNodes()){var n=e.childNodes[e.childNodes.length-1];n.isEqualNode(t)?t=n:e.appendChild(t)}else e.appendChild(t);return t}var o=n(1),i=n(8),a=n(14);t.restore=u,t.restoreBasis=r}]); +var XBubbles=function(e){function t(n){if(u[n])return u[n].exports;var r=u[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var u={};return t.m=e,t.c=u,t.p="",t(0)}([function(e,t,u){"use strict";function n(e){for(var t in p){var u=r(p[t],2),n=u[0],o=u[1];e[t]=g[n](e[t]),"undefined"==typeof e[t]&&(e[t]=o)}}var r=function(){function e(e,t){var u=[],n=!0,r=!1,o=void 0;try{for(var i,a=e[Symbol.iterator]();!(n=(i=a.next()).done)&&(u.push(i.value),!t||u.length!==t);n=!0);}catch(l){r=!0,o=l}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw o}}return u}return function(t,u){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,u);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{};e.dispatchEvent(new b(t,u))}var a=u(3),l=u(1),c=u(6),s=u(7),f=s.EV,d=u(8);t.scrollX=r,t.scrollY=o,t.dispatch=i,t.pageX=function(e){return null===e.pageX&&null!==e.clientX?e.clientX+r():e.pageX},t.pageY=function(e){return null===e.pageY&&null!==e.clientY?e.clientY+o():e.pageY},t.one=function(e,t,u){return e.addEventListener(t,function n(r){e.removeEventListener(t,n),u(r)})},t.on=function(e,t,u){var r=u?n({},t,u):t;for(var o in r)e.addEventListener(o,r[o])},t.off=function(e,t,u){var r=u?n({},t,u):t;for(var o in r)e.removeEventListener(o,r[o])},t.prevent=function(e){return e.cancelBubble=!0,e.returnValue=!1,e.stopPropagation(),e.preventDefault(),!1},t.fireEdit=function(e){i(this,f.BUBBLE_EDIT,{bubbles:!1,cancelable:!1,detail:{data:e}})},t.fireChange=function(){i(this,f.CHANGE,{bubbles:!1,cancelable:!1})},t.fireInput=function(){var e=d.currentTextRange(),t=e&&d.textClean(e.toString())||"";this._bubbleValue!==t&&(this._bubbleValue=t,i(this,f.BUBBLE_INPUT,{bubbles:!1,cancelable:!1,detail:{data:t}}))},t.throttle=function(e){var t=0,u=function(){t=0};return function(){t||(t=a(u),e.apply(this,arguments))}};var b=function(){return"function"==typeof l.CustomEvent?l.CustomEvent:c}()},function(e,t,u){(function(t){for(var n=u(4),r="undefined"==typeof window?t:window,o=["moz","webkit"],i="AnimationFrame",a=r["request"+i],l=r["cancel"+i]||r["cancelRequest"+i],c=0;!a&&c1)for(var u=1;us)l=l.nextSibling,c=0;else{var f=l.nodeValue.substring(c,c+1);if(!b(f))break;c+=1}}if(!l)return!1;if(t){var d=Boolean(e.extend);if(d)e.extend(l,c+1);else{var F=A.document.createRange();a?(F.setStart(l,c+1),F.setEnd(r,i)):(F.setStart(n,o),F.setEnd(l,c+1)),e.removeAllRanges(),e.addRange(F)}}else e.collapse(l,c+1);return!0}function s(e){if(!e)return"";var t=A.document.implementation.createHTMLDocument("").body;return t.innerText=e,t.innerText.replace(/^[\u0020\u00a0]+$/gm,"").replace(/\n/gm," ").trim()}function f(e,t){e=e||A.getSelection();var u=e&&e.anchorNode;if(!u||u.nodeType!==Node.TEXT_NODE)return!1;for(var n=void 0,r=void 0,o=u;o&&o.nodeType===Node.TEXT_NODE;)n=o,o=o.previousSibling;for(o=u;o&&o.nodeType===Node.TEXT_NODE;)r=o,o=o.nextSibling;var i=v.hasBubbles(t),a=A.document.createRange();a.setStartBefore(n),a.setEndAfter(r);var l=F(a.toString());return!(!l&&(l||i))&&(l||a.collapse(),e.removeAllRanges(),e.addRange(a),!0)}function d(){return A.document.createTextNode(h)}function b(e){return D.test(e)}function F(e){return String(e||"").trim().replace(E,"")}function p(e){var t=e.anchorNode,u=e.focusNode,n=e.anchorOffset,r=e.focusOffset,o=!1;if(t===u)n=Math.min(e.anchorOffset,e.focusOffset),r=Math.max(e.anchorOffset,e.focusOffset),o=e.anchorOffset>e.focusOffset;else{var i=e.anchorNode.compareDocumentPosition(e.focusNode);i&Node.DOCUMENT_POSITION_PRECEDING&&(t=e.focusNode,n=e.focusOffset,u=e.anchorNode,r=e.anchorOffset,o=!0)}return{startNode:t,endNode:u,startOffset:n,endOffset:r,revert:o}}var A=u(1),g=u(9),v=u(11),E=/[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g,D=/\u200B/,h="​";t.arrowRight=c,t.arrowLeft=l,t.remove=o,t.html2text=s,t.currentTextRange=r,t.text2bubble=n,t.replaceString=a,t.selectAll=f,t.textClean=F,t.checkZws=b,t.createZws=d},function(e,t,u){"use strict";function n(e){return!(!e||e.nodeType!==Node.ELEMENT_NODE)&&e.hasAttribute("bubble")}function r(e,t){if(t.hasAttribute("readonly"))return!1;var u=d.getSelection();if(!u)return!1;var n=e.options("bubbleDeformation"),r=n(t);if(!r){var o=b.textClean(t.innerText);r={text:o,startOffset:0,endOffset:o.length}}var i=b.createZws(),a=d.document.createTextNode(r.text);e.fireEdit(t),e.replaceChild(a,t),e.insertBefore(i,a);var l=d.document.createRange();return l.setStart(a,r.startOffset),l.setEnd(a,r.endOffset),u.removeAllRanges(),u.addRange(l),!0}function o(e,t){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t=b.textClean(t)){var n=e.options("bubbleFormation"),r=e.options("classBubble"),o=A()&&e.options("draggable"),i=d.document.createElement("span");i.innerText=t,o&&i.setAttribute("draggable","true");for(var a in u)u[a]&&i.setAttribute("data-"+a,p(u[a]));if(n(i),r)for(var l=String(r).trim().split(/\s+/),c=l.length;c--;)i.classList.add(l[c]);return i.setAttribute("bubble",""),i.setAttribute("contenteditable","false"),i}}function i(e){var t=e.options("separator"),u=e.options("ending"),n=e.options("begining"),r=a(e),i=[];return r.forEach(function(r){var a=b.textClean(r.toString());if(!a)return void r.deleteContents();var F=[a];t&&(F=a.split(t).map(l).filter(c)),u?F=F.reduce(function(e,t){return e.concat(s(t,u))},[]).map(l).filter(c):n&&(F=F.reduce(function(e,t){return e.concat(f(t,n))},[]).map(l).filter(c)),F.length||r.deleteContents();var p=d.document.createDocumentFragment();F.forEach(function(t){var u=o(e,t);u&&(p.appendChild(u),i.push(u))}),r.deleteContents(),r.insertNode(p)}),e.fireInput(),i.length&&e.fireChange(),i}function a(e){for(var t=[],u=e.childNodes,r=void 0,o=void 0,i=0;i":">",'"':""","'":"'","`":"`"},a={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},l=/&(?:amp|lt|gt|quot|#39|#96);/g,c=/[&<>"'`]/g,s=RegExp(l.source),f=RegExp(c.source),d=/Trident|Edge/;t.escape=function(e){return e=String(e),e&&f.test(e)?e.replace(c,r):e},t.unescape=function(e){return e=String(e),e&&s.test(e)?e.replace(l,n):e},t.canUseDrag=function(){return!d.test(o.navigator.userAgent)}},function(e,t,u){"use strict";function n(e){return e.querySelector("[bubble]:last-child")}function r(e){return e.querySelector("[bubble]:first-child")}function o(e){return Array.prototype.slice.call(e.querySelectorAll("[bubble]"))}function i(e){return Boolean(e.querySelector("[bubble]"))}function a(e){if(e.focusNode&&e.anchorNode){var t=e.focusNode.previousSibling;for(e.anchorNode!==e.focusNode&&e.anchorNode.compareDocumentPosition(e.focusNode)&Node.DOCUMENT_POSITION_FOLLOWING&&(t=e.anchorNode.previousSibling);t;){if(d.isBubbleNode(t))return t;if(t.nodeType===Node.TEXT_NODE&&b.textClean(t.nodeValue))return;t=t.previousSibling}}}function l(e){for(;e;){if(e.nodeType===Node.ELEMENT_NODE&&"x-bubbles"===e.getAttribute("is"))return e;e=e.parentNode}}function c(e){for(;e;){if(d.isBubbleNode(e))return e;e=e.parentNode}}function s(e){for(var t=e&&e.previousSibling;t;){if(d.isBubbleNode(t))return t;t=t.previousSibling}}function f(e){for(var t=e&&e.nextSibling;t;){if(d.isBubbleNode(t))return t;t=t.nextSibling}}var d=u(9),b=u(8);t.closestNodeBubble=c,t.closestNodeSet=l,t.findBubbleLeft=a,t.getBubbles=o,t.hasBubbles=i,t.headBubble=r,t.lastBubble=n,t.nextBubble=f,t.prevBubble=s},function(e,t,u){"use strict";var n=u(13),r=u(17),o=u(10),i=o.canUseDrag;t.init=function(e){return i()?n.init(e):r.init(e)},t.destroy=function(e){return i()?n.destroy(e):r.destroy(e)}},function(e,t,u){"use strict";function n(e){e.stopPropagation();var t=f.closestNodeSet(e.target),u=f.closestNodeBubble(e.target);if(!t||!u)return void e.preventDefault();var n=c.getSelection();n&&n.removeAllRanges(),E=t,t.classList.add(F.DRAGSTART),s.add(u),e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain","");var r=s.get(E);r.length>1&&e.dataTransfer.setDragImage(A(),g,g)}function r(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);if(t&&t!==E){var u=s.get(E);u.length&&(u.forEach(function(e){return t.appendChild(e)}),setTimeout(function(){t.focus(),t.fireChange()},0))}}}function o(e){e.stopPropagation(),e.preventDefault(),E&&(e.dataTransfer.dropEffect="move")}function i(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.add(F.DROPZONE)}}function a(e){if(e.stopPropagation(),e.preventDefault(),E){var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.remove(F.DROPZONE)}}function l(e){if(e.stopPropagation(),e.preventDefault(),E){E.classList.remove(F.DRAGSTART);var t=f.closestNodeSet(e.target);t&&t!==E&&t.classList.remove(F.DROPZONE),E=null}}var c=u(1),s=u(14),f=u(11),d=u(2),b=u(7),F=b.CLS,p=u(15),A=p.getDragImage,g=p.DRAG_IMG_WIDTH,v={dragend:l,dragenter:i,dragleave:a,dragover:o,dragstart:n,drop:r},E=null;t.init=function(e){d.on(e,v)},t.destroy=function(e){d.off(e,v)}},function(e,t,u){"use strict";function n(e){if(g.isBubbleNode(e)){var t=e.parentNode,u=l(t);if(!u.length)return void f(e);c(t);var n=u[0],r=u[u.length-1];n!==r&&t.startRangeSelect||(t.startRangeSelect=n);var o=void 0,i=void 0,a=e.compareDocumentPosition(t.startRangeSelect);if(a&Node.DOCUMENT_POSITION_PRECEDING?(o=t.startRangeSelect,i=e):(o=e,i=t.startRangeSelect),o&&i){for(var s=o;s&&F(s)&&s!==i;)s=s.nextSibling;g.bubbling(t)}}}function r(e){E.call(e.querySelectorAll(h)).forEach(function(e){return F(e)}),e.startRangeSelect=e.querySelector(D),g.bubbling(e);var t=A.getSelection();t&&t.removeAllRanges()}function o(e){return Boolean(e.querySelector(D))}function i(e){return l(e)[0]}function a(e){var t=l(e);return t[t.length-1]}function l(e){return E.call(e.querySelectorAll(D))}function c(e){l(e).forEach(function(e){return e.removeAttribute("selected")})}function s(e){if(F(e)){var t=v.closestNodeSet(e);return t.startRangeSelect=e,g.bubbling(t),!0}return!1}function f(e){if(!g.isBubbleNode(e))return!1;var t=v.closestNodeSet(e),u=A.getSelection();return u&&u.removeAllRanges(),c(t),s(e)}function d(e){if(b(e)){var t=v.closestNodeSet(e);if(1===l(t).length)return p(e)}return f(e)}function b(e){return g.isBubbleNode(e)&&e.hasAttribute("selected")||!1}function F(e){return!!g.isBubbleNode(e)&&(e.setAttribute("selected",""),!0)}function p(e){return!!g.isBubbleNode(e)&&(e.removeAttribute("selected"),!0)}var A=u(1),g=u(9),v=u(11),E=Array.prototype.slice,D="[bubble][selected]",h="[bubble]:not([selected])";t.all=r,t.add=s,t.clear=c,t.get=l,t.uniq=f,t.head=i,t.last=a,t.has=o,t.range=n,t.toggleUniq=d},function(e,t,u){"use strict";var n=16,r=null;t.DRAG_IMG_WIDTH=n,t.getDragImage=function(){return r||(r=new Image,r.src=u(16)),r}},function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg=="},function(e,t,u){"use strict";function n(e){var t=s.closestNodeBubble(e.target);if(t){var u=s.closestNodeSet(e.target);if(u){e.preventDefault(),u.focus();var n=u.__drag__={onMouseup:r.bind(this,u),onMousemove:l.throttle(o.bind(this,u)),onScroll:l.throttle(i.bind(this,u)),nodeOffsetX:e.offsetX,nodeOffsetY:e.offsetY,x:0,y:0};v=null,E=null,D=null,l.one(document,"mouseup",n.onMouseup),l.on(document,"mousemove",n.onMousemove),l.on(document,"scroll",n.onScroll)}}}function r(e,t){var u=e.__drag__;if(u){if(l.off(document,"mousemove",u.onMousemove),l.off(document,"scroll",u.onScroll),delete e.__drag__,D&&(D.parentNode&&D.parentNode.removeChild(D),D=null),E){var n=E;E=null,n.classList.remove(b.DROPZONE),l.dispatch(n,F.DRAGLEAVE,{bubbles:!1,cancelable:!1})}v&&!function(){var e=s.closestNodeSet(t.target);if(e&&e!==v){var u=c.get(v);u.length&&(u.forEach(function(t){return e.appendChild(t)}),setTimeout(function(){e.focus(),e.fireChange()},0))}var n=v;v=null,n.classList.remove(b.DRAGSTART),l.dispatch(n,F.DROP,{bubbles:!1,cancelable:!1}),l.dispatch(n,F.DRAGEND,{bubbles:!1,cancelable:!1})}()}}function o(e,t){var u=e.__drag__;if(u){if(!v){var n=a.getSelection();n&&n.removeAllRanges(),v=e,v.classList.add(b.DRAGSTART);var r=s.closestNodeBubble(t.target),o=void 0;r&&(c.add(r),1===c.get(v).length&&(o=r.cloneNode(!0))),o||(o=A(),u.nodeOffsetX=g,u.nodeOffsetY=g),D=document.body.appendChild(document.createElement("div")),D.style.cssText="position:absolute;z-index:9999;pointer-events:none;top:0;left:0;",D.appendChild(o),l.dispatch(v,F.DRAGSTART,{bubbles:!1,cancelable:!1})}u.x=t.clientX,u.y=t.clientY,i(e);var f=s.closestNodeSet(t.target);if(f&&f!==v)E&&E!==f?(E.classList.remove(b.DROPZONE),f.classList.add(b.DROPZONE),E=f,l.dispatch(E,F.DRAGENTER,{bubbles:!1,cancelable:!1})):E||(f.classList.add(b.DROPZONE),E=f,l.dispatch(E,F.DRAGENTER,{bubbles:!1,cancelable:!1}));else if(E){var d=E;E=null,d.classList.remove(b.DROPZONE),l.dispatch(d,F.DRAGLEAVE,{bubbles:!1,cancelable:!1})}}}function i(e){var t=e.__drag__;if(t&&D){var u=t.x-t.nodeOffsetX+l.scrollX(),n=t.y-t.nodeOffsetY+l.scrollY();f.csstransforms3d?D.style.transform="translate3d("+u+"px, "+n+"px, 0px)":f.csstransforms?D.style.transform="translate("+u+"px, "+n+"px)":(D.style.top=n+"px",D.style.left=u+"px")}}var a=u(1),l=u(2),c=u(14),s=u(11),f=u(18),d=u(7),b=d.CLS,F=d.EV,p=u(15),A=p.getDragImage,g=p.DRAG_IMG_WIDTH,v=null,E=null,D=null;t.init=function(e){l.on(e,"mousedown",n)},t.destroy=function(e){l.off(e,"mousedown",n)}},function(e,t){e.exports=Modernizr},function(e,t,u){"use strict";function n(e){v.clear(e.currentTarget),A.bubbling(e.currentTarget)}function r(e){g.restore(e.currentTarget)}function o(e){var t=e.charCode||e.keyCode,u=e.key?1===e.key.length:(t>47||t===D.Space||t===D.Backspace)&&t!==D.Cmd;u&&e.currentTarget.fireInput()}function i(e){var t=e.charCode||e.keyCode,u=e.currentTarget;switch(t){case D.Enter:e.preventDefault(),u.hasAttribute("disable-controls")||(A.bubbling(u),g.restore(u));break;case D.Comma:case D.Semicolon:e.preventDefault(),A.bubbling(u),g.restore(u)}}function a(e){var t=e.charCode||e.keyCode,u=e.ctrlKey||e.metaKey,n=e.currentTarget,r=!n.hasAttribute("disable-controls");switch(t){case D.Esc:e.preventDefault(),A.bubbling(n),g.restore(n);break;case D.Backspace:e.preventDefault(),s(e);break;case D.Left:e.preventDefault(),l(e);break;case D.Top:if(e.preventDefault(),r){var o=p.headBubble(n);o&&v.uniq(o)}break;case D.Right:e.preventDefault(),c(e);break;case D.Bottom:e.preventDefault(),r&&v.has(n)&&g.restore(n);break;case D.a:u&&(e.preventDefault(),h.selectAll(null,e.currentTarget)||v.all(n))}}function l(e){var t=F.getSelection();if(!h.arrowLeft(t,e.shiftKey)){if(t.anchorNode&&t.anchorNode.nodeType===Node.TEXT_NODE){var u=p.prevBubble(t.anchorNode);return void(u&&v.uniq(u))}var n=e.currentTarget,r=v.get(n),o=r.length>1&&r[0]===n.startRangeSelect?r[r.length-1]:r[0],i=p.prevBubble(o);i&&(e.shiftKey?v.range(i):v.uniq(i))}}function c(e){var t=F.getSelection();if(!h.arrowRight(t,e.shiftKey)){if(t.focusNode&&t.focusNode.nodeType===Node.TEXT_NODE){var u=p.nextBubble(t.focusNode);return void(u&&v.uniq(u))}var n=e.currentTarget,r=v.get(n),o=r.length>1&&r[r.length-1]===n.startRangeSelect?r[0]:r[r.length-1],i=p.nextBubble(o);i?e.shiftKey?v.range(i):v.uniq(i):o&&o.nextSibling&&o.nextSibling.nodeType===Node.TEXT_NODE?(v.clear(n),t.collapse(o.nextSibling,0)):g.restore(n)}}function s(e){var t=e.currentTarget;t.normalize();var u=F.getSelection();if(u){if(!u.isCollapsed)return h.remove(u),void t.fireInput();if(h.arrowLeft(u,!0))return h.remove(u),void t.fireInput();var n=p.findBubbleLeft(u);if(n)return void v.uniq(n);var r=v.get(t);if(r.length){var o=r[0].previousSibling,i=r[r.length-1].nextSibling;r.forEach(function(e){return e.parentNode.removeChild(e)}),A.isBubbleNode(o)?v.uniq(o):A.isBubbleNode(i)?v.uniq(i):(t.focus(),g.restore(t)),t.fireChange()}}}function f(e){e.preventDefault();var t=e.clipboardData;if(t){var u="text/plain",n=t.getData&&t.getData(u);!h.replaceString(n)&&t.items&&Array.prototype.slice.call(t.items).filter(function(e){return"string"===e.kind&&e.type===u}).some(function(e){return e.getAsString(h.replaceString),!0})}}function d(e){var t=p.closestNodeSet(e.target),u=p.closestNodeBubble(e.target);t&&u&&(e.preventDefault(),A.edit(t,u))}function b(e){var t=p.closestNodeSet(e.target);if(t){var u=p.closestNodeBubble(e.target);if(u)e.metaKey||e.ctrlKey?v.add(u):e.shiftKey?t.startRangeSelect?v.range(u):v.uniq(u):v.toggleUniq(u);else{v.clear(t);var n=F.getSelection();n&&n.anchorNode&&n.anchorNode.nodeType===Node.TEXT_NODE||g.restore(t)}}}var F=u(1),p=u(11),A=u(9),g=u(20),v=u(14),E=u(7),D=E.KEY,h=u(8),B=u(2),C={blur:n,click:b,dblclick:d,focus:r,keydown:a,keypress:i,keyup:o,paste:f};t.init=function(e){B.on(e,C)},t.destroy=function(e){B.off(e,C)}},function(e,t,u){"use strict";function n(e){a.clear(e);var t=r(e),u=o.getSelection();u.removeAllRanges(),u.collapse(t,1)}function r(e){var t=i.createZws();if(e.hasChildNodes()){var u=e.childNodes[e.childNodes.length-1];u.isEqualNode(t)?t=u:e.appendChild(t)}else e.appendChild(t);return t}var o=u(1),i=u(8),a=u(14);t.restore=n,t.restoreBasis=r}]); //# sourceMappingURL=x-bubbles.min.js.map \ No newline at end of file diff --git a/docs/x-bubbles.min.js.map b/docs/x-bubbles.min.js.map index fddd94d..63ec8b4 100644 --- a/docs/x-bubbles.min.js.map +++ b/docs/x-bubbles.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///x-bubbles.min.js","webpack:///webpack/bootstrap d26fa7d2cc474e7640d2","webpack:///./index.js","webpack:///./context.js","webpack:///./core/events.js","webpack:///../~/raf/index.js","webpack:///../~/performance-now/lib/performance-now.js","webpack:///../~/process/browser.js","webpack:///./polyfills/CustomEventCommon.js","webpack:///./core/constant.js","webpack:///./core/text.js","webpack:///./core/bubble.js","webpack:///./core/utils.js","webpack:///./core/bubbleset.js","webpack:///./core/drag.js","webpack:///./core/drag/native.js","webpack:///./core/select.js","webpack:///./core/drag/common.js","webpack:///./core/drag/bubbles.png","webpack:///./core/drag/mouse.js","webpack:///../.modernizrrc","webpack:///./core/editor.js","webpack:///./core/cursor.js"],"names":["XBubbles","modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","optionsPrepare","options","name","OPTIONS","_OPTIONS$name","_slicedToArray","type","def","OPTIONS_PREPARE","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","length","err","Array","isArray","Object","TypeError","_typeof","obj","constructor","prototype","_extends","assign","target","arguments","source","key","hasOwnProperty","context","events","drag","editor","bubble","bubbleset","text","cursor","begining","bubbleDeformation","bubbleFormation","classBubble","draggable","ending","separator","create","HTMLDivElement","createdCallback","this","setAttribute","fireChange","throttle","fireEdit","fireInput","addEventListener","prevent","attachedCallback","init","bubbling","detachedCallback","destroy","_options","keys","reduce","result","item","dataset","items","get","getBubbles","setContent","data","firstChild","removeChild","html2text","appendChild","document","createTextNode","restore","addBubble","bubbleText","nodeBubble","text2bubble","removeBubble","contains","editBubble","edit","registerElement","extends","funk","Function","bool","noop","eval","_defineProperty","defineProperty","enumerable","configurable","writable","scrollX","html","documentElement","body","scrollLeft","clientLeft","scrollY","scrollTop","clientTop","dispatch","element","params","dispatchEvent","Custom","raf","CustomEventCommon","_require","EV","pageX","event","clientX","pageY","clientY","one","eventName","userCallback","callback","removeEventListener","on","off","cancelBubble","returnValue","stopPropagation","preventDefault","BUBBLE_EDIT","bubbles","cancelable","detail","CHANGE","textRange","currentTextRange","editText","textClean","toString","_bubbleValue","BUBBLE_INPUT","animationCallback","apply","CustomEvent","global","now","root","window","vendors","suffix","caf","last","queue","frameDuration","_now","Math","max","setTimeout","cp","slice","cancelled","e","round","handle","fn","cancel","polyfill","requestAnimationFrame","cancelAnimationFrame","process","getNanoSeconds","hrtime","loadTime","performance","hr","Date","getTime","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","nextTick","args","title","browser","env","argv","version","versions","addListener","once","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask","doc","protoEvent","Event","issetCustomEvent","Boolean","createEvent","stopImmediatePropagation","immediatePropagationStopped","evt","initCustomEvent","initEvent","KEY","a","Backspace","Bottom","Cmd","Comma","Enter","Esc","Left","Right","Semicolon","Space","Tab","Top","CLS","DRAGSTART","DROPZONE","nodeSet","selection","getSelection","range","removeAllRanges","addRange","replace","pointNode","focusNode","nodeType","Node","TEXT_NODE","anchorNode","createRange","startNode","endNode","previousSibling","nextSibling","setStartBefore","setEndAfter","remove","createZws","node","rangeCount","anchor","createElement","getRangeAt","surroundContents","parentNode","replaceChild","collapse","replaceString","textNode","nodeValue","arrowLeft","extend","_selectionCorrect","selectionCorrect","startOffset","endOffset","revert","isCollapsed","isNativeExtend","offset","substring","checkZws","setStart","setEnd","arrowRight","_selectionCorrect2","DOMContainer","implementation","createHTMLDocument","innerText","trim","selectAll","fromNode","toNode","hasBubbles","dataText","TEXT_ZWS","REG_ZWS","test","String","REG_REPLACE_NON_PRINTABLE","anchorOffset","focusOffset","min","position","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","isBubbleNode","ELEMENT_NODE","hasAttribute","rangeParams","textFake","insertBefore","canUseDrag","wrap","escape","classes","split","classList","add","ranges","getBubbleRanges","nodes","forEach","deleteContents","textParts","map","trimIterator","filter","nonEmptyIterator","parts","str","parseFragmentByEnding","parseFragmentByBeginning","fragment","createDocumentFragment","textPart","insertNode","children","childNodes","setEndBefore","reg","lastIndex","loop","exec","res","index","unescapeHtmlChar","chr","HTML_UNESCAPES","escapeHtmlChar","HTML_ESCAPES","&","<",">","\"","'","`","&","<",">",""","'","`","REG_ESCAPED_HTML","REG_UNESCAPED_HTML","REG_HAS_ESCAPED_HTML","RegExp","REG_HAS_UNESCAPED_HTML","REG_IE","unescape","navigator","userAgent","lastBubble","querySelector","headBubble","querySelectorAll","findBubbleLeft","DOCUMENT_POSITION_FOLLOWING","closestNodeSet","getAttribute","closestNodeBubble","prevBubble","nextBubble","native","mouse","onDragstart","currentDragSet","select","dataTransfer","effectAllowed","setData","list","setDragImage","getDragImage","DRAG_IMG_WIDTH","onDrop","focus","onDragover","dropEffect","onDragenter","onDragleave","onDragend","_require2","EVENTS","dragend","dragenter","dragleave","dragover","dragstart","drop","set","uniq","clear","headList","lastList","startRangeSelect","setSelected","all","PATH_NOT_SELECTED","PATH_SELECTED","has","head","removeAttribute","toggleUniq","isSelected","removeSelected","dragImage","Image","src","onMousedown","__drag__","onMouseup","bind","onMousemove","onScroll","nodeOffsetX","offsetLeft","nodeOffsetY","offsetTop","x","y","currentMoveSet","currentDragElement","dragSet","moveElement","cloneNode","style","cssText","Modernizr","csstransforms3d","transform","csstransforms","top","left","is","testRunner","featureNames","feature","aliasIdx","nameIdx","featureName","featureNameSplit","featureIdx","tests","toLowerCase","aliases","join","substr","indexOf","isSVG","createElementNS","getBody","fake","injectElementWithStyles","rule","testnames","ret","docOverflow","mod","div","parseInt","styleSheet","background","overflow","docElement","offsetHeight","domToCSS","m1","nativeTestProps","props","CSS","supports","conditionText","getComputedStyle","cssToDOM","m2","toUpperCase","testProps","prefixed","skipValueTest","cleanElems","afterInit","mStyle","modElem","propsLength","prop","before","elems","shift","fnBind","that","testDOMProps","elem","testPropsAll","ucProp","charAt","cssomPrefixes","testAllProps","ModernizrProto","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","cb","self","addTest","addAsyncTest","omPrefixes","_cssomPrefixes","nodeName","unshift","domPrefixes","_domPrefixes","testStyles","newSyntax","oldSyntax","usePrefix","mq","defaultStyle","offsetWidth","onBlur","currentTarget","onFocus","onKeyup","code","charCode","keyCode","isPrintableChar","onKeypress","onKeydown","metaKey","ctrlKey","enable","backSpace","shiftKey","begin","normalize","onPaste","clipboardData","contentType","getData","kind","some","getAsString","onDblclick","onClick","blur","click","dblclick","keydown","keypress","keyup","paste","basis","restoreBasis","fakeText","hasChildNodes","lastNode","isEqualNode"],"mappings":"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","file":"x-bubbles.min.js","sourcesContent":["var XBubbles =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar drag = __webpack_require__(12);\n\tvar editor = __webpack_require__(19);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\tvar text = __webpack_require__(8);\n\tvar cursor = __webpack_require__(20);\n\t\n\tvar OPTIONS = {\n\t begining: ['noop', null],\n\t bubbleDeformation: ['funk', function () {}],\n\t bubbleFormation: ['funk', function () {}],\n\t classBubble: ['noop', 'bubble'],\n\t draggable: ['bool', true],\n\t ending: ['noop', null], // /\\@ya\\.ru/g;\n\t separator: ['noop', /[,;]/]\n\t};\n\t\n\tvar XBubbles = Object.create(HTMLDivElement.prototype, {\n\t createdCallback: {\n\t value: function value() {\n\t this.setAttribute('contenteditable', 'true');\n\t this.setAttribute('spellcheck', 'false');\n\t\n\t this.fireChange = events.throttle(events.fireChange);\n\t this.fireEdit = events.throttle(events.fireEdit);\n\t this.fireInput = events.throttle(events.fireInput);\n\t\n\t this.addEventListener('resize', events.prevent);\n\t this.addEventListener('resizestart', events.prevent);\n\t this.addEventListener('mscontrolselect', events.prevent);\n\t }\n\t },\n\t\n\t attachedCallback: {\n\t value: function value() {\n\t drag.init(this);\n\t editor.init(this);\n\t bubble.bubbling(this);\n\t }\n\t },\n\t\n\t detachedCallback: {\n\t value: function value() {\n\t drag.destroy(this);\n\t editor.destroy(this);\n\t }\n\t },\n\t\n\t /*\n\t attributeChangedCallback: {\n\t value: function (name, prevValue, value) {}\n\t },\n\t */\n\t\n\t options: {\n\t value: function value(name, _value) {\n\t if (!this._options) {\n\t this._options = _extends({}, Object.keys(OPTIONS).reduce(function (result, item) {\n\t result[item] = undefined;\n\t return result;\n\t }, {}), this.dataset);\n\t\n\t optionsPrepare(this._options);\n\t }\n\t\n\t if (typeof _value !== 'undefined') {\n\t this._options[name] = _value;\n\t optionsPrepare(this._options);\n\t } else {\n\t return this._options[name];\n\t }\n\t }\n\t },\n\t\n\t items: {\n\t get: function get() {\n\t return bubbleset.getBubbles(this);\n\t }\n\t },\n\t\n\t setContent: {\n\t value: function value(data) {\n\t while (this.firstChild) {\n\t this.removeChild(this.firstChild);\n\t }\n\t\n\t data = text.html2text(data);\n\t this.appendChild(context.document.createTextNode(data));\n\t bubble.bubbling(this);\n\t cursor.restore(this);\n\t }\n\t },\n\t\n\t addBubble: {\n\t value: function value(bubbleText, data) {\n\t var nodeBubble = bubble.create(this, bubbleText, data);\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (text.text2bubble(this, nodeBubble)) {\n\t cursor.restore(this);\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t removeBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t this.removeChild(nodeBubble);\n\t this.fireChange();\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t editBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t return bubble.edit(this, nodeBubble);\n\t }\n\t\n\t return false;\n\t }\n\t }\n\t});\n\t\n\tmodule.exports = context.document.registerElement('x-bubbles', {\n\t extends: 'div',\n\t prototype: XBubbles\n\t});\n\t\n\tvar OPTIONS_PREPARE = {\n\t funk: function funk(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return new Function('context', 'return context.' + value + ';')(context);\n\t\n\t case 'function':\n\t return value;\n\t }\n\t },\n\t bool: function bool(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return value === 'true' || value === 'on';\n\t\n\t case 'boolean':\n\t return value;\n\t }\n\t },\n\t noop: function noop(value) {\n\t return value;\n\t }\n\t};\n\t\n\tfunction optionsPrepare(options) {\n\t for (var name in OPTIONS) {\n\t var _OPTIONS$name = _slicedToArray(OPTIONS[name], 2);\n\t\n\t var type = _OPTIONS$name[0];\n\t var def = _OPTIONS$name[1];\n\t\n\t options[name] = OPTIONS_PREPARE[type](options[name]);\n\t if (typeof options[name] === 'undefined') {\n\t options[name] = def;\n\t }\n\t }\n\t}\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t /* eslint no-eval: 0 */\n\t return this || (1, eval)('this');\n\t}();\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\t/**\n\t * @module x-bubbles/event\n\t */\n\t\n\tvar raf = __webpack_require__(3);\n\tvar context = __webpack_require__(1);\n\tvar CustomEventCommon = __webpack_require__(6);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar EV = _require.EV;\n\t\n\tvar text = __webpack_require__(8);\n\t\n\texports.scrollX = scrollX;\n\texports.scrollY = scrollY;\n\t\n\texports.pageX = function (event) {\n\t return event.pageX === null && event.clientX !== null ? event.clientX + scrollX() : event.pageX;\n\t};\n\t\n\texports.pageY = function (event) {\n\t return event.pageY === null && event.clientY !== null ? event.clientY + scrollY() : event.pageY;\n\t};\n\t\n\texports.one = function (target, eventName, userCallback) {\n\t return target.addEventListener(eventName, function callback(event) {\n\t target.removeEventListener(eventName, callback);\n\t userCallback(event);\n\t });\n\t};\n\t\n\texports.on = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.addEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.off = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.removeEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.prevent = function (event) {\n\t event.cancelBubble = true;\n\t event.returnValue = false;\n\t event.stopPropagation();\n\t event.preventDefault();\n\t return false;\n\t};\n\t\n\texports.fireEdit = function (nodeBubble) {\n\t dispatch(this, EV.BUBBLE_EDIT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: nodeBubble }\n\t });\n\t};\n\t\n\texports.fireChange = function () {\n\t dispatch(this, EV.CHANGE, {\n\t bubbles: false,\n\t cancelable: false\n\t });\n\t};\n\t\n\texports.fireInput = function () {\n\t var textRange = text.currentTextRange();\n\t var editText = textRange && text.textClean(textRange.toString()) || '';\n\t\n\t if (this._bubbleValue !== editText) {\n\t this._bubbleValue = editText;\n\t\n\t dispatch(this, EV.BUBBLE_INPUT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: editText }\n\t });\n\t }\n\t};\n\t\n\texports.throttle = function (callback) {\n\t var throttle = 0;\n\t var animationCallback = function animationCallback() {\n\t throttle = 0;\n\t };\n\t\n\t return function () {\n\t if (throttle) {\n\t return;\n\t }\n\t\n\t throttle = raf(animationCallback);\n\t\n\t callback.apply(this, arguments);\n\t };\n\t};\n\t\n\tfunction scrollX() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n\t}\n\t\n\tfunction scrollY() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n\t}\n\t\n\t/**\n\t * Designer events.\n\t *\n\t * @example\n\t * const { Custom } = require('event');\n\t *\n\t * new Custom('custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event~Custom\n\t * @constructor\n\t */\n\tvar Custom = function () {\n\t if (typeof context.CustomEvent === 'function') {\n\t return context.CustomEvent;\n\t }\n\t\n\t return CustomEventCommon;\n\t}();\n\t\n\t/**\n\t * Dispatch event.\n\t *\n\t * @example\n\t * const { dispatch } = require('event');\n\t * dispatch(node, 'custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event.dispatch\n\t * @param {HTMLElement} element node events\n\t * @param {string} name event name\n\t * @param {Object} params the event parameters\n\t * @param {boolean} [params.bubbles=false]\n\t * @param {boolean} [params.cancelable=false]\n\t * @param {*} [params.detail]\n\t */\n\tfunction dispatch(element, name) {\n\t var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t element.dispatchEvent(new Custom(name, params));\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var now = __webpack_require__(4)\n\t , root = typeof window === 'undefined' ? global : window\n\t , vendors = ['moz', 'webkit']\n\t , suffix = 'AnimationFrame'\n\t , raf = root['request' + suffix]\n\t , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\t\n\tfor(var i = 0; !raf && i < vendors.length; i++) {\n\t raf = root[vendors[i] + 'Request' + suffix]\n\t caf = root[vendors[i] + 'Cancel' + suffix]\n\t || root[vendors[i] + 'CancelRequest' + suffix]\n\t}\n\t\n\t// Some versions of FF have rAF but not cAF\n\tif(!raf || !caf) {\n\t var last = 0\n\t , id = 0\n\t , queue = []\n\t , frameDuration = 1000 / 60\n\t\n\t raf = function(callback) {\n\t if(queue.length === 0) {\n\t var _now = now()\n\t , next = Math.max(0, frameDuration - (_now - last))\n\t last = next + _now\n\t setTimeout(function() {\n\t var cp = queue.slice(0)\n\t // Clear queue here to prevent\n\t // callbacks from appending listeners\n\t // to the current frame's queue\n\t queue.length = 0\n\t for(var i = 0; i < cp.length; i++) {\n\t if(!cp[i].cancelled) {\n\t try{\n\t cp[i].callback(last)\n\t } catch(e) {\n\t setTimeout(function() { throw e }, 0)\n\t }\n\t }\n\t }\n\t }, Math.round(next))\n\t }\n\t queue.push({\n\t handle: ++id,\n\t callback: callback,\n\t cancelled: false\n\t })\n\t return id\n\t }\n\t\n\t caf = function(handle) {\n\t for(var i = 0; i < queue.length; i++) {\n\t if(queue[i].handle === handle) {\n\t queue[i].cancelled = true\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = function(fn) {\n\t // Wrap in a new function to prevent\n\t // `cancel` potentially being assigned\n\t // to the native rAF function\n\t return raf.call(root, fn)\n\t}\n\tmodule.exports.cancel = function() {\n\t caf.apply(root, arguments)\n\t}\n\tmodule.exports.polyfill = function() {\n\t root.requestAnimationFrame = raf\n\t root.cancelAnimationFrame = caf\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {// Generated by CoffeeScript 1.7.1\n\t(function() {\n\t var getNanoSeconds, hrtime, loadTime;\n\t\n\t if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n\t module.exports = function() {\n\t return performance.now();\n\t };\n\t } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n\t module.exports = function() {\n\t return (getNanoSeconds() - loadTime) / 1e6;\n\t };\n\t hrtime = process.hrtime;\n\t getNanoSeconds = function() {\n\t var hr;\n\t hr = hrtime();\n\t return hr[0] * 1e9 + hr[1];\n\t };\n\t loadTime = getNanoSeconds();\n\t } else if (Date.now) {\n\t module.exports = function() {\n\t return Date.now() - loadTime;\n\t };\n\t loadTime = Date.now();\n\t } else {\n\t module.exports = function() {\n\t return new Date().getTime() - loadTime;\n\t };\n\t loadTime = new Date().getTime();\n\t }\n\t\n\t}).call(this);\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/**\n\t * @constant {Document}\n\t * @private\n\t */\n\tvar doc = context.document;\n\t\n\t/**\n\t * @constant {Object}\n\t * @private\n\t */\n\tvar protoEvent = context.Event.prototype;\n\t\n\tvar issetCustomEvent = false;\n\t\n\ttry {\n\t issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n\t} catch (e) {}\n\t// do nothing\n\t\n\t\n\t/**\n\t * The original function \"stopImmediatePropagation\"\n\t * @constant {function}\n\t * @private\n\t */\n\tvar stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\t\n\t/**\n\t * Override function to set properties \"immediatePropagationStopped\"\n\t */\n\tprotoEvent.stopImmediatePropagation = function () {\n\t this.immediatePropagationStopped = true;\n\t\n\t if (stopImmediatePropagation) {\n\t stopImmediatePropagation.call(this);\n\t } else {\n\t this.stopPropagation();\n\t }\n\t};\n\t\n\tvar CustomEventCommon = function () {\n\t if (issetCustomEvent) {\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('CustomEvent');\n\t\n\t evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\t\n\t return evt;\n\t };\n\t }\n\t\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('Event');\n\t\n\t evt.initEvent(eventName, bubbles, cancelable);\n\t evt.detail = params.detail;\n\t\n\t return evt;\n\t };\n\t}();\n\t\n\tCustomEventCommon.prototype = protoEvent;\n\t\n\tmodule.exports = CustomEventCommon;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.KEY = {\n\t a: 65,\n\t Backspace: 8,\n\t Bottom: 40,\n\t Cmd: 91,\n\t Comma: 44, // ,\n\t Enter: 13, // Enter\n\t Esc: 27,\n\t Left: 37,\n\t Right: 39,\n\t Semicolon: 59, // ;\n\t Space: 32,\n\t Tab: 9,\n\t Top: 38\n\t};\n\t\n\texports.CLS = {\n\t DRAGSTART: 'drag',\n\t DROPZONE: 'dropzone'\n\t};\n\t\n\texports.EV = {\n\t BUBBLE_EDIT: 'bubble-edit',\n\t BUBBLE_INPUT: 'bubble-input',\n\t CHANGE: 'change'\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\t/* eslint-disable max-len */\n\tvar REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n\tvar REG_ZWS = /\\u200B/;\n\tvar TEXT_ZWS = '\\u200B';\n\t\n\texports.arrowRight = arrowRight;\n\texports.arrowLeft = arrowLeft;\n\texports.remove = remove;\n\texports.html2text = html2text;\n\texports.currentTextRange = currentTextRange;\n\texports.text2bubble = text2bubble;\n\texports.replaceString = replaceString;\n\texports.selectAll = selectAll;\n\texports.textClean = textClean;\n\texports.checkZws = checkZws;\n\texports.createZws = createZws;\n\t\n\tfunction text2bubble(nodeSet, nodeBubble, selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var range = currentTextRange(selection);\n\t\n\t if (range && !nodeBubble) {\n\t nodeBubble = bubble.create(nodeSet, range.toString());\n\t }\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (range) {\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t replace(selection, nodeBubble);\n\t } else {\n\t nodeSet.appendChild(nodeBubble);\n\t }\n\t\n\t nodeSet.fireInput();\n\t nodeSet.fireChange();\n\t return true;\n\t}\n\t\n\tfunction currentTextRange(selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t var pointNode = selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE ? selection.focusNode : selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE ? selection.anchorNode : undefined;\n\t\n\t if (!pointNode) {\n\t return;\n\t }\n\t\n\t var range = context.document.createRange();\n\t var startNode = pointNode;\n\t var endNode = pointNode;\n\t var item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t startNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t endNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t range.setStartBefore(startNode);\n\t range.setEndAfter(endNode);\n\t\n\t return range;\n\t}\n\t\n\tfunction remove(selection) {\n\t return replace(selection, createZws());\n\t}\n\t\n\tfunction replace(selection, node) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.rangeCount) {\n\t return false;\n\t }\n\t\n\t var anchor = context.document.createElement('span');\n\t selection.getRangeAt(0).surroundContents(anchor);\n\t anchor.parentNode.replaceChild(node, anchor);\n\t\n\t selection.removeAllRanges();\n\t selection.collapse(node, 0);\n\t\n\t return true;\n\t}\n\t\n\tfunction replaceString(data, selection) {\n\t data = textClean(data);\n\t if (!data) {\n\t return false;\n\t }\n\t\n\t selection = selection || context.getSelection();\n\t var textNode = context.document.createTextNode(data);\n\t\n\t if (!replace(selection, textNode)) {\n\t return false;\n\t }\n\t\n\t selection.collapse(textNode, textNode.nodeValue.length);\n\t return true;\n\t}\n\t\n\tfunction arrowLeft(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect.startNode;\n\t var endNode = _selectionCorrect.endNode;\n\t var startOffset = _selectionCorrect.startOffset;\n\t var endOffset = _selectionCorrect.endOffset;\n\t var revert = _selectionCorrect.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(startNode, startOffset);\n\t return true;\n\t }\n\t\n\t var isNativeExtend = Boolean(selection.extend);\n\t revert = isNativeExtend ? revert : !revert;\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t if (offset === null) {\n\t offset = node.nodeValue.length;\n\t }\n\t\n\t if (offset - 1 < 0) {\n\t node = node.previousSibling;\n\t offset = null;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset - 1, offset);\n\t\n\t if (checkZws(text)) {\n\t offset = offset - 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node || offset === null) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t if (isNativeExtend) {\n\t selection.extend(node, offset - 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset - 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset - 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset - 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction arrowRight(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.focusNode || selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect2 = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect2.startNode;\n\t var endNode = _selectionCorrect2.endNode;\n\t var startOffset = _selectionCorrect2.startOffset;\n\t var endOffset = _selectionCorrect2.endOffset;\n\t var revert = _selectionCorrect2.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(endNode, endOffset);\n\t return true;\n\t }\n\t\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var len = node.nodeValue.length;\n\t\n\t if (offset + 1 > len) {\n\t node = node.nextSibling;\n\t offset = 0;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset, offset + 1);\n\t\n\t if (checkZws(text)) {\n\t offset = offset + 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t var isNativeExtend = Boolean(selection.extend);\n\t\n\t if (isNativeExtend) {\n\t selection.extend(node, offset + 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset + 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset + 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset + 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction html2text(value) {\n\t if (!value) {\n\t return '';\n\t }\n\t\n\t var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n\t DOMContainer.innerText = value;\n\t\n\t return DOMContainer.innerText.replace(/^[\\u0020\\u00a0]+$/gm, '').replace(/\\n/gm, ' ').trim();\n\t}\n\t\n\tfunction selectAll(selection, nodeSet) {\n\t selection = selection || context.getSelection();\n\t var node = selection && selection.anchorNode;\n\t\n\t if (!node || node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t fromNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t toNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t var hasBubbles = bubbleset.hasBubbles(nodeSet);\n\t var range = context.document.createRange();\n\t range.setStartBefore(fromNode);\n\t range.setEndAfter(toNode);\n\t\n\t var dataText = textClean(range.toString());\n\t\n\t if (dataText || !dataText && !hasBubbles) {\n\t if (!dataText) {\n\t range.collapse();\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createZws() {\n\t return context.document.createTextNode(TEXT_ZWS);\n\t}\n\t\n\tfunction checkZws(value) {\n\t return REG_ZWS.test(value);\n\t}\n\t\n\tfunction textClean(value) {\n\t return String(value || '').trim().replace(REG_REPLACE_NON_PRINTABLE, '');\n\t}\n\t\n\tfunction selectionCorrect(selection) {\n\t var startNode = selection.anchorNode;\n\t var endNode = selection.focusNode;\n\t var startOffset = selection.anchorOffset;\n\t var endOffset = selection.focusOffset;\n\t var revert = false;\n\t\n\t if (startNode === endNode) {\n\t startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n\t endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n\t revert = selection.anchorOffset > selection.focusOffset;\n\t } else {\n\t var position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t startNode = selection.focusNode;\n\t startOffset = selection.focusOffset;\n\t endNode = selection.anchorNode;\n\t endOffset = selection.anchorOffset;\n\t revert = true;\n\t }\n\t }\n\t\n\t return { startNode: startNode, endNode: endNode, startOffset: startOffset, endOffset: endOffset, revert: revert };\n\t}\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar escape = _require.escape;\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.isBubbleNode = isBubbleNode;\n\texports.bubbling = bubbling;\n\texports.create = create;\n\texports.edit = edit;\n\t\n\tfunction isBubbleNode(node) {\n\t if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n\t return false;\n\t }\n\t\n\t return node.hasAttribute('bubble');\n\t}\n\t\n\tfunction edit(nodeSet, nodeBubble) {\n\t if (nodeBubble.hasAttribute('readonly')) {\n\t return false;\n\t }\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var bubbleDeformation = nodeSet.options('bubbleDeformation');\n\t var rangeParams = bubbleDeformation(nodeBubble);\n\t\n\t if (!rangeParams) {\n\t var dataText = text.textClean(nodeBubble.innerText);\n\t\n\t rangeParams = {\n\t text: dataText,\n\t startOffset: 0,\n\t endOffset: dataText.length\n\t };\n\t }\n\t\n\t var textFake = text.createZws();\n\t var textNode = context.document.createTextNode(rangeParams.text);\n\t\n\t nodeSet.fireEdit(nodeBubble);\n\t nodeSet.replaceChild(textNode, nodeBubble);\n\t nodeSet.insertBefore(textFake, textNode);\n\t\n\t var range = context.document.createRange();\n\t range.setStart(textNode, rangeParams.startOffset);\n\t range.setEnd(textNode, rangeParams.endOffset);\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t}\n\t\n\tfunction create(nodeSet, dataText) {\n\t var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t dataText = text.textClean(dataText);\n\t\n\t if (!dataText) {\n\t return;\n\t }\n\t\n\t var bubbleFormation = nodeSet.options('bubbleFormation');\n\t var classBubble = nodeSet.options('classBubble');\n\t var draggable = canUseDrag() && nodeSet.options('draggable');\n\t var wrap = context.document.createElement('span');\n\t\n\t wrap.innerText = dataText;\n\t\n\t if (draggable) {\n\t wrap.setAttribute('draggable', 'true');\n\t }\n\t\n\t for (var key in data) {\n\t if (data[key]) {\n\t wrap.setAttribute('data-' + key, escape(data[key]));\n\t }\n\t }\n\t\n\t bubbleFormation(wrap);\n\t\n\t if (classBubble) {\n\t var classes = String(classBubble).trim().split(/\\s+/);\n\t var len = classes.length;\n\t\n\t while (len--) {\n\t wrap.classList.add(classes[len]);\n\t }\n\t }\n\t\n\t wrap.setAttribute('bubble', '');\n\t wrap.setAttribute('contenteditable', 'false');\n\t\n\t return wrap;\n\t}\n\t\n\tfunction bubbling(nodeSet) {\n\t var separator = nodeSet.options('separator');\n\t var ending = nodeSet.options('ending');\n\t var begining = nodeSet.options('begining');\n\t var ranges = getBubbleRanges(nodeSet);\n\t var nodes = [];\n\t\n\t ranges.forEach(function (range) {\n\t var dataText = text.textClean(range.toString());\n\t\n\t if (!dataText) {\n\t range.deleteContents();\n\t return;\n\t }\n\t\n\t var textParts = [dataText];\n\t\n\t if (separator) {\n\t textParts = dataText.split(separator).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (ending) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByEnding(str, ending));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t } else if (begining) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByBeginning(str, begining));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (!textParts.length) {\n\t range.deleteContents();\n\t }\n\t\n\t var fragment = context.document.createDocumentFragment();\n\t\n\t textParts.forEach(function (textPart) {\n\t var nodeBubble = create(nodeSet, textPart);\n\t if (nodeBubble) {\n\t fragment.appendChild(nodeBubble);\n\t nodes.push(nodeBubble);\n\t }\n\t });\n\t\n\t range.deleteContents();\n\t range.insertNode(fragment);\n\t });\n\t\n\t nodeSet.fireInput();\n\t\n\t if (nodes.length) {\n\t nodeSet.fireChange();\n\t }\n\t\n\t return nodes;\n\t}\n\t\n\tfunction getBubbleRanges(nodeSet) {\n\t var ranges = [];\n\t var children = nodeSet.childNodes;\n\t var range = void 0;\n\t var node = void 0;\n\t\n\t for (var i = 0; i < children.length; i++) {\n\t node = children[i];\n\t\n\t if (isBubbleNode(node)) {\n\t if (range) {\n\t range.setEndBefore(node);\n\t ranges.push(range);\n\t range = undefined;\n\t }\n\t } else {\n\t if (!range) {\n\t range = context.document.createRange();\n\t range.setStartBefore(node);\n\t }\n\t }\n\t }\n\t\n\t if (range) {\n\t range.setEndAfter(node);\n\t ranges.push(range);\n\t }\n\t\n\t return ranges;\n\t}\n\t\n\tfunction trimIterator(str) {\n\t return str.trim();\n\t}\n\t\n\tfunction nonEmptyIterator(str) {\n\t return Boolean(str);\n\t}\n\t\n\tfunction parseFragmentByEnding(str, reg) {\n\t var parts = [];\n\t var lastIndex = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while (reg.exec(str) !== null && loop) {\n\t loop--;\n\t parts.push(str.substring(lastIndex, reg.lastIndex));\n\t lastIndex = reg.lastIndex;\n\t }\n\t\n\t return parts;\n\t}\n\t\n\tfunction parseFragmentByBeginning(str, reg) {\n\t var parts = [];\n\t var res = void 0;\n\t var index = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while ((res = reg.exec(str)) !== null && loop) {\n\t loop--;\n\t if (index !== res.index) {\n\t parts.push(str.substring(index, res.index));\n\t index = res.index;\n\t }\n\t }\n\t\n\t parts.push(str.substring(index, str.length));\n\t return parts;\n\t}\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/* eslint quotes: 0 */\n\t\n\tvar HTML_ESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`'\n\t};\n\t\n\tvar HTML_UNESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '"': '\"',\n\t ''': \"'\",\n\t '`': '`'\n\t};\n\t\n\tvar REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\n\tvar REG_UNESCAPED_HTML = /[&<>\"'`]/g;\n\tvar REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\n\tvar REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\n\tvar REG_IE = /Trident|Edge/;\n\t\n\texports.escape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n\t return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.unescape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n\t return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.canUseDrag = function () {\n\t return !REG_IE.test(context.navigator.userAgent);\n\t};\n\t\n\tfunction unescapeHtmlChar(chr) {\n\t return HTML_UNESCAPES[chr];\n\t}\n\t\n\tfunction escapeHtmlChar(chr) {\n\t return HTML_ESCAPES[chr];\n\t}\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bubble = __webpack_require__(9);\n\tvar text = __webpack_require__(8);\n\t\n\texports.closestNodeBubble = closestNodeBubble;\n\texports.closestNodeSet = closestNodeSet;\n\texports.findBubbleLeft = findBubbleLeft;\n\texports.getBubbles = getBubbles;\n\texports.hasBubbles = hasBubbles;\n\texports.headBubble = headBubble;\n\texports.lastBubble = lastBubble;\n\texports.nextBubble = nextBubble;\n\texports.prevBubble = prevBubble;\n\t\n\tfunction lastBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:last-child');\n\t}\n\t\n\tfunction headBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:first-child');\n\t}\n\t\n\tfunction getBubbles(nodeSet) {\n\t return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n\t}\n\t\n\tfunction hasBubbles(nodeSet) {\n\t return Boolean(nodeSet.querySelector('[bubble]'));\n\t}\n\t\n\tfunction findBubbleLeft(selection) {\n\t if (!selection.focusNode || !selection.anchorNode) {\n\t return;\n\t }\n\t\n\t var node = selection.focusNode.previousSibling;\n\t\n\t if (selection.anchorNode !== selection.focusNode && selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t node = selection.anchorNode.previousSibling;\n\t }\n\t\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n\t return;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction closestNodeSet(node) {\n\t while (node) {\n\t if (node.nodeType === Node.ELEMENT_NODE && node.getAttribute('is') === 'x-bubbles') {\n\t\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction closestNodeBubble(node) {\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction prevBubble(target) {\n\t var node = target && target.previousSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction nextBubble(target) {\n\t var node = target && target.nextSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.nextSibling;\n\t }\n\t}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar native = __webpack_require__(13);\n\tvar mouse = __webpack_require__(17);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.init = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.init(nodeSet);\n\t }\n\t\n\t return mouse.init(nodeSet);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.destroy(nodeSet);\n\t }\n\t\n\t return mouse.destroy(nodeSet);\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar events = __webpack_require__(2);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar EVENTS = {\n\t dragend: onDragend,\n\t dragenter: onDragenter,\n\t dragleave: onDragleave,\n\t dragover: onDragover,\n\t dragstart: onDragstart,\n\t drop: onDrop\n\t};\n\t\n\tvar currentDragSet = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onDragstart(event) {\n\t event.stopPropagation();\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (!nodeSet || !nodeBubble) {\n\t event.preventDefault();\n\t return;\n\t }\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = nodeSet;\n\t nodeSet.classList.add(CLS.DRAGSTART);\n\t select.add(nodeBubble);\n\t\n\t event.dataTransfer.effectAllowed = 'move';\n\t event.dataTransfer.setData('text/plain', '');\n\t\n\t var list = select.get(currentDragSet);\n\t if (list.length > 1) {\n\t event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n\t }\n\t}\n\t\n\tfunction onDrop(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet || nodeSet === currentDragSet) {\n\t return;\n\t }\n\t\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t}\n\t\n\tfunction onDragover(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t event.dataTransfer.dropEffect = 'move';\n\t}\n\t\n\tfunction onDragenter(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragleave(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragend(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t currentDragSet.classList.remove(CLS.DRAGSTART);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t\n\t currentDragSet = null;\n\t}\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\tvar slice = Array.prototype.slice;\n\tvar PATH_SELECTED = '[bubble][selected]';\n\tvar PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\t\n\texports.all = all;\n\texports.add = add;\n\texports.clear = clear;\n\texports.get = get;\n\texports.uniq = uniq;\n\texports.head = head;\n\texports.last = last;\n\texports.has = has;\n\texports.range = range;\n\texports.toggleUniq = toggleUniq;\n\t\n\tfunction range(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return;\n\t }\n\t\n\t var set = node.parentNode;\n\t var list = get(set);\n\t\n\t if (!list.length) {\n\t uniq(node);\n\t return;\n\t }\n\t\n\t clear(set);\n\t\n\t var headList = list[0];\n\t var lastList = list[list.length - 1];\n\t\n\t if (headList === lastList || !set.startRangeSelect) {\n\t set.startRangeSelect = headList;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var position = node.compareDocumentPosition(set.startRangeSelect);\n\t\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t fromNode = set.startRangeSelect;\n\t toNode = node;\n\t } else {\n\t fromNode = node;\n\t toNode = set.startRangeSelect;\n\t }\n\t\n\t if (fromNode && toNode) {\n\t var item = fromNode;\n\t\n\t while (item) {\n\t if (!setSelected(item)) {\n\t break;\n\t }\n\t\n\t if (item === toNode) {\n\t break;\n\t }\n\t\n\t item = item.nextSibling;\n\t }\n\t\n\t bubble.bubbling(set);\n\t }\n\t}\n\t\n\tfunction all(nodeSet) {\n\t slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(function (item) {\n\t return setSelected(item);\n\t });\n\t nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\t\n\t bubble.bubbling(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t}\n\t\n\tfunction has(nodeSet) {\n\t return Boolean(nodeSet.querySelector(PATH_SELECTED));\n\t}\n\t\n\tfunction head(set) {\n\t return get(set)[0];\n\t}\n\t\n\tfunction last(set) {\n\t var list = get(set);\n\t return list[list.length - 1];\n\t}\n\t\n\tfunction get(nodeSet) {\n\t return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n\t}\n\t\n\tfunction clear(nodeSet) {\n\t get(nodeSet).forEach(function (item) {\n\t return item.removeAttribute('selected');\n\t });\n\t}\n\t\n\tfunction add(node) {\n\t if (setSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t nodeSet.startRangeSelect = node;\n\t // ???\n\t bubble.bubbling(nodeSet);\n\t\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction uniq(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return false;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t var selection = context.getSelection();\n\t\n\t selection && selection.removeAllRanges();\n\t clear(nodeSet);\n\t\n\t return add(node);\n\t}\n\t\n\tfunction toggleUniq(node) {\n\t if (isSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t if (get(nodeSet).length === 1) {\n\t return removeSelected(node);\n\t }\n\t }\n\t\n\t return uniq(node);\n\t}\n\t\n\tfunction isSelected(node) {\n\t return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n\t}\n\t\n\tfunction setSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.setAttribute('selected', '');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction removeSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.removeAttribute('selected');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar DRAG_IMG_WIDTH = 16;\n\t\n\tvar dragImage = null;\n\t\n\texports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\t\n\texports.getDragImage = function () {\n\t if (!dragImage) {\n\t dragImage = new Image();\n\t dragImage.src = __webpack_require__(16);\n\t }\n\t\n\t return dragImage;\n\t};\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar Modernizr = __webpack_require__(18);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar currentDragSet = null;\n\tvar currentMoveSet = null;\n\tvar currentDragElement = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\tfunction onMousedown(event) {\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t if (!nodeBubble) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t event.preventDefault();\n\t nodeSet.focus();\n\t\n\t var drag = nodeSet.__drag__ = {\n\t onMouseup: onMouseup.bind(this, nodeSet),\n\t onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n\t onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n\t nodeOffsetX: events.pageX(event) - nodeBubble.offsetLeft,\n\t nodeOffsetY: events.pageY(event) - nodeBubble.offsetTop,\n\t x: 0,\n\t y: 0\n\t };\n\t\n\t currentDragSet = null;\n\t currentMoveSet = null;\n\t currentDragElement = null;\n\t\n\t events.one(document, 'mouseup', drag.onMouseup);\n\t events.on(document, 'mousemove', drag.onMousemove);\n\t events.on(document, 'scroll', drag.onScroll);\n\t}\n\t\n\tfunction onMouseup(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t events.off(document, 'mousemove', drag.onMousemove);\n\t events.off(document, 'scroll', drag.onScroll);\n\t delete dragSet.__drag__;\n\t\n\t if (currentDragElement) {\n\t currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n\t currentDragElement = null;\n\t }\n\t\n\t if (currentMoveSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t currentMoveSet = null;\n\t }\n\t\n\t if (currentDragSet) {\n\t (function () {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t }\n\t\n\t currentDragSet.classList.remove(CLS.DRAGSTART);\n\t currentDragSet = null;\n\t })();\n\t }\n\t}\n\t\n\tfunction onMousemove(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t if (!currentDragSet) {\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = dragSet;\n\t currentDragSet.classList.add(CLS.DRAGSTART);\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t var moveElement = void 0;\n\t\n\t if (nodeBubble) {\n\t select.add(nodeBubble);\n\t if (select.get(currentDragSet).length === 1) {\n\t moveElement = nodeBubble.cloneNode(true);\n\t }\n\t }\n\t\n\t if (!moveElement) {\n\t moveElement = getDragImage();\n\t drag.nodeOffsetX = DRAG_IMG_WIDTH;\n\t drag.nodeOffsetY = DRAG_IMG_WIDTH;\n\t }\n\t\n\t currentDragElement = document.body.appendChild(document.createElement('div'));\n\t currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n\t currentDragElement.appendChild(moveElement);\n\t }\n\t\n\t drag.x = event.clientX;\n\t drag.y = event.clientY;\n\t onScroll(dragSet);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t if (currentMoveSet && currentMoveSet !== nodeSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t } else if (!currentMoveSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t }\n\t } else if (currentMoveSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t currentMoveSet = null;\n\t }\n\t}\n\t\n\tfunction onScroll(dragSet) {\n\t var drag = dragSet.__drag__;\n\t if (!drag || !currentDragElement) {\n\t return;\n\t }\n\t\n\t var x = drag.x - drag.nodeOffsetX + events.scrollX();\n\t var y = drag.y - drag.nodeOffsetY + events.scrollY();\n\t\n\t if (Modernizr.csstransforms3d) {\n\t currentDragElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n\t } else if (Modernizr.csstransforms) {\n\t currentDragElement.style.transform = 'translate(' + x + 'px, ' + y + 'px)';\n\t } else {\n\t currentDragElement.style.top = y + 'px';\n\t currentDragElement.style.left = x + 'px';\n\t }\n\t}\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t;(function(window){\n\t/*!\n\t * modernizr v3.3.1\n\t * Build http://modernizr.com/download?-csstransforms-csstransforms3d-dontmin\n\t *\n\t * Copyright (c)\n\t * Faruk Ates\n\t * Paul Irish\n\t * Alex Sexton\n\t * Ryan Seddon\n\t * Patrick Kettner\n\t * Stu Cox\n\t * Richard Herrera\n\t\n\t * MIT License\n\t */\n\t\n\t/*\n\t * Modernizr tests which native CSS3 and HTML5 features are available in the\n\t * current UA and makes the results available to you in two ways: as properties on\n\t * a global `Modernizr` object, and as classes on the `` element. This\n\t * information allows you to progressively enhance your pages with a granular level\n\t * of control over the experience.\n\t*/\n\t\n\t;(function(window, document, undefined){\n\t var tests = [];\n\t \n\t\n\t /**\n\t *\n\t * ModernizrProto is the constructor for Modernizr\n\t *\n\t * @class\n\t * @access public\n\t */\n\t\n\t var ModernizrProto = {\n\t // The current version, dummy\n\t _version: '3.3.1',\n\t\n\t // Any settings that don't work as separate modules\n\t // can go in here as configuration.\n\t _config: {\n\t 'classPrefix': '',\n\t 'enableClasses': true,\n\t 'enableJSClass': true,\n\t 'usePrefixes': true\n\t },\n\t\n\t // Queue of tests\n\t _q: [],\n\t\n\t // Stub these for people who are listening\n\t on: function(test, cb) {\n\t // I don't really think people should do this, but we can\n\t // safe guard it a bit.\n\t // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n\t // This is in case people listen to synchronous tests. I would leave it out,\n\t // but the code to *disallow* sync tests in the real version of this\n\t // function is actually larger than this.\n\t var self = this;\n\t setTimeout(function() {\n\t cb(self[test]);\n\t }, 0);\n\t },\n\t\n\t addTest: function(name, fn, options) {\n\t tests.push({name: name, fn: fn, options: options});\n\t },\n\t\n\t addAsyncTest: function(fn) {\n\t tests.push({name: null, fn: fn});\n\t }\n\t };\n\t\n\t \n\t\n\t // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n\t var Modernizr = function() {};\n\t Modernizr.prototype = ModernizrProto;\n\t\n\t // Leak modernizr globally when you `require` it rather than force it here.\n\t // Overwrite name so constructor name is nicer :D\n\t Modernizr = new Modernizr();\n\t\n\t \n\t\n\t var classes = [];\n\t \n\t\n\t /**\n\t * is returns a boolean if the typeof an obj is exactly type.\n\t *\n\t * @access private\n\t * @function is\n\t * @param {*} obj - A thing we want to check the type of\n\t * @param {string} type - A string to compare the typeof against\n\t * @returns {boolean}\n\t */\n\t\n\t function is(obj, type) {\n\t return typeof obj === type;\n\t }\n\t ;\n\t\n\t /**\n\t * Run through all tests and detect their support in the current UA.\n\t *\n\t * @access private\n\t */\n\t\n\t function testRunner() {\n\t var featureNames;\n\t var feature;\n\t var aliasIdx;\n\t var result;\n\t var nameIdx;\n\t var featureName;\n\t var featureNameSplit;\n\t\n\t for (var featureIdx in tests) {\n\t if (tests.hasOwnProperty(featureIdx)) {\n\t featureNames = [];\n\t feature = tests[featureIdx];\n\t // run the test, throw the return value into the Modernizr,\n\t // then based on that boolean, define an appropriate className\n\t // and push it into an array of classes we'll join later.\n\t //\n\t // If there is no name, it's an 'async' test that is run,\n\t // but not directly added to the object. That should\n\t // be done with a post-run addTest call.\n\t if (feature.name) {\n\t featureNames.push(feature.name.toLowerCase());\n\t\n\t if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n\t // Add all the aliases into the names list\n\t for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n\t featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n\t }\n\t }\n\t }\n\t\n\t // Run the test, or use the raw value if it's not a function\n\t result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\t\n\t\n\t // Set each of the names on the Modernizr object\n\t for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n\t featureName = featureNames[nameIdx];\n\t // Support dot properties as sub tests. We don't do checking to make sure\n\t // that the implied parent tests have been added. You must call them in\n\t // order (either in the test, or make the parent test a dependency).\n\t //\n\t // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n\t // hashtag famous last words\n\t featureNameSplit = featureName.split('.');\n\t\n\t if (featureNameSplit.length === 1) {\n\t Modernizr[featureNameSplit[0]] = result;\n\t } else {\n\t // cast to a Boolean, if not one already\n\t /* jshint -W053 */\n\t if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n\t Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n\t }\n\t\n\t Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n\t }\n\t\n\t classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n\t }\n\t }\n\t }\n\t }\n\t ;\n\t\n\t /**\n\t * If the browsers follow the spec, then they would expose vendor-specific style as:\n\t * elem.style.WebkitBorderRadius\n\t * instead of something like the following, which would be technically incorrect:\n\t * elem.style.webkitBorderRadius\n\t\n\t * Webkit ghosts their properties in lowercase but Opera & Moz do not.\n\t * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n\t * erik.eae.net/archives/2008/03/10/21.48.10/\n\t\n\t * More here: github.com/Modernizr/Modernizr/issues/issue/21\n\t *\n\t * @access private\n\t * @returns {string} The string representing the vendor-specific style properties\n\t */\n\t\n\t var omPrefixes = 'Moz O ms Webkit';\n\t \n\t\n\t var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n\t ModernizrProto._cssomPrefixes = cssomPrefixes;\n\t \n\t\n\t\n\t /**\n\t * contains checks to see if a string contains another string\n\t *\n\t * @access private\n\t * @function contains\n\t * @param {string} str - The string we want to check for substrings\n\t * @param {string} substr - The substring we want to search the first string for\n\t * @returns {boolean}\n\t */\n\t\n\t function contains(str, substr) {\n\t return !!~('' + str).indexOf(substr);\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * docElement is a convenience wrapper to grab the root element of the document\n\t *\n\t * @access private\n\t * @returns {HTMLElement|SVGElement} The root element of the document\n\t */\n\t\n\t var docElement = document.documentElement;\n\t \n\t\n\t /**\n\t * A convenience helper to check if the document we are running in is an SVG document\n\t *\n\t * @access private\n\t * @returns {boolean}\n\t */\n\t\n\t var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n\t \n\t\n\t /**\n\t * createElement is a convenience wrapper around document.createElement. Since we\n\t * use createElement all over the place, this allows for (slightly) smaller code\n\t * as well as abstracting away issues with creating elements in contexts other than\n\t * HTML documents (e.g. SVG documents).\n\t *\n\t * @access private\n\t * @function createElement\n\t * @returns {HTMLElement|SVGElement} An HTML or SVG element\n\t */\n\t\n\t function createElement() {\n\t if (typeof document.createElement !== 'function') {\n\t // This is the case in IE7, where the type of createElement is \"object\".\n\t // For this reason, we cannot call apply() as Object is not a Function.\n\t return document.createElement(arguments[0]);\n\t } else if (isSVG) {\n\t return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n\t } else {\n\t return document.createElement.apply(document, arguments);\n\t }\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * Create our \"modernizr\" element that we do most feature tests on.\n\t *\n\t * @access private\n\t */\n\t\n\t var modElem = {\n\t elem: createElement('modernizr')\n\t };\n\t\n\t // Clean up this element\n\t Modernizr._q.push(function() {\n\t delete modElem.elem;\n\t });\n\t\n\t \n\t\n\t var mStyle = {\n\t style: modElem.elem.style\n\t };\n\t\n\t // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n\t // the front of the queue.\n\t Modernizr._q.unshift(function() {\n\t delete mStyle.style;\n\t });\n\t\n\t \n\t\n\t /**\n\t * getBody returns the body of a document, or an element that can stand in for\n\t * the body if a real body does not exist\n\t *\n\t * @access private\n\t * @function getBody\n\t * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n\t * artificially created element that stands in for the body\n\t */\n\t\n\t function getBody() {\n\t // After page load injecting a fake body doesn't work so check if body exists\n\t var body = document.body;\n\t\n\t if (!body) {\n\t // Can't use the real body create a fake one.\n\t body = createElement(isSVG ? 'svg' : 'body');\n\t body.fake = true;\n\t }\n\t\n\t return body;\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * injectElementWithStyles injects an element with style element and some CSS rules\n\t *\n\t * @access private\n\t * @function injectElementWithStyles\n\t * @param {string} rule - String representing a css rule\n\t * @param {function} callback - A function that is used to test the injected element\n\t * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n\t * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n\t * @returns {boolean}\n\t */\n\t\n\t function injectElementWithStyles(rule, callback, nodes, testnames) {\n\t var mod = 'modernizr';\n\t var style;\n\t var ret;\n\t var node;\n\t var docOverflow;\n\t var div = createElement('div');\n\t var body = getBody();\n\t\n\t if (parseInt(nodes, 10)) {\n\t // In order not to give false positives we create a node for each test\n\t // This also allows the method to scale for unspecified uses\n\t while (nodes--) {\n\t node = createElement('div');\n\t node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n\t div.appendChild(node);\n\t }\n\t }\n\t\n\t style = createElement('style');\n\t style.type = 'text/css';\n\t style.id = 's' + mod;\n\t\n\t // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n\t // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n\t (!body.fake ? div : body).appendChild(style);\n\t body.appendChild(div);\n\t\n\t if (style.styleSheet) {\n\t style.styleSheet.cssText = rule;\n\t } else {\n\t style.appendChild(document.createTextNode(rule));\n\t }\n\t div.id = mod;\n\t\n\t if (body.fake) {\n\t //avoid crashing IE8, if background image is used\n\t body.style.background = '';\n\t //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n\t body.style.overflow = 'hidden';\n\t docOverflow = docElement.style.overflow;\n\t docElement.style.overflow = 'hidden';\n\t docElement.appendChild(body);\n\t }\n\t\n\t ret = callback(div, rule);\n\t // If this is done after page load we don't want to remove the body so check if body exists\n\t if (body.fake) {\n\t body.parentNode.removeChild(body);\n\t docElement.style.overflow = docOverflow;\n\t // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n\t docElement.offsetHeight;\n\t } else {\n\t div.parentNode.removeChild(div);\n\t }\n\t\n\t return !!ret;\n\t\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * domToCSS takes a camelCase string and converts it to kebab-case\n\t * e.g. boxSizing -> box-sizing\n\t *\n\t * @access private\n\t * @function domToCSS\n\t * @param {string} name - String name of camelCase prop we want to convert\n\t * @returns {string} The kebab-case version of the supplied name\n\t */\n\t\n\t function domToCSS(name) {\n\t return name.replace(/([A-Z])/g, function(str, m1) {\n\t return '-' + m1.toLowerCase();\n\t }).replace(/^ms-/, '-ms-');\n\t }\n\t ;\n\t\n\t /**\n\t * nativeTestProps allows for us to use native feature detection functionality if available.\n\t * some prefixed form, or false, in the case of an unsupported rule\n\t *\n\t * @access private\n\t * @function nativeTestProps\n\t * @param {array} props - An array of property names\n\t * @param {string} value - A string representing the value we want to check via @supports\n\t * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n\t */\n\t\n\t // Accepts a list of property names and a single value\n\t // Returns `undefined` if native detection not available\n\t function nativeTestProps(props, value) {\n\t var i = props.length;\n\t // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface\n\t if ('CSS' in window && 'supports' in window.CSS) {\n\t // Try every prefixed variant of the property\n\t while (i--) {\n\t if (window.CSS.supports(domToCSS(props[i]), value)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t }\n\t // Otherwise fall back to at-rule (for Opera 12.x)\n\t else if ('CSSSupportsRule' in window) {\n\t // Build a condition string for every prefixed variant\n\t var conditionText = [];\n\t while (i--) {\n\t conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n\t }\n\t conditionText = conditionText.join(' or ');\n\t return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n\t return getComputedStyle(node, null).position == 'absolute';\n\t });\n\t }\n\t return undefined;\n\t }\n\t ;\n\t\n\t /**\n\t * cssToDOM takes a kebab-case string and converts it to camelCase\n\t * e.g. box-sizing -> boxSizing\n\t *\n\t * @access private\n\t * @function cssToDOM\n\t * @param {string} name - String name of kebab-case prop we want to convert\n\t * @returns {string} The camelCase version of the supplied name\n\t */\n\t\n\t function cssToDOM(name) {\n\t return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n\t return m1 + m2.toUpperCase();\n\t }).replace(/^-/, '');\n\t }\n\t ;\n\t\n\t // testProps is a generic CSS / DOM property test.\n\t\n\t // In testing support for a given CSS property, it's legit to test:\n\t // `elem.style[styleName] !== undefined`\n\t // If the property is supported it will return an empty string,\n\t // if unsupported it will return undefined.\n\t\n\t // We'll take advantage of this quick test and skip setting a style\n\t // on our modernizr element, but instead just testing undefined vs\n\t // empty string.\n\t\n\t // Property names can be provided in either camelCase or kebab-case.\n\t\n\t function testProps(props, prefixed, value, skipValueTest) {\n\t skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\t\n\t // Try native detect first\n\t if (!is(value, 'undefined')) {\n\t var result = nativeTestProps(props, value);\n\t if (!is(result, 'undefined')) {\n\t return result;\n\t }\n\t }\n\t\n\t // Otherwise do it properly\n\t var afterInit, i, propsLength, prop, before;\n\t\n\t // If we don't have a style element, that means we're running async or after\n\t // the core tests, so we'll need to create our own elements to use\n\t\n\t // inside of an SVG element, in certain browsers, the `style` element is only\n\t // defined for valid tags. Therefore, if `modernizr` does not have one, we\n\t // fall back to a less used element and hope for the best.\n\t var elems = ['modernizr', 'tspan'];\n\t while (!mStyle.style) {\n\t afterInit = true;\n\t mStyle.modElem = createElement(elems.shift());\n\t mStyle.style = mStyle.modElem.style;\n\t }\n\t\n\t // Delete the objects if we created them.\n\t function cleanElems() {\n\t if (afterInit) {\n\t delete mStyle.style;\n\t delete mStyle.modElem;\n\t }\n\t }\n\t\n\t propsLength = props.length;\n\t for (i = 0; i < propsLength; i++) {\n\t prop = props[i];\n\t before = mStyle.style[prop];\n\t\n\t if (contains(prop, '-')) {\n\t prop = cssToDOM(prop);\n\t }\n\t\n\t if (mStyle.style[prop] !== undefined) {\n\t\n\t // If value to test has been passed in, do a set-and-check test.\n\t // 0 (integer) is a valid property value, so check that `value` isn't\n\t // undefined, rather than just checking it's truthy.\n\t if (!skipValueTest && !is(value, 'undefined')) {\n\t\n\t // Needs a try catch block because of old IE. This is slow, but will\n\t // be avoided in most cases because `skipValueTest` will be used.\n\t try {\n\t mStyle.style[prop] = value;\n\t } catch (e) {}\n\t\n\t // If the property value has changed, we assume the value used is\n\t // supported. If `value` is empty string, it'll fail here (because\n\t // it hasn't changed), which matches how browsers have implemented\n\t // CSS.supports()\n\t if (mStyle.style[prop] != before) {\n\t cleanElems();\n\t return prefixed == 'pfx' ? prop : true;\n\t }\n\t }\n\t // Otherwise just return true, or the property name if this is a\n\t // `prefixed()` call\n\t else {\n\t cleanElems();\n\t return prefixed == 'pfx' ? prop : true;\n\t }\n\t }\n\t }\n\t cleanElems();\n\t return false;\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * List of JavaScript DOM values used for tests\n\t *\n\t * @memberof Modernizr\n\t * @name Modernizr._domPrefixes\n\t * @optionName Modernizr._domPrefixes\n\t * @optionProp domPrefixes\n\t * @access public\n\t * @example\n\t *\n\t * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather\n\t * than kebab-case properties, all properties are their Capitalized variant\n\t *\n\t * ```js\n\t * Modernizr._domPrefixes === [ \"Moz\", \"O\", \"ms\", \"Webkit\" ];\n\t * ```\n\t */\n\t\n\t var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);\n\t ModernizrProto._domPrefixes = domPrefixes;\n\t \n\t\n\t /**\n\t * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n\t *\n\t * @access private\n\t * @function fnBind\n\t * @param {function} fn - a function you want to change `this` reference to\n\t * @param {object} that - the `this` you want to call the function with\n\t * @returns {function} The wrapped version of the supplied function\n\t */\n\t\n\t function fnBind(fn, that) {\n\t return function() {\n\t return fn.apply(that, arguments);\n\t };\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * testDOMProps is a generic DOM property test; if a browser supports\n\t * a certain property, it won't return undefined for it.\n\t *\n\t * @access private\n\t * @function testDOMProps\n\t * @param {array.} props - An array of properties to test for\n\t * @param {object} obj - An object or Element you want to use to test the parameters again\n\t * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check\n\t */\n\t function testDOMProps(props, obj, elem) {\n\t var item;\n\t\n\t for (var i in props) {\n\t if (props[i] in obj) {\n\t\n\t // return the property name as a string\n\t if (elem === false) {\n\t return props[i];\n\t }\n\t\n\t item = obj[props[i]];\n\t\n\t // let's bind a function\n\t if (is(item, 'function')) {\n\t // bind to obj unless overriden\n\t return fnBind(item, elem || obj);\n\t }\n\t\n\t // return the unbound function or obj or value\n\t return item;\n\t }\n\t }\n\t return false;\n\t }\n\t\n\t ;\n\t\n\t /**\n\t * testPropsAll tests a list of DOM properties we want to check against.\n\t * We specify literally ALL possible (known and/or likely) properties on\n\t * the element including the non-vendor prefixed one, for forward-\n\t * compatibility.\n\t *\n\t * @access private\n\t * @function testPropsAll\n\t * @param {string} prop - A string of the property to test for\n\t * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip\n\t * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against\n\t * @param {string} [value] - A string of a css value\n\t * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set\n\t */\n\t function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\t\n\t var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n\t props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\t\n\t // did they call .prefixed('boxSizing') or are we just testing a prop?\n\t if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n\t return testProps(props, prefixed, value, skipValueTest);\n\t\n\t // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n\t } else {\n\t props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n\t return testDOMProps(props, prefixed, elem);\n\t }\n\t }\n\t\n\t // Modernizr.testAllProps() investigates whether a given style property,\n\t // or any of its vendor-prefixed variants, is recognized\n\t //\n\t // Note that the property names must be provided in the camelCase variant.\n\t // Modernizr.testAllProps('boxSizing')\n\t ModernizrProto.testAllProps = testPropsAll;\n\t\n\t \n\t\n\t /**\n\t * testAllProps determines whether a given CSS property is supported in the browser\n\t *\n\t * @memberof Modernizr\n\t * @name Modernizr.testAllProps\n\t * @optionName Modernizr.testAllProps()\n\t * @optionProp testAllProps\n\t * @access public\n\t * @function testAllProps\n\t * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n\t * @param {string} [value] - String of the value to test\n\t * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n\t * @example\n\t *\n\t * testAllProps determines whether a given CSS property, in some prefixed form,\n\t * is supported by the browser.\n\t *\n\t * ```js\n\t * testAllProps('boxSizing') // true\n\t * ```\n\t *\n\t * It can optionally be given a CSS value in string form to test if a property\n\t * value is valid\n\t *\n\t * ```js\n\t * testAllProps('display', 'block') // true\n\t * testAllProps('display', 'penguin') // false\n\t * ```\n\t *\n\t * A boolean can be passed as a third parameter to skip the value check when\n\t * native detection (@supports) isn't available.\n\t *\n\t * ```js\n\t * testAllProps('shapeOutside', 'content-box', true);\n\t * ```\n\t */\n\t\n\t function testAllProps(prop, value, skipValueTest) {\n\t return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n\t }\n\t ModernizrProto.testAllProps = testAllProps;\n\t \n\t/*!\n\t{\n\t \"name\": \"CSS Transforms\",\n\t \"property\": \"csstransforms\",\n\t \"caniuse\": \"transforms2d\",\n\t \"tags\": [\"css\"]\n\t}\n\t!*/\n\t\n\t Modernizr.addTest('csstransforms', function() {\n\t // Android < 3.0 is buggy, so we sniff and blacklist\n\t // http://git.io/hHzL7w\n\t return navigator.userAgent.indexOf('Android 2.') === -1 &&\n\t testAllProps('transform', 'scale(1)', true);\n\t });\n\t\n\t\n\t /**\n\t * testStyles injects an element with style element and some CSS rules\n\t *\n\t * @memberof Modernizr\n\t * @name Modernizr.testStyles\n\t * @optionName Modernizr.testStyles()\n\t * @optionProp testStyles\n\t * @access public\n\t * @function testStyles\n\t * @param {string} rule - String representing a css rule\n\t * @param {function} callback - A function that is used to test the injected element\n\t * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n\t * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n\t * @returns {boolean}\n\t * @example\n\t *\n\t * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n\t * along with (possibly multiple) DOM elements. This lets you check for features\n\t * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n\t *\n\t * ```js\n\t * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n\t * // elem is the first DOM node in the page (by default #modernizr)\n\t * // rule is the first argument you supplied - the CSS rule in string form\n\t *\n\t * addTest('widthworks', elem.style.width === '9px')\n\t * });\n\t * ```\n\t *\n\t * If your test requires multiple nodes, you can include a third argument\n\t * indicating how many additional div elements to include on the page. The\n\t * additional nodes are injected as children of the `elem` that is returned as\n\t * the first argument to the callback.\n\t *\n\t * ```js\n\t * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n\t * document.getElementById('modernizr').style.width === '1px'; // true\n\t * document.getElementById('modernizr2').style.width === '2px'; // true\n\t * elem.firstChild === document.getElementById('modernizr2'); // true\n\t * }, 1);\n\t * ```\n\t *\n\t * By default, all of the additional elements have an ID of `modernizr[n]`, where\n\t * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n\t * the second additional is `#modernizr3`, etc.).\n\t * If you want to have more meaningful IDs for your function, you can provide\n\t * them as the fourth argument, as an array of strings\n\t *\n\t * ```js\n\t * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n\t * elem.firstChild === document.getElementById('foo'); // true\n\t * elem.lastChild === document.getElementById('bar'); // true\n\t * }, 2, ['foo', 'bar']);\n\t * ```\n\t *\n\t */\n\t\n\t var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n\t \n\t/*!\n\t{\n\t \"name\": \"CSS Supports\",\n\t \"property\": \"supports\",\n\t \"caniuse\": \"css-featurequeries\",\n\t \"tags\": [\"css\"],\n\t \"builderAliases\": [\"css_supports\"],\n\t \"notes\": [{\n\t \"name\": \"W3 Spec\",\n\t \"href\": \"http://dev.w3.org/csswg/css3-conditional/#at-supports\"\n\t },{\n\t \"name\": \"Related Github Issue\",\n\t \"href\": \"github.com/Modernizr/Modernizr/issues/648\"\n\t },{\n\t \"name\": \"W3 Info\",\n\t \"href\": \"http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface\"\n\t }]\n\t}\n\t!*/\n\t\n\t var newSyntax = 'CSS' in window && 'supports' in window.CSS;\n\t var oldSyntax = 'supportsCSS' in window;\n\t Modernizr.addTest('supports', newSyntax || oldSyntax);\n\t\n\t/*!\n\t{\n\t \"name\": \"CSS Transforms 3D\",\n\t \"property\": \"csstransforms3d\",\n\t \"caniuse\": \"transforms3d\",\n\t \"tags\": [\"css\"],\n\t \"warnings\": [\n\t \"Chrome may occassionally fail this test on some systems; more info: https://code.google.com/p/chromium/issues/detail?id=129004\"\n\t ]\n\t}\n\t!*/\n\t\n\t Modernizr.addTest('csstransforms3d', function() {\n\t var ret = !!testAllProps('perspective', '1px', true);\n\t var usePrefix = Modernizr._config.usePrefixes;\n\t\n\t // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n\t // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n\t // some conditions. As a result, Webkit typically recognizes the syntax but\n\t // will sometimes throw a false positive, thus we must do a more thorough check:\n\t if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {\n\t var mq;\n\t var defaultStyle = '#modernizr{width:0;height:0}';\n\t // Use CSS Conditional Rules if available\n\t if (Modernizr.supports) {\n\t mq = '@supports (perspective: 1px)';\n\t } else {\n\t // Otherwise, Webkit allows this media query to succeed only if the feature is enabled.\n\t // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n\t mq = '@media (transform-3d)';\n\t if (usePrefix) {\n\t mq += ',(-webkit-transform-3d)';\n\t }\n\t }\n\t\n\t mq += '{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}';\n\t\n\t testStyles(defaultStyle + mq, function(elem) {\n\t ret = elem.offsetWidth === 7 && elem.offsetHeight === 18;\n\t });\n\t }\n\t\n\t return ret;\n\t });\n\t\n\t\n\t // Run each test\n\t testRunner();\n\t\n\t delete ModernizrProto.addTest;\n\t delete ModernizrProto.addAsyncTest;\n\t\n\t // Run the things that are supposed to run after the tests\n\t for (var i = 0; i < Modernizr._q.length; i++) {\n\t Modernizr._q[i]();\n\t }\n\t\n\t // Leak Modernizr namespace\n\t window.Modernizr = Modernizr;\n\t\n\t\n\t;\n\t\n\t})(window, document);\n\tmodule.exports = window.Modernizr;\n\t})(window);\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubbleset = __webpack_require__(11);\n\tvar bubble = __webpack_require__(9);\n\tvar cursor = __webpack_require__(20);\n\tvar select = __webpack_require__(14);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar KEY = _require.KEY;\n\t\n\tvar text = __webpack_require__(8);\n\tvar events = __webpack_require__(2);\n\t\n\tvar EVENTS = {\n\t blur: onBlur,\n\t click: onClick,\n\t dblclick: onDblclick,\n\t focus: onFocus,\n\t keydown: onKeydown,\n\t keypress: onKeypress,\n\t keyup: onKeyup,\n\t paste: onPaste\n\t};\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onBlur(event) {\n\t select.clear(event.currentTarget);\n\t bubble.bubbling(event.currentTarget);\n\t}\n\t\n\tfunction onFocus(event) {\n\t cursor.restore(event.currentTarget);\n\t}\n\t\n\tfunction onKeyup(event) {\n\t var code = event.charCode || event.keyCode;\n\t var isPrintableChar = event.key ? event.key.length === 1 : (code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd;\n\t\n\t if (isPrintableChar) {\n\t event.currentTarget.fireInput();\n\t }\n\t}\n\t\n\tfunction onKeypress(event) {\n\t var code = event.charCode || event.keyCode;\n\t var nodeSet = event.currentTarget;\n\t\n\t /* eslint no-case-declarations: 0 */\n\t switch (code) {\n\t case KEY.Enter:\n\t event.preventDefault();\n\t if (!nodeSet.hasAttribute('disable-controls')) {\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.Comma:\n\t case KEY.Semicolon:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t }\n\t}\n\t\n\tfunction onKeydown(event) {\n\t var code = event.charCode || event.keyCode;\n\t var metaKey = event.ctrlKey || event.metaKey;\n\t var nodeSet = event.currentTarget;\n\t var enable = !nodeSet.hasAttribute('disable-controls');\n\t\n\t switch (code) {\n\t case KEY.Esc:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t\n\t case KEY.Backspace:\n\t event.preventDefault();\n\t backSpace(event);\n\t break;\n\t\n\t case KEY.Left:\n\t event.preventDefault();\n\t arrowLeft(event);\n\t break;\n\t\n\t // сдвигаем курсор в начало списка\n\t case KEY.Top:\n\t event.preventDefault();\n\t if (enable) {\n\t var headBubble = bubbleset.headBubble(nodeSet);\n\t headBubble && select.uniq(headBubble);\n\t }\n\t break;\n\t\n\t case KEY.Right:\n\t event.preventDefault();\n\t arrowRight(event);\n\t break;\n\t\n\t // сдвигаем курсор в конец списка\n\t // case KEY.Tab:\n\t case KEY.Bottom:\n\t event.preventDefault();\n\t if (enable && select.has(nodeSet)) {\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.a:\n\t if (metaKey) {\n\t event.preventDefault();\n\t\n\t if (!text.selectAll(null, event.currentTarget)) {\n\t select.all(nodeSet);\n\t }\n\t }\n\t break;\n\t }\n\t}\n\t\n\tfunction arrowLeft(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowLeft(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[0] === nodeSet.startRangeSelect ? list[list.length - 1] : list[0];\n\t\n\t var node = bubbleset.prevBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t }\n\t}\n\t\n\tfunction arrowRight(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowRight(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.nextBubble(selection.focusNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[list.length - 1] === nodeSet.startRangeSelect ? list[0] : list[list.length - 1];\n\t\n\t var node = bubbleset.nextBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n\t select.clear(nodeSet);\n\t selection.collapse(begin.nextSibling, 0);\n\t } else {\n\t cursor.restore(nodeSet);\n\t }\n\t}\n\t\n\tfunction backSpace(event) {\n\t var nodeSet = event.currentTarget;\n\t nodeSet.normalize();\n\t\n\t var selection = context.getSelection();\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t if (selection.isCollapsed) {\n\t if (text.arrowLeft(selection, true)) {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t } else {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t\n\t var node = bubbleset.findBubbleLeft(selection);\n\t if (node) {\n\t select.uniq(node);\n\t return;\n\t }\n\t\n\t var list = select.get(nodeSet);\n\t\n\t if (list.length) {\n\t var prevBubble = list[0].previousSibling;\n\t var nextBubble = list[list.length - 1].nextSibling;\n\t list.forEach(function (item) {\n\t return item.parentNode.removeChild(item);\n\t });\n\t\n\t if (bubble.isBubbleNode(prevBubble)) {\n\t select.uniq(prevBubble);\n\t } else if (bubble.isBubbleNode(nextBubble)) {\n\t select.uniq(nextBubble);\n\t } else {\n\t nodeSet.focus();\n\t cursor.restore(nodeSet);\n\t }\n\t\n\t nodeSet.fireChange();\n\t }\n\t}\n\t\n\tfunction onPaste(event) {\n\t event.preventDefault();\n\t\n\t var clipboardData = event.clipboardData;\n\t if (!clipboardData) {\n\t return;\n\t }\n\t\n\t var contentType = 'text/plain';\n\t var data = clipboardData.getData && clipboardData.getData(contentType);\n\t\n\t if (!text.replaceString(data) && clipboardData.items) {\n\t Array.prototype.slice.call(clipboardData.items).filter(function (item) {\n\t return item.kind === 'string' && item.type === contentType;\n\t }).some(function (item) {\n\t item.getAsString(text.replaceString);\n\t return true;\n\t });\n\t }\n\t}\n\t\n\tfunction onDblclick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeSet && nodeBubble) {\n\t event.preventDefault();\n\t bubble.edit(nodeSet, nodeBubble);\n\t }\n\t}\n\t\n\tfunction onClick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeBubble) {\n\t if (event.metaKey || event.ctrlKey) {\n\t select.add(nodeBubble);\n\t } else if (event.shiftKey) {\n\t if (!nodeSet.startRangeSelect) {\n\t select.uniq(nodeBubble);\n\t } else {\n\t select.range(nodeBubble);\n\t }\n\t } else {\n\t select.toggleUniq(nodeBubble);\n\t }\n\t } else {\n\t select.clear(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t cursor.restore(nodeSet);\n\t }\n\t }\n\t}\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * @module x-bubbles/cursor\n\t */\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\tvar select = __webpack_require__(14);\n\t\n\texports.restore = restore;\n\texports.restoreBasis = restoreBasis;\n\t\n\t/**\n\t * Reset the cursor position to the end of the input field.\n\t * @alias module:x-bubbles/cursor.restore\n\t * @param {HTMLElement} nodeSet\n\t */\n\tfunction restore(nodeSet) {\n\t select.clear(nodeSet);\n\t var basis = restoreBasis(nodeSet);\n\t var selection = context.getSelection();\n\t selection.removeAllRanges();\n\t selection.collapse(basis, 1);\n\t}\n\t\n\t/**\n\t * The creation of the fake text at the end childNodes\n\t * @alias module:x-bubbles/cursor.restoreBasis\n\t * @param {HTMLElement} nodeSet\n\t * @returns {HTMLTextElement} fake text node\n\t */\n\tfunction restoreBasis(nodeSet) {\n\t var fakeText = text.createZws();\n\t\n\t if (nodeSet.hasChildNodes()) {\n\t var lastNode = nodeSet.childNodes[nodeSet.childNodes.length - 1];\n\t\n\t if (lastNode.isEqualNode(fakeText)) {\n\t fakeText = lastNode;\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t\n\t return fakeText;\n\t}\n\n/***/ }\n/******/ ]);\n\n\n/** WEBPACK FOOTER **\n ** x-bubbles.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d26fa7d2cc474e7640d2\n **/","const context = require('./context');\nconst events = require('./core/events');\nconst drag = require('./core/drag');\nconst editor = require('./core/editor');\nconst bubble = require('./core/bubble');\nconst bubbleset = require('./core/bubbleset');\nconst text = require('./core/text');\nconst cursor = require('./core/cursor');\n\nconst OPTIONS = {\n begining: [ 'noop', null ],\n bubbleDeformation: [ 'funk', function () {} ],\n bubbleFormation: [ 'funk', function () {} ],\n classBubble: [ 'noop', 'bubble' ],\n draggable: [ 'bool', true ],\n ending: [ 'noop', null ], // /\\@ya\\.ru/g;\n separator: [ 'noop', /[,;]/ ],\n};\n\nconst XBubbles = Object.create(HTMLDivElement.prototype, {\n createdCallback: {\n value: function () {\n this.setAttribute('contenteditable', 'true');\n this.setAttribute('spellcheck', 'false');\n\n this.fireChange = events.throttle(events.fireChange);\n this.fireEdit = events.throttle(events.fireEdit);\n this.fireInput = events.throttle(events.fireInput);\n\n this.addEventListener('resize', events.prevent);\n this.addEventListener('resizestart', events.prevent);\n this.addEventListener('mscontrolselect', events.prevent);\n }\n },\n\n attachedCallback: {\n value: function () {\n drag.init(this);\n editor.init(this);\n bubble.bubbling(this);\n }\n },\n\n detachedCallback: {\n value: function () {\n drag.destroy(this);\n editor.destroy(this);\n }\n },\n\n /*\n attributeChangedCallback: {\n value: function (name, prevValue, value) {}\n },\n */\n\n options: {\n value: function (name, value) {\n if (!this._options) {\n this._options = {\n ...Object.keys(OPTIONS).reduce(function (result, item) {\n result[ item ] = undefined;\n return result;\n }, {}),\n\n ...this.dataset\n };\n\n optionsPrepare(this._options);\n }\n\n if (typeof value !== 'undefined') {\n this._options[ name ] = value;\n optionsPrepare(this._options);\n\n } else {\n return this._options[ name ];\n }\n }\n },\n\n items: {\n get: function () {\n return bubbleset.getBubbles(this);\n }\n },\n\n setContent: {\n value: function (data) {\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n\n data = text.html2text(data);\n this.appendChild(context.document.createTextNode(data));\n bubble.bubbling(this);\n cursor.restore(this);\n }\n },\n\n addBubble: {\n value: function (bubbleText, data) {\n const nodeBubble = bubble.create(this, bubbleText, data);\n\n if (!nodeBubble) {\n return false;\n }\n\n if (text.text2bubble(this, nodeBubble)) {\n cursor.restore(this);\n return true;\n }\n\n return false;\n }\n },\n\n removeBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n this.removeChild(nodeBubble);\n this.fireChange();\n return true;\n }\n\n return false;\n }\n },\n\n editBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n return bubble.edit(this, nodeBubble);\n }\n\n return false;\n }\n }\n});\n\nmodule.exports = context.document.registerElement('x-bubbles', {\n extends: 'div',\n prototype: XBubbles\n});\n\nconst OPTIONS_PREPARE = {\n funk: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return new Function('context', `return context.${value};`)(context);\n\n case 'function':\n return value;\n }\n },\n bool: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return (value === 'true' || value === 'on');\n\n case 'boolean':\n return value;\n }\n },\n noop: function (value) {\n return value;\n },\n};\n\nfunction optionsPrepare(options) {\n for (let name in OPTIONS) {\n const [ type, def ] = OPTIONS[ name ];\n options[ name ] = OPTIONS_PREPARE[ type ](options[ name ]);\n if (typeof options[ name ] === 'undefined') {\n options[ name ] = def;\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","module.exports = (function () {\n /* eslint no-eval: 0 */\n return this || (1, eval)('this');\n})();\n\n\n\n/** WEBPACK FOOTER **\n ** ./context.js\n **/","/**\n * @module x-bubbles/event\n */\n\nconst raf = require('raf');\nconst context = require('../context');\nconst CustomEventCommon = require('../polyfills/CustomEventCommon');\nconst { EV } = require('./constant');\nconst text = require('./text');\n\nexports.scrollX = scrollX;\nexports.scrollY = scrollY;\n\nexports.pageX = function (event) {\n return (event.pageX === null && event.clientX !== null) ?\n event.clientX + scrollX() :\n event.pageX;\n};\n\nexports.pageY = function (event) {\n return (event.pageY === null && event.clientY !== null) ?\n event.clientY + scrollY() :\n event.pageY;\n};\n\nexports.one = function (target, eventName, userCallback) {\n return target.addEventListener(eventName, function callback(event) {\n target.removeEventListener(eventName, callback);\n userCallback(event);\n });\n};\n\nexports.on = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.addEventListener(name, events[ name ]);\n }\n};\n\nexports.off = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.removeEventListener(name, events[ name ]);\n }\n};\n\nexports.prevent = function (event) {\n event.cancelBubble = true;\n event.returnValue = false;\n event.stopPropagation();\n event.preventDefault();\n return false;\n};\n\nexports.fireEdit = function (nodeBubble) {\n dispatch(this, EV.BUBBLE_EDIT, {\n bubbles: false,\n cancelable: false,\n detail: { data: nodeBubble }\n });\n};\n\nexports.fireChange = function () {\n dispatch(this, EV.CHANGE, {\n bubbles: false,\n cancelable: false\n });\n};\n\nexports.fireInput = function () {\n const textRange = text.currentTextRange();\n const editText = textRange && text.textClean(textRange.toString()) || '';\n\n if (this._bubbleValue !== editText) {\n this._bubbleValue = editText;\n\n dispatch(this, EV.BUBBLE_INPUT, {\n bubbles: false,\n cancelable: false,\n detail: { data: editText }\n });\n }\n};\n\nexports.throttle = function (callback) {\n let throttle = 0;\n const animationCallback = function () {\n throttle = 0;\n };\n\n return function () {\n if (throttle) {\n return;\n }\n\n throttle = raf(animationCallback);\n\n callback.apply(this, arguments);\n };\n};\n\nfunction scrollX() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n}\n\nfunction scrollY() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n}\n\n/**\n * Designer events.\n *\n * @example\n * const { Custom } = require('event');\n *\n * new Custom('custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event~Custom\n * @constructor\n */\nconst Custom = (function () {\n if (typeof context.CustomEvent === 'function') {\n return context.CustomEvent;\n }\n\n return CustomEventCommon;\n}());\n\n/**\n * Dispatch event.\n *\n * @example\n * const { dispatch } = require('event');\n * dispatch(node, 'custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event.dispatch\n * @param {HTMLElement} element node events\n * @param {string} name event name\n * @param {Object} params the event parameters\n * @param {boolean} [params.bubbles=false]\n * @param {boolean} [params.cancelable=false]\n * @param {*} [params.detail]\n */\nfunction dispatch(element, name, params = {}) {\n element.dispatchEvent(new Custom(name, params));\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/events.js\n **/","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function() {\n root.requestAnimationFrame = raf\n root.cancelAnimationFrame = caf\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/raf/index.js\n ** module id = 3\n ** module chunks = 0\n **/","// Generated by CoffeeScript 1.7.1\n(function() {\n var getNanoSeconds, hrtime, loadTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - loadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n loadTime = getNanoSeconds();\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/performance-now/lib/performance-now.js\n ** module id = 4\n ** module chunks = 0\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/process/browser.js\n ** module id = 5\n ** module chunks = 0\n **/","const context = require('../context');\n\n/**\n * @constant {Document}\n * @private\n */\nconst doc = context.document;\n\n/**\n * @constant {Object}\n * @private\n */\nconst protoEvent = context.Event.prototype;\n\nlet issetCustomEvent = false;\n\ntry {\n issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n} catch (e) {\n // do nothing\n}\n\n/**\n * The original function \"stopImmediatePropagation\"\n * @constant {function}\n * @private\n */\nconst stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\n/**\n * Override function to set properties \"immediatePropagationStopped\"\n */\nprotoEvent.stopImmediatePropagation = function () {\n this.immediatePropagationStopped = true;\n\n if (stopImmediatePropagation) {\n stopImmediatePropagation.call(this);\n\n } else {\n this.stopPropagation();\n }\n};\n\nlet CustomEventCommon = (function () {\n if (issetCustomEvent) {\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('CustomEvent');\n\n evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\n return evt;\n };\n }\n\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('Event');\n\n evt.initEvent(eventName, bubbles, cancelable);\n evt.detail = params.detail;\n\n return evt;\n };\n}());\n\nCustomEventCommon.prototype = protoEvent;\n\nmodule.exports = CustomEventCommon;\n\n\n\n/** WEBPACK FOOTER **\n ** ./polyfills/CustomEventCommon.js\n **/","exports.KEY = {\n a: 65,\n Backspace: 8,\n Bottom: 40,\n Cmd: 91,\n Comma: 44, // ,\n Enter: 13, // Enter\n Esc: 27,\n Left: 37,\n Right: 39,\n Semicolon: 59, // ;\n Space: 32,\n Tab: 9,\n Top: 38,\n};\n\nexports.CLS = {\n DRAGSTART: 'drag',\n DROPZONE: 'dropzone',\n};\n\nexports.EV = {\n BUBBLE_EDIT: 'bubble-edit',\n BUBBLE_INPUT: 'bubble-input',\n CHANGE: 'change',\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/constant.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\n/* eslint-disable max-len */\nconst REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\nconst REG_ZWS = /\\u200B/;\nconst TEXT_ZWS = '\\u200B';\n\nexports.arrowRight = arrowRight;\nexports.arrowLeft = arrowLeft;\nexports.remove = remove;\nexports.html2text = html2text;\nexports.currentTextRange = currentTextRange;\nexports.text2bubble = text2bubble;\nexports.replaceString = replaceString;\nexports.selectAll = selectAll;\nexports.textClean = textClean;\nexports.checkZws = checkZws;\nexports.createZws = createZws;\n\nfunction text2bubble(nodeSet, nodeBubble, selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const range = currentTextRange(selection);\n\n if (range && !nodeBubble) {\n nodeBubble = bubble.create(nodeSet, range.toString());\n }\n\n if (!nodeBubble) {\n return false;\n }\n\n if (range) {\n selection.removeAllRanges();\n selection.addRange(range);\n replace(selection, nodeBubble);\n\n } else {\n nodeSet.appendChild(nodeBubble);\n }\n\n nodeSet.fireInput();\n nodeSet.fireChange();\n return true;\n}\n\nfunction currentTextRange(selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return;\n }\n\n const pointNode = do {\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n selection.focusNode;\n\n } else if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n selection.anchorNode;\n\n } else {\n undefined;\n }\n };\n\n if (!pointNode) {\n return;\n }\n\n const range = context.document.createRange();\n let startNode = pointNode;\n let endNode = pointNode;\n let item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n startNode = item;\n item = item.previousSibling;\n }\n\n item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n endNode = item;\n item = item.nextSibling;\n }\n\n range.setStartBefore(startNode);\n range.setEndAfter(endNode);\n\n return range;\n}\n\nfunction remove(selection) {\n return replace(selection, createZws());\n}\n\nfunction replace(selection, node) {\n selection = selection || context.getSelection();\n\n if (!selection || !selection.rangeCount) {\n return false;\n }\n\n const anchor = context.document.createElement('span');\n selection.getRangeAt(0).surroundContents(anchor);\n anchor.parentNode.replaceChild(node, anchor);\n\n selection.removeAllRanges();\n selection.collapse(node, 0);\n\n return true;\n}\n\nfunction replaceString(data, selection) {\n data = textClean(data);\n if (!data) {\n return false;\n }\n\n selection = selection || context.getSelection();\n const textNode = context.document.createTextNode(data);\n\n if (!replace(selection, textNode)) {\n return false;\n }\n\n selection.collapse(textNode, textNode.nodeValue.length);\n return true;\n}\n\nfunction arrowLeft(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(startNode, startOffset);\n return true;\n }\n\n const isNativeExtend = Boolean(selection.extend);\n revert = isNativeExtend ? revert : !revert;\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n if (offset === null) {\n offset = node.nodeValue.length;\n }\n\n if (offset - 1 < 0) {\n node = node.previousSibling;\n offset = null;\n continue;\n }\n\n const text = node.nodeValue.substring(offset - 1, offset);\n\n if (checkZws(text)) {\n offset = offset - 1;\n continue;\n }\n\n break;\n }\n\n if (!node || offset === null) {\n return false;\n }\n\n if (extend) {\n if (isNativeExtend) {\n selection.extend(node, offset - 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset - 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset - 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset - 1);\n }\n\n return true;\n}\n\nfunction arrowRight(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.focusNode ||\n selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(endNode, endOffset);\n return true;\n }\n\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n const len = node.nodeValue.length;\n\n if (offset + 1 > len) {\n node = node.nextSibling;\n offset = 0;\n continue;\n }\n\n const text = node.nodeValue.substring(offset, offset + 1);\n\n if (checkZws(text)) {\n offset = offset + 1;\n continue;\n }\n\n break;\n }\n\n if (!node) {\n return false;\n }\n\n if (extend) {\n const isNativeExtend = Boolean(selection.extend);\n\n if (isNativeExtend) {\n selection.extend(node, offset + 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset + 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset + 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset + 1);\n }\n\n return true;\n}\n\nfunction html2text(value) {\n if (!value) {\n return '';\n }\n\n var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n DOMContainer.innerText = value;\n\n return DOMContainer.innerText\n .replace(/^[\\u0020\\u00a0]+$/gm, '')\n .replace(/\\n/gm, ' ')\n .trim();\n}\n\nfunction selectAll(selection, nodeSet) {\n selection = selection || context.getSelection();\n const node = selection && selection.anchorNode;\n\n if (!node || node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n let fromNode;\n let toNode;\n let item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n fromNode = item;\n item = item.previousSibling;\n }\n\n item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n toNode = item;\n item = item.nextSibling;\n }\n\n const hasBubbles = bubbleset.hasBubbles(nodeSet);\n const range = context.document.createRange();\n range.setStartBefore(fromNode);\n range.setEndAfter(toNode);\n\n const dataText = textClean(range.toString());\n\n if (dataText || (!dataText && !hasBubbles)) {\n if (!dataText) {\n range.collapse();\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n }\n\n return false;\n}\n\nfunction createZws() {\n return context.document.createTextNode(TEXT_ZWS);\n}\n\nfunction checkZws(value) {\n return REG_ZWS.test(value);\n}\n\nfunction textClean(value) {\n return String(value || '')\n .trim()\n .replace(REG_REPLACE_NON_PRINTABLE, '');\n}\n\nfunction selectionCorrect(selection) {\n let startNode = selection.anchorNode;\n let endNode = selection.focusNode;\n let startOffset = selection.anchorOffset;\n let endOffset = selection.focusOffset;\n let revert = false;\n\n if (startNode === endNode) {\n startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n revert = selection.anchorOffset > selection.focusOffset;\n\n } else {\n const position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n startNode = selection.focusNode;\n startOffset = selection.focusOffset;\n endNode = selection.anchorNode;\n endOffset = selection.anchorOffset;\n revert = true;\n }\n }\n\n return { startNode, endNode, startOffset, endOffset, revert };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/text.js\n **/","const context = require('../context');\nconst text = require('./text');\nconst { escape, canUseDrag } = require('./utils');\n\nexports.isBubbleNode = isBubbleNode;\nexports.bubbling = bubbling;\nexports.create = create;\nexports.edit = edit;\n\nfunction isBubbleNode(node) {\n if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n return node.hasAttribute('bubble');\n}\n\nfunction edit(nodeSet, nodeBubble) {\n if (nodeBubble.hasAttribute('readonly')) {\n return false;\n }\n\n const selection = context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const bubbleDeformation = nodeSet.options('bubbleDeformation');\n let rangeParams = bubbleDeformation(nodeBubble);\n\n if (!rangeParams) {\n const dataText = text.textClean(nodeBubble.innerText);\n\n rangeParams = {\n text: dataText,\n startOffset: 0,\n endOffset: dataText.length\n };\n }\n\n const textFake = text.createZws();\n const textNode = context.document.createTextNode(rangeParams.text);\n\n nodeSet.fireEdit(nodeBubble);\n nodeSet.replaceChild(textNode, nodeBubble);\n nodeSet.insertBefore(textFake, textNode);\n\n const range = context.document.createRange();\n range.setStart(textNode, rangeParams.startOffset);\n range.setEnd(textNode, rangeParams.endOffset);\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n}\n\nfunction create(nodeSet, dataText, data = {}) {\n dataText = text.textClean(dataText);\n\n if (!dataText) {\n return;\n }\n\n const bubbleFormation = nodeSet.options('bubbleFormation');\n const classBubble = nodeSet.options('classBubble');\n const draggable = canUseDrag() && nodeSet.options('draggable');\n const wrap = context.document.createElement('span');\n\n wrap.innerText = dataText;\n\n if (draggable) {\n wrap.setAttribute('draggable', 'true');\n }\n\n for (let key in data) {\n if (data[ key ]) {\n wrap.setAttribute(`data-${key}`, escape(data[ key ]));\n }\n }\n\n bubbleFormation(wrap);\n\n if (classBubble) {\n const classes = String(classBubble).trim().split(/\\s+/);\n let len = classes.length;\n\n while (len--) {\n wrap.classList.add(classes[ len ]);\n }\n }\n\n wrap.setAttribute('bubble', '');\n wrap.setAttribute('contenteditable', 'false');\n\n return wrap;\n}\n\nfunction bubbling(nodeSet) {\n const separator = nodeSet.options('separator');\n const ending = nodeSet.options('ending');\n const begining = nodeSet.options('begining');\n const ranges = getBubbleRanges(nodeSet);\n const nodes = [];\n\n ranges.forEach(function (range) {\n const dataText = text.textClean(range.toString());\n\n if (!dataText) {\n range.deleteContents();\n return;\n }\n\n let textParts = [ dataText ];\n\n if (separator) {\n textParts = dataText\n .split(separator)\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (ending) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByEnding(str, ending)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n\n } else if (begining) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByBeginning(str, begining)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (!textParts.length) {\n range.deleteContents();\n }\n\n const fragment = context.document.createDocumentFragment();\n\n textParts.forEach(function (textPart) {\n const nodeBubble = create(nodeSet, textPart);\n if (nodeBubble) {\n fragment.appendChild(nodeBubble);\n nodes.push(nodeBubble);\n }\n });\n\n range.deleteContents();\n range.insertNode(fragment);\n });\n\n nodeSet.fireInput();\n\n if (nodes.length) {\n nodeSet.fireChange();\n }\n\n return nodes;\n}\n\nfunction getBubbleRanges(nodeSet) {\n const ranges = [];\n const children = nodeSet.childNodes;\n let range;\n let node;\n\n for (let i = 0; i < children.length; i++) {\n node = children[ i ];\n\n if (isBubbleNode(node)) {\n if (range) {\n range.setEndBefore(node);\n ranges.push(range);\n range = undefined;\n }\n\n } else {\n if (!range) {\n range = context.document.createRange();\n range.setStartBefore(node);\n }\n }\n }\n\n if (range) {\n range.setEndAfter(node);\n ranges.push(range);\n }\n\n return ranges;\n}\n\nfunction trimIterator(str) {\n return str.trim();\n}\n\nfunction nonEmptyIterator(str) {\n return Boolean(str);\n}\n\nfunction parseFragmentByEnding(str, reg) {\n const parts = [];\n let lastIndex = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while (reg.exec(str) !== null && loop) {\n loop--;\n parts.push(str.substring(lastIndex, reg.lastIndex));\n lastIndex = reg.lastIndex;\n }\n\n return parts;\n}\n\nfunction parseFragmentByBeginning(str, reg) {\n const parts = [];\n let res;\n let index = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while ((res = reg.exec(str)) !== null && loop) {\n loop--;\n if (index !== res.index) {\n parts.push(str.substring(index, res.index));\n index = res.index;\n }\n }\n\n parts.push(str.substring(index, str.length));\n return parts;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubble.js\n **/","const context = require('../context');\n\n/* eslint quotes: 0 */\n\nconst HTML_ESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n\nconst HTML_UNESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '`': '`'\n};\n\nconst REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\nconst REG_UNESCAPED_HTML = /[&<>\"'`]/g;\nconst REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\nconst REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\nconst REG_IE = /Trident|Edge/;\n\nexports.escape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n }\n\n return data;\n};\n\n\nexports.unescape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n }\n\n return data;\n};\n\nexports.canUseDrag = function () {\n return !REG_IE.test(context.navigator.userAgent);\n};\n\nfunction unescapeHtmlChar(chr) {\n return HTML_UNESCAPES[ chr ];\n}\n\nfunction escapeHtmlChar(chr) {\n return HTML_ESCAPES[ chr ];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/utils.js\n **/","const bubble = require('./bubble');\nconst text = require('./text');\n\nexports.closestNodeBubble = closestNodeBubble;\nexports.closestNodeSet = closestNodeSet;\nexports.findBubbleLeft = findBubbleLeft;\nexports.getBubbles = getBubbles;\nexports.hasBubbles = hasBubbles;\nexports.headBubble = headBubble;\nexports.lastBubble = lastBubble;\nexports.nextBubble = nextBubble;\nexports.prevBubble = prevBubble;\n\nfunction lastBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:last-child');\n}\n\nfunction headBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:first-child');\n}\n\nfunction getBubbles(nodeSet) {\n return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n}\n\nfunction hasBubbles(nodeSet) {\n return Boolean(nodeSet.querySelector('[bubble]'));\n}\n\nfunction findBubbleLeft(selection) {\n if (!selection.focusNode || !selection.anchorNode) {\n return;\n }\n\n let node = selection.focusNode.previousSibling;\n\n if (selection.anchorNode !== selection.focusNode &&\n selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n node = selection.anchorNode.previousSibling;\n }\n\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n return;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction closestNodeSet(node) {\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE &&\n node.getAttribute('is') === 'x-bubbles') {\n\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction closestNodeBubble(node) {\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction prevBubble(target) {\n let node = target && target.previousSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction nextBubble(target) {\n let node = target && target.nextSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.nextSibling;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubbleset.js\n **/","const native = require('./drag/native');\nconst mouse = require('./drag/mouse');\nconst { canUseDrag } = require('./utils');\n\nexports.init = function (nodeSet) {\n if (canUseDrag()) {\n return native.init(nodeSet);\n }\n\n return mouse.init(nodeSet);\n};\n\nexports.destroy = function (nodeSet) {\n if (canUseDrag()) {\n return native.destroy(nodeSet);\n }\n\n return mouse.destroy(nodeSet);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag.js\n **/","const context = require('../../context');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst events = require('../events');\nconst { CLS } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nconst EVENTS = {\n dragend: onDragend,\n dragenter: onDragenter,\n dragleave: onDragleave,\n dragover: onDragover,\n dragstart: onDragstart,\n drop: onDrop,\n};\n\nlet currentDragSet = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onDragstart(event) {\n event.stopPropagation();\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (!nodeSet || !nodeBubble) {\n event.preventDefault();\n return;\n }\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = nodeSet;\n nodeSet.classList.add(CLS.DRAGSTART);\n select.add(nodeBubble);\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', '');\n\n const list = select.get(currentDragSet);\n if (list.length > 1) {\n event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n }\n}\n\nfunction onDrop(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet || nodeSet === currentDragSet) {\n return;\n }\n\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n}\n\nfunction onDragover(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n event.dataTransfer.dropEffect = 'move';\n}\n\nfunction onDragenter(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n }\n}\n\nfunction onDragleave(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n}\n\nfunction onDragend(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n currentDragSet.classList.remove(CLS.DRAGSTART);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n\n currentDragSet = null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/native.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\nconst slice = Array.prototype.slice;\nconst PATH_SELECTED = '[bubble][selected]';\nconst PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\nexports.all = all;\nexports.add = add;\nexports.clear = clear;\nexports.get = get;\nexports.uniq = uniq;\nexports.head = head;\nexports.last = last;\nexports.has = has;\nexports.range = range;\nexports.toggleUniq = toggleUniq;\n\nfunction range(node) {\n if (!bubble.isBubbleNode(node)) {\n return;\n }\n\n const set = node.parentNode;\n const list = get(set);\n\n if (!list.length) {\n uniq(node);\n return;\n }\n\n clear(set);\n\n const headList = list[0];\n const lastList = list[ list.length - 1 ];\n\n if (headList === lastList || !set.startRangeSelect) {\n set.startRangeSelect = headList;\n }\n\n let fromNode;\n let toNode;\n const position = node.compareDocumentPosition(set.startRangeSelect);\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n fromNode = set.startRangeSelect;\n toNode = node;\n\n } else {\n fromNode = node;\n toNode = set.startRangeSelect;\n }\n\n if (fromNode && toNode) {\n let item = fromNode;\n\n while (item) {\n if (!setSelected(item)) {\n break;\n }\n\n if (item === toNode) {\n break;\n }\n\n item = item.nextSibling;\n }\n\n bubble.bubbling(set);\n }\n}\n\nfunction all(nodeSet) {\n slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(item => setSelected(item));\n nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\n bubble.bubbling(nodeSet);\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n}\n\nfunction has(nodeSet) {\n return Boolean(nodeSet.querySelector(PATH_SELECTED));\n}\n\nfunction head(set) {\n return get(set)[0];\n}\n\nfunction last(set) {\n const list = get(set);\n return list[ list.length - 1 ];\n}\n\nfunction get(nodeSet) {\n return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n}\n\nfunction clear(nodeSet) {\n get(nodeSet).forEach(item => item.removeAttribute('selected'));\n}\n\nfunction add(node) {\n if (setSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n nodeSet.startRangeSelect = node;\n // ???\n bubble.bubbling(nodeSet);\n\n return true;\n }\n\n return false;\n}\n\nfunction uniq(node) {\n if (!bubble.isBubbleNode(node)) {\n return false;\n }\n\n const nodeSet = bubbleset.closestNodeSet(node);\n const selection = context.getSelection();\n\n selection && selection.removeAllRanges();\n clear(nodeSet);\n\n return add(node);\n}\n\nfunction toggleUniq(node) {\n if (isSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n if (get(nodeSet).length === 1) {\n return removeSelected(node);\n }\n }\n\n return uniq(node);\n}\n\nfunction isSelected(node) {\n return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n}\n\nfunction setSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.setAttribute('selected', '');\n return true;\n }\n\n return false;\n}\n\nfunction removeSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.removeAttribute('selected');\n return true;\n }\n\n return false;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/select.js\n **/","const DRAG_IMG_WIDTH = 16;\n\nlet dragImage = null;\n\nexports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\nexports.getDragImage = function () {\n if (!dragImage) {\n dragImage = new Image();\n dragImage.src = require('url?mimetype=image/png!./bubbles.png');\n }\n\n return dragImage;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/common.js\n **/","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/url-loader?mimetype=image/png!./core/drag/bubbles.png\n ** module id = 16\n ** module chunks = 0\n **/","const context = require('../../context');\nconst events = require('../events');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst Modernizr = require('modernizr');\nconst { CLS } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nlet currentDragSet = null;\nlet currentMoveSet = null;\nlet currentDragElement = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, 'mousedown', onMousedown);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, 'mousedown', onMousedown);\n};\n\nfunction onMousedown(event) {\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n if (!nodeBubble) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (!nodeSet) {\n return;\n }\n\n event.preventDefault();\n nodeSet.focus();\n\n const drag = nodeSet.__drag__ = {\n onMouseup: onMouseup.bind(this, nodeSet),\n onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n nodeOffsetX: events.pageX(event) - nodeBubble.offsetLeft,\n nodeOffsetY: events.pageY(event) - nodeBubble.offsetTop,\n x: 0,\n y: 0\n };\n\n currentDragSet = null;\n currentMoveSet = null;\n currentDragElement = null;\n\n events.one(document, 'mouseup', drag.onMouseup);\n events.on(document, 'mousemove', drag.onMousemove);\n events.on(document, 'scroll', drag.onScroll);\n}\n\nfunction onMouseup(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n events.off(document, 'mousemove', drag.onMousemove);\n events.off(document, 'scroll', drag.onScroll);\n delete dragSet.__drag__;\n\n if (currentDragElement) {\n currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n currentDragElement = null;\n }\n\n if (currentMoveSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n currentMoveSet = null;\n }\n\n if (currentDragSet) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n }\n\n currentDragSet.classList.remove(CLS.DRAGSTART);\n currentDragSet = null;\n }\n}\n\nfunction onMousemove(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n if (!currentDragSet) {\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = dragSet;\n currentDragSet.classList.add(CLS.DRAGSTART);\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n let moveElement;\n\n if (nodeBubble) {\n select.add(nodeBubble);\n if (select.get(currentDragSet).length === 1) {\n moveElement = nodeBubble.cloneNode(true);\n }\n }\n\n if (!moveElement) {\n moveElement = getDragImage();\n drag.nodeOffsetX = DRAG_IMG_WIDTH;\n drag.nodeOffsetY = DRAG_IMG_WIDTH;\n }\n\n currentDragElement = document.body.appendChild(document.createElement('div'));\n currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n currentDragElement.appendChild(moveElement);\n }\n\n drag.x = event.clientX;\n drag.y = event.clientY;\n onScroll(dragSet);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n if (currentMoveSet && currentMoveSet !== nodeSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n\n } else if (!currentMoveSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n }\n\n } else if (currentMoveSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n currentMoveSet = null;\n }\n}\n\nfunction onScroll(dragSet) {\n const drag = dragSet.__drag__;\n if (!drag || !currentDragElement) {\n return;\n }\n\n const x = drag.x - drag.nodeOffsetX + events.scrollX();\n const y = drag.y - drag.nodeOffsetY + events.scrollY();\n\n if (Modernizr.csstransforms3d) {\n currentDragElement.style.transform = `translate3d(${x}px, ${y}px, 0px)`;\n\n } else if (Modernizr.csstransforms) {\n currentDragElement.style.transform = `translate(${x}px, ${y}px)`;\n\n } else {\n currentDragElement.style.top = `${y}px`;\n currentDragElement.style.left = `${x}px`;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/mouse.js\n **/",";(function(window){\n/*!\n * modernizr v3.3.1\n * Build http://modernizr.com/download?-csstransforms-csstransforms3d-dontmin\n *\n * Copyright (c)\n * Faruk Ates\n * Paul Irish\n * Alex Sexton\n * Ryan Seddon\n * Patrick Kettner\n * Stu Cox\n * Richard Herrera\n\n * MIT License\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in the\n * current UA and makes the results available to you in two ways: as properties on\n * a global `Modernizr` object, and as classes on the `` element. This\n * information allows you to progressively enhance your pages with a granular level\n * of control over the experience.\n*/\n\n;(function(window, document, undefined){\n var tests = [];\n \n\n /**\n *\n * ModernizrProto is the constructor for Modernizr\n *\n * @class\n * @access public\n */\n\n var ModernizrProto = {\n // The current version, dummy\n _version: '3.3.1',\n\n // Any settings that don't work as separate modules\n // can go in here as configuration.\n _config: {\n 'classPrefix': '',\n 'enableClasses': true,\n 'enableJSClass': true,\n 'usePrefixes': true\n },\n\n // Queue of tests\n _q: [],\n\n // Stub these for people who are listening\n on: function(test, cb) {\n // I don't really think people should do this, but we can\n // safe guard it a bit.\n // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n // This is in case people listen to synchronous tests. I would leave it out,\n // but the code to *disallow* sync tests in the real version of this\n // function is actually larger than this.\n var self = this;\n setTimeout(function() {\n cb(self[test]);\n }, 0);\n },\n\n addTest: function(name, fn, options) {\n tests.push({name: name, fn: fn, options: options});\n },\n\n addAsyncTest: function(fn) {\n tests.push({name: null, fn: fn});\n }\n };\n\n \n\n // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n var Modernizr = function() {};\n Modernizr.prototype = ModernizrProto;\n\n // Leak modernizr globally when you `require` it rather than force it here.\n // Overwrite name so constructor name is nicer :D\n Modernizr = new Modernizr();\n\n \n\n var classes = [];\n \n\n /**\n * is returns a boolean if the typeof an obj is exactly type.\n *\n * @access private\n * @function is\n * @param {*} obj - A thing we want to check the type of\n * @param {string} type - A string to compare the typeof against\n * @returns {boolean}\n */\n\n function is(obj, type) {\n return typeof obj === type;\n }\n ;\n\n /**\n * Run through all tests and detect their support in the current UA.\n *\n * @access private\n */\n\n function testRunner() {\n var featureNames;\n var feature;\n var aliasIdx;\n var result;\n var nameIdx;\n var featureName;\n var featureNameSplit;\n\n for (var featureIdx in tests) {\n if (tests.hasOwnProperty(featureIdx)) {\n featureNames = [];\n feature = tests[featureIdx];\n // run the test, throw the return value into the Modernizr,\n // then based on that boolean, define an appropriate className\n // and push it into an array of classes we'll join later.\n //\n // If there is no name, it's an 'async' test that is run,\n // but not directly added to the object. That should\n // be done with a post-run addTest call.\n if (feature.name) {\n featureNames.push(feature.name.toLowerCase());\n\n if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n // Add all the aliases into the names list\n for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n }\n }\n }\n\n // Run the test, or use the raw value if it's not a function\n result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n\n // Set each of the names on the Modernizr object\n for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n featureName = featureNames[nameIdx];\n // Support dot properties as sub tests. We don't do checking to make sure\n // that the implied parent tests have been added. You must call them in\n // order (either in the test, or make the parent test a dependency).\n //\n // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n // hashtag famous last words\n featureNameSplit = featureName.split('.');\n\n if (featureNameSplit.length === 1) {\n Modernizr[featureNameSplit[0]] = result;\n } else {\n // cast to a Boolean, if not one already\n /* jshint -W053 */\n if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n }\n\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n }\n\n classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n }\n }\n }\n }\n ;\n\n /**\n * If the browsers follow the spec, then they would expose vendor-specific style as:\n * elem.style.WebkitBorderRadius\n * instead of something like the following, which would be technically incorrect:\n * elem.style.webkitBorderRadius\n\n * Webkit ghosts their properties in lowercase but Opera & Moz do not.\n * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n * erik.eae.net/archives/2008/03/10/21.48.10/\n\n * More here: github.com/Modernizr/Modernizr/issues/issue/21\n *\n * @access private\n * @returns {string} The string representing the vendor-specific style properties\n */\n\n var omPrefixes = 'Moz O ms Webkit';\n \n\n var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n ModernizrProto._cssomPrefixes = cssomPrefixes;\n \n\n\n /**\n * contains checks to see if a string contains another string\n *\n * @access private\n * @function contains\n * @param {string} str - The string we want to check for substrings\n * @param {string} substr - The substring we want to search the first string for\n * @returns {boolean}\n */\n\n function contains(str, substr) {\n return !!~('' + str).indexOf(substr);\n }\n\n ;\n\n /**\n * docElement is a convenience wrapper to grab the root element of the document\n *\n * @access private\n * @returns {HTMLElement|SVGElement} The root element of the document\n */\n\n var docElement = document.documentElement;\n \n\n /**\n * A convenience helper to check if the document we are running in is an SVG document\n *\n * @access private\n * @returns {boolean}\n */\n\n var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n \n\n /**\n * createElement is a convenience wrapper around document.createElement. Since we\n * use createElement all over the place, this allows for (slightly) smaller code\n * as well as abstracting away issues with creating elements in contexts other than\n * HTML documents (e.g. SVG documents).\n *\n * @access private\n * @function createElement\n * @returns {HTMLElement|SVGElement} An HTML or SVG element\n */\n\n function createElement() {\n if (typeof document.createElement !== 'function') {\n // This is the case in IE7, where the type of createElement is \"object\".\n // For this reason, we cannot call apply() as Object is not a Function.\n return document.createElement(arguments[0]);\n } else if (isSVG) {\n return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n } else {\n return document.createElement.apply(document, arguments);\n }\n }\n\n ;\n\n /**\n * Create our \"modernizr\" element that we do most feature tests on.\n *\n * @access private\n */\n\n var modElem = {\n elem: createElement('modernizr')\n };\n\n // Clean up this element\n Modernizr._q.push(function() {\n delete modElem.elem;\n });\n\n \n\n var mStyle = {\n style: modElem.elem.style\n };\n\n // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n // the front of the queue.\n Modernizr._q.unshift(function() {\n delete mStyle.style;\n });\n\n \n\n /**\n * getBody returns the body of a document, or an element that can stand in for\n * the body if a real body does not exist\n *\n * @access private\n * @function getBody\n * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n * artificially created element that stands in for the body\n */\n\n function getBody() {\n // After page load injecting a fake body doesn't work so check if body exists\n var body = document.body;\n\n if (!body) {\n // Can't use the real body create a fake one.\n body = createElement(isSVG ? 'svg' : 'body');\n body.fake = true;\n }\n\n return body;\n }\n\n ;\n\n /**\n * injectElementWithStyles injects an element with style element and some CSS rules\n *\n * @access private\n * @function injectElementWithStyles\n * @param {string} rule - String representing a css rule\n * @param {function} callback - A function that is used to test the injected element\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n * @returns {boolean}\n */\n\n function injectElementWithStyles(rule, callback, nodes, testnames) {\n var mod = 'modernizr';\n var style;\n var ret;\n var node;\n var docOverflow;\n var div = createElement('div');\n var body = getBody();\n\n if (parseInt(nodes, 10)) {\n // In order not to give false positives we create a node for each test\n // This also allows the method to scale for unspecified uses\n while (nodes--) {\n node = createElement('div');\n node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n div.appendChild(node);\n }\n }\n\n style = createElement('style');\n style.type = 'text/css';\n style.id = 's' + mod;\n\n // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n (!body.fake ? div : body).appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(document.createTextNode(rule));\n }\n div.id = mod;\n\n if (body.fake) {\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = 'hidden';\n docOverflow = docElement.style.overflow;\n docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n ret = callback(div, rule);\n // If this is done after page load we don't want to remove the body so check if body exists\n if (body.fake) {\n body.parentNode.removeChild(body);\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n docElement.offsetHeight;\n } else {\n div.parentNode.removeChild(div);\n }\n\n return !!ret;\n\n }\n\n ;\n\n /**\n * domToCSS takes a camelCase string and converts it to kebab-case\n * e.g. boxSizing -> box-sizing\n *\n * @access private\n * @function domToCSS\n * @param {string} name - String name of camelCase prop we want to convert\n * @returns {string} The kebab-case version of the supplied name\n */\n\n function domToCSS(name) {\n return name.replace(/([A-Z])/g, function(str, m1) {\n return '-' + m1.toLowerCase();\n }).replace(/^ms-/, '-ms-');\n }\n ;\n\n /**\n * nativeTestProps allows for us to use native feature detection functionality if available.\n * some prefixed form, or false, in the case of an unsupported rule\n *\n * @access private\n * @function nativeTestProps\n * @param {array} props - An array of property names\n * @param {string} value - A string representing the value we want to check via @supports\n * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n */\n\n // Accepts a list of property names and a single value\n // Returns `undefined` if native detection not available\n function nativeTestProps(props, value) {\n var i = props.length;\n // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface\n if ('CSS' in window && 'supports' in window.CSS) {\n // Try every prefixed variant of the property\n while (i--) {\n if (window.CSS.supports(domToCSS(props[i]), value)) {\n return true;\n }\n }\n return false;\n }\n // Otherwise fall back to at-rule (for Opera 12.x)\n else if ('CSSSupportsRule' in window) {\n // Build a condition string for every prefixed variant\n var conditionText = [];\n while (i--) {\n conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n }\n conditionText = conditionText.join(' or ');\n return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n return getComputedStyle(node, null).position == 'absolute';\n });\n }\n return undefined;\n }\n ;\n\n /**\n * cssToDOM takes a kebab-case string and converts it to camelCase\n * e.g. box-sizing -> boxSizing\n *\n * @access private\n * @function cssToDOM\n * @param {string} name - String name of kebab-case prop we want to convert\n * @returns {string} The camelCase version of the supplied name\n */\n\n function cssToDOM(name) {\n return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n return m1 + m2.toUpperCase();\n }).replace(/^-/, '');\n }\n ;\n\n // testProps is a generic CSS / DOM property test.\n\n // In testing support for a given CSS property, it's legit to test:\n // `elem.style[styleName] !== undefined`\n // If the property is supported it will return an empty string,\n // if unsupported it will return undefined.\n\n // We'll take advantage of this quick test and skip setting a style\n // on our modernizr element, but instead just testing undefined vs\n // empty string.\n\n // Property names can be provided in either camelCase or kebab-case.\n\n function testProps(props, prefixed, value, skipValueTest) {\n skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\n // Try native detect first\n if (!is(value, 'undefined')) {\n var result = nativeTestProps(props, value);\n if (!is(result, 'undefined')) {\n return result;\n }\n }\n\n // Otherwise do it properly\n var afterInit, i, propsLength, prop, before;\n\n // If we don't have a style element, that means we're running async or after\n // the core tests, so we'll need to create our own elements to use\n\n // inside of an SVG element, in certain browsers, the `style` element is only\n // defined for valid tags. Therefore, if `modernizr` does not have one, we\n // fall back to a less used element and hope for the best.\n var elems = ['modernizr', 'tspan'];\n while (!mStyle.style) {\n afterInit = true;\n mStyle.modElem = createElement(elems.shift());\n mStyle.style = mStyle.modElem.style;\n }\n\n // Delete the objects if we created them.\n function cleanElems() {\n if (afterInit) {\n delete mStyle.style;\n delete mStyle.modElem;\n }\n }\n\n propsLength = props.length;\n for (i = 0; i < propsLength; i++) {\n prop = props[i];\n before = mStyle.style[prop];\n\n if (contains(prop, '-')) {\n prop = cssToDOM(prop);\n }\n\n if (mStyle.style[prop] !== undefined) {\n\n // If value to test has been passed in, do a set-and-check test.\n // 0 (integer) is a valid property value, so check that `value` isn't\n // undefined, rather than just checking it's truthy.\n if (!skipValueTest && !is(value, 'undefined')) {\n\n // Needs a try catch block because of old IE. This is slow, but will\n // be avoided in most cases because `skipValueTest` will be used.\n try {\n mStyle.style[prop] = value;\n } catch (e) {}\n\n // If the property value has changed, we assume the value used is\n // supported. If `value` is empty string, it'll fail here (because\n // it hasn't changed), which matches how browsers have implemented\n // CSS.supports()\n if (mStyle.style[prop] != before) {\n cleanElems();\n return prefixed == 'pfx' ? prop : true;\n }\n }\n // Otherwise just return true, or the property name if this is a\n // `prefixed()` call\n else {\n cleanElems();\n return prefixed == 'pfx' ? prop : true;\n }\n }\n }\n cleanElems();\n return false;\n }\n\n ;\n\n /**\n * List of JavaScript DOM values used for tests\n *\n * @memberof Modernizr\n * @name Modernizr._domPrefixes\n * @optionName Modernizr._domPrefixes\n * @optionProp domPrefixes\n * @access public\n * @example\n *\n * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather\n * than kebab-case properties, all properties are their Capitalized variant\n *\n * ```js\n * Modernizr._domPrefixes === [ \"Moz\", \"O\", \"ms\", \"Webkit\" ];\n * ```\n */\n\n var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);\n ModernizrProto._domPrefixes = domPrefixes;\n \n\n /**\n * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n *\n * @access private\n * @function fnBind\n * @param {function} fn - a function you want to change `this` reference to\n * @param {object} that - the `this` you want to call the function with\n * @returns {function} The wrapped version of the supplied function\n */\n\n function fnBind(fn, that) {\n return function() {\n return fn.apply(that, arguments);\n };\n }\n\n ;\n\n /**\n * testDOMProps is a generic DOM property test; if a browser supports\n * a certain property, it won't return undefined for it.\n *\n * @access private\n * @function testDOMProps\n * @param {array.} props - An array of properties to test for\n * @param {object} obj - An object or Element you want to use to test the parameters again\n * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check\n */\n function testDOMProps(props, obj, elem) {\n var item;\n\n for (var i in props) {\n if (props[i] in obj) {\n\n // return the property name as a string\n if (elem === false) {\n return props[i];\n }\n\n item = obj[props[i]];\n\n // let's bind a function\n if (is(item, 'function')) {\n // bind to obj unless overriden\n return fnBind(item, elem || obj);\n }\n\n // return the unbound function or obj or value\n return item;\n }\n }\n return false;\n }\n\n ;\n\n /**\n * testPropsAll tests a list of DOM properties we want to check against.\n * We specify literally ALL possible (known and/or likely) properties on\n * the element including the non-vendor prefixed one, for forward-\n * compatibility.\n *\n * @access private\n * @function testPropsAll\n * @param {string} prop - A string of the property to test for\n * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip\n * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against\n * @param {string} [value] - A string of a css value\n * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set\n */\n function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\n var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n // did they call .prefixed('boxSizing') or are we just testing a prop?\n if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n return testProps(props, prefixed, value, skipValueTest);\n\n // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n } else {\n props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n return testDOMProps(props, prefixed, elem);\n }\n }\n\n // Modernizr.testAllProps() investigates whether a given style property,\n // or any of its vendor-prefixed variants, is recognized\n //\n // Note that the property names must be provided in the camelCase variant.\n // Modernizr.testAllProps('boxSizing')\n ModernizrProto.testAllProps = testPropsAll;\n\n \n\n /**\n * testAllProps determines whether a given CSS property is supported in the browser\n *\n * @memberof Modernizr\n * @name Modernizr.testAllProps\n * @optionName Modernizr.testAllProps()\n * @optionProp testAllProps\n * @access public\n * @function testAllProps\n * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n * @param {string} [value] - String of the value to test\n * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n * @example\n *\n * testAllProps determines whether a given CSS property, in some prefixed form,\n * is supported by the browser.\n *\n * ```js\n * testAllProps('boxSizing') // true\n * ```\n *\n * It can optionally be given a CSS value in string form to test if a property\n * value is valid\n *\n * ```js\n * testAllProps('display', 'block') // true\n * testAllProps('display', 'penguin') // false\n * ```\n *\n * A boolean can be passed as a third parameter to skip the value check when\n * native detection (@supports) isn't available.\n *\n * ```js\n * testAllProps('shapeOutside', 'content-box', true);\n * ```\n */\n\n function testAllProps(prop, value, skipValueTest) {\n return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n }\n ModernizrProto.testAllProps = testAllProps;\n \n/*!\n{\n \"name\": \"CSS Transforms\",\n \"property\": \"csstransforms\",\n \"caniuse\": \"transforms2d\",\n \"tags\": [\"css\"]\n}\n!*/\n\n Modernizr.addTest('csstransforms', function() {\n // Android < 3.0 is buggy, so we sniff and blacklist\n // http://git.io/hHzL7w\n return navigator.userAgent.indexOf('Android 2.') === -1 &&\n testAllProps('transform', 'scale(1)', true);\n });\n\n\n /**\n * testStyles injects an element with style element and some CSS rules\n *\n * @memberof Modernizr\n * @name Modernizr.testStyles\n * @optionName Modernizr.testStyles()\n * @optionProp testStyles\n * @access public\n * @function testStyles\n * @param {string} rule - String representing a css rule\n * @param {function} callback - A function that is used to test the injected element\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n * @returns {boolean}\n * @example\n *\n * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n * along with (possibly multiple) DOM elements. This lets you check for features\n * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n *\n * ```js\n * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n * // elem is the first DOM node in the page (by default #modernizr)\n * // rule is the first argument you supplied - the CSS rule in string form\n *\n * addTest('widthworks', elem.style.width === '9px')\n * });\n * ```\n *\n * If your test requires multiple nodes, you can include a third argument\n * indicating how many additional div elements to include on the page. The\n * additional nodes are injected as children of the `elem` that is returned as\n * the first argument to the callback.\n *\n * ```js\n * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n * document.getElementById('modernizr').style.width === '1px'; // true\n * document.getElementById('modernizr2').style.width === '2px'; // true\n * elem.firstChild === document.getElementById('modernizr2'); // true\n * }, 1);\n * ```\n *\n * By default, all of the additional elements have an ID of `modernizr[n]`, where\n * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n * the second additional is `#modernizr3`, etc.).\n * If you want to have more meaningful IDs for your function, you can provide\n * them as the fourth argument, as an array of strings\n *\n * ```js\n * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n * elem.firstChild === document.getElementById('foo'); // true\n * elem.lastChild === document.getElementById('bar'); // true\n * }, 2, ['foo', 'bar']);\n * ```\n *\n */\n\n var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n \n/*!\n{\n \"name\": \"CSS Supports\",\n \"property\": \"supports\",\n \"caniuse\": \"css-featurequeries\",\n \"tags\": [\"css\"],\n \"builderAliases\": [\"css_supports\"],\n \"notes\": [{\n \"name\": \"W3 Spec\",\n \"href\": \"http://dev.w3.org/csswg/css3-conditional/#at-supports\"\n },{\n \"name\": \"Related Github Issue\",\n \"href\": \"github.com/Modernizr/Modernizr/issues/648\"\n },{\n \"name\": \"W3 Info\",\n \"href\": \"http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface\"\n }]\n}\n!*/\n\n var newSyntax = 'CSS' in window && 'supports' in window.CSS;\n var oldSyntax = 'supportsCSS' in window;\n Modernizr.addTest('supports', newSyntax || oldSyntax);\n\n/*!\n{\n \"name\": \"CSS Transforms 3D\",\n \"property\": \"csstransforms3d\",\n \"caniuse\": \"transforms3d\",\n \"tags\": [\"css\"],\n \"warnings\": [\n \"Chrome may occassionally fail this test on some systems; more info: https://code.google.com/p/chromium/issues/detail?id=129004\"\n ]\n}\n!*/\n\n Modernizr.addTest('csstransforms3d', function() {\n var ret = !!testAllProps('perspective', '1px', true);\n var usePrefix = Modernizr._config.usePrefixes;\n\n // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n // some conditions. As a result, Webkit typically recognizes the syntax but\n // will sometimes throw a false positive, thus we must do a more thorough check:\n if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {\n var mq;\n var defaultStyle = '#modernizr{width:0;height:0}';\n // Use CSS Conditional Rules if available\n if (Modernizr.supports) {\n mq = '@supports (perspective: 1px)';\n } else {\n // Otherwise, Webkit allows this media query to succeed only if the feature is enabled.\n // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n mq = '@media (transform-3d)';\n if (usePrefix) {\n mq += ',(-webkit-transform-3d)';\n }\n }\n\n mq += '{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}';\n\n testStyles(defaultStyle + mq, function(elem) {\n ret = elem.offsetWidth === 7 && elem.offsetHeight === 18;\n });\n }\n\n return ret;\n });\n\n\n // Run each test\n testRunner();\n\n delete ModernizrProto.addTest;\n delete ModernizrProto.addAsyncTest;\n\n // Run the things that are supposed to run after the tests\n for (var i = 0; i < Modernizr._q.length; i++) {\n Modernizr._q[i]();\n }\n\n // Leak Modernizr namespace\n window.Modernizr = Modernizr;\n\n\n;\n\n})(window, document);\nmodule.exports = window.Modernizr;\n})(window);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../.modernizrrc\n ** module id = 18\n ** module chunks = 0\n **/","const context = require('../context');\nconst bubbleset = require('./bubbleset');\nconst bubble = require('./bubble');\nconst cursor = require('./cursor');\nconst select = require('./select');\nconst { KEY } = require('./constant');\nconst text = require('./text');\nconst events = require('./events');\n\nconst EVENTS = {\n blur: onBlur,\n click: onClick,\n dblclick: onDblclick,\n focus: onFocus,\n keydown: onKeydown,\n keypress: onKeypress,\n keyup: onKeyup,\n paste: onPaste,\n};\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onBlur(event) {\n select.clear(event.currentTarget);\n bubble.bubbling(event.currentTarget);\n}\n\nfunction onFocus(event) {\n cursor.restore(event.currentTarget);\n}\n\nfunction onKeyup(event) {\n const code = event.charCode || event.keyCode;\n const isPrintableChar = do {\n if (event.key) {\n event.key.length === 1;\n } else {\n ((code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd);\n }\n };\n\n if (isPrintableChar) {\n event.currentTarget.fireInput();\n }\n}\n\nfunction onKeypress(event) {\n const code = event.charCode || event.keyCode;\n const nodeSet = event.currentTarget;\n\n /* eslint no-case-declarations: 0 */\n switch (code) {\n case KEY.Enter:\n event.preventDefault();\n if (!nodeSet.hasAttribute('disable-controls')) {\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.Comma:\n case KEY.Semicolon:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n }\n}\n\nfunction onKeydown(event) {\n const code = event.charCode || event.keyCode;\n const metaKey = event.ctrlKey || event.metaKey;\n const nodeSet = event.currentTarget;\n const enable = !nodeSet.hasAttribute('disable-controls');\n\n switch (code) {\n case KEY.Esc:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n\n case KEY.Backspace:\n event.preventDefault();\n backSpace(event);\n break;\n\n case KEY.Left:\n event.preventDefault();\n arrowLeft(event);\n break;\n\n // сдвигаем курсор в начало списка\n case KEY.Top:\n event.preventDefault();\n if (enable) {\n const headBubble = bubbleset.headBubble(nodeSet);\n headBubble && select.uniq(headBubble);\n }\n break;\n\n case KEY.Right:\n event.preventDefault();\n arrowRight(event);\n break;\n\n // сдвигаем курсор в конец списка\n // case KEY.Tab:\n case KEY.Bottom:\n event.preventDefault();\n if (enable && select.has(nodeSet)) {\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.a:\n if (metaKey) {\n event.preventDefault();\n\n if (!text.selectAll(null, event.currentTarget)) {\n select.all(nodeSet);\n }\n }\n break;\n }\n}\n\nfunction arrowLeft(event) {\n const selection = context.getSelection();\n\n if (text.arrowLeft(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ 0 ] === nodeSet.startRangeSelect) {\n list[ list.length - 1 ];\n\n } else {\n list[ 0 ];\n }\n };\n\n const node = bubbleset.prevBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n }\n}\n\nfunction arrowRight(event) {\n const selection = context.getSelection();\n\n if (text.arrowRight(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.nextBubble(selection.focusNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ list.length - 1 ] === nodeSet.startRangeSelect) {\n list[ 0 ];\n\n } else {\n list[ list.length - 1 ];\n }\n };\n\n const node = bubbleset.nextBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n\n } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n select.clear(nodeSet);\n selection.collapse(begin.nextSibling, 0);\n\n } else {\n cursor.restore(nodeSet);\n }\n}\n\nfunction backSpace(event) {\n const nodeSet = event.currentTarget;\n nodeSet.normalize();\n\n const selection = context.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n if (text.arrowLeft(selection, true)) {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n } else {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n let node = bubbleset.findBubbleLeft(selection);\n if (node) {\n select.uniq(node);\n return;\n }\n\n const list = select.get(nodeSet);\n\n if (list.length) {\n const prevBubble = list[ 0 ].previousSibling;\n const nextBubble = list[ list.length - 1 ].nextSibling;\n list.forEach(item => item.parentNode.removeChild(item));\n\n if (bubble.isBubbleNode(prevBubble)) {\n select.uniq(prevBubble);\n\n } else if (bubble.isBubbleNode(nextBubble)) {\n select.uniq(nextBubble);\n\n } else {\n nodeSet.focus();\n cursor.restore(nodeSet);\n }\n\n nodeSet.fireChange();\n }\n}\n\nfunction onPaste(event) {\n event.preventDefault();\n\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n return;\n }\n\n const contentType = 'text/plain';\n let data = clipboardData.getData && clipboardData.getData(contentType);\n\n if (!text.replaceString(data) && clipboardData.items) {\n Array.prototype.slice.call(clipboardData.items)\n .filter(item => item.kind === 'string' && item.type === contentType)\n .some(function (item) {\n item.getAsString(text.replaceString);\n return true;\n });\n }\n}\n\nfunction onDblclick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeSet && nodeBubble) {\n event.preventDefault();\n bubble.edit(nodeSet, nodeBubble);\n }\n}\n\nfunction onClick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet) {\n return;\n }\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeBubble) {\n if (event.metaKey || event.ctrlKey) {\n select.add(nodeBubble);\n\n } else if (event.shiftKey) {\n if (!nodeSet.startRangeSelect) {\n select.uniq(nodeBubble);\n\n } else {\n select.range(nodeBubble);\n }\n\n } else {\n select.toggleUniq(nodeBubble);\n }\n\n } else {\n select.clear(nodeSet);\n\n const selection = context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n cursor.restore(nodeSet);\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/editor.js\n **/","/**\n * @module x-bubbles/cursor\n */\n\nconst context = require('../context');\nconst text = require('./text');\nconst select = require('./select');\n\nexports.restore = restore;\nexports.restoreBasis = restoreBasis;\n\n/**\n * Reset the cursor position to the end of the input field.\n * @alias module:x-bubbles/cursor.restore\n * @param {HTMLElement} nodeSet\n */\nfunction restore(nodeSet) {\n select.clear(nodeSet);\n const basis = restoreBasis(nodeSet);\n const selection = context.getSelection();\n selection.removeAllRanges();\n selection.collapse(basis, 1);\n}\n\n/**\n * The creation of the fake text at the end childNodes\n * @alias module:x-bubbles/cursor.restoreBasis\n * @param {HTMLElement} nodeSet\n * @returns {HTMLTextElement} fake text node\n */\nfunction restoreBasis(nodeSet) {\n let fakeText = text.createZws();\n\n if (nodeSet.hasChildNodes()) {\n const lastNode = nodeSet.childNodes[ nodeSet.childNodes.length - 1 ];\n\n if (lastNode.isEqualNode(fakeText)) {\n fakeText = lastNode;\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n return fakeText;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/cursor.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///x-bubbles.min.js","webpack:///webpack/bootstrap 2e7287ebb13d5df3e100","webpack:///./index.js","webpack:///./context.js","webpack:///./core/events.js","webpack:///../~/raf/index.js","webpack:///../~/performance-now/lib/performance-now.js","webpack:///../~/process/browser.js","webpack:///./polyfills/CustomEventCommon.js","webpack:///./core/constant.js","webpack:///./core/text.js","webpack:///./core/bubble.js","webpack:///./core/utils.js","webpack:///./core/bubbleset.js","webpack:///./core/drag.js","webpack:///./core/drag/native.js","webpack:///./core/select.js","webpack:///./core/drag/common.js","webpack:///./core/drag/bubbles.png","webpack:///./core/drag/mouse.js","webpack:///external {\"var\":\"Modernizr\",\"root\":\"modernizr\",\"commonjs2\":\"modernizr\",\"commonjs\":\"modernizr\",\"amd\":\"modernizr\"}","webpack:///./core/editor.js","webpack:///./core/cursor.js"],"names":["XBubbles","modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","optionsPrepare","options","name","OPTIONS","_OPTIONS$name","_slicedToArray","type","def","OPTIONS_PREPARE","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","length","err","Array","isArray","Object","TypeError","_typeof","obj","constructor","prototype","_extends","assign","target","arguments","source","key","hasOwnProperty","context","events","drag","editor","bubble","bubbleset","text","cursor","begining","bubbleDeformation","bubbleFormation","classBubble","draggable","ending","separator","create","HTMLDivElement","createdCallback","this","setAttribute","fireChange","throttle","fireEdit","fireInput","addEventListener","prevent","attachedCallback","init","bubbling","detachedCallback","destroy","_options","keys","reduce","result","item","dataset","items","get","getBubbles","setContent","data","firstChild","removeChild","html2text","appendChild","document","createTextNode","restore","addBubble","bubbleText","nodeBubble","text2bubble","removeBubble","contains","editBubble","edit","registerElement","extends","funk","Function","bool","noop","eval","_defineProperty","defineProperty","enumerable","configurable","writable","scrollX","html","documentElement","body","scrollLeft","clientLeft","scrollY","scrollTop","clientTop","dispatch","element","params","dispatchEvent","Custom","raf","CustomEventCommon","_require","EV","pageX","event","clientX","pageY","clientY","one","eventName","userCallback","callback","removeEventListener","on","off","cancelBubble","returnValue","stopPropagation","preventDefault","BUBBLE_EDIT","bubbles","cancelable","detail","CHANGE","textRange","currentTextRange","editText","textClean","toString","_bubbleValue","BUBBLE_INPUT","animationCallback","apply","CustomEvent","global","now","root","window","vendors","suffix","caf","last","queue","frameDuration","_now","Math","max","setTimeout","cp","slice","cancelled","e","round","handle","fn","cancel","polyfill","requestAnimationFrame","cancelAnimationFrame","process","getNanoSeconds","hrtime","loadTime","performance","hr","Date","getTime","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","nextTick","args","title","browser","env","argv","version","versions","addListener","once","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask","doc","protoEvent","Event","issetCustomEvent","Boolean","createEvent","stopImmediatePropagation","immediatePropagationStopped","evt","initCustomEvent","initEvent","KEY","a","Backspace","Bottom","Cmd","Comma","Enter","Esc","Left","Right","Semicolon","Space","Tab","Top","CLS","DRAGSTART","DROPZONE","DRAGEND","DRAGENTER","DRAGLEAVE","DROP","nodeSet","selection","getSelection","range","removeAllRanges","addRange","replace","pointNode","focusNode","nodeType","Node","TEXT_NODE","anchorNode","createRange","startNode","endNode","previousSibling","nextSibling","setStartBefore","setEndAfter","remove","createZws","node","rangeCount","anchor","createElement","getRangeAt","surroundContents","parentNode","replaceChild","collapse","replaceString","textNode","nodeValue","arrowLeft","extend","_selectionCorrect","selectionCorrect","startOffset","endOffset","revert","isCollapsed","isNativeExtend","offset","substring","checkZws","setStart","setEnd","arrowRight","_selectionCorrect2","DOMContainer","implementation","createHTMLDocument","innerText","trim","selectAll","fromNode","toNode","hasBubbles","dataText","TEXT_ZWS","REG_ZWS","test","String","REG_REPLACE_NON_PRINTABLE","anchorOffset","focusOffset","min","position","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","isBubbleNode","ELEMENT_NODE","hasAttribute","rangeParams","textFake","insertBefore","canUseDrag","wrap","escape","classes","split","classList","add","ranges","getBubbleRanges","nodes","forEach","deleteContents","textParts","map","trimIterator","filter","nonEmptyIterator","parts","str","parseFragmentByEnding","parseFragmentByBeginning","fragment","createDocumentFragment","textPart","insertNode","children","childNodes","setEndBefore","reg","lastIndex","loop","exec","res","index","unescapeHtmlChar","chr","HTML_UNESCAPES","escapeHtmlChar","HTML_ESCAPES","&","<",">","\"","'","`","&","<",">",""","'","`","REG_ESCAPED_HTML","REG_UNESCAPED_HTML","REG_HAS_ESCAPED_HTML","RegExp","REG_HAS_UNESCAPED_HTML","REG_IE","unescape","navigator","userAgent","lastBubble","querySelector","headBubble","querySelectorAll","findBubbleLeft","DOCUMENT_POSITION_FOLLOWING","closestNodeSet","getAttribute","closestNodeBubble","prevBubble","nextBubble","native","mouse","onDragstart","currentDragSet","select","dataTransfer","effectAllowed","setData","list","setDragImage","getDragImage","DRAG_IMG_WIDTH","onDrop","focus","onDragover","dropEffect","onDragenter","onDragleave","onDragend","_require2","EVENTS","dragend","dragenter","dragleave","dragover","dragstart","drop","set","uniq","clear","headList","lastList","startRangeSelect","setSelected","all","PATH_NOT_SELECTED","PATH_SELECTED","has","head","removeAttribute","toggleUniq","isSelected","removeSelected","dragImage","Image","src","onMousedown","__drag__","onMouseup","bind","onMousemove","onScroll","nodeOffsetX","offsetX","nodeOffsetY","offsetY","x","y","currentMoveSet","currentDragElement","dragSet","_","moveElement","cloneNode","style","cssText","Modernizr","csstransforms3d","transform","csstransforms","top","left","onBlur","currentTarget","onFocus","onKeyup","code","charCode","keyCode","isPrintableChar","onKeypress","onKeydown","metaKey","ctrlKey","enable","backSpace","shiftKey","begin","normalize","onPaste","clipboardData","contentType","getData","kind","some","getAsString","onDblclick","onClick","blur","click","dblclick","keydown","keypress","keyup","paste","basis","restoreBasis","fakeText","hasChildNodes","lastNode","isEqualNode"],"mappings":"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","file":"x-bubbles.min.js","sourcesContent":["var XBubbles =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar drag = __webpack_require__(12);\n\tvar editor = __webpack_require__(19);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\tvar text = __webpack_require__(8);\n\tvar cursor = __webpack_require__(20);\n\t\n\tvar OPTIONS = {\n\t begining: ['noop', null],\n\t bubbleDeformation: ['funk', function () {}],\n\t bubbleFormation: ['funk', function () {}],\n\t classBubble: ['noop', 'bubble'],\n\t draggable: ['bool', true],\n\t ending: ['noop', null], // /\\@ya\\.ru/g;\n\t separator: ['noop', /[,;]/]\n\t};\n\t\n\tvar XBubbles = Object.create(HTMLDivElement.prototype, {\n\t createdCallback: {\n\t value: function value() {\n\t this.setAttribute('contenteditable', 'true');\n\t this.setAttribute('spellcheck', 'false');\n\t\n\t this.fireChange = events.throttle(events.fireChange);\n\t this.fireEdit = events.throttle(events.fireEdit);\n\t this.fireInput = events.throttle(events.fireInput);\n\t\n\t this.addEventListener('resize', events.prevent);\n\t this.addEventListener('resizestart', events.prevent);\n\t this.addEventListener('mscontrolselect', events.prevent);\n\t }\n\t },\n\t\n\t attachedCallback: {\n\t value: function value() {\n\t drag.init(this);\n\t editor.init(this);\n\t bubble.bubbling(this);\n\t }\n\t },\n\t\n\t detachedCallback: {\n\t value: function value() {\n\t drag.destroy(this);\n\t editor.destroy(this);\n\t }\n\t },\n\t\n\t /*\n\t attributeChangedCallback: {\n\t value: function (name, prevValue, value) {}\n\t },\n\t */\n\t\n\t options: {\n\t value: function value(name, _value) {\n\t if (!this._options) {\n\t this._options = _extends({}, Object.keys(OPTIONS).reduce(function (result, item) {\n\t result[item] = undefined;\n\t return result;\n\t }, {}), this.dataset);\n\t\n\t optionsPrepare(this._options);\n\t }\n\t\n\t if (typeof _value !== 'undefined') {\n\t this._options[name] = _value;\n\t optionsPrepare(this._options);\n\t } else {\n\t return this._options[name];\n\t }\n\t }\n\t },\n\t\n\t items: {\n\t get: function get() {\n\t return bubbleset.getBubbles(this);\n\t }\n\t },\n\t\n\t setContent: {\n\t value: function value(data) {\n\t while (this.firstChild) {\n\t this.removeChild(this.firstChild);\n\t }\n\t\n\t data = text.html2text(data);\n\t this.appendChild(context.document.createTextNode(data));\n\t bubble.bubbling(this);\n\t cursor.restore(this);\n\t }\n\t },\n\t\n\t addBubble: {\n\t value: function value(bubbleText, data) {\n\t var nodeBubble = bubble.create(this, bubbleText, data);\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (text.text2bubble(this, nodeBubble)) {\n\t cursor.restore(this);\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t removeBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t this.removeChild(nodeBubble);\n\t this.fireChange();\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t },\n\t\n\t editBubble: {\n\t value: function value(nodeBubble) {\n\t if (this.contains(nodeBubble)) {\n\t return bubble.edit(this, nodeBubble);\n\t }\n\t\n\t return false;\n\t }\n\t }\n\t});\n\t\n\tmodule.exports = context.document.registerElement('x-bubbles', {\n\t extends: 'div',\n\t prototype: XBubbles\n\t});\n\t\n\tvar OPTIONS_PREPARE = {\n\t funk: function funk(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return new Function('context', 'return context.' + value + ';')(context);\n\t\n\t case 'function':\n\t return value;\n\t }\n\t },\n\t bool: function bool(value) {\n\t var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\t switch (type) {\n\t case 'string':\n\t return value === 'true' || value === 'on';\n\t\n\t case 'boolean':\n\t return value;\n\t }\n\t },\n\t noop: function noop(value) {\n\t return value;\n\t }\n\t};\n\t\n\tfunction optionsPrepare(options) {\n\t for (var name in OPTIONS) {\n\t var _OPTIONS$name = _slicedToArray(OPTIONS[name], 2);\n\t\n\t var type = _OPTIONS$name[0];\n\t var def = _OPTIONS$name[1];\n\t\n\t options[name] = OPTIONS_PREPARE[type](options[name]);\n\t if (typeof options[name] === 'undefined') {\n\t options[name] = def;\n\t }\n\t }\n\t}\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t /* eslint no-eval: 0 */\n\t return this || (1, eval)('this');\n\t}();\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\t/**\n\t * @module x-bubbles/event\n\t */\n\t\n\tvar raf = __webpack_require__(3);\n\tvar context = __webpack_require__(1);\n\tvar CustomEventCommon = __webpack_require__(6);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar EV = _require.EV;\n\t\n\tvar text = __webpack_require__(8);\n\t\n\texports.scrollX = scrollX;\n\texports.scrollY = scrollY;\n\texports.dispatch = dispatch;\n\t\n\texports.pageX = function (event) {\n\t return event.pageX === null && event.clientX !== null ? event.clientX + scrollX() : event.pageX;\n\t};\n\t\n\texports.pageY = function (event) {\n\t return event.pageY === null && event.clientY !== null ? event.clientY + scrollY() : event.pageY;\n\t};\n\t\n\texports.one = function (target, eventName, userCallback) {\n\t return target.addEventListener(eventName, function callback(event) {\n\t target.removeEventListener(eventName, callback);\n\t userCallback(event);\n\t });\n\t};\n\t\n\texports.on = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.addEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.off = function (target, eventName, userCallback) {\n\t var events = userCallback ? _defineProperty({}, eventName, userCallback) : eventName;\n\t for (var name in events) {\n\t target.removeEventListener(name, events[name]);\n\t }\n\t};\n\t\n\texports.prevent = function (event) {\n\t event.cancelBubble = true;\n\t event.returnValue = false;\n\t event.stopPropagation();\n\t event.preventDefault();\n\t return false;\n\t};\n\t\n\texports.fireEdit = function (nodeBubble) {\n\t dispatch(this, EV.BUBBLE_EDIT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: nodeBubble }\n\t });\n\t};\n\t\n\texports.fireChange = function () {\n\t dispatch(this, EV.CHANGE, {\n\t bubbles: false,\n\t cancelable: false\n\t });\n\t};\n\t\n\texports.fireInput = function () {\n\t var textRange = text.currentTextRange();\n\t var editText = textRange && text.textClean(textRange.toString()) || '';\n\t\n\t if (this._bubbleValue !== editText) {\n\t this._bubbleValue = editText;\n\t\n\t dispatch(this, EV.BUBBLE_INPUT, {\n\t bubbles: false,\n\t cancelable: false,\n\t detail: { data: editText }\n\t });\n\t }\n\t};\n\t\n\texports.throttle = function (callback) {\n\t var throttle = 0;\n\t var animationCallback = function animationCallback() {\n\t throttle = 0;\n\t };\n\t\n\t return function () {\n\t if (throttle) {\n\t return;\n\t }\n\t\n\t throttle = raf(animationCallback);\n\t\n\t callback.apply(this, arguments);\n\t };\n\t};\n\t\n\tfunction scrollX() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n\t}\n\t\n\tfunction scrollY() {\n\t var html = context.document.documentElement;\n\t var body = context.document.body;\n\t return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n\t}\n\t\n\t/**\n\t * Designer events.\n\t *\n\t * @example\n\t * const { Custom } = require('event');\n\t *\n\t * new Custom('custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event~Custom\n\t * @constructor\n\t */\n\tvar Custom = function () {\n\t if (typeof context.CustomEvent === 'function') {\n\t return context.CustomEvent;\n\t }\n\t\n\t return CustomEventCommon;\n\t}();\n\t\n\t/**\n\t * Dispatch event.\n\t *\n\t * @example\n\t * const { dispatch } = require('event');\n\t * dispatch(node, 'custom-event', {\n\t * bubbles: true,\n\t * cancelable: true,\n\t * detail: { data: '123' }\n\t * })\n\t *\n\t * @alias module:x-bubbles/event.dispatch\n\t * @param {HTMLElement} element node events\n\t * @param {string} name event name\n\t * @param {Object} params the event parameters\n\t * @param {boolean} [params.bubbles=false]\n\t * @param {boolean} [params.cancelable=false]\n\t * @param {*} [params.detail]\n\t */\n\tfunction dispatch(element, name) {\n\t var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t element.dispatchEvent(new Custom(name, params));\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var now = __webpack_require__(4)\n\t , root = typeof window === 'undefined' ? global : window\n\t , vendors = ['moz', 'webkit']\n\t , suffix = 'AnimationFrame'\n\t , raf = root['request' + suffix]\n\t , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\t\n\tfor(var i = 0; !raf && i < vendors.length; i++) {\n\t raf = root[vendors[i] + 'Request' + suffix]\n\t caf = root[vendors[i] + 'Cancel' + suffix]\n\t || root[vendors[i] + 'CancelRequest' + suffix]\n\t}\n\t\n\t// Some versions of FF have rAF but not cAF\n\tif(!raf || !caf) {\n\t var last = 0\n\t , id = 0\n\t , queue = []\n\t , frameDuration = 1000 / 60\n\t\n\t raf = function(callback) {\n\t if(queue.length === 0) {\n\t var _now = now()\n\t , next = Math.max(0, frameDuration - (_now - last))\n\t last = next + _now\n\t setTimeout(function() {\n\t var cp = queue.slice(0)\n\t // Clear queue here to prevent\n\t // callbacks from appending listeners\n\t // to the current frame's queue\n\t queue.length = 0\n\t for(var i = 0; i < cp.length; i++) {\n\t if(!cp[i].cancelled) {\n\t try{\n\t cp[i].callback(last)\n\t } catch(e) {\n\t setTimeout(function() { throw e }, 0)\n\t }\n\t }\n\t }\n\t }, Math.round(next))\n\t }\n\t queue.push({\n\t handle: ++id,\n\t callback: callback,\n\t cancelled: false\n\t })\n\t return id\n\t }\n\t\n\t caf = function(handle) {\n\t for(var i = 0; i < queue.length; i++) {\n\t if(queue[i].handle === handle) {\n\t queue[i].cancelled = true\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = function(fn) {\n\t // Wrap in a new function to prevent\n\t // `cancel` potentially being assigned\n\t // to the native rAF function\n\t return raf.call(root, fn)\n\t}\n\tmodule.exports.cancel = function() {\n\t caf.apply(root, arguments)\n\t}\n\tmodule.exports.polyfill = function() {\n\t root.requestAnimationFrame = raf\n\t root.cancelAnimationFrame = caf\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {// Generated by CoffeeScript 1.7.1\n\t(function() {\n\t var getNanoSeconds, hrtime, loadTime;\n\t\n\t if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n\t module.exports = function() {\n\t return performance.now();\n\t };\n\t } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n\t module.exports = function() {\n\t return (getNanoSeconds() - loadTime) / 1e6;\n\t };\n\t hrtime = process.hrtime;\n\t getNanoSeconds = function() {\n\t var hr;\n\t hr = hrtime();\n\t return hr[0] * 1e9 + hr[1];\n\t };\n\t loadTime = getNanoSeconds();\n\t } else if (Date.now) {\n\t module.exports = function() {\n\t return Date.now() - loadTime;\n\t };\n\t loadTime = Date.now();\n\t } else {\n\t module.exports = function() {\n\t return new Date().getTime() - loadTime;\n\t };\n\t loadTime = new Date().getTime();\n\t }\n\t\n\t}).call(this);\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/**\n\t * @constant {Document}\n\t * @private\n\t */\n\tvar doc = context.document;\n\t\n\t/**\n\t * @constant {Object}\n\t * @private\n\t */\n\tvar protoEvent = context.Event.prototype;\n\t\n\tvar issetCustomEvent = false;\n\t\n\ttry {\n\t issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n\t} catch (e) {}\n\t// do nothing\n\t\n\t\n\t/**\n\t * The original function \"stopImmediatePropagation\"\n\t * @constant {function}\n\t * @private\n\t */\n\tvar stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\t\n\t/**\n\t * Override function to set properties \"immediatePropagationStopped\"\n\t */\n\tprotoEvent.stopImmediatePropagation = function () {\n\t this.immediatePropagationStopped = true;\n\t\n\t if (stopImmediatePropagation) {\n\t stopImmediatePropagation.call(this);\n\t } else {\n\t this.stopPropagation();\n\t }\n\t};\n\t\n\tvar CustomEventCommon = function () {\n\t if (issetCustomEvent) {\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('CustomEvent');\n\t\n\t evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\t\n\t return evt;\n\t };\n\t }\n\t\n\t return function (eventName, params) {\n\t params = params || {};\n\t\n\t var bubbles = Boolean(params.bubbles);\n\t var cancelable = Boolean(params.cancelable);\n\t var evt = doc.createEvent('Event');\n\t\n\t evt.initEvent(eventName, bubbles, cancelable);\n\t evt.detail = params.detail;\n\t\n\t return evt;\n\t };\n\t}();\n\t\n\tCustomEventCommon.prototype = protoEvent;\n\t\n\tmodule.exports = CustomEventCommon;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.KEY = {\n\t a: 65,\n\t Backspace: 8,\n\t Bottom: 40,\n\t Cmd: 91,\n\t Comma: 44, // ,\n\t Enter: 13, // Enter\n\t Esc: 27,\n\t Left: 37,\n\t Right: 39,\n\t Semicolon: 59, // ;\n\t Space: 32,\n\t Tab: 9,\n\t Top: 38\n\t};\n\t\n\texports.CLS = {\n\t DRAGSTART: 'drag',\n\t DROPZONE: 'dropzone'\n\t};\n\t\n\texports.EV = {\n\t BUBBLE_EDIT: 'bubble-edit',\n\t BUBBLE_INPUT: 'bubble-input',\n\t CHANGE: 'change',\n\t DRAGEND: 'dragend',\n\t DRAGENTER: 'dragenter',\n\t DRAGLEAVE: 'dragleave',\n\t DRAGSTART: 'dragstart',\n\t DROP: 'drop'\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\t/* eslint-disable max-len */\n\tvar REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n\tvar REG_ZWS = /\\u200B/;\n\tvar TEXT_ZWS = '\\u200B';\n\t\n\texports.arrowRight = arrowRight;\n\texports.arrowLeft = arrowLeft;\n\texports.remove = remove;\n\texports.html2text = html2text;\n\texports.currentTextRange = currentTextRange;\n\texports.text2bubble = text2bubble;\n\texports.replaceString = replaceString;\n\texports.selectAll = selectAll;\n\texports.textClean = textClean;\n\texports.checkZws = checkZws;\n\texports.createZws = createZws;\n\t\n\tfunction text2bubble(nodeSet, nodeBubble, selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var range = currentTextRange(selection);\n\t\n\t if (range && !nodeBubble) {\n\t nodeBubble = bubble.create(nodeSet, range.toString());\n\t }\n\t\n\t if (!nodeBubble) {\n\t return false;\n\t }\n\t\n\t if (range) {\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t replace(selection, nodeBubble);\n\t } else {\n\t nodeSet.appendChild(nodeBubble);\n\t }\n\t\n\t nodeSet.fireInput();\n\t nodeSet.fireChange();\n\t return true;\n\t}\n\t\n\tfunction currentTextRange(selection) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t var pointNode = selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE ? selection.focusNode : selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE ? selection.anchorNode : undefined;\n\t\n\t if (!pointNode) {\n\t return;\n\t }\n\t\n\t var range = context.document.createRange();\n\t var startNode = pointNode;\n\t var endNode = pointNode;\n\t var item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t startNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = pointNode;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t endNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t range.setStartBefore(startNode);\n\t range.setEndAfter(endNode);\n\t\n\t return range;\n\t}\n\t\n\tfunction remove(selection) {\n\t return replace(selection, createZws());\n\t}\n\t\n\tfunction replace(selection, node) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.rangeCount) {\n\t return false;\n\t }\n\t\n\t var anchor = context.document.createElement('span');\n\t selection.getRangeAt(0).surroundContents(anchor);\n\t anchor.parentNode.replaceChild(node, anchor);\n\t\n\t selection.removeAllRanges();\n\t selection.collapse(node, 0);\n\t\n\t return true;\n\t}\n\t\n\tfunction replaceString(data, selection) {\n\t data = textClean(data);\n\t if (!data) {\n\t return false;\n\t }\n\t\n\t selection = selection || context.getSelection();\n\t var textNode = context.document.createTextNode(data);\n\t\n\t if (!replace(selection, textNode)) {\n\t return false;\n\t }\n\t\n\t selection.collapse(textNode, textNode.nodeValue.length);\n\t return true;\n\t}\n\t\n\tfunction arrowLeft(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect.startNode;\n\t var endNode = _selectionCorrect.endNode;\n\t var startOffset = _selectionCorrect.startOffset;\n\t var endOffset = _selectionCorrect.endOffset;\n\t var revert = _selectionCorrect.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(startNode, startOffset);\n\t return true;\n\t }\n\t\n\t var isNativeExtend = Boolean(selection.extend);\n\t revert = isNativeExtend ? revert : !revert;\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t if (offset === null) {\n\t offset = node.nodeValue.length;\n\t }\n\t\n\t if (offset - 1 < 0) {\n\t node = node.previousSibling;\n\t offset = null;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset - 1, offset);\n\t\n\t if (checkZws(text)) {\n\t offset = offset - 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node || offset === null) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t if (isNativeExtend) {\n\t selection.extend(node, offset - 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset - 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset - 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset - 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction arrowRight(selection, extend) {\n\t selection = selection || context.getSelection();\n\t\n\t if (!selection || !selection.focusNode || selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t return false;\n\t }\n\t\n\t var _selectionCorrect2 = selectionCorrect(selection);\n\t\n\t var startNode = _selectionCorrect2.startNode;\n\t var endNode = _selectionCorrect2.endNode;\n\t var startOffset = _selectionCorrect2.startOffset;\n\t var endOffset = _selectionCorrect2.endOffset;\n\t var revert = _selectionCorrect2.revert;\n\t\n\t\n\t if (!selection.isCollapsed && !extend) {\n\t selection.collapse(endNode, endOffset);\n\t return true;\n\t }\n\t\n\t var node = revert ? startNode : endNode;\n\t var offset = revert ? startOffset : endOffset;\n\t\n\t while (node) {\n\t if (node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var len = node.nodeValue.length;\n\t\n\t if (offset + 1 > len) {\n\t node = node.nextSibling;\n\t offset = 0;\n\t continue;\n\t }\n\t\n\t var text = node.nodeValue.substring(offset, offset + 1);\n\t\n\t if (checkZws(text)) {\n\t offset = offset + 1;\n\t continue;\n\t }\n\t\n\t break;\n\t }\n\t\n\t if (!node) {\n\t return false;\n\t }\n\t\n\t if (extend) {\n\t var isNativeExtend = Boolean(selection.extend);\n\t\n\t if (isNativeExtend) {\n\t selection.extend(node, offset + 1);\n\t } else {\n\t var range = context.document.createRange();\n\t\n\t if (revert) {\n\t range.setStart(node, offset + 1);\n\t range.setEnd(endNode, endOffset);\n\t } else {\n\t range.setStart(startNode, startOffset);\n\t range.setEnd(node, offset + 1);\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t }\n\t } else {\n\t selection.collapse(node, offset + 1);\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction html2text(value) {\n\t if (!value) {\n\t return '';\n\t }\n\t\n\t var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n\t DOMContainer.innerText = value;\n\t\n\t return DOMContainer.innerText.replace(/^[\\u0020\\u00a0]+$/gm, '').replace(/\\n/gm, ' ').trim();\n\t}\n\t\n\tfunction selectAll(selection, nodeSet) {\n\t selection = selection || context.getSelection();\n\t var node = selection && selection.anchorNode;\n\t\n\t if (!node || node.nodeType !== Node.TEXT_NODE) {\n\t return false;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t fromNode = item;\n\t item = item.previousSibling;\n\t }\n\t\n\t item = node;\n\t\n\t while (item && item.nodeType === Node.TEXT_NODE) {\n\t toNode = item;\n\t item = item.nextSibling;\n\t }\n\t\n\t var hasBubbles = bubbleset.hasBubbles(nodeSet);\n\t var range = context.document.createRange();\n\t range.setStartBefore(fromNode);\n\t range.setEndAfter(toNode);\n\t\n\t var dataText = textClean(range.toString());\n\t\n\t if (dataText || !dataText && !hasBubbles) {\n\t if (!dataText) {\n\t range.collapse();\n\t }\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createZws() {\n\t return context.document.createTextNode(TEXT_ZWS);\n\t}\n\t\n\tfunction checkZws(value) {\n\t return REG_ZWS.test(value);\n\t}\n\t\n\tfunction textClean(value) {\n\t return String(value || '').trim().replace(REG_REPLACE_NON_PRINTABLE, '');\n\t}\n\t\n\tfunction selectionCorrect(selection) {\n\t var startNode = selection.anchorNode;\n\t var endNode = selection.focusNode;\n\t var startOffset = selection.anchorOffset;\n\t var endOffset = selection.focusOffset;\n\t var revert = false;\n\t\n\t if (startNode === endNode) {\n\t startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n\t endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n\t revert = selection.anchorOffset > selection.focusOffset;\n\t } else {\n\t var position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t startNode = selection.focusNode;\n\t startOffset = selection.focusOffset;\n\t endNode = selection.anchorNode;\n\t endOffset = selection.anchorOffset;\n\t revert = true;\n\t }\n\t }\n\t\n\t return { startNode: startNode, endNode: endNode, startOffset: startOffset, endOffset: endOffset, revert: revert };\n\t}\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar escape = _require.escape;\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.isBubbleNode = isBubbleNode;\n\texports.bubbling = bubbling;\n\texports.create = create;\n\texports.edit = edit;\n\t\n\tfunction isBubbleNode(node) {\n\t if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n\t return false;\n\t }\n\t\n\t return node.hasAttribute('bubble');\n\t}\n\t\n\tfunction edit(nodeSet, nodeBubble) {\n\t if (nodeBubble.hasAttribute('readonly')) {\n\t return false;\n\t }\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection) {\n\t return false;\n\t }\n\t\n\t var bubbleDeformation = nodeSet.options('bubbleDeformation');\n\t var rangeParams = bubbleDeformation(nodeBubble);\n\t\n\t if (!rangeParams) {\n\t var dataText = text.textClean(nodeBubble.innerText);\n\t\n\t rangeParams = {\n\t text: dataText,\n\t startOffset: 0,\n\t endOffset: dataText.length\n\t };\n\t }\n\t\n\t var textFake = text.createZws();\n\t var textNode = context.document.createTextNode(rangeParams.text);\n\t\n\t nodeSet.fireEdit(nodeBubble);\n\t nodeSet.replaceChild(textNode, nodeBubble);\n\t nodeSet.insertBefore(textFake, textNode);\n\t\n\t var range = context.document.createRange();\n\t range.setStart(textNode, rangeParams.startOffset);\n\t range.setEnd(textNode, rangeParams.endOffset);\n\t\n\t selection.removeAllRanges();\n\t selection.addRange(range);\n\t return true;\n\t}\n\t\n\tfunction create(nodeSet, dataText) {\n\t var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t dataText = text.textClean(dataText);\n\t\n\t if (!dataText) {\n\t return;\n\t }\n\t\n\t var bubbleFormation = nodeSet.options('bubbleFormation');\n\t var classBubble = nodeSet.options('classBubble');\n\t var draggable = canUseDrag() && nodeSet.options('draggable');\n\t var wrap = context.document.createElement('span');\n\t\n\t wrap.innerText = dataText;\n\t\n\t if (draggable) {\n\t wrap.setAttribute('draggable', 'true');\n\t }\n\t\n\t for (var key in data) {\n\t if (data[key]) {\n\t wrap.setAttribute('data-' + key, escape(data[key]));\n\t }\n\t }\n\t\n\t bubbleFormation(wrap);\n\t\n\t if (classBubble) {\n\t var classes = String(classBubble).trim().split(/\\s+/);\n\t var len = classes.length;\n\t\n\t while (len--) {\n\t wrap.classList.add(classes[len]);\n\t }\n\t }\n\t\n\t wrap.setAttribute('bubble', '');\n\t wrap.setAttribute('contenteditable', 'false');\n\t\n\t return wrap;\n\t}\n\t\n\tfunction bubbling(nodeSet) {\n\t var separator = nodeSet.options('separator');\n\t var ending = nodeSet.options('ending');\n\t var begining = nodeSet.options('begining');\n\t var ranges = getBubbleRanges(nodeSet);\n\t var nodes = [];\n\t\n\t ranges.forEach(function (range) {\n\t var dataText = text.textClean(range.toString());\n\t\n\t if (!dataText) {\n\t range.deleteContents();\n\t return;\n\t }\n\t\n\t var textParts = [dataText];\n\t\n\t if (separator) {\n\t textParts = dataText.split(separator).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (ending) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByEnding(str, ending));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t } else if (begining) {\n\t textParts = textParts.reduce(function (parts, str) {\n\t return parts.concat(parseFragmentByBeginning(str, begining));\n\t }, []).map(trimIterator).filter(nonEmptyIterator);\n\t }\n\t\n\t if (!textParts.length) {\n\t range.deleteContents();\n\t }\n\t\n\t var fragment = context.document.createDocumentFragment();\n\t\n\t textParts.forEach(function (textPart) {\n\t var nodeBubble = create(nodeSet, textPart);\n\t if (nodeBubble) {\n\t fragment.appendChild(nodeBubble);\n\t nodes.push(nodeBubble);\n\t }\n\t });\n\t\n\t range.deleteContents();\n\t range.insertNode(fragment);\n\t });\n\t\n\t nodeSet.fireInput();\n\t\n\t if (nodes.length) {\n\t nodeSet.fireChange();\n\t }\n\t\n\t return nodes;\n\t}\n\t\n\tfunction getBubbleRanges(nodeSet) {\n\t var ranges = [];\n\t var children = nodeSet.childNodes;\n\t var range = void 0;\n\t var node = void 0;\n\t\n\t for (var i = 0; i < children.length; i++) {\n\t node = children[i];\n\t\n\t if (isBubbleNode(node)) {\n\t if (range) {\n\t range.setEndBefore(node);\n\t ranges.push(range);\n\t range = undefined;\n\t }\n\t } else {\n\t if (!range) {\n\t range = context.document.createRange();\n\t range.setStartBefore(node);\n\t }\n\t }\n\t }\n\t\n\t if (range) {\n\t range.setEndAfter(node);\n\t ranges.push(range);\n\t }\n\t\n\t return ranges;\n\t}\n\t\n\tfunction trimIterator(str) {\n\t return str.trim();\n\t}\n\t\n\tfunction nonEmptyIterator(str) {\n\t return Boolean(str);\n\t}\n\t\n\tfunction parseFragmentByEnding(str, reg) {\n\t var parts = [];\n\t var lastIndex = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while (reg.exec(str) !== null && loop) {\n\t loop--;\n\t parts.push(str.substring(lastIndex, reg.lastIndex));\n\t lastIndex = reg.lastIndex;\n\t }\n\t\n\t return parts;\n\t}\n\t\n\tfunction parseFragmentByBeginning(str, reg) {\n\t var parts = [];\n\t var res = void 0;\n\t var index = 0;\n\t var loop = 999;\n\t\n\t reg.lastIndex = 0;\n\t while ((res = reg.exec(str)) !== null && loop) {\n\t loop--;\n\t if (index !== res.index) {\n\t parts.push(str.substring(index, res.index));\n\t index = res.index;\n\t }\n\t }\n\t\n\t parts.push(str.substring(index, str.length));\n\t return parts;\n\t}\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\t\n\t/* eslint quotes: 0 */\n\t\n\tvar HTML_ESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`'\n\t};\n\t\n\tvar HTML_UNESCAPES = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '"': '\"',\n\t ''': \"'\",\n\t '`': '`'\n\t};\n\t\n\tvar REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\n\tvar REG_UNESCAPED_HTML = /[&<>\"'`]/g;\n\tvar REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\n\tvar REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\n\tvar REG_IE = /Trident|Edge/;\n\t\n\texports.escape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n\t return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.unescape = function (data) {\n\t data = String(data);\n\t\n\t if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n\t return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n\t }\n\t\n\t return data;\n\t};\n\t\n\texports.canUseDrag = function () {\n\t return !REG_IE.test(context.navigator.userAgent);\n\t};\n\t\n\tfunction unescapeHtmlChar(chr) {\n\t return HTML_UNESCAPES[chr];\n\t}\n\t\n\tfunction escapeHtmlChar(chr) {\n\t return HTML_ESCAPES[chr];\n\t}\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bubble = __webpack_require__(9);\n\tvar text = __webpack_require__(8);\n\t\n\texports.closestNodeBubble = closestNodeBubble;\n\texports.closestNodeSet = closestNodeSet;\n\texports.findBubbleLeft = findBubbleLeft;\n\texports.getBubbles = getBubbles;\n\texports.hasBubbles = hasBubbles;\n\texports.headBubble = headBubble;\n\texports.lastBubble = lastBubble;\n\texports.nextBubble = nextBubble;\n\texports.prevBubble = prevBubble;\n\t\n\tfunction lastBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:last-child');\n\t}\n\t\n\tfunction headBubble(nodeSet) {\n\t return nodeSet.querySelector('[bubble]:first-child');\n\t}\n\t\n\tfunction getBubbles(nodeSet) {\n\t return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n\t}\n\t\n\tfunction hasBubbles(nodeSet) {\n\t return Boolean(nodeSet.querySelector('[bubble]'));\n\t}\n\t\n\tfunction findBubbleLeft(selection) {\n\t if (!selection.focusNode || !selection.anchorNode) {\n\t return;\n\t }\n\t\n\t var node = selection.focusNode.previousSibling;\n\t\n\t if (selection.anchorNode !== selection.focusNode && selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t node = selection.anchorNode.previousSibling;\n\t }\n\t\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n\t return;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction closestNodeSet(node) {\n\t while (node) {\n\t if (node.nodeType === Node.ELEMENT_NODE && node.getAttribute('is') === 'x-bubbles') {\n\t\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction closestNodeBubble(node) {\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.parentNode;\n\t }\n\t}\n\t\n\tfunction prevBubble(target) {\n\t var node = target && target.previousSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.previousSibling;\n\t }\n\t}\n\t\n\tfunction nextBubble(target) {\n\t var node = target && target.nextSibling;\n\t while (node) {\n\t if (bubble.isBubbleNode(node)) {\n\t return node;\n\t }\n\t\n\t node = node.nextSibling;\n\t }\n\t}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar native = __webpack_require__(13);\n\tvar mouse = __webpack_require__(17);\n\t\n\tvar _require = __webpack_require__(10);\n\t\n\tvar canUseDrag = _require.canUseDrag;\n\t\n\t\n\texports.init = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.init(nodeSet);\n\t }\n\t\n\t return mouse.init(nodeSet);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t if (canUseDrag()) {\n\t return native.destroy(nodeSet);\n\t }\n\t\n\t return mouse.destroy(nodeSet);\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar events = __webpack_require__(2);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar EVENTS = {\n\t dragend: onDragend,\n\t dragenter: onDragenter,\n\t dragleave: onDragleave,\n\t dragover: onDragover,\n\t dragstart: onDragstart,\n\t drop: onDrop\n\t};\n\t\n\tvar currentDragSet = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onDragstart(event) {\n\t event.stopPropagation();\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (!nodeSet || !nodeBubble) {\n\t event.preventDefault();\n\t return;\n\t }\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = nodeSet;\n\t nodeSet.classList.add(CLS.DRAGSTART);\n\t select.add(nodeBubble);\n\t\n\t event.dataTransfer.effectAllowed = 'move';\n\t event.dataTransfer.setData('text/plain', '');\n\t\n\t var list = select.get(currentDragSet);\n\t if (list.length > 1) {\n\t event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n\t }\n\t}\n\t\n\tfunction onDrop(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet || nodeSet === currentDragSet) {\n\t return;\n\t }\n\t\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t}\n\t\n\tfunction onDragover(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t event.dataTransfer.dropEffect = 'move';\n\t}\n\t\n\tfunction onDragenter(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragleave(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t}\n\t\n\tfunction onDragend(event) {\n\t event.stopPropagation();\n\t event.preventDefault();\n\t\n\t if (!currentDragSet) {\n\t return;\n\t }\n\t\n\t currentDragSet.classList.remove(CLS.DRAGSTART);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t nodeSet.classList.remove(CLS.DROPZONE);\n\t }\n\t\n\t currentDragSet = null;\n\t}\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubble = __webpack_require__(9);\n\tvar bubbleset = __webpack_require__(11);\n\t\n\tvar slice = Array.prototype.slice;\n\tvar PATH_SELECTED = '[bubble][selected]';\n\tvar PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\t\n\texports.all = all;\n\texports.add = add;\n\texports.clear = clear;\n\texports.get = get;\n\texports.uniq = uniq;\n\texports.head = head;\n\texports.last = last;\n\texports.has = has;\n\texports.range = range;\n\texports.toggleUniq = toggleUniq;\n\t\n\tfunction range(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return;\n\t }\n\t\n\t var set = node.parentNode;\n\t var list = get(set);\n\t\n\t if (!list.length) {\n\t uniq(node);\n\t return;\n\t }\n\t\n\t clear(set);\n\t\n\t var headList = list[0];\n\t var lastList = list[list.length - 1];\n\t\n\t if (headList === lastList || !set.startRangeSelect) {\n\t set.startRangeSelect = headList;\n\t }\n\t\n\t var fromNode = void 0;\n\t var toNode = void 0;\n\t var position = node.compareDocumentPosition(set.startRangeSelect);\n\t\n\t if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t fromNode = set.startRangeSelect;\n\t toNode = node;\n\t } else {\n\t fromNode = node;\n\t toNode = set.startRangeSelect;\n\t }\n\t\n\t if (fromNode && toNode) {\n\t var item = fromNode;\n\t\n\t while (item) {\n\t if (!setSelected(item)) {\n\t break;\n\t }\n\t\n\t if (item === toNode) {\n\t break;\n\t }\n\t\n\t item = item.nextSibling;\n\t }\n\t\n\t bubble.bubbling(set);\n\t }\n\t}\n\t\n\tfunction all(nodeSet) {\n\t slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(function (item) {\n\t return setSelected(item);\n\t });\n\t nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\t\n\t bubble.bubbling(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t}\n\t\n\tfunction has(nodeSet) {\n\t return Boolean(nodeSet.querySelector(PATH_SELECTED));\n\t}\n\t\n\tfunction head(set) {\n\t return get(set)[0];\n\t}\n\t\n\tfunction last(set) {\n\t var list = get(set);\n\t return list[list.length - 1];\n\t}\n\t\n\tfunction get(nodeSet) {\n\t return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n\t}\n\t\n\tfunction clear(nodeSet) {\n\t get(nodeSet).forEach(function (item) {\n\t return item.removeAttribute('selected');\n\t });\n\t}\n\t\n\tfunction add(node) {\n\t if (setSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t nodeSet.startRangeSelect = node;\n\t // ???\n\t bubble.bubbling(nodeSet);\n\t\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction uniq(node) {\n\t if (!bubble.isBubbleNode(node)) {\n\t return false;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t var selection = context.getSelection();\n\t\n\t selection && selection.removeAllRanges();\n\t clear(nodeSet);\n\t\n\t return add(node);\n\t}\n\t\n\tfunction toggleUniq(node) {\n\t if (isSelected(node)) {\n\t var nodeSet = bubbleset.closestNodeSet(node);\n\t\n\t if (get(nodeSet).length === 1) {\n\t return removeSelected(node);\n\t }\n\t }\n\t\n\t return uniq(node);\n\t}\n\t\n\tfunction isSelected(node) {\n\t return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n\t}\n\t\n\tfunction setSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.setAttribute('selected', '');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction removeSelected(node) {\n\t if (bubble.isBubbleNode(node)) {\n\t node.removeAttribute('selected');\n\t return true;\n\t }\n\t\n\t return false;\n\t}\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar DRAG_IMG_WIDTH = 16;\n\t\n\tvar dragImage = null;\n\t\n\texports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\t\n\texports.getDragImage = function () {\n\t if (!dragImage) {\n\t dragImage = new Image();\n\t dragImage.src = __webpack_require__(16);\n\t }\n\t\n\t return dragImage;\n\t};\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar events = __webpack_require__(2);\n\tvar select = __webpack_require__(14);\n\tvar bubbleset = __webpack_require__(11);\n\tvar Modernizr = __webpack_require__(18);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar CLS = _require.CLS;\n\tvar EV = _require.EV;\n\t\n\tvar _require2 = __webpack_require__(15);\n\t\n\tvar getDragImage = _require2.getDragImage;\n\tvar DRAG_IMG_WIDTH = _require2.DRAG_IMG_WIDTH;\n\t\n\t\n\tvar currentDragSet = null;\n\tvar currentMoveSet = null;\n\tvar currentDragElement = null;\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, 'mousedown', onMousedown);\n\t};\n\t\n\tfunction onMousedown(event) {\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t if (!nodeBubble) {\n\t return;\n\t }\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t event.preventDefault();\n\t nodeSet.focus();\n\t\n\t var drag = nodeSet.__drag__ = {\n\t onMouseup: onMouseup.bind(this, nodeSet),\n\t onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n\t onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n\t nodeOffsetX: event.offsetX,\n\t nodeOffsetY: event.offsetY,\n\t x: 0,\n\t y: 0\n\t };\n\t\n\t currentDragSet = null;\n\t currentMoveSet = null;\n\t currentDragElement = null;\n\t\n\t events.one(document, 'mouseup', drag.onMouseup);\n\t events.on(document, 'mousemove', drag.onMousemove);\n\t events.on(document, 'scroll', drag.onScroll);\n\t}\n\t\n\tfunction onMouseup(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t events.off(document, 'mousemove', drag.onMousemove);\n\t events.off(document, 'scroll', drag.onScroll);\n\t delete dragSet.__drag__;\n\t\n\t if (currentDragElement) {\n\t currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n\t currentDragElement = null;\n\t }\n\t\n\t if (currentMoveSet) {\n\t var _ = currentMoveSet;\n\t currentMoveSet = null;\n\t\n\t _.classList.remove(CLS.DROPZONE);\n\t events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n\t }\n\t\n\t if (currentDragSet) {\n\t (function () {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t var list = select.get(currentDragSet);\n\t\n\t if (list.length) {\n\t list.forEach(function (item) {\n\t return nodeSet.appendChild(item);\n\t });\n\t\n\t setTimeout(function () {\n\t nodeSet.focus();\n\t nodeSet.fireChange();\n\t }, 0);\n\t }\n\t }\n\t\n\t var _ = currentDragSet;\n\t currentDragSet = null;\n\t\n\t _.classList.remove(CLS.DRAGSTART);\n\t events.dispatch(_, EV.DROP, { bubbles: false, cancelable: false });\n\t events.dispatch(_, EV.DRAGEND, { bubbles: false, cancelable: false });\n\t })();\n\t }\n\t}\n\t\n\tfunction onMousemove(dragSet, event) {\n\t var drag = dragSet.__drag__;\n\t if (!drag) {\n\t return;\n\t }\n\t\n\t if (!currentDragSet) {\n\t var selection = context.getSelection();\n\t selection && selection.removeAllRanges();\n\t\n\t currentDragSet = dragSet;\n\t currentDragSet.classList.add(CLS.DRAGSTART);\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t var moveElement = void 0;\n\t\n\t if (nodeBubble) {\n\t select.add(nodeBubble);\n\t if (select.get(currentDragSet).length === 1) {\n\t moveElement = nodeBubble.cloneNode(true);\n\t }\n\t }\n\t\n\t if (!moveElement) {\n\t moveElement = getDragImage();\n\t drag.nodeOffsetX = DRAG_IMG_WIDTH;\n\t drag.nodeOffsetY = DRAG_IMG_WIDTH;\n\t }\n\t\n\t currentDragElement = document.body.appendChild(document.createElement('div'));\n\t currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n\t currentDragElement.appendChild(moveElement);\n\t\n\t events.dispatch(currentDragSet, EV.DRAGSTART, { bubbles: false, cancelable: false });\n\t }\n\t\n\t drag.x = event.clientX;\n\t drag.y = event.clientY;\n\t onScroll(dragSet);\n\t\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t if (nodeSet && nodeSet !== currentDragSet) {\n\t if (currentMoveSet && currentMoveSet !== nodeSet) {\n\t currentMoveSet.classList.remove(CLS.DROPZONE);\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n\t } else if (!currentMoveSet) {\n\t nodeSet.classList.add(CLS.DROPZONE);\n\t currentMoveSet = nodeSet;\n\t events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n\t }\n\t } else if (currentMoveSet) {\n\t var _ = currentMoveSet;\n\t currentMoveSet = null;\n\t\n\t _.classList.remove(CLS.DROPZONE);\n\t events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n\t }\n\t}\n\t\n\tfunction onScroll(dragSet) {\n\t var drag = dragSet.__drag__;\n\t if (!drag || !currentDragElement) {\n\t return;\n\t }\n\t\n\t var x = drag.x - drag.nodeOffsetX + events.scrollX();\n\t var y = drag.y - drag.nodeOffsetY + events.scrollY();\n\t\n\t if (Modernizr.csstransforms3d) {\n\t currentDragElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n\t } else if (Modernizr.csstransforms) {\n\t currentDragElement.style.transform = 'translate(' + x + 'px, ' + y + 'px)';\n\t } else {\n\t currentDragElement.style.top = y + 'px';\n\t currentDragElement.style.left = x + 'px';\n\t }\n\t}\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = Modernizr;\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar context = __webpack_require__(1);\n\tvar bubbleset = __webpack_require__(11);\n\tvar bubble = __webpack_require__(9);\n\tvar cursor = __webpack_require__(20);\n\tvar select = __webpack_require__(14);\n\t\n\tvar _require = __webpack_require__(7);\n\t\n\tvar KEY = _require.KEY;\n\t\n\tvar text = __webpack_require__(8);\n\tvar events = __webpack_require__(2);\n\t\n\tvar EVENTS = {\n\t blur: onBlur,\n\t click: onClick,\n\t dblclick: onDblclick,\n\t focus: onFocus,\n\t keydown: onKeydown,\n\t keypress: onKeypress,\n\t keyup: onKeyup,\n\t paste: onPaste\n\t};\n\t\n\texports.init = function (nodeSet) {\n\t events.on(nodeSet, EVENTS);\n\t};\n\t\n\texports.destroy = function (nodeSet) {\n\t events.off(nodeSet, EVENTS);\n\t};\n\t\n\tfunction onBlur(event) {\n\t select.clear(event.currentTarget);\n\t bubble.bubbling(event.currentTarget);\n\t}\n\t\n\tfunction onFocus(event) {\n\t cursor.restore(event.currentTarget);\n\t}\n\t\n\tfunction onKeyup(event) {\n\t var code = event.charCode || event.keyCode;\n\t var isPrintableChar = event.key ? event.key.length === 1 : (code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd;\n\t\n\t if (isPrintableChar) {\n\t event.currentTarget.fireInput();\n\t }\n\t}\n\t\n\tfunction onKeypress(event) {\n\t var code = event.charCode || event.keyCode;\n\t var nodeSet = event.currentTarget;\n\t\n\t /* eslint no-case-declarations: 0 */\n\t switch (code) {\n\t case KEY.Enter:\n\t event.preventDefault();\n\t if (!nodeSet.hasAttribute('disable-controls')) {\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.Comma:\n\t case KEY.Semicolon:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t }\n\t}\n\t\n\tfunction onKeydown(event) {\n\t var code = event.charCode || event.keyCode;\n\t var metaKey = event.ctrlKey || event.metaKey;\n\t var nodeSet = event.currentTarget;\n\t var enable = !nodeSet.hasAttribute('disable-controls');\n\t\n\t switch (code) {\n\t case KEY.Esc:\n\t event.preventDefault();\n\t bubble.bubbling(nodeSet);\n\t cursor.restore(nodeSet);\n\t break;\n\t\n\t case KEY.Backspace:\n\t event.preventDefault();\n\t backSpace(event);\n\t break;\n\t\n\t case KEY.Left:\n\t event.preventDefault();\n\t arrowLeft(event);\n\t break;\n\t\n\t // сдвигаем курсор в начало списка\n\t case KEY.Top:\n\t event.preventDefault();\n\t if (enable) {\n\t var headBubble = bubbleset.headBubble(nodeSet);\n\t headBubble && select.uniq(headBubble);\n\t }\n\t break;\n\t\n\t case KEY.Right:\n\t event.preventDefault();\n\t arrowRight(event);\n\t break;\n\t\n\t // сдвигаем курсор в конец списка\n\t // case KEY.Tab:\n\t case KEY.Bottom:\n\t event.preventDefault();\n\t if (enable && select.has(nodeSet)) {\n\t cursor.restore(nodeSet);\n\t }\n\t break;\n\t\n\t case KEY.a:\n\t if (metaKey) {\n\t event.preventDefault();\n\t\n\t if (!text.selectAll(null, event.currentTarget)) {\n\t select.all(nodeSet);\n\t }\n\t }\n\t break;\n\t }\n\t}\n\t\n\tfunction arrowLeft(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowLeft(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[0] === nodeSet.startRangeSelect ? list[list.length - 1] : list[0];\n\t\n\t var node = bubbleset.prevBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t }\n\t}\n\t\n\tfunction arrowRight(event) {\n\t var selection = context.getSelection();\n\t\n\t if (text.arrowRight(selection, event.shiftKey)) {\n\t return;\n\t }\n\t\n\t if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n\t var nodeBubble = bubbleset.nextBubble(selection.focusNode);\n\t nodeBubble && select.uniq(nodeBubble);\n\t return;\n\t }\n\t\n\t var nodeSet = event.currentTarget;\n\t var list = select.get(nodeSet);\n\t var begin = list.length > 1 && list[list.length - 1] === nodeSet.startRangeSelect ? list[0] : list[list.length - 1];\n\t\n\t var node = bubbleset.nextBubble(begin);\n\t\n\t if (node) {\n\t if (event.shiftKey) {\n\t select.range(node);\n\t } else {\n\t select.uniq(node);\n\t }\n\t } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n\t select.clear(nodeSet);\n\t selection.collapse(begin.nextSibling, 0);\n\t } else {\n\t cursor.restore(nodeSet);\n\t }\n\t}\n\t\n\tfunction backSpace(event) {\n\t var nodeSet = event.currentTarget;\n\t nodeSet.normalize();\n\t\n\t var selection = context.getSelection();\n\t if (!selection) {\n\t return;\n\t }\n\t\n\t if (selection.isCollapsed) {\n\t if (text.arrowLeft(selection, true)) {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t } else {\n\t text.remove(selection);\n\t nodeSet.fireInput();\n\t return;\n\t }\n\t\n\t var node = bubbleset.findBubbleLeft(selection);\n\t if (node) {\n\t select.uniq(node);\n\t return;\n\t }\n\t\n\t var list = select.get(nodeSet);\n\t\n\t if (list.length) {\n\t var prevBubble = list[0].previousSibling;\n\t var nextBubble = list[list.length - 1].nextSibling;\n\t list.forEach(function (item) {\n\t return item.parentNode.removeChild(item);\n\t });\n\t\n\t if (bubble.isBubbleNode(prevBubble)) {\n\t select.uniq(prevBubble);\n\t } else if (bubble.isBubbleNode(nextBubble)) {\n\t select.uniq(nextBubble);\n\t } else {\n\t nodeSet.focus();\n\t cursor.restore(nodeSet);\n\t }\n\t\n\t nodeSet.fireChange();\n\t }\n\t}\n\t\n\tfunction onPaste(event) {\n\t event.preventDefault();\n\t\n\t var clipboardData = event.clipboardData;\n\t if (!clipboardData) {\n\t return;\n\t }\n\t\n\t var contentType = 'text/plain';\n\t var data = clipboardData.getData && clipboardData.getData(contentType);\n\t\n\t if (!text.replaceString(data) && clipboardData.items) {\n\t Array.prototype.slice.call(clipboardData.items).filter(function (item) {\n\t return item.kind === 'string' && item.type === contentType;\n\t }).some(function (item) {\n\t item.getAsString(text.replaceString);\n\t return true;\n\t });\n\t }\n\t}\n\t\n\tfunction onDblclick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeSet && nodeBubble) {\n\t event.preventDefault();\n\t bubble.edit(nodeSet, nodeBubble);\n\t }\n\t}\n\t\n\tfunction onClick(event) {\n\t var nodeSet = bubbleset.closestNodeSet(event.target);\n\t\n\t if (!nodeSet) {\n\t return;\n\t }\n\t\n\t var nodeBubble = bubbleset.closestNodeBubble(event.target);\n\t\n\t if (nodeBubble) {\n\t if (event.metaKey || event.ctrlKey) {\n\t select.add(nodeBubble);\n\t } else if (event.shiftKey) {\n\t if (!nodeSet.startRangeSelect) {\n\t select.uniq(nodeBubble);\n\t } else {\n\t select.range(nodeBubble);\n\t }\n\t } else {\n\t select.toggleUniq(nodeBubble);\n\t }\n\t } else {\n\t select.clear(nodeSet);\n\t\n\t var selection = context.getSelection();\n\t\n\t if (!selection || !selection.anchorNode || selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\t\n\t cursor.restore(nodeSet);\n\t }\n\t }\n\t}\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * @module x-bubbles/cursor\n\t */\n\t\n\tvar context = __webpack_require__(1);\n\tvar text = __webpack_require__(8);\n\tvar select = __webpack_require__(14);\n\t\n\texports.restore = restore;\n\texports.restoreBasis = restoreBasis;\n\t\n\t/**\n\t * Reset the cursor position to the end of the input field.\n\t * @alias module:x-bubbles/cursor.restore\n\t * @param {HTMLElement} nodeSet\n\t */\n\tfunction restore(nodeSet) {\n\t select.clear(nodeSet);\n\t var basis = restoreBasis(nodeSet);\n\t var selection = context.getSelection();\n\t selection.removeAllRanges();\n\t selection.collapse(basis, 1);\n\t}\n\t\n\t/**\n\t * The creation of the fake text at the end childNodes\n\t * @alias module:x-bubbles/cursor.restoreBasis\n\t * @param {HTMLElement} nodeSet\n\t * @returns {HTMLTextElement} fake text node\n\t */\n\tfunction restoreBasis(nodeSet) {\n\t var fakeText = text.createZws();\n\t\n\t if (nodeSet.hasChildNodes()) {\n\t var lastNode = nodeSet.childNodes[nodeSet.childNodes.length - 1];\n\t\n\t if (lastNode.isEqualNode(fakeText)) {\n\t fakeText = lastNode;\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t } else {\n\t nodeSet.appendChild(fakeText);\n\t }\n\t\n\t return fakeText;\n\t}\n\n/***/ }\n/******/ ]);\n\n\n/** WEBPACK FOOTER **\n ** x-bubbles.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2e7287ebb13d5df3e100\n **/","const context = require('./context');\nconst events = require('./core/events');\nconst drag = require('./core/drag');\nconst editor = require('./core/editor');\nconst bubble = require('./core/bubble');\nconst bubbleset = require('./core/bubbleset');\nconst text = require('./core/text');\nconst cursor = require('./core/cursor');\n\nconst OPTIONS = {\n begining: [ 'noop', null ],\n bubbleDeformation: [ 'funk', function () {} ],\n bubbleFormation: [ 'funk', function () {} ],\n classBubble: [ 'noop', 'bubble' ],\n draggable: [ 'bool', true ],\n ending: [ 'noop', null ], // /\\@ya\\.ru/g;\n separator: [ 'noop', /[,;]/ ],\n};\n\nconst XBubbles = Object.create(HTMLDivElement.prototype, {\n createdCallback: {\n value: function () {\n this.setAttribute('contenteditable', 'true');\n this.setAttribute('spellcheck', 'false');\n\n this.fireChange = events.throttle(events.fireChange);\n this.fireEdit = events.throttle(events.fireEdit);\n this.fireInput = events.throttle(events.fireInput);\n\n this.addEventListener('resize', events.prevent);\n this.addEventListener('resizestart', events.prevent);\n this.addEventListener('mscontrolselect', events.prevent);\n }\n },\n\n attachedCallback: {\n value: function () {\n drag.init(this);\n editor.init(this);\n bubble.bubbling(this);\n }\n },\n\n detachedCallback: {\n value: function () {\n drag.destroy(this);\n editor.destroy(this);\n }\n },\n\n /*\n attributeChangedCallback: {\n value: function (name, prevValue, value) {}\n },\n */\n\n options: {\n value: function (name, value) {\n if (!this._options) {\n this._options = {\n ...Object.keys(OPTIONS).reduce(function (result, item) {\n result[ item ] = undefined;\n return result;\n }, {}),\n\n ...this.dataset\n };\n\n optionsPrepare(this._options);\n }\n\n if (typeof value !== 'undefined') {\n this._options[ name ] = value;\n optionsPrepare(this._options);\n\n } else {\n return this._options[ name ];\n }\n }\n },\n\n items: {\n get: function () {\n return bubbleset.getBubbles(this);\n }\n },\n\n setContent: {\n value: function (data) {\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n\n data = text.html2text(data);\n this.appendChild(context.document.createTextNode(data));\n bubble.bubbling(this);\n cursor.restore(this);\n }\n },\n\n addBubble: {\n value: function (bubbleText, data) {\n const nodeBubble = bubble.create(this, bubbleText, data);\n\n if (!nodeBubble) {\n return false;\n }\n\n if (text.text2bubble(this, nodeBubble)) {\n cursor.restore(this);\n return true;\n }\n\n return false;\n }\n },\n\n removeBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n this.removeChild(nodeBubble);\n this.fireChange();\n return true;\n }\n\n return false;\n }\n },\n\n editBubble: {\n value: function (nodeBubble) {\n if (this.contains(nodeBubble)) {\n return bubble.edit(this, nodeBubble);\n }\n\n return false;\n }\n }\n});\n\nmodule.exports = context.document.registerElement('x-bubbles', {\n extends: 'div',\n prototype: XBubbles\n});\n\nconst OPTIONS_PREPARE = {\n funk: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return new Function('context', `return context.${value};`)(context);\n\n case 'function':\n return value;\n }\n },\n bool: function (value) {\n const type = typeof value;\n switch (type) {\n case 'string':\n return (value === 'true' || value === 'on');\n\n case 'boolean':\n return value;\n }\n },\n noop: function (value) {\n return value;\n },\n};\n\nfunction optionsPrepare(options) {\n for (let name in OPTIONS) {\n const [ type, def ] = OPTIONS[ name ];\n options[ name ] = OPTIONS_PREPARE[ type ](options[ name ]);\n if (typeof options[ name ] === 'undefined') {\n options[ name ] = def;\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","module.exports = (function () {\n /* eslint no-eval: 0 */\n return this || (1, eval)('this');\n})();\n\n\n\n/** WEBPACK FOOTER **\n ** ./context.js\n **/","/**\n * @module x-bubbles/event\n */\n\nconst raf = require('raf');\nconst context = require('../context');\nconst CustomEventCommon = require('../polyfills/CustomEventCommon');\nconst { EV } = require('./constant');\nconst text = require('./text');\n\nexports.scrollX = scrollX;\nexports.scrollY = scrollY;\nexports.dispatch = dispatch;\n\nexports.pageX = function (event) {\n return (event.pageX === null && event.clientX !== null) ?\n event.clientX + scrollX() :\n event.pageX;\n};\n\nexports.pageY = function (event) {\n return (event.pageY === null && event.clientY !== null) ?\n event.clientY + scrollY() :\n event.pageY;\n};\n\nexports.one = function (target, eventName, userCallback) {\n return target.addEventListener(eventName, function callback(event) {\n target.removeEventListener(eventName, callback);\n userCallback(event);\n });\n};\n\nexports.on = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.addEventListener(name, events[ name ]);\n }\n};\n\nexports.off = function (target, eventName, userCallback) {\n const events = userCallback ? { [ eventName ]: userCallback } : eventName;\n for (let name in events) {\n target.removeEventListener(name, events[ name ]);\n }\n};\n\nexports.prevent = function (event) {\n event.cancelBubble = true;\n event.returnValue = false;\n event.stopPropagation();\n event.preventDefault();\n return false;\n};\n\nexports.fireEdit = function (nodeBubble) {\n dispatch(this, EV.BUBBLE_EDIT, {\n bubbles: false,\n cancelable: false,\n detail: { data: nodeBubble }\n });\n};\n\nexports.fireChange = function () {\n dispatch(this, EV.CHANGE, {\n bubbles: false,\n cancelable: false\n });\n};\n\nexports.fireInput = function () {\n const textRange = text.currentTextRange();\n const editText = textRange && text.textClean(textRange.toString()) || '';\n\n if (this._bubbleValue !== editText) {\n this._bubbleValue = editText;\n\n dispatch(this, EV.BUBBLE_INPUT, {\n bubbles: false,\n cancelable: false,\n detail: { data: editText }\n });\n }\n};\n\nexports.throttle = function (callback) {\n let throttle = 0;\n const animationCallback = function () {\n throttle = 0;\n };\n\n return function () {\n if (throttle) {\n return;\n }\n\n throttle = raf(animationCallback);\n\n callback.apply(this, arguments);\n };\n};\n\nfunction scrollX() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);\n}\n\nfunction scrollY() {\n const html = context.document.documentElement;\n const body = context.document.body;\n return (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);\n}\n\n/**\n * Designer events.\n *\n * @example\n * const { Custom } = require('event');\n *\n * new Custom('custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event~Custom\n * @constructor\n */\nconst Custom = (function () {\n if (typeof context.CustomEvent === 'function') {\n return context.CustomEvent;\n }\n\n return CustomEventCommon;\n}());\n\n/**\n * Dispatch event.\n *\n * @example\n * const { dispatch } = require('event');\n * dispatch(node, 'custom-event', {\n * bubbles: true,\n * cancelable: true,\n * detail: { data: '123' }\n * })\n *\n * @alias module:x-bubbles/event.dispatch\n * @param {HTMLElement} element node events\n * @param {string} name event name\n * @param {Object} params the event parameters\n * @param {boolean} [params.bubbles=false]\n * @param {boolean} [params.cancelable=false]\n * @param {*} [params.detail]\n */\nfunction dispatch(element, name, params = {}) {\n element.dispatchEvent(new Custom(name, params));\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/events.js\n **/","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function() {\n root.requestAnimationFrame = raf\n root.cancelAnimationFrame = caf\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/raf/index.js\n ** module id = 3\n ** module chunks = 0\n **/","// Generated by CoffeeScript 1.7.1\n(function() {\n var getNanoSeconds, hrtime, loadTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - loadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n loadTime = getNanoSeconds();\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/performance-now/lib/performance-now.js\n ** module id = 4\n ** module chunks = 0\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/process/browser.js\n ** module id = 5\n ** module chunks = 0\n **/","const context = require('../context');\n\n/**\n * @constant {Document}\n * @private\n */\nconst doc = context.document;\n\n/**\n * @constant {Object}\n * @private\n */\nconst protoEvent = context.Event.prototype;\n\nlet issetCustomEvent = false;\n\ntry {\n issetCustomEvent = Boolean(doc.createEvent('CustomEvent'));\n} catch (e) {\n // do nothing\n}\n\n/**\n * The original function \"stopImmediatePropagation\"\n * @constant {function}\n * @private\n */\nconst stopImmediatePropagation = protoEvent.stopImmediatePropagation;\n\n/**\n * Override function to set properties \"immediatePropagationStopped\"\n */\nprotoEvent.stopImmediatePropagation = function () {\n this.immediatePropagationStopped = true;\n\n if (stopImmediatePropagation) {\n stopImmediatePropagation.call(this);\n\n } else {\n this.stopPropagation();\n }\n};\n\nlet CustomEventCommon = (function () {\n if (issetCustomEvent) {\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('CustomEvent');\n\n evt.initCustomEvent(eventName, bubbles, cancelable, params.detail);\n\n return evt;\n };\n }\n\n return function (eventName, params) {\n params = params || {};\n\n let bubbles = Boolean(params.bubbles);\n let cancelable = Boolean(params.cancelable);\n let evt = doc.createEvent('Event');\n\n evt.initEvent(eventName, bubbles, cancelable);\n evt.detail = params.detail;\n\n return evt;\n };\n}());\n\nCustomEventCommon.prototype = protoEvent;\n\nmodule.exports = CustomEventCommon;\n\n\n\n/** WEBPACK FOOTER **\n ** ./polyfills/CustomEventCommon.js\n **/","exports.KEY = {\n a: 65,\n Backspace: 8,\n Bottom: 40,\n Cmd: 91,\n Comma: 44, // ,\n Enter: 13, // Enter\n Esc: 27,\n Left: 37,\n Right: 39,\n Semicolon: 59, // ;\n Space: 32,\n Tab: 9,\n Top: 38,\n};\n\nexports.CLS = {\n DRAGSTART: 'drag',\n DROPZONE: 'dropzone',\n};\n\nexports.EV = {\n BUBBLE_EDIT: 'bubble-edit',\n BUBBLE_INPUT: 'bubble-input',\n CHANGE: 'change',\n DRAGEND: 'dragend',\n DRAGENTER: 'dragenter',\n DRAGLEAVE: 'dragleave',\n DRAGSTART: 'dragstart',\n DROP: 'drop',\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/constant.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\n/* eslint-disable max-len */\nconst REG_REPLACE_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\nconst REG_ZWS = /\\u200B/;\nconst TEXT_ZWS = '\\u200B';\n\nexports.arrowRight = arrowRight;\nexports.arrowLeft = arrowLeft;\nexports.remove = remove;\nexports.html2text = html2text;\nexports.currentTextRange = currentTextRange;\nexports.text2bubble = text2bubble;\nexports.replaceString = replaceString;\nexports.selectAll = selectAll;\nexports.textClean = textClean;\nexports.checkZws = checkZws;\nexports.createZws = createZws;\n\nfunction text2bubble(nodeSet, nodeBubble, selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const range = currentTextRange(selection);\n\n if (range && !nodeBubble) {\n nodeBubble = bubble.create(nodeSet, range.toString());\n }\n\n if (!nodeBubble) {\n return false;\n }\n\n if (range) {\n selection.removeAllRanges();\n selection.addRange(range);\n replace(selection, nodeBubble);\n\n } else {\n nodeSet.appendChild(nodeBubble);\n }\n\n nodeSet.fireInput();\n nodeSet.fireChange();\n return true;\n}\n\nfunction currentTextRange(selection) {\n selection = selection || context.getSelection();\n\n if (!selection) {\n return;\n }\n\n const pointNode = do {\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n selection.focusNode;\n\n } else if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n selection.anchorNode;\n\n } else {\n undefined;\n }\n };\n\n if (!pointNode) {\n return;\n }\n\n const range = context.document.createRange();\n let startNode = pointNode;\n let endNode = pointNode;\n let item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n startNode = item;\n item = item.previousSibling;\n }\n\n item = pointNode;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n endNode = item;\n item = item.nextSibling;\n }\n\n range.setStartBefore(startNode);\n range.setEndAfter(endNode);\n\n return range;\n}\n\nfunction remove(selection) {\n return replace(selection, createZws());\n}\n\nfunction replace(selection, node) {\n selection = selection || context.getSelection();\n\n if (!selection || !selection.rangeCount) {\n return false;\n }\n\n const anchor = context.document.createElement('span');\n selection.getRangeAt(0).surroundContents(anchor);\n anchor.parentNode.replaceChild(node, anchor);\n\n selection.removeAllRanges();\n selection.collapse(node, 0);\n\n return true;\n}\n\nfunction replaceString(data, selection) {\n data = textClean(data);\n if (!data) {\n return false;\n }\n\n selection = selection || context.getSelection();\n const textNode = context.document.createTextNode(data);\n\n if (!replace(selection, textNode)) {\n return false;\n }\n\n selection.collapse(textNode, textNode.nodeValue.length);\n return true;\n}\n\nfunction arrowLeft(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(startNode, startOffset);\n return true;\n }\n\n const isNativeExtend = Boolean(selection.extend);\n revert = isNativeExtend ? revert : !revert;\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n if (offset === null) {\n offset = node.nodeValue.length;\n }\n\n if (offset - 1 < 0) {\n node = node.previousSibling;\n offset = null;\n continue;\n }\n\n const text = node.nodeValue.substring(offset - 1, offset);\n\n if (checkZws(text)) {\n offset = offset - 1;\n continue;\n }\n\n break;\n }\n\n if (!node || offset === null) {\n return false;\n }\n\n if (extend) {\n if (isNativeExtend) {\n selection.extend(node, offset - 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset - 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset - 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset - 1);\n }\n\n return true;\n}\n\nfunction arrowRight(selection, extend) {\n selection = selection || context.getSelection();\n\n if (!selection ||\n !selection.focusNode ||\n selection.focusNode.nodeType !== Node.TEXT_NODE) {\n\n return false;\n }\n\n let { startNode, endNode, startOffset, endOffset, revert } = selectionCorrect(selection);\n\n if (!selection.isCollapsed && !extend) {\n selection.collapse(endNode, endOffset);\n return true;\n }\n\n let node = revert ? startNode : endNode;\n let offset = revert ? startOffset : endOffset;\n\n while (node) {\n if (node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n const len = node.nodeValue.length;\n\n if (offset + 1 > len) {\n node = node.nextSibling;\n offset = 0;\n continue;\n }\n\n const text = node.nodeValue.substring(offset, offset + 1);\n\n if (checkZws(text)) {\n offset = offset + 1;\n continue;\n }\n\n break;\n }\n\n if (!node) {\n return false;\n }\n\n if (extend) {\n const isNativeExtend = Boolean(selection.extend);\n\n if (isNativeExtend) {\n selection.extend(node, offset + 1);\n\n } else {\n const range = context.document.createRange();\n\n if (revert) {\n range.setStart(node, offset + 1);\n range.setEnd(endNode, endOffset);\n\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(node, offset + 1);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n } else {\n selection.collapse(node, offset + 1);\n }\n\n return true;\n}\n\nfunction html2text(value) {\n if (!value) {\n return '';\n }\n\n var DOMContainer = context.document.implementation.createHTMLDocument('').body;\n DOMContainer.innerText = value;\n\n return DOMContainer.innerText\n .replace(/^[\\u0020\\u00a0]+$/gm, '')\n .replace(/\\n/gm, ' ')\n .trim();\n}\n\nfunction selectAll(selection, nodeSet) {\n selection = selection || context.getSelection();\n const node = selection && selection.anchorNode;\n\n if (!node || node.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n\n let fromNode;\n let toNode;\n let item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n fromNode = item;\n item = item.previousSibling;\n }\n\n item = node;\n\n while (item && item.nodeType === Node.TEXT_NODE) {\n toNode = item;\n item = item.nextSibling;\n }\n\n const hasBubbles = bubbleset.hasBubbles(nodeSet);\n const range = context.document.createRange();\n range.setStartBefore(fromNode);\n range.setEndAfter(toNode);\n\n const dataText = textClean(range.toString());\n\n if (dataText || (!dataText && !hasBubbles)) {\n if (!dataText) {\n range.collapse();\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n }\n\n return false;\n}\n\nfunction createZws() {\n return context.document.createTextNode(TEXT_ZWS);\n}\n\nfunction checkZws(value) {\n return REG_ZWS.test(value);\n}\n\nfunction textClean(value) {\n return String(value || '')\n .trim()\n .replace(REG_REPLACE_NON_PRINTABLE, '');\n}\n\nfunction selectionCorrect(selection) {\n let startNode = selection.anchorNode;\n let endNode = selection.focusNode;\n let startOffset = selection.anchorOffset;\n let endOffset = selection.focusOffset;\n let revert = false;\n\n if (startNode === endNode) {\n startOffset = Math.min(selection.anchorOffset, selection.focusOffset);\n endOffset = Math.max(selection.anchorOffset, selection.focusOffset);\n revert = selection.anchorOffset > selection.focusOffset;\n\n } else {\n const position = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n startNode = selection.focusNode;\n startOffset = selection.focusOffset;\n endNode = selection.anchorNode;\n endOffset = selection.anchorOffset;\n revert = true;\n }\n }\n\n return { startNode, endNode, startOffset, endOffset, revert };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/text.js\n **/","const context = require('../context');\nconst text = require('./text');\nconst { escape, canUseDrag } = require('./utils');\n\nexports.isBubbleNode = isBubbleNode;\nexports.bubbling = bubbling;\nexports.create = create;\nexports.edit = edit;\n\nfunction isBubbleNode(node) {\n if (!node || node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n return node.hasAttribute('bubble');\n}\n\nfunction edit(nodeSet, nodeBubble) {\n if (nodeBubble.hasAttribute('readonly')) {\n return false;\n }\n\n const selection = context.getSelection();\n\n if (!selection) {\n return false;\n }\n\n const bubbleDeformation = nodeSet.options('bubbleDeformation');\n let rangeParams = bubbleDeformation(nodeBubble);\n\n if (!rangeParams) {\n const dataText = text.textClean(nodeBubble.innerText);\n\n rangeParams = {\n text: dataText,\n startOffset: 0,\n endOffset: dataText.length\n };\n }\n\n const textFake = text.createZws();\n const textNode = context.document.createTextNode(rangeParams.text);\n\n nodeSet.fireEdit(nodeBubble);\n nodeSet.replaceChild(textNode, nodeBubble);\n nodeSet.insertBefore(textFake, textNode);\n\n const range = context.document.createRange();\n range.setStart(textNode, rangeParams.startOffset);\n range.setEnd(textNode, rangeParams.endOffset);\n\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n}\n\nfunction create(nodeSet, dataText, data = {}) {\n dataText = text.textClean(dataText);\n\n if (!dataText) {\n return;\n }\n\n const bubbleFormation = nodeSet.options('bubbleFormation');\n const classBubble = nodeSet.options('classBubble');\n const draggable = canUseDrag() && nodeSet.options('draggable');\n const wrap = context.document.createElement('span');\n\n wrap.innerText = dataText;\n\n if (draggable) {\n wrap.setAttribute('draggable', 'true');\n }\n\n for (let key in data) {\n if (data[ key ]) {\n wrap.setAttribute(`data-${key}`, escape(data[ key ]));\n }\n }\n\n bubbleFormation(wrap);\n\n if (classBubble) {\n const classes = String(classBubble).trim().split(/\\s+/);\n let len = classes.length;\n\n while (len--) {\n wrap.classList.add(classes[ len ]);\n }\n }\n\n wrap.setAttribute('bubble', '');\n wrap.setAttribute('contenteditable', 'false');\n\n return wrap;\n}\n\nfunction bubbling(nodeSet) {\n const separator = nodeSet.options('separator');\n const ending = nodeSet.options('ending');\n const begining = nodeSet.options('begining');\n const ranges = getBubbleRanges(nodeSet);\n const nodes = [];\n\n ranges.forEach(function (range) {\n const dataText = text.textClean(range.toString());\n\n if (!dataText) {\n range.deleteContents();\n return;\n }\n\n let textParts = [ dataText ];\n\n if (separator) {\n textParts = dataText\n .split(separator)\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (ending) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByEnding(str, ending)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n\n } else if (begining) {\n textParts = textParts\n .reduce((parts, str) => parts.concat(parseFragmentByBeginning(str, begining)), [])\n .map(trimIterator)\n .filter(nonEmptyIterator);\n }\n\n if (!textParts.length) {\n range.deleteContents();\n }\n\n const fragment = context.document.createDocumentFragment();\n\n textParts.forEach(function (textPart) {\n const nodeBubble = create(nodeSet, textPart);\n if (nodeBubble) {\n fragment.appendChild(nodeBubble);\n nodes.push(nodeBubble);\n }\n });\n\n range.deleteContents();\n range.insertNode(fragment);\n });\n\n nodeSet.fireInput();\n\n if (nodes.length) {\n nodeSet.fireChange();\n }\n\n return nodes;\n}\n\nfunction getBubbleRanges(nodeSet) {\n const ranges = [];\n const children = nodeSet.childNodes;\n let range;\n let node;\n\n for (let i = 0; i < children.length; i++) {\n node = children[ i ];\n\n if (isBubbleNode(node)) {\n if (range) {\n range.setEndBefore(node);\n ranges.push(range);\n range = undefined;\n }\n\n } else {\n if (!range) {\n range = context.document.createRange();\n range.setStartBefore(node);\n }\n }\n }\n\n if (range) {\n range.setEndAfter(node);\n ranges.push(range);\n }\n\n return ranges;\n}\n\nfunction trimIterator(str) {\n return str.trim();\n}\n\nfunction nonEmptyIterator(str) {\n return Boolean(str);\n}\n\nfunction parseFragmentByEnding(str, reg) {\n const parts = [];\n let lastIndex = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while (reg.exec(str) !== null && loop) {\n loop--;\n parts.push(str.substring(lastIndex, reg.lastIndex));\n lastIndex = reg.lastIndex;\n }\n\n return parts;\n}\n\nfunction parseFragmentByBeginning(str, reg) {\n const parts = [];\n let res;\n let index = 0;\n let loop = 999;\n\n reg.lastIndex = 0;\n while ((res = reg.exec(str)) !== null && loop) {\n loop--;\n if (index !== res.index) {\n parts.push(str.substring(index, res.index));\n index = res.index;\n }\n }\n\n parts.push(str.substring(index, str.length));\n return parts;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubble.js\n **/","const context = require('../context');\n\n/* eslint quotes: 0 */\n\nconst HTML_ESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n\nconst HTML_UNESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '`': '`'\n};\n\nconst REG_ESCAPED_HTML = /&(?:amp|lt|gt|quot|#39|#96);/g;\nconst REG_UNESCAPED_HTML = /[&<>\"'`]/g;\nconst REG_HAS_ESCAPED_HTML = RegExp(REG_ESCAPED_HTML.source);\nconst REG_HAS_UNESCAPED_HTML = RegExp(REG_UNESCAPED_HTML.source);\nconst REG_IE = /Trident|Edge/;\n\nexports.escape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_UNESCAPED_HTML.test(data)) {\n return data.replace(REG_UNESCAPED_HTML, escapeHtmlChar);\n }\n\n return data;\n};\n\n\nexports.unescape = function (data) {\n data = String(data);\n\n if (data && REG_HAS_ESCAPED_HTML.test(data)) {\n return data.replace(REG_ESCAPED_HTML, unescapeHtmlChar);\n }\n\n return data;\n};\n\nexports.canUseDrag = function () {\n return !REG_IE.test(context.navigator.userAgent);\n};\n\nfunction unescapeHtmlChar(chr) {\n return HTML_UNESCAPES[ chr ];\n}\n\nfunction escapeHtmlChar(chr) {\n return HTML_ESCAPES[ chr ];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/utils.js\n **/","const bubble = require('./bubble');\nconst text = require('./text');\n\nexports.closestNodeBubble = closestNodeBubble;\nexports.closestNodeSet = closestNodeSet;\nexports.findBubbleLeft = findBubbleLeft;\nexports.getBubbles = getBubbles;\nexports.hasBubbles = hasBubbles;\nexports.headBubble = headBubble;\nexports.lastBubble = lastBubble;\nexports.nextBubble = nextBubble;\nexports.prevBubble = prevBubble;\n\nfunction lastBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:last-child');\n}\n\nfunction headBubble(nodeSet) {\n return nodeSet.querySelector('[bubble]:first-child');\n}\n\nfunction getBubbles(nodeSet) {\n return Array.prototype.slice.call(nodeSet.querySelectorAll('[bubble]'));\n}\n\nfunction hasBubbles(nodeSet) {\n return Boolean(nodeSet.querySelector('[bubble]'));\n}\n\nfunction findBubbleLeft(selection) {\n if (!selection.focusNode || !selection.anchorNode) {\n return;\n }\n\n let node = selection.focusNode.previousSibling;\n\n if (selection.anchorNode !== selection.focusNode &&\n selection.anchorNode.compareDocumentPosition(selection.focusNode) & Node.DOCUMENT_POSITION_FOLLOWING) {\n node = selection.anchorNode.previousSibling;\n }\n\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n if (node.nodeType === Node.TEXT_NODE && text.textClean(node.nodeValue)) {\n return;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction closestNodeSet(node) {\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE &&\n node.getAttribute('is') === 'x-bubbles') {\n\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction closestNodeBubble(node) {\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.parentNode;\n }\n}\n\nfunction prevBubble(target) {\n let node = target && target.previousSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.previousSibling;\n }\n}\n\nfunction nextBubble(target) {\n let node = target && target.nextSibling;\n while (node) {\n if (bubble.isBubbleNode(node)) {\n return node;\n }\n\n node = node.nextSibling;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/bubbleset.js\n **/","const native = require('./drag/native');\nconst mouse = require('./drag/mouse');\nconst { canUseDrag } = require('./utils');\n\nexports.init = function (nodeSet) {\n if (canUseDrag()) {\n return native.init(nodeSet);\n }\n\n return mouse.init(nodeSet);\n};\n\nexports.destroy = function (nodeSet) {\n if (canUseDrag()) {\n return native.destroy(nodeSet);\n }\n\n return mouse.destroy(nodeSet);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag.js\n **/","const context = require('../../context');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst events = require('../events');\nconst { CLS } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nconst EVENTS = {\n dragend: onDragend,\n dragenter: onDragenter,\n dragleave: onDragleave,\n dragover: onDragover,\n dragstart: onDragstart,\n drop: onDrop,\n};\n\nlet currentDragSet = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onDragstart(event) {\n event.stopPropagation();\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (!nodeSet || !nodeBubble) {\n event.preventDefault();\n return;\n }\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = nodeSet;\n nodeSet.classList.add(CLS.DRAGSTART);\n select.add(nodeBubble);\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', '');\n\n const list = select.get(currentDragSet);\n if (list.length > 1) {\n event.dataTransfer.setDragImage(getDragImage(), DRAG_IMG_WIDTH, DRAG_IMG_WIDTH);\n }\n}\n\nfunction onDrop(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet || nodeSet === currentDragSet) {\n return;\n }\n\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n}\n\nfunction onDragover(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n event.dataTransfer.dropEffect = 'move';\n}\n\nfunction onDragenter(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n }\n}\n\nfunction onDragleave(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n}\n\nfunction onDragend(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!currentDragSet) {\n return;\n }\n\n currentDragSet.classList.remove(CLS.DRAGSTART);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n nodeSet.classList.remove(CLS.DROPZONE);\n }\n\n currentDragSet = null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/native.js\n **/","const context = require('../context');\nconst bubble = require('./bubble');\nconst bubbleset = require('./bubbleset');\n\nconst slice = Array.prototype.slice;\nconst PATH_SELECTED = '[bubble][selected]';\nconst PATH_NOT_SELECTED = '[bubble]:not([selected])';\n\nexports.all = all;\nexports.add = add;\nexports.clear = clear;\nexports.get = get;\nexports.uniq = uniq;\nexports.head = head;\nexports.last = last;\nexports.has = has;\nexports.range = range;\nexports.toggleUniq = toggleUniq;\n\nfunction range(node) {\n if (!bubble.isBubbleNode(node)) {\n return;\n }\n\n const set = node.parentNode;\n const list = get(set);\n\n if (!list.length) {\n uniq(node);\n return;\n }\n\n clear(set);\n\n const headList = list[0];\n const lastList = list[ list.length - 1 ];\n\n if (headList === lastList || !set.startRangeSelect) {\n set.startRangeSelect = headList;\n }\n\n let fromNode;\n let toNode;\n const position = node.compareDocumentPosition(set.startRangeSelect);\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n fromNode = set.startRangeSelect;\n toNode = node;\n\n } else {\n fromNode = node;\n toNode = set.startRangeSelect;\n }\n\n if (fromNode && toNode) {\n let item = fromNode;\n\n while (item) {\n if (!setSelected(item)) {\n break;\n }\n\n if (item === toNode) {\n break;\n }\n\n item = item.nextSibling;\n }\n\n bubble.bubbling(set);\n }\n}\n\nfunction all(nodeSet) {\n slice.call(nodeSet.querySelectorAll(PATH_NOT_SELECTED)).forEach(item => setSelected(item));\n nodeSet.startRangeSelect = nodeSet.querySelector(PATH_SELECTED);\n\n bubble.bubbling(nodeSet);\n\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n}\n\nfunction has(nodeSet) {\n return Boolean(nodeSet.querySelector(PATH_SELECTED));\n}\n\nfunction head(set) {\n return get(set)[0];\n}\n\nfunction last(set) {\n const list = get(set);\n return list[ list.length - 1 ];\n}\n\nfunction get(nodeSet) {\n return slice.call(nodeSet.querySelectorAll(PATH_SELECTED));\n}\n\nfunction clear(nodeSet) {\n get(nodeSet).forEach(item => item.removeAttribute('selected'));\n}\n\nfunction add(node) {\n if (setSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n nodeSet.startRangeSelect = node;\n // ???\n bubble.bubbling(nodeSet);\n\n return true;\n }\n\n return false;\n}\n\nfunction uniq(node) {\n if (!bubble.isBubbleNode(node)) {\n return false;\n }\n\n const nodeSet = bubbleset.closestNodeSet(node);\n const selection = context.getSelection();\n\n selection && selection.removeAllRanges();\n clear(nodeSet);\n\n return add(node);\n}\n\nfunction toggleUniq(node) {\n if (isSelected(node)) {\n const nodeSet = bubbleset.closestNodeSet(node);\n\n if (get(nodeSet).length === 1) {\n return removeSelected(node);\n }\n }\n\n return uniq(node);\n}\n\nfunction isSelected(node) {\n return bubble.isBubbleNode(node) && node.hasAttribute('selected') || false;\n}\n\nfunction setSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.setAttribute('selected', '');\n return true;\n }\n\n return false;\n}\n\nfunction removeSelected(node) {\n if (bubble.isBubbleNode(node)) {\n node.removeAttribute('selected');\n return true;\n }\n\n return false;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/select.js\n **/","const DRAG_IMG_WIDTH = 16;\n\nlet dragImage = null;\n\nexports.DRAG_IMG_WIDTH = DRAG_IMG_WIDTH;\n\nexports.getDragImage = function () {\n if (!dragImage) {\n dragImage = new Image();\n dragImage.src = require('url?mimetype=image/png!./bubbles.png');\n }\n\n return dragImage;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/common.js\n **/","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB3klEQVR4XtWWMWgTYRTH/0n0IjWNkSo9jYJTx4KDAXWoIChtqdBFkG6lTm5iiw5OHQQFV4fSunYTOpVucbRDBicVUmmb0GsuJCYGknjfez4+PmjUy8U7cegffty3vPfjfY/jLsbM+J+JC8dbcAIm97aqEwBeCjmEywdhaePOSD5QQETr1y6m7Ww6iTApNTq57XJjHcCFYIEiGyeTKLYQKkmp0bWDrkiRQstD6HikazFYoBQIEWJql9+Ncu9Ons86+d8EBOKoAsLtG9P67FTLuY+fC3onf0zgcfQJKu1tfbaGU2Bm2+eKvKgTmFpdjK5qgtlnB17kHZjanq5M7LvkkltvZs+khxEm3xpNDCUqvwjIX0ALX4o7bwHYAs6fG8HlS1ns7ZdQcavol9NWHVNjb6COBP5XVJgf3+x9G8dXCuwpguu6eDrxAINCjIAJfFCk4Bw6eHZrLvTy+W8EpAiPrt6HYgth0qx1wcylgYKZobuTu59gduKfs6OnYF9J4eDrd9ScNkwOhAWY/NMXbXEtwxmR1KX5q/l6LOB7EAnd9MlqhhGQWM8zLiSM1IC4pn9uCtcfr6QXXz9svADwXsgLnqAEFgE0prklJA2WkSSEWICEDD+ErtAR2jCS4/9X8RPiO+YqXEJbcwAAAABJRU5ErkJggg==\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/url-loader?mimetype=image/png!./core/drag/bubbles.png\n ** module id = 16\n ** module chunks = 0\n **/","const context = require('../../context');\nconst events = require('../events');\nconst select = require('../select');\nconst bubbleset = require('../bubbleset');\nconst Modernizr = require('modernizr');\nconst { CLS, EV } = require('../constant');\nconst { getDragImage, DRAG_IMG_WIDTH } = require('./common');\n\nlet currentDragSet = null;\nlet currentMoveSet = null;\nlet currentDragElement = null;\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, 'mousedown', onMousedown);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, 'mousedown', onMousedown);\n};\n\nfunction onMousedown(event) {\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n if (!nodeBubble) {\n return;\n }\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (!nodeSet) {\n return;\n }\n\n event.preventDefault();\n nodeSet.focus();\n\n const drag = nodeSet.__drag__ = {\n onMouseup: onMouseup.bind(this, nodeSet),\n onMousemove: events.throttle(onMousemove.bind(this, nodeSet)),\n onScroll: events.throttle(onScroll.bind(this, nodeSet)),\n nodeOffsetX: event.offsetX,\n nodeOffsetY: event.offsetY,\n x: 0,\n y: 0\n };\n\n currentDragSet = null;\n currentMoveSet = null;\n currentDragElement = null;\n\n events.one(document, 'mouseup', drag.onMouseup);\n events.on(document, 'mousemove', drag.onMousemove);\n events.on(document, 'scroll', drag.onScroll);\n}\n\nfunction onMouseup(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n events.off(document, 'mousemove', drag.onMousemove);\n events.off(document, 'scroll', drag.onScroll);\n delete dragSet.__drag__;\n\n if (currentDragElement) {\n currentDragElement.parentNode && currentDragElement.parentNode.removeChild(currentDragElement);\n currentDragElement = null;\n }\n\n if (currentMoveSet) {\n const _ = currentMoveSet;\n currentMoveSet = null;\n\n _.classList.remove(CLS.DROPZONE);\n events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n }\n\n if (currentDragSet) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (nodeSet && nodeSet !== currentDragSet) {\n const list = select.get(currentDragSet);\n\n if (list.length) {\n list.forEach(item => nodeSet.appendChild(item));\n\n setTimeout(() => {\n nodeSet.focus();\n nodeSet.fireChange();\n }, 0);\n }\n }\n\n const _ = currentDragSet;\n currentDragSet = null;\n\n _.classList.remove(CLS.DRAGSTART);\n events.dispatch(_, EV.DROP, { bubbles: false, cancelable: false });\n events.dispatch(_, EV.DRAGEND, { bubbles: false, cancelable: false });\n }\n}\n\nfunction onMousemove(dragSet, event) {\n const drag = dragSet.__drag__;\n if (!drag) {\n return;\n }\n\n if (!currentDragSet) {\n const selection = context.getSelection();\n selection && selection.removeAllRanges();\n\n currentDragSet = dragSet;\n currentDragSet.classList.add(CLS.DRAGSTART);\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n let moveElement;\n\n if (nodeBubble) {\n select.add(nodeBubble);\n if (select.get(currentDragSet).length === 1) {\n moveElement = nodeBubble.cloneNode(true);\n }\n }\n\n if (!moveElement) {\n moveElement = getDragImage();\n drag.nodeOffsetX = DRAG_IMG_WIDTH;\n drag.nodeOffsetY = DRAG_IMG_WIDTH;\n }\n\n currentDragElement = document.body.appendChild(document.createElement('div'));\n currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;';\n currentDragElement.appendChild(moveElement);\n\n events.dispatch(currentDragSet, EV.DRAGSTART, { bubbles: false, cancelable: false });\n }\n\n drag.x = event.clientX;\n drag.y = event.clientY;\n onScroll(dragSet);\n\n const nodeSet = bubbleset.closestNodeSet(event.target);\n if (nodeSet && nodeSet !== currentDragSet) {\n if (currentMoveSet && currentMoveSet !== nodeSet) {\n currentMoveSet.classList.remove(CLS.DROPZONE);\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n\n } else if (!currentMoveSet) {\n nodeSet.classList.add(CLS.DROPZONE);\n currentMoveSet = nodeSet;\n events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false });\n }\n\n } else if (currentMoveSet) {\n const _ = currentMoveSet;\n currentMoveSet = null;\n\n _.classList.remove(CLS.DROPZONE);\n events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false });\n }\n}\n\nfunction onScroll(dragSet) {\n const drag = dragSet.__drag__;\n if (!drag || !currentDragElement) {\n return;\n }\n\n const x = drag.x - drag.nodeOffsetX + events.scrollX();\n const y = drag.y - drag.nodeOffsetY + events.scrollY();\n\n if (Modernizr.csstransforms3d) {\n currentDragElement.style.transform = `translate3d(${x}px, ${y}px, 0px)`;\n\n } else if (Modernizr.csstransforms) {\n currentDragElement.style.transform = `translate(${x}px, ${y}px)`;\n\n } else {\n currentDragElement.style.top = `${y}px`;\n currentDragElement.style.left = `${x}px`;\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/drag/mouse.js\n **/","module.exports = Modernizr;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"var\":\"Modernizr\",\"root\":\"modernizr\",\"commonjs2\":\"modernizr\",\"commonjs\":\"modernizr\",\"amd\":\"modernizr\"}\n ** module id = 18\n ** module chunks = 0\n **/","const context = require('../context');\nconst bubbleset = require('./bubbleset');\nconst bubble = require('./bubble');\nconst cursor = require('./cursor');\nconst select = require('./select');\nconst { KEY } = require('./constant');\nconst text = require('./text');\nconst events = require('./events');\n\nconst EVENTS = {\n blur: onBlur,\n click: onClick,\n dblclick: onDblclick,\n focus: onFocus,\n keydown: onKeydown,\n keypress: onKeypress,\n keyup: onKeyup,\n paste: onPaste,\n};\n\nexports.init = function (nodeSet) {\n events.on(nodeSet, EVENTS);\n};\n\nexports.destroy = function (nodeSet) {\n events.off(nodeSet, EVENTS);\n};\n\nfunction onBlur(event) {\n select.clear(event.currentTarget);\n bubble.bubbling(event.currentTarget);\n}\n\nfunction onFocus(event) {\n cursor.restore(event.currentTarget);\n}\n\nfunction onKeyup(event) {\n const code = event.charCode || event.keyCode;\n const isPrintableChar = do {\n if (event.key) {\n event.key.length === 1;\n } else {\n ((code > 47 || code === KEY.Space || code === KEY.Backspace) && code !== KEY.Cmd);\n }\n };\n\n if (isPrintableChar) {\n event.currentTarget.fireInput();\n }\n}\n\nfunction onKeypress(event) {\n const code = event.charCode || event.keyCode;\n const nodeSet = event.currentTarget;\n\n /* eslint no-case-declarations: 0 */\n switch (code) {\n case KEY.Enter:\n event.preventDefault();\n if (!nodeSet.hasAttribute('disable-controls')) {\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.Comma:\n case KEY.Semicolon:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n }\n}\n\nfunction onKeydown(event) {\n const code = event.charCode || event.keyCode;\n const metaKey = event.ctrlKey || event.metaKey;\n const nodeSet = event.currentTarget;\n const enable = !nodeSet.hasAttribute('disable-controls');\n\n switch (code) {\n case KEY.Esc:\n event.preventDefault();\n bubble.bubbling(nodeSet);\n cursor.restore(nodeSet);\n break;\n\n case KEY.Backspace:\n event.preventDefault();\n backSpace(event);\n break;\n\n case KEY.Left:\n event.preventDefault();\n arrowLeft(event);\n break;\n\n // сдвигаем курсор в начало списка\n case KEY.Top:\n event.preventDefault();\n if (enable) {\n const headBubble = bubbleset.headBubble(nodeSet);\n headBubble && select.uniq(headBubble);\n }\n break;\n\n case KEY.Right:\n event.preventDefault();\n arrowRight(event);\n break;\n\n // сдвигаем курсор в конец списка\n // case KEY.Tab:\n case KEY.Bottom:\n event.preventDefault();\n if (enable && select.has(nodeSet)) {\n cursor.restore(nodeSet);\n }\n break;\n\n case KEY.a:\n if (metaKey) {\n event.preventDefault();\n\n if (!text.selectAll(null, event.currentTarget)) {\n select.all(nodeSet);\n }\n }\n break;\n }\n}\n\nfunction arrowLeft(event) {\n const selection = context.getSelection();\n\n if (text.arrowLeft(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.anchorNode && selection.anchorNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.prevBubble(selection.anchorNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ 0 ] === nodeSet.startRangeSelect) {\n list[ list.length - 1 ];\n\n } else {\n list[ 0 ];\n }\n };\n\n const node = bubbleset.prevBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n }\n}\n\nfunction arrowRight(event) {\n const selection = context.getSelection();\n\n if (text.arrowRight(selection, event.shiftKey)) {\n return;\n }\n\n if (selection.focusNode && selection.focusNode.nodeType === Node.TEXT_NODE) {\n const nodeBubble = bubbleset.nextBubble(selection.focusNode);\n nodeBubble && select.uniq(nodeBubble);\n return;\n }\n\n const nodeSet = event.currentTarget;\n const list = select.get(nodeSet);\n const begin = do {\n if (list.length > 1 && list[ list.length - 1 ] === nodeSet.startRangeSelect) {\n list[ 0 ];\n\n } else {\n list[ list.length - 1 ];\n }\n };\n\n const node = bubbleset.nextBubble(begin);\n\n if (node) {\n if (event.shiftKey) {\n select.range(node);\n\n } else {\n select.uniq(node);\n }\n\n } else if (begin && begin.nextSibling && begin.nextSibling.nodeType === Node.TEXT_NODE) {\n select.clear(nodeSet);\n selection.collapse(begin.nextSibling, 0);\n\n } else {\n cursor.restore(nodeSet);\n }\n}\n\nfunction backSpace(event) {\n const nodeSet = event.currentTarget;\n nodeSet.normalize();\n\n const selection = context.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n if (text.arrowLeft(selection, true)) {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n } else {\n text.remove(selection);\n nodeSet.fireInput();\n return;\n }\n\n let node = bubbleset.findBubbleLeft(selection);\n if (node) {\n select.uniq(node);\n return;\n }\n\n const list = select.get(nodeSet);\n\n if (list.length) {\n const prevBubble = list[ 0 ].previousSibling;\n const nextBubble = list[ list.length - 1 ].nextSibling;\n list.forEach(item => item.parentNode.removeChild(item));\n\n if (bubble.isBubbleNode(prevBubble)) {\n select.uniq(prevBubble);\n\n } else if (bubble.isBubbleNode(nextBubble)) {\n select.uniq(nextBubble);\n\n } else {\n nodeSet.focus();\n cursor.restore(nodeSet);\n }\n\n nodeSet.fireChange();\n }\n}\n\nfunction onPaste(event) {\n event.preventDefault();\n\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n return;\n }\n\n const contentType = 'text/plain';\n let data = clipboardData.getData && clipboardData.getData(contentType);\n\n if (!text.replaceString(data) && clipboardData.items) {\n Array.prototype.slice.call(clipboardData.items)\n .filter(item => item.kind === 'string' && item.type === contentType)\n .some(function (item) {\n item.getAsString(text.replaceString);\n return true;\n });\n }\n}\n\nfunction onDblclick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeSet && nodeBubble) {\n event.preventDefault();\n bubble.edit(nodeSet, nodeBubble);\n }\n}\n\nfunction onClick(event) {\n const nodeSet = bubbleset.closestNodeSet(event.target);\n\n if (!nodeSet) {\n return;\n }\n\n const nodeBubble = bubbleset.closestNodeBubble(event.target);\n\n if (nodeBubble) {\n if (event.metaKey || event.ctrlKey) {\n select.add(nodeBubble);\n\n } else if (event.shiftKey) {\n if (!nodeSet.startRangeSelect) {\n select.uniq(nodeBubble);\n\n } else {\n select.range(nodeBubble);\n }\n\n } else {\n select.toggleUniq(nodeBubble);\n }\n\n } else {\n select.clear(nodeSet);\n\n const selection = context.getSelection();\n\n if (!selection ||\n !selection.anchorNode ||\n selection.anchorNode.nodeType !== Node.TEXT_NODE) {\n\n cursor.restore(nodeSet);\n }\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/editor.js\n **/","/**\n * @module x-bubbles/cursor\n */\n\nconst context = require('../context');\nconst text = require('./text');\nconst select = require('./select');\n\nexports.restore = restore;\nexports.restoreBasis = restoreBasis;\n\n/**\n * Reset the cursor position to the end of the input field.\n * @alias module:x-bubbles/cursor.restore\n * @param {HTMLElement} nodeSet\n */\nfunction restore(nodeSet) {\n select.clear(nodeSet);\n const basis = restoreBasis(nodeSet);\n const selection = context.getSelection();\n selection.removeAllRanges();\n selection.collapse(basis, 1);\n}\n\n/**\n * The creation of the fake text at the end childNodes\n * @alias module:x-bubbles/cursor.restoreBasis\n * @param {HTMLElement} nodeSet\n * @returns {HTMLTextElement} fake text node\n */\nfunction restoreBasis(nodeSet) {\n let fakeText = text.createZws();\n\n if (nodeSet.hasChildNodes()) {\n const lastNode = nodeSet.childNodes[ nodeSet.childNodes.length - 1 ];\n\n if (lastNode.isEqualNode(fakeText)) {\n fakeText = lastNode;\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n } else {\n nodeSet.appendChild(fakeText);\n }\n\n return fakeText;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./core/cursor.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 9e46563..da10781 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "x-bubbles", "description": "Bubbles", - "version": "0.0.6", + "version": "0.0.7", "keywords": [], "homepage": "https://github.com/Katochimoto/x-bubbles", "author": { diff --git a/src/core/constant.js b/src/core/constant.js index eb5481c..8b0132e 100644 --- a/src/core/constant.js +++ b/src/core/constant.js @@ -23,4 +23,9 @@ exports.EV = { BUBBLE_EDIT: 'bubble-edit', BUBBLE_INPUT: 'bubble-input', CHANGE: 'change', + DRAGEND: 'dragend', + DRAGENTER: 'dragenter', + DRAGLEAVE: 'dragleave', + DRAGSTART: 'dragstart', + DROP: 'drop', }; diff --git a/src/core/drag/mouse.js b/src/core/drag/mouse.js index 781afcd..91331e0 100644 --- a/src/core/drag/mouse.js +++ b/src/core/drag/mouse.js @@ -3,7 +3,7 @@ const events = require('../events'); const select = require('../select'); const bubbleset = require('../bubbleset'); const Modernizr = require('modernizr'); -const { CLS } = require('../constant'); +const { CLS, EV } = require('../constant'); const { getDragImage, DRAG_IMG_WIDTH } = require('./common'); let currentDragSet = null; @@ -36,8 +36,8 @@ function onMousedown(event) { onMouseup: onMouseup.bind(this, nodeSet), onMousemove: events.throttle(onMousemove.bind(this, nodeSet)), onScroll: events.throttle(onScroll.bind(this, nodeSet)), - nodeOffsetX: events.pageX(event) - nodeBubble.offsetLeft, - nodeOffsetY: events.pageY(event) - nodeBubble.offsetTop, + nodeOffsetX: event.offsetX, + nodeOffsetY: event.offsetY, x: 0, y: 0 }; @@ -67,8 +67,11 @@ function onMouseup(dragSet, event) { } if (currentMoveSet) { - currentMoveSet.classList.remove(CLS.DROPZONE); + const _ = currentMoveSet; currentMoveSet = null; + + _.classList.remove(CLS.DROPZONE); + events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false }); } if (currentDragSet) { @@ -87,8 +90,12 @@ function onMouseup(dragSet, event) { } } - currentDragSet.classList.remove(CLS.DRAGSTART); + const _ = currentDragSet; currentDragSet = null; + + _.classList.remove(CLS.DRAGSTART); + events.dispatch(_, EV.DROP, { bubbles: false, cancelable: false }); + events.dispatch(_, EV.DRAGEND, { bubbles: false, cancelable: false }); } } @@ -124,6 +131,8 @@ function onMousemove(dragSet, event) { currentDragElement = document.body.appendChild(document.createElement('div')); currentDragElement.style.cssText = 'position:absolute;z-index:9999;pointer-events:none;top:0;left:0;'; currentDragElement.appendChild(moveElement); + + events.dispatch(currentDragSet, EV.DRAGSTART, { bubbles: false, cancelable: false }); } drag.x = event.clientX; @@ -136,15 +145,20 @@ function onMousemove(dragSet, event) { currentMoveSet.classList.remove(CLS.DROPZONE); nodeSet.classList.add(CLS.DROPZONE); currentMoveSet = nodeSet; + events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false }); } else if (!currentMoveSet) { nodeSet.classList.add(CLS.DROPZONE); currentMoveSet = nodeSet; + events.dispatch(currentMoveSet, EV.DRAGENTER, { bubbles: false, cancelable: false }); } } else if (currentMoveSet) { - currentMoveSet.classList.remove(CLS.DROPZONE); + const _ = currentMoveSet; currentMoveSet = null; + + _.classList.remove(CLS.DROPZONE); + events.dispatch(_, EV.DRAGLEAVE, { bubbles: false, cancelable: false }); } } diff --git a/src/core/events.js b/src/core/events.js index 0449f12..0311c19 100644 --- a/src/core/events.js +++ b/src/core/events.js @@ -10,6 +10,7 @@ const text = require('./text'); exports.scrollX = scrollX; exports.scrollY = scrollY; +exports.dispatch = dispatch; exports.pageX = function (event) { return (event.pageX === null && event.clientX !== null) ?