{"version":3,"file":"scripts.c57b370a293daf51.js","sources":["node_modules\\jquery\\dist\\jquery.min.js","node_modules\\moment\\min\\moment.min.js","node_modules\\fullcalendar\\dist\\fullcalendar.js","node_modules\\fullcalendar-scheduler\\dist\\scheduler.js","node_modules\\hammerjs\\hammer.min.js","node_modules\\hammer-timejs\\hammer-time.js","node_modules\\cropperjs\\dist\\cropper.js","node_modules\\@webcomponents\\custom-elements\\src\\native-shim.js","node_modules\\quill\\dist\\quill.js"],"sourceRoot":"webpack:///","sourcesContent":["/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(ie,e){\"use strict\";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType&&\"function\"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement(\"script\");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[i.call(e)]||\"object\":typeof e}var t=\"3.7.0\",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0+~]|\"+ge+\")\"+ge+\"*\"),x=new RegExp(ge+\"|>\"),j=new RegExp(g),A=new RegExp(\"^\"+t+\"$\"),D={ID:new RegExp(\"^#(\"+t+\")\"),CLASS:new RegExp(\"^\\\\.(\"+t+\")\"),TAG:new RegExp(\"^(\"+t+\"|[*])\"),ATTR:new RegExp(\"^\"+p),PSEUDO:new RegExp(\"^\"+g),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ge+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ge+\"*(?:([+-]|)\"+ge+\"*(\\\\d+)|))\"+ge+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+f+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ge+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ge+\"*((?:-\\\\d)?\\\\d*)\"+ge+\"*\\\\)|)(?=[^-]|$)\",\"i\")},N=/^(?:input|select|textarea|button)$/i,q=/^h\\d$/i,L=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,H=/[+~]/,O=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+ge+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),P=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,\"fieldset\")},{dir:\"parentNode\",next:\"legend\"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+\" \"]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute(\"id\"))?s=ce.escapeSelector(s):e.setAttribute(\"id\",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?\"#\"+s:\":scope\")+\" \"+Q(l[o]);c=l.join(\",\")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute(\"id\")}}}return re(t.replace(ve,\"$1\"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,\"input\")&&e.type===t}}function _(t){return function(e){return(fe(e,\"input\")||fe(e,\"button\"))&&e.type===t}}function X(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&M(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function z(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener(\"unload\",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,\"*\")}),le.scope=$(function(){return T.querySelectorAll(\":scope\")}),le.cssHas=$(function(){try{return T.querySelector(\":has(*,:jqfake)\"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML=\"\",e.querySelectorAll(\"[selected]\").length||d.push(\"\\\\[\"+ge+\"*(?:value|\"+f+\")\"),e.querySelectorAll(\"[id~=\"+S+\"-]\").length||d.push(\"~=\"),e.querySelectorAll(\"a#\"+S+\"+*\").length||d.push(\".#.+[+~]\"),e.querySelectorAll(\":checked\").length||d.push(\":checked\"),(t=T.createElement(\"input\")).setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&d.push(\":enabled\",\":disabled\"),(t=T.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||d.push(\"\\\\[\"+ge+\"*name\"+ge+\"*=\"+ge+\"*(?:''|\\\"\\\")\")}),le.cssHas||d.push(\":has\"),d=d.length&&new RegExp(d.join(\"|\")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+\" \"]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||\"\").replace(O,P),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+\" \"];return t||(t=new RegExp(\"(^|\"+ge+\")\"+e+\"(\"+ge+\"|$)\"))&&s(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\\x20\\t\\r\\n\\f]*)/i,Ce=/^$|^module$|\\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement(\"div\")),(be=C.createElement(\"input\")).setAttribute(\"type\",\"radio\"),be.setAttribute(\"checked\",\"checked\"),be.setAttribute(\"name\",\"t\"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML=\"\",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML=\"\",le.option=!!xe.lastChild;var ke={thead:[1,\"\",\"
\"],col:[2,\"\",\"
\"],tr:[2,\"\",\"
\"],td:[3,\"\",\"
\"],_default:[0,\"\",\"\"]};function Se(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n\",\"\"]);var je=/<|&#?\\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\\s*$/g;function Me(e,t){return fe(e,\"table\")&&fe(11!==t.nodeType?t:t.firstChild,\"tr\")&&ce(e).children(\"tbody\")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function We(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,\"handle events\"),s)for(n=0,r=s[i].length;n\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\\?(?=&|$)|\\?\\?/;ce.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Kt.pop()||ce.expando+\"_\"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Zt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,\"$1\"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||ce.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),\"script\"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument(\"\").body).innerHTML=\"
\",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1\").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,\"position\"),c=ce(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=ce.css(e,\"top\"),u=ce.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===ce.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===ce.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,\"borderTopWidth\",!0),i.left+=ce.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-ce.css(r,\"marginTop\",!0),left:t.left-i.left-ce.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===ce.css(e,\"position\"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;ce.fn[t]=function(e){return R(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each([\"top\",\"left\"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+\"px\":t})}),ce.each({Height:\"height\",Width:\"width\"},function(a,s){ce.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return R(this,function(e,t,n){var r;return y(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ce.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){ce.fn[n]=function(e,t){return 0>>0,s=0;sAe(e)?(r=e+1,t-Ae(e)):(r=e,t);return{year:r,dayOfYear:n}}function qe(e,t,n){var s,i,r=ze(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+P(i=e.year()-1,t,n):r>P(e.year(),t,n)?(s=r-P(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function P(e,t,n){var s=ze(e,t,n),t=ze(e+1,t,n);return(Ae(e)-s+t)/7}s(\"w\",[\"ww\",2],\"wo\",\"week\"),s(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),t(\"week\",\"w\"),t(\"isoWeek\",\"W\"),n(\"week\",5),n(\"isoWeek\",5),v(\"w\",p),v(\"ww\",p,w),v(\"W\",p),v(\"WW\",p,w),Te([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});function Be(e,t){return e.slice(t,7).concat(e.slice(0,t))}s(\"d\",0,\"do\",\"day\"),s(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),s(\"e\",0,0,\"weekday\"),s(\"E\",0,0,\"isoWeekday\"),t(\"day\",\"d\"),t(\"weekday\",\"e\"),t(\"isoWeekday\",\"E\"),n(\"day\",11),n(\"weekday\",11),n(\"isoWeekday\",11),v(\"d\",p),v(\"e\",p),v(\"E\",p),v(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),v(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),v(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),Te([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:m(n).invalidWeekday=e}),Te([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=g(e)});var Je=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Qe=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Xe=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Ke=k,et=k,tt=k;function nt(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=M(this.weekdaysMin(s,\"\")),n=M(this.weekdaysShort(s,\"\")),s=M(this.weekdays(s,\"\")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\")}function st(){return this.hours()%12||12}function it(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}s(\"H\",[\"HH\",2],0,\"hour\"),s(\"h\",[\"hh\",2],0,st),s(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),s(\"hmm\",0,0,function(){return\"\"+st.apply(this)+r(this.minutes(),2)}),s(\"hmmss\",0,0,function(){return\"\"+st.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s(\"Hmm\",0,0,function(){return\"\"+this.hours()+r(this.minutes(),2)}),s(\"Hmmss\",0,0,function(){return\"\"+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),it(\"a\",!0),it(\"A\",!1),t(\"hour\",\"h\"),n(\"hour\",13),v(\"a\",rt),v(\"A\",rt),v(\"H\",p),v(\"h\",p),v(\"k\",p),v(\"HH\",p,w),v(\"hh\",p,w),v(\"kk\",p,w),v(\"hmm\",ge),v(\"hmmss\",we),v(\"Hmm\",ge),v(\"Hmmss\",we),D([\"H\",\"HH\"],x),D([\"k\",\"kk\"],function(e,t,n){e=g(e);t[x]=24===e?0:e}),D([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),D([\"h\",\"hh\"],function(e,t,n){t[x]=g(e),m(n).bigHour=!0}),D(\"hmm\",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s)),m(n).bigHour=!0}),D(\"hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i)),m(n).bigHour=!0}),D(\"Hmm\",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s))}),D(\"Hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i))});k=de(\"Hours\",!0);var at,ot={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:Ce,monthsShort:Ue,week:{dow:0,doy:6},weekdays:Je,weekdaysMin:Xe,weekdaysShort:Qe,meridiemParse:/[ap]\\.?m?\\.?/i},R={},ut={};function lt(e){return e&&e.toLowerCase().replace(\"_\",\"-\")}function ht(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return at}function dt(t){var e;if(void 0===R[t]&&\"undefined\"!=typeof module&&module&&module.exports&&null!=t.match(\"^[^/\\\\\\\\]*$\"))try{e=at._abbr,require(\"./locale/\"+t),ct(e)}catch(e){R[t]=null}return R[t]}function ct(e,t){return e&&((t=o(t)?mt(e):ft(e,t))?at=t:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),at._abbr}function ft(e,t){if(null===t)return delete R[e],null;var n,s=ot;if(t.abbr=e,null!=R[e])Q(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),s=R[e]._config;else if(null!=t.parentLocale)if(null!=R[t.parentLocale])s=R[t.parentLocale]._config;else{if(null==(n=dt(t.parentLocale)))return ut[t.parentLocale]||(ut[t.parentLocale]=[]),ut[t.parentLocale].push({name:e,config:t}),null;s=n._config}return R[e]=new K(X(s,t)),ut[e]&&ut[e].forEach(function(e){ft(e.name,e.config)}),ct(e),R[e]}function mt(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return at;if(!a(e)){if(t=dt(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===m(e).overflow&&(t=t[O]<0||11We(t[Y],t[O])?b:t[x]<0||24P(r,u,l)?m(s)._overflowWeeks=!0:null!=h?m(s)._overflowWeekday=!0:(d=$e(r,a,o,u,l),s._a[Y]=d.year,s._dayOfYear=d.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[Y],n[Y]),(e._dayOfYear>Ae(i)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),h=Ze(i,0,e._dayOfYear),e._a[O]=h.getUTCMonth(),e._a[b]=h.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[x]&&0===e._a[T]&&0===e._a[N]&&0===e._a[Ne]&&(e._nextDay=!0,e._a[x]=0),e._d=(e._useUTC?Ze:je).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[x]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(m(e).weekdayMismatch=!0)}}function Tt(e){if(e._f===f.ISO_8601)St(e);else if(e._f===f.RFC_2822)Ot(e);else{e._a=[],m(e).empty=!0;for(var t,n,s,i,r,a=\"\"+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],h=l.length,d=0;de.valueOf():e.valueOf()\"}),i.toJSON=function(){return this.isValid()?this.toISOString():null},i.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},i.unix=function(){return Math.floor(this.valueOf()/1e3)},i.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},i.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},i.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},i.isLocal=function(){return!!this.isValid()&&!this._isUTC},i.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},i.isUtc=At,i.isUTC=At,i.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},i.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},i.dates=e(\"dates accessor is deprecated. Use date instead.\",ke),i.months=e(\"months accessor is deprecated. Use month instead\",Ge),i.years=e(\"years accessor is deprecated. Use year instead\",Ie),i.zone=e(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(e,t){return null!=e?(this.utcOffset(e=\"string\"!=typeof e?-e:e,t),this):-this.utcOffset()}),i.isDSTShifted=e(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return $(t,this),(t=Nt(t))._a?(e=(t._isUTC?l:W)(t._a),this._isDSTShifted=this.isValid()&&0 cells, find the cell with the largest natural width and set the widths of all the\r\n// cells to be that width.\r\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\r\nfunction matchCellWidths(els) {\r\n var maxInnerWidth = 0;\r\n els.find('> *').each(function (i, innerEl) {\r\n var innerWidth = $(innerEl).outerWidth();\r\n if (innerWidth > maxInnerWidth) {\r\n maxInnerWidth = innerWidth;\r\n }\r\n });\r\n maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\r\n els.width(maxInnerWidth);\r\n return maxInnerWidth;\r\n}\r\nexports.matchCellWidths = matchCellWidths;\r\n// Given one element that resides inside another,\r\n// Subtracts the height of the inner element from the outer element.\r\nfunction subtractInnerElHeight(outerEl, innerEl) {\r\n var both = outerEl.add(innerEl);\r\n var diff;\r\n // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\r\n both.css({\r\n position: 'relative',\r\n left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\r\n });\r\n diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\r\n both.css({ position: '', left: '' }); // undo hack\r\n return diff;\r\n}\r\nexports.subtractInnerElHeight = subtractInnerElHeight;\r\n/* Element Geom Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\r\nfunction getScrollParent(el) {\r\n var position = el.css('position');\r\n var scrollParent = el.parents().filter(function () {\r\n var parent = $(this);\r\n return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\r\n }).eq(0);\r\n return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\r\n}\r\nexports.getScrollParent = getScrollParent;\r\n// Queries the outer bounding area of a jQuery element.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getOuterRect(el, origin) {\r\n var offset = el.offset();\r\n var left = offset.left - (origin ? origin.left : 0);\r\n var top = offset.top - (origin ? origin.top : 0);\r\n return {\r\n left: left,\r\n right: left + el.outerWidth(),\r\n top: top,\r\n bottom: top + el.outerHeight()\r\n };\r\n}\r\nexports.getOuterRect = getOuterRect;\r\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\n// WARNING: given element can't have borders\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getClientRect(el, origin) {\r\n var offset = el.offset();\r\n var scrollbarWidths = getScrollbarWidths(el);\r\n var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\r\n var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\r\n return {\r\n left: left,\r\n right: left + el[0].clientWidth,\r\n top: top,\r\n bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\r\n };\r\n}\r\nexports.getClientRect = getClientRect;\r\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getContentRect(el, origin) {\r\n var offset = el.offset(); // just outside of border, margin not included\r\n var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\r\n (origin ? origin.left : 0);\r\n var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\r\n (origin ? origin.top : 0);\r\n return {\r\n left: left,\r\n right: left + el.width(),\r\n top: top,\r\n bottom: top + el.height()\r\n };\r\n}\r\nexports.getContentRect = getContentRect;\r\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\r\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getScrollbarWidths(el) {\r\n var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\r\n var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\r\n var widths;\r\n leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\r\n bottomWidth = sanitizeScrollbarWidth(bottomWidth);\r\n widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\r\n if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') { // is the scrollbar on the left side?\r\n widths.left = leftRightWidth;\r\n }\r\n else {\r\n widths.right = leftRightWidth;\r\n }\r\n return widths;\r\n}\r\nexports.getScrollbarWidths = getScrollbarWidths;\r\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\r\n// retina displays, rounding, and IE11. Massage them into a usable value.\r\nfunction sanitizeScrollbarWidth(width) {\r\n width = Math.max(0, width); // no negatives\r\n width = Math.round(width);\r\n return width;\r\n}\r\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\r\nvar _isLeftRtlScrollbars = null;\r\nfunction getIsLeftRtlScrollbars() {\r\n if (_isLeftRtlScrollbars === null) {\r\n _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\r\n }\r\n return _isLeftRtlScrollbars;\r\n}\r\nfunction computeIsLeftRtlScrollbars() {\r\n var el = $('
')\r\n .css({\r\n position: 'absolute',\r\n top: -1000,\r\n left: 0,\r\n border: 0,\r\n padding: 0,\r\n overflow: 'scroll',\r\n direction: 'rtl'\r\n })\r\n .appendTo('body');\r\n var innerEl = el.children();\r\n var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\r\n el.remove();\r\n return res;\r\n}\r\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\r\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\r\nfunction getCssFloat(el, prop) {\r\n return parseFloat(el.css(prop)) || 0;\r\n}\r\n/* Mouse / Touch Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\r\nfunction isPrimaryMouseButton(ev) {\r\n return ev.which === 1 && !ev.ctrlKey;\r\n}\r\nexports.isPrimaryMouseButton = isPrimaryMouseButton;\r\nfunction getEvX(ev) {\r\n var touches = ev.originalEvent.touches;\r\n // on mobile FF, pageX for touch events is present, but incorrect,\r\n // so, look at touch coordinates first.\r\n if (touches && touches.length) {\r\n return touches[0].pageX;\r\n }\r\n return ev.pageX;\r\n}\r\nexports.getEvX = getEvX;\r\nfunction getEvY(ev) {\r\n var touches = ev.originalEvent.touches;\r\n // on mobile FF, pageX for touch events is present, but incorrect,\r\n // so, look at touch coordinates first.\r\n if (touches && touches.length) {\r\n return touches[0].pageY;\r\n }\r\n return ev.pageY;\r\n}\r\nexports.getEvY = getEvY;\r\nfunction getEvIsTouch(ev) {\r\n return /^touch/.test(ev.type);\r\n}\r\nexports.getEvIsTouch = getEvIsTouch;\r\nfunction preventSelection(el) {\r\n el.addClass('fc-unselectable')\r\n .on('selectstart', preventDefault);\r\n}\r\nexports.preventSelection = preventSelection;\r\nfunction allowSelection(el) {\r\n el.removeClass('fc-unselectable')\r\n .off('selectstart', preventDefault);\r\n}\r\nexports.allowSelection = allowSelection;\r\n// Stops a mouse/touch event from doing it's native browser action\r\nfunction preventDefault(ev) {\r\n ev.preventDefault();\r\n}\r\nexports.preventDefault = preventDefault;\r\n/* General Geometry Utils\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\r\nfunction intersectRects(rect1, rect2) {\r\n var res = {\r\n left: Math.max(rect1.left, rect2.left),\r\n right: Math.min(rect1.right, rect2.right),\r\n top: Math.max(rect1.top, rect2.top),\r\n bottom: Math.min(rect1.bottom, rect2.bottom)\r\n };\r\n if (res.left < res.right && res.top < res.bottom) {\r\n return res;\r\n }\r\n return false;\r\n}\r\nexports.intersectRects = intersectRects;\r\n// Returns a new point that will have been moved to reside within the given rectangle\r\nfunction constrainPoint(point, rect) {\r\n return {\r\n left: Math.min(Math.max(point.left, rect.left), rect.right),\r\n top: Math.min(Math.max(point.top, rect.top), rect.bottom)\r\n };\r\n}\r\nexports.constrainPoint = constrainPoint;\r\n// Returns a point that is the center of the given rectangle\r\nfunction getRectCenter(rect) {\r\n return {\r\n left: (rect.left + rect.right) / 2,\r\n top: (rect.top + rect.bottom) / 2\r\n };\r\n}\r\nexports.getRectCenter = getRectCenter;\r\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\r\nfunction diffPoints(point1, point2) {\r\n return {\r\n left: point1.left - point2.left,\r\n top: point1.top - point2.top\r\n };\r\n}\r\nexports.diffPoints = diffPoints;\r\n/* Object Ordering by Field\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction parseFieldSpecs(input) {\r\n var specs = [];\r\n var tokens = [];\r\n var i;\r\n var token;\r\n if (typeof input === 'string') {\r\n tokens = input.split(/\\s*,\\s*/);\r\n }\r\n else if (typeof input === 'function') {\r\n tokens = [input];\r\n }\r\n else if ($.isArray(input)) {\r\n tokens = input;\r\n }\r\n for (i = 0; i < tokens.length; i++) {\r\n token = tokens[i];\r\n if (typeof token === 'string') {\r\n specs.push(token.charAt(0) === '-' ?\r\n { field: token.substring(1), order: -1 } :\r\n { field: token, order: 1 });\r\n }\r\n else if (typeof token === 'function') {\r\n specs.push({ func: token });\r\n }\r\n }\r\n return specs;\r\n}\r\nexports.parseFieldSpecs = parseFieldSpecs;\r\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\r\n var i;\r\n var cmp;\r\n for (i = 0; i < fieldSpecs.length; i++) {\r\n cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\r\n if (cmp) {\r\n return cmp;\r\n }\r\n }\r\n return 0;\r\n}\r\nexports.compareByFieldSpecs = compareByFieldSpecs;\r\nfunction compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\r\n if (fieldSpec.func) {\r\n return fieldSpec.func(obj1, obj2);\r\n }\r\n var val1 = obj1[fieldSpec.field];\r\n var val2 = obj2[fieldSpec.field];\r\n if (val1 == null && obj1fallback) {\r\n val1 = obj1fallback[fieldSpec.field];\r\n }\r\n if (val2 == null && obj2fallback) {\r\n val2 = obj2fallback[fieldSpec.field];\r\n }\r\n return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\r\n}\r\nexports.compareByFieldSpec = compareByFieldSpec;\r\nfunction flexibleCompare(a, b) {\r\n if (!a && !b) {\r\n return 0;\r\n }\r\n if (b == null) {\r\n return -1;\r\n }\r\n if (a == null) {\r\n return 1;\r\n }\r\n if ($.type(a) === 'string' || $.type(b) === 'string') {\r\n return String(a).localeCompare(String(b));\r\n }\r\n return a - b;\r\n}\r\nexports.flexibleCompare = flexibleCompare;\r\n/* Date Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nexports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\r\nexports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\r\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\r\n// Moments will have their timezones normalized.\r\nfunction diffDayTime(a, b) {\r\n return moment.duration({\r\n days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\r\n ms: a.time() - b.time() // time-of-day from day start. disregards timezone\r\n });\r\n}\r\nexports.diffDayTime = diffDayTime;\r\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\r\nfunction diffDay(a, b) {\r\n return moment.duration({\r\n days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\r\n });\r\n}\r\nexports.diffDay = diffDay;\r\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\r\nfunction diffByUnit(a, b, unit) {\r\n return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\r\n unit);\r\n}\r\nexports.diffByUnit = diffByUnit;\r\n// Computes the unit name of the largest whole-unit period of time.\r\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\r\n// Accepts start/end, a range object, or an original duration object.\r\nfunction computeGreatestUnit(start, end) {\r\n var i;\r\n var unit;\r\n var val;\r\n for (i = 0; i < exports.unitsDesc.length; i++) {\r\n unit = exports.unitsDesc[i];\r\n val = computeRangeAs(unit, start, end);\r\n if (val >= 1 && isInt(val)) {\r\n break;\r\n }\r\n }\r\n return unit; // will be \"milliseconds\" if nothing else matches\r\n}\r\nexports.computeGreatestUnit = computeGreatestUnit;\r\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\r\nfunction computeDurationGreatestUnit(duration, durationInput) {\r\n var unit = computeGreatestUnit(duration);\r\n // prevent days:7 from being interpreted as a week\r\n if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\r\n unit = 'day';\r\n }\r\n return unit;\r\n}\r\nexports.computeDurationGreatestUnit = computeDurationGreatestUnit;\r\n// Computes the number of units (like \"hours\") in the given range.\r\n// Range can be a {start,end} object, separate start/end args, or a Duration.\r\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\r\n// of month-diffing logic (which tends to vary from version to version).\r\nfunction computeRangeAs(unit, start, end) {\r\n if (end != null) { // given start, end\r\n return end.diff(start, unit, true);\r\n }\r\n else if (moment.isDuration(start)) { // given duration\r\n return start.as(unit);\r\n }\r\n else { // given { start, end } range object\r\n return start.end.diff(start.start, unit, true);\r\n }\r\n}\r\n// Intelligently divides a range (specified by a start/end params) by a duration\r\nfunction divideRangeByDuration(start, end, dur) {\r\n var months;\r\n if (durationHasTime(dur)) {\r\n return (end - start) / dur;\r\n }\r\n months = dur.asMonths();\r\n if (Math.abs(months) >= 1 && isInt(months)) {\r\n return end.diff(start, 'months', true) / months;\r\n }\r\n return end.diff(start, 'days', true) / dur.asDays();\r\n}\r\nexports.divideRangeByDuration = divideRangeByDuration;\r\n// Intelligently divides one duration by another\r\nfunction divideDurationByDuration(dur1, dur2) {\r\n var months1;\r\n var months2;\r\n if (durationHasTime(dur1) || durationHasTime(dur2)) {\r\n return dur1 / dur2;\r\n }\r\n months1 = dur1.asMonths();\r\n months2 = dur2.asMonths();\r\n if (Math.abs(months1) >= 1 && isInt(months1) &&\r\n Math.abs(months2) >= 1 && isInt(months2)) {\r\n return months1 / months2;\r\n }\r\n return dur1.asDays() / dur2.asDays();\r\n}\r\nexports.divideDurationByDuration = divideDurationByDuration;\r\n// Intelligently multiplies a duration by a number\r\nfunction multiplyDuration(dur, n) {\r\n var months;\r\n if (durationHasTime(dur)) {\r\n return moment.duration(dur * n);\r\n }\r\n months = dur.asMonths();\r\n if (Math.abs(months) >= 1 && isInt(months)) {\r\n return moment.duration({ months: months * n });\r\n }\r\n return moment.duration({ days: dur.asDays() * n });\r\n}\r\nexports.multiplyDuration = multiplyDuration;\r\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\r\nfunction durationHasTime(dur) {\r\n return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\r\n}\r\nexports.durationHasTime = durationHasTime;\r\nfunction isNativeDate(input) {\r\n return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\r\n}\r\nexports.isNativeDate = isNativeDate;\r\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\r\nfunction isTimeString(str) {\r\n return typeof str === 'string' &&\r\n /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\r\n}\r\nexports.isTimeString = isTimeString;\r\n/* Logging and Debug\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction log() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var console = window.console;\r\n if (console && console.log) {\r\n return console.log.apply(console, args);\r\n }\r\n}\r\nexports.log = log;\r\nfunction warn() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var console = window.console;\r\n if (console && console.warn) {\r\n return console.warn.apply(console, args);\r\n }\r\n else {\r\n return log.apply(null, args);\r\n }\r\n}\r\nexports.warn = warn;\r\n/* General Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar hasOwnPropMethod = {}.hasOwnProperty;\r\n// Merges an array of objects into a single object.\r\n// The second argument allows for an array of property names who's object values will be merged together.\r\nfunction mergeProps(propObjs, complexProps) {\r\n var dest = {};\r\n var i;\r\n var name;\r\n var complexObjs;\r\n var j;\r\n var val;\r\n var props;\r\n if (complexProps) {\r\n for (i = 0; i < complexProps.length; i++) {\r\n name = complexProps[i];\r\n complexObjs = [];\r\n // collect the trailing object values, stopping when a non-object is discovered\r\n for (j = propObjs.length - 1; j >= 0; j--) {\r\n val = propObjs[j][name];\r\n if (typeof val === 'object') {\r\n complexObjs.unshift(val);\r\n }\r\n else if (val !== undefined) {\r\n dest[name] = val; // if there were no objects, this value will be used\r\n break;\r\n }\r\n }\r\n // if the trailing values were objects, use the merged value\r\n if (complexObjs.length) {\r\n dest[name] = mergeProps(complexObjs);\r\n }\r\n }\r\n }\r\n // copy values into the destination, going from last to first\r\n for (i = propObjs.length - 1; i >= 0; i--) {\r\n props = propObjs[i];\r\n for (name in props) {\r\n if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\r\n dest[name] = props[name];\r\n }\r\n }\r\n }\r\n return dest;\r\n}\r\nexports.mergeProps = mergeProps;\r\nfunction copyOwnProps(src, dest) {\r\n for (var name_1 in src) {\r\n if (hasOwnProp(src, name_1)) {\r\n dest[name_1] = src[name_1];\r\n }\r\n }\r\n}\r\nexports.copyOwnProps = copyOwnProps;\r\nfunction hasOwnProp(obj, name) {\r\n return hasOwnPropMethod.call(obj, name);\r\n}\r\nexports.hasOwnProp = hasOwnProp;\r\nfunction applyAll(functions, thisObj, args) {\r\n if ($.isFunction(functions)) {\r\n functions = [functions];\r\n }\r\n if (functions) {\r\n var i = void 0;\r\n var ret = void 0;\r\n for (i = 0; i < functions.length; i++) {\r\n ret = functions[i].apply(thisObj, args) || ret;\r\n }\r\n return ret;\r\n }\r\n}\r\nexports.applyAll = applyAll;\r\nfunction removeMatching(array, testFunc) {\r\n var removeCnt = 0;\r\n var i = 0;\r\n while (i < array.length) {\r\n if (testFunc(array[i])) { // truthy value means *remove*\r\n array.splice(i, 1);\r\n removeCnt++;\r\n }\r\n else {\r\n i++;\r\n }\r\n }\r\n return removeCnt;\r\n}\r\nexports.removeMatching = removeMatching;\r\nfunction removeExact(array, exactVal) {\r\n var removeCnt = 0;\r\n var i = 0;\r\n while (i < array.length) {\r\n if (array[i] === exactVal) {\r\n array.splice(i, 1);\r\n removeCnt++;\r\n }\r\n else {\r\n i++;\r\n }\r\n }\r\n return removeCnt;\r\n}\r\nexports.removeExact = removeExact;\r\nfunction isArraysEqual(a0, a1) {\r\n var len = a0.length;\r\n var i;\r\n if (len == null || len !== a1.length) { // not array? or not same length?\r\n return false;\r\n }\r\n for (i = 0; i < len; i++) {\r\n if (a0[i] !== a1[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nexports.isArraysEqual = isArraysEqual;\r\nfunction firstDefined() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n if (args[i] !== undefined) {\r\n return args[i];\r\n }\r\n }\r\n}\r\nexports.firstDefined = firstDefined;\r\nfunction htmlEscape(s) {\r\n return (s + '').replace(/&/g, '&')\r\n .replace(//g, '>')\r\n .replace(/'/g, ''')\r\n .replace(/\"/g, '"')\r\n .replace(/\\n/g, '
');\r\n}\r\nexports.htmlEscape = htmlEscape;\r\nfunction stripHtmlEntities(text) {\r\n return text.replace(/&.*?;/g, '');\r\n}\r\nexports.stripHtmlEntities = stripHtmlEntities;\r\n// Given a hash of CSS properties, returns a string of CSS.\r\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\r\nfunction cssToStr(cssProps) {\r\n var statements = [];\r\n $.each(cssProps, function (name, val) {\r\n if (val != null) {\r\n statements.push(name + ':' + val);\r\n }\r\n });\r\n return statements.join(';');\r\n}\r\nexports.cssToStr = cssToStr;\r\n// Given an object hash of HTML attribute names to values,\r\n// generates a string that can be injected between < > in HTML\r\nfunction attrsToStr(attrs) {\r\n var parts = [];\r\n $.each(attrs, function (name, val) {\r\n if (val != null) {\r\n parts.push(name + '=\"' + htmlEscape(val) + '\"');\r\n }\r\n });\r\n return parts.join(' ');\r\n}\r\nexports.attrsToStr = attrsToStr;\r\nfunction capitaliseFirstLetter(str) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nexports.capitaliseFirstLetter = capitaliseFirstLetter;\r\nfunction compareNumbers(a, b) {\r\n return a - b;\r\n}\r\nexports.compareNumbers = compareNumbers;\r\nfunction isInt(n) {\r\n return n % 1 === 0;\r\n}\r\nexports.isInt = isInt;\r\n// Returns a method bound to the given object context.\r\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\r\n// different contexts as identical when binding/unbinding events.\r\nfunction proxy(obj, methodName) {\r\n var method = obj[methodName];\r\n return function () {\r\n return method.apply(obj, arguments);\r\n };\r\n}\r\nexports.proxy = proxy;\r\n// Returns a function, that, as long as it continues to be invoked, will not\r\n// be triggered. The function will be called after it stops being called for\r\n// N milliseconds. If `immediate` is passed, trigger the function on the\r\n// leading edge, instead of the trailing.\r\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\r\nfunction debounce(func, wait, immediate) {\r\n if (immediate === void 0) { immediate = false; }\r\n var timeout;\r\n var args;\r\n var context;\r\n var timestamp;\r\n var result;\r\n var later = function () {\r\n var last = +new Date() - timestamp;\r\n if (last < wait) {\r\n timeout = setTimeout(later, wait - last);\r\n }\r\n else {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n context = args = null;\r\n }\r\n }\r\n };\r\n return function () {\r\n context = this;\r\n args = arguments;\r\n timestamp = +new Date();\r\n var callNow = immediate && !timeout;\r\n if (!timeout) {\r\n timeout = setTimeout(later, wait);\r\n }\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n context = args = null;\r\n }\r\n return result;\r\n };\r\n}\r\nexports.debounce = debounce;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange = /** @class */ (function () {\r\n function UnzonedRange(startInput, endInput) {\r\n // TODO: move these into footprint.\r\n // Especially, doesn't make sense for null startMs/endMs.\r\n this.isStart = true;\r\n this.isEnd = true;\r\n if (moment.isMoment(startInput)) {\r\n startInput = startInput.clone().stripZone();\r\n }\r\n if (moment.isMoment(endInput)) {\r\n endInput = endInput.clone().stripZone();\r\n }\r\n if (startInput) {\r\n this.startMs = startInput.valueOf();\r\n }\r\n if (endInput) {\r\n this.endMs = endInput.valueOf();\r\n }\r\n }\r\n /*\r\n SIDEEFFECT: will mutate eventRanges.\r\n Will return a new array result.\r\n Only works for non-open-ended ranges.\r\n */\r\n UnzonedRange.invertRanges = function (ranges, constraintRange) {\r\n var invertedRanges = [];\r\n var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\r\n var i;\r\n var dateRange;\r\n // ranges need to be in order. required for our date-walking algorithm\r\n ranges.sort(compareUnzonedRanges);\r\n for (i = 0; i < ranges.length; i++) {\r\n dateRange = ranges[i];\r\n // add the span of time before the event (if there is any)\r\n if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\r\n invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\r\n }\r\n if (dateRange.endMs > startMs) {\r\n startMs = dateRange.endMs;\r\n }\r\n }\r\n // add the span of time after the last event (if there is any)\r\n if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\r\n invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\r\n }\r\n return invertedRanges;\r\n };\r\n UnzonedRange.prototype.intersect = function (otherRange) {\r\n var startMs = this.startMs;\r\n var endMs = this.endMs;\r\n var newRange = null;\r\n if (otherRange.startMs != null) {\r\n if (startMs == null) {\r\n startMs = otherRange.startMs;\r\n }\r\n else {\r\n startMs = Math.max(startMs, otherRange.startMs);\r\n }\r\n }\r\n if (otherRange.endMs != null) {\r\n if (endMs == null) {\r\n endMs = otherRange.endMs;\r\n }\r\n else {\r\n endMs = Math.min(endMs, otherRange.endMs);\r\n }\r\n }\r\n if (startMs == null || endMs == null || startMs < endMs) {\r\n newRange = new UnzonedRange(startMs, endMs);\r\n newRange.isStart = this.isStart && startMs === this.startMs;\r\n newRange.isEnd = this.isEnd && endMs === this.endMs;\r\n }\r\n return newRange;\r\n };\r\n UnzonedRange.prototype.intersectsWith = function (otherRange) {\r\n return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&\r\n (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\r\n };\r\n UnzonedRange.prototype.containsRange = function (innerRange) {\r\n return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&\r\n (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));\r\n };\r\n // `date` can be a moment, a Date, or a millisecond time.\r\n UnzonedRange.prototype.containsDate = function (date) {\r\n var ms = date.valueOf();\r\n return (this.startMs == null || ms >= this.startMs) &&\r\n (this.endMs == null || ms < this.endMs);\r\n };\r\n // If the given date is not within the given range, move it inside.\r\n // (If it's past the end, make it one millisecond before the end).\r\n // `date` can be a moment, a Date, or a millisecond time.\r\n // Returns a MS-time.\r\n UnzonedRange.prototype.constrainDate = function (date) {\r\n var ms = date.valueOf();\r\n if (this.startMs != null && ms < this.startMs) {\r\n ms = this.startMs;\r\n }\r\n if (this.endMs != null && ms >= this.endMs) {\r\n ms = this.endMs - 1;\r\n }\r\n return ms;\r\n };\r\n UnzonedRange.prototype.equals = function (otherRange) {\r\n return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\r\n };\r\n UnzonedRange.prototype.clone = function () {\r\n var range = new UnzonedRange(this.startMs, this.endMs);\r\n range.isStart = this.isStart;\r\n range.isEnd = this.isEnd;\r\n return range;\r\n };\r\n // Returns an ambig-zoned moment from startMs.\r\n // BEWARE: returned moment is not localized.\r\n // Formatting and start-of-week will be default.\r\n UnzonedRange.prototype.getStart = function () {\r\n if (this.startMs != null) {\r\n return moment_ext_1.default.utc(this.startMs).stripZone();\r\n }\r\n return null;\r\n };\r\n // Returns an ambig-zoned moment from startMs.\r\n // BEWARE: returned moment is not localized.\r\n // Formatting and start-of-week will be default.\r\n UnzonedRange.prototype.getEnd = function () {\r\n if (this.endMs != null) {\r\n return moment_ext_1.default.utc(this.endMs).stripZone();\r\n }\r\n return null;\r\n };\r\n UnzonedRange.prototype.as = function (unit) {\r\n return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\r\n };\r\n return UnzonedRange;\r\n}());\r\nexports.default = UnzonedRange;\r\n/*\r\nOnly works for non-open-ended ranges.\r\n*/\r\nfunction compareUnzonedRanges(range1, range2) {\r\n return range1.startMs - range2.startMs; // earlier ranges go first\r\n}\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventSource, _super);\r\n // can we do away with calendar? at least for the abstract?\r\n // useful for buildEventDef\r\n function EventSource(calendar) {\r\n var _this = _super.call(this) || this;\r\n _this.calendar = calendar;\r\n _this.className = [];\r\n _this.uid = String(EventSource.uuid++);\r\n return _this;\r\n }\r\n /*\r\n rawInput can be any data type!\r\n */\r\n EventSource.parse = function (rawInput, calendar) {\r\n var source = new this(calendar);\r\n if (typeof rawInput === 'object') {\r\n if (source.applyProps(rawInput)) {\r\n return source;\r\n }\r\n }\r\n return false;\r\n };\r\n EventSource.normalizeId = function (id) {\r\n if (id) {\r\n return String(id);\r\n }\r\n return null;\r\n };\r\n EventSource.prototype.fetch = function (start, end, timezone) {\r\n // subclasses must implement. must return a promise.\r\n };\r\n EventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n // optional for subclasses to implement\r\n };\r\n EventSource.prototype.removeAllEventDefs = function () {\r\n // optional for subclasses to implement\r\n };\r\n /*\r\n For compairing/matching\r\n */\r\n EventSource.prototype.getPrimitive = function (otherSource) {\r\n // subclasses must implement\r\n };\r\n EventSource.prototype.parseEventDefs = function (rawEventDefs) {\r\n var i;\r\n var eventDef;\r\n var eventDefs = [];\r\n for (i = 0; i < rawEventDefs.length; i++) {\r\n eventDef = this.parseEventDef(rawEventDefs[i]);\r\n if (eventDef) {\r\n eventDefs.push(eventDef);\r\n }\r\n }\r\n return eventDefs;\r\n };\r\n EventSource.prototype.parseEventDef = function (rawInput) {\r\n var calendarTransform = this.calendar.opt('eventDataTransform');\r\n var sourceTransform = this.eventDataTransform;\r\n if (calendarTransform) {\r\n rawInput = calendarTransform(rawInput, this.calendar);\r\n }\r\n if (sourceTransform) {\r\n rawInput = sourceTransform(rawInput, this.calendar);\r\n }\r\n return EventDefParser_1.default.parse(rawInput, this);\r\n };\r\n EventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n if (rawProps.id != null) {\r\n this.id = EventSource.normalizeId(rawProps.id);\r\n }\r\n // TODO: converge with EventDef\r\n if ($.isArray(rawProps.className)) {\r\n this.className = rawProps.className;\r\n }\r\n else if (typeof rawProps.className === 'string') {\r\n this.className = rawProps.className.split(/\\s+/);\r\n }\r\n return true;\r\n };\r\n EventSource.uuid = 0;\r\n EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n return EventSource;\r\n}(Class_1.default));\r\nexports.default = EventSource;\r\nParsableModelMixin_1.default.mixInto(EventSource);\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nEventSource.defineStandardProps({\r\n // manually process...\r\n id: false,\r\n className: false,\r\n // automatically transfer...\r\n color: true,\r\n backgroundColor: true,\r\n borderColor: true,\r\n textColor: true,\r\n editable: true,\r\n startEditable: true,\r\n durationEditable: true,\r\n rendering: true,\r\n overlap: true,\r\n constraint: true,\r\n allDayDefault: true,\r\n eventDataTransform: true\r\n});\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUtility methods for easily listening to events on another object,\r\nand more importantly, easily unlistening from them.\r\n\nUSAGE:\r\n import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\nin class:\r\n listenTo: ListenerInterface['listenTo']\r\n stopListeningTo: ListenerInterface['stopListeningTo']\r\nafter class:\r\n ListenerMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar guid = 0;\r\nvar ListenerMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListenerMixin, _super);\r\n function ListenerMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n Can be called:\r\n .listenTo(other, eventName, callback)\r\n OR\r\n .listenTo(other, {\r\n eventName1: callback1,\r\n eventName2: callback2\r\n })\r\n */\r\n ListenerMixin.prototype.listenTo = function (other, arg, callback) {\r\n if (typeof arg === 'object') { // given dictionary of callbacks\r\n for (var eventName in arg) {\r\n if (arg.hasOwnProperty(eventName)) {\r\n this.listenTo(other, eventName, arg[eventName]);\r\n }\r\n }\r\n }\r\n else if (typeof arg === 'string') {\r\n other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\r\n $.proxy(callback, this) // always use `this` context\r\n // the usually-undesired jQuery guid behavior doesn't matter,\r\n // because we always unbind via namespace\r\n );\r\n }\r\n };\r\n /*\r\n Causes the current object to stop listening to events on the `other` object.\r\n `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n */\r\n ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\r\n other.off((eventName || '') + '.' + this.getListenerNamespace());\r\n };\r\n /*\r\n Returns a string, unique to this object, to be used for event namespacing\r\n */\r\n ListenerMixin.prototype.getListenerNamespace = function () {\r\n if (this.listenerId == null) {\r\n this.listenerId = guid++;\r\n }\r\n return '_listener' + this.listenerId;\r\n };\r\n return ListenerMixin;\r\n}(Mixin_1.default));\r\nexports.default = ListenerMixin;\r\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar SingleEventDef = /** @class */ (function (_super) {\r\n tslib_1.__extends(SingleEventDef, _super);\r\n function SingleEventDef() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n Will receive start/end params, but will be ignored.\r\n */\r\n SingleEventDef.prototype.buildInstances = function () {\r\n return [this.buildInstance()];\r\n };\r\n SingleEventDef.prototype.buildInstance = function () {\r\n return new EventInstance_1.default(this, // definition\r\n this.dateProfile);\r\n };\r\n SingleEventDef.prototype.isAllDay = function () {\r\n return this.dateProfile.isAllDay();\r\n };\r\n SingleEventDef.prototype.clone = function () {\r\n var def = _super.prototype.clone.call(this);\r\n def.dateProfile = this.dateProfile;\r\n return def;\r\n };\r\n SingleEventDef.prototype.rezone = function () {\r\n var calendar = this.source.calendar;\r\n var dateProfile = this.dateProfile;\r\n this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\r\n };\r\n /*\r\n NOTE: if super-method fails, should still attempt to apply\r\n */\r\n SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure\r\n if (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n // make sure `date` shows up in the legacy event objects as-is\r\n if (rawProps.date != null) {\r\n this.miscProps.date = rawProps.date;\r\n }\r\n return superSuccess;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n return SingleEventDef;\r\n}(EventDef_1.default));\r\nexports.default = SingleEventDef;\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nSingleEventDef.defineStandardProps({\r\n start: false,\r\n date: false,\r\n end: false,\r\n allDay: false\r\n});\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\r\nvar ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\r\nvar newMomentProto = moment.fn; // where we will attach our new methods\r\nexports.newMomentProto = newMomentProto;\r\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\r\nexports.oldMomentProto = oldMomentProto;\r\n// tell momentjs to transfer these properties upon clone\r\nvar momentProperties = moment.momentProperties;\r\nmomentProperties.push('_fullCalendar');\r\nmomentProperties.push('_ambigTime');\r\nmomentProperties.push('_ambigZone');\r\n/*\r\nCall this if you want Moment's original format method to be used\r\n*/\r\nfunction oldMomentFormat(mom, formatStr) {\r\n return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\r\n}\r\nexports.oldMomentFormat = oldMomentFormat;\r\n// Creating\r\n// -------------------------------------------------------------------------------------------------\r\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\r\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\r\n// it will function as a clone (and retain the zone of the moment). Anything else will\r\n// result in a moment in the local zone.\r\nvar momentExt = function () {\r\n return makeMoment(arguments);\r\n};\r\nexports.default = momentExt;\r\n// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\r\nmomentExt.utc = function () {\r\n var mom = makeMoment(arguments, true);\r\n // Force it into UTC because makeMoment doesn't guarantee it\r\n // (if given a pre-existing moment for example)\r\n if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\r\n mom.utc();\r\n }\r\n return mom;\r\n};\r\n// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\r\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\r\nmomentExt.parseZone = function () {\r\n return makeMoment(arguments, true, true);\r\n};\r\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\r\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\r\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\r\n// parseAsUTC - if there is no zone information, should we parse the input in UTC?\r\n// parseZone - if there is zone information, should we force the zone of the moment?\r\nfunction makeMoment(args, parseAsUTC, parseZone) {\r\n if (parseAsUTC === void 0) { parseAsUTC = false; }\r\n if (parseZone === void 0) { parseZone = false; }\r\n var input = args[0];\r\n var isSingleString = args.length === 1 && typeof input === 'string';\r\n var isAmbigTime;\r\n var isAmbigZone;\r\n var ambigMatch;\r\n var mom;\r\n if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\r\n mom = moment.apply(null, args);\r\n }\r\n else { // \"parsing\" is required\r\n isAmbigTime = false;\r\n isAmbigZone = false;\r\n if (isSingleString) {\r\n if (ambigDateOfMonthRegex.test(input)) {\r\n // accept strings like '2014-05', but convert to the first of the month\r\n input += '-01';\r\n args = [input]; // for when we pass it on to moment's constructor\r\n isAmbigTime = true;\r\n isAmbigZone = true;\r\n }\r\n else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\r\n isAmbigTime = !ambigMatch[5]; // no time part?\r\n isAmbigZone = true;\r\n }\r\n }\r\n else if ($.isArray(input)) {\r\n // arrays have no timezone information, so assume ambiguous zone\r\n isAmbigZone = true;\r\n }\r\n // otherwise, probably a string with a format\r\n if (parseAsUTC || isAmbigTime) {\r\n mom = moment.utc.apply(moment, args);\r\n }\r\n else {\r\n mom = moment.apply(null, args);\r\n }\r\n if (isAmbigTime) {\r\n mom._ambigTime = true;\r\n mom._ambigZone = true; // ambiguous time always means ambiguous zone\r\n }\r\n else if (parseZone) { // let's record the inputted zone somehow\r\n if (isAmbigZone) {\r\n mom._ambigZone = true;\r\n }\r\n else if (isSingleString) {\r\n mom.utcOffset(input); // if not a valid zone, will assign UTC\r\n }\r\n }\r\n }\r\n mom._fullCalendar = true; // flag for extended functionality\r\n return mom;\r\n}\r\n// Week Number\r\n// -------------------------------------------------------------------------------------------------\r\n// Returns the week number, considering the locale's custom week number calcuation\r\n// `weeks` is an alias for `week`\r\nnewMomentProto.week = newMomentProto.weeks = function (input) {\r\n var weekCalc = this._locale._fullCalendar_weekCalc;\r\n if (input == null && typeof weekCalc === 'function') { // custom function only works for getter\r\n return weekCalc(this);\r\n }\r\n else if (weekCalc === 'ISO') {\r\n return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\r\n }\r\n return oldMomentProto.week.apply(this, arguments); // local getter/setter\r\n};\r\n// Time-of-day\r\n// -------------------------------------------------------------------------------------------------\r\n// GETTER\r\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\r\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\r\n//\r\n// SETTER\r\n// You can supply a Duration, a Moment, or a Duration-like argument.\r\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\r\nnewMomentProto.time = function (time) {\r\n // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\r\n // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\r\n if (!this._fullCalendar) {\r\n return oldMomentProto.time.apply(this, arguments);\r\n }\r\n if (time == null) { // getter\r\n return moment.duration({\r\n hours: this.hours(),\r\n minutes: this.minutes(),\r\n seconds: this.seconds(),\r\n milliseconds: this.milliseconds()\r\n });\r\n }\r\n else { // setter\r\n this._ambigTime = false; // mark that the moment now has a time\r\n if (!moment.isDuration(time) && !moment.isMoment(time)) {\r\n time = moment.duration(time);\r\n }\r\n // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\r\n // Only for Duration times, not Moment times.\r\n var dayHours = 0;\r\n if (moment.isDuration(time)) {\r\n dayHours = Math.floor(time.asDays()) * 24;\r\n }\r\n // We need to set the individual fields.\r\n // Can't use startOf('day') then add duration. In case of DST at start of day.\r\n return this.hours(dayHours + time.hours())\r\n .minutes(time.minutes())\r\n .seconds(time.seconds())\r\n .milliseconds(time.milliseconds());\r\n }\r\n};\r\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\r\n// but preserving its YMD. A moment with a stripped time will display no time\r\n// nor timezone offset when .format() is called.\r\nnewMomentProto.stripTime = function () {\r\n if (!this._ambigTime) {\r\n this.utc(true); // keepLocalTime=true (for keeping *date* value)\r\n // set time to zero\r\n this.set({\r\n hours: 0,\r\n minutes: 0,\r\n seconds: 0,\r\n ms: 0\r\n });\r\n // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n // which clears all ambig flags.\r\n this._ambigTime = true;\r\n this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\r\n }\r\n return this; // for chaining\r\n};\r\n// Returns if the moment has a non-ambiguous time (boolean)\r\nnewMomentProto.hasTime = function () {\r\n return !this._ambigTime;\r\n};\r\n// Timezone\r\n// -------------------------------------------------------------------------------------------------\r\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\r\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\r\n// timezone offset when .format() is called.\r\nnewMomentProto.stripZone = function () {\r\n var wasAmbigTime;\r\n if (!this._ambigZone) {\r\n wasAmbigTime = this._ambigTime;\r\n this.utc(true); // keepLocalTime=true (for keeping date and time values)\r\n // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\r\n this._ambigTime = wasAmbigTime || false;\r\n // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n // which clears the ambig flags.\r\n this._ambigZone = true;\r\n }\r\n return this; // for chaining\r\n};\r\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\r\nnewMomentProto.hasZone = function () {\r\n return !this._ambigZone;\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.local = function (keepLocalTime) {\r\n // for when converting from ambiguously-zoned to local,\r\n // keep the time values when converting from UTC -> local\r\n oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\r\n // ensure non-ambiguous\r\n // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\r\n this._ambigTime = false;\r\n this._ambigZone = false;\r\n return this; // for chaining\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.utc = function (keepLocalTime) {\r\n oldMomentProto.utc.call(this, keepLocalTime);\r\n // ensure non-ambiguous\r\n // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\r\n this._ambigTime = false;\r\n this._ambigZone = false;\r\n return this;\r\n};\r\n// implicitly marks a zone (will probably get called upon .utc() and .local())\r\nnewMomentProto.utcOffset = function (tzo) {\r\n if (tzo != null) { // setter\r\n // these assignments needs to happen before the original zone method is called.\r\n // I forget why, something to do with a browser crash.\r\n this._ambigTime = false;\r\n this._ambigZone = false;\r\n }\r\n return oldMomentProto.utcOffset.apply(this, arguments);\r\n};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar ComponentFootprint = /** @class */ (function () {\r\n function ComponentFootprint(unzonedRange, isAllDay) {\r\n this.isAllDay = false; // component can choose to ignore this\r\n this.unzonedRange = unzonedRange;\r\n this.isAllDay = isAllDay;\r\n }\r\n /*\r\n Only works for non-open-ended ranges.\r\n */\r\n ComponentFootprint.prototype.toLegacy = function (calendar) {\r\n return {\r\n start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\r\n end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\r\n };\r\n };\r\n return ComponentFootprint;\r\n}());\r\nexports.default = ComponentFootprint;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\nin class:\r\n on: EmitterInterface['on']\r\n one: EmitterInterface['one']\r\n off: EmitterInterface['off']\r\n trigger: EmitterInterface['trigger']\r\n triggerWith: EmitterInterface['triggerWith']\r\n hasHandlers: EmitterInterface['hasHandlers']\r\nafter class:\r\n EmitterMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar EmitterMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(EmitterMixin, _super);\r\n function EmitterMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // jQuery-ification via $(this) allows a non-DOM object to have\r\n // the same event handling capabilities (including namespaces).\r\n EmitterMixin.prototype.on = function (types, handler) {\r\n $(this).on(types, this._prepareIntercept(handler));\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.one = function (types, handler) {\r\n $(this).one(types, this._prepareIntercept(handler));\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype._prepareIntercept = function (handler) {\r\n // handlers are always called with an \"event\" object as their first param.\r\n // sneak the `this` context and arguments into the extra parameter object\r\n // and forward them on to the original handler.\r\n var intercept = function (ev, extra) {\r\n return handler.apply(extra.context || this, extra.args || []);\r\n };\r\n // mimick jQuery's internal \"proxy\" system (risky, I know)\r\n // causing all functions with the same .guid to appear to be the same.\r\n // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\r\n // this is needed for calling .off with the original non-intercept handler.\r\n if (!handler.guid) {\r\n handler.guid = $.guid++;\r\n }\r\n intercept.guid = handler.guid;\r\n return intercept;\r\n };\r\n EmitterMixin.prototype.off = function (types, handler) {\r\n $(this).off(types, handler);\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.trigger = function (types) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n // pass in \"extra\" info to the intercept\r\n $(this).triggerHandler(types, { args: args });\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.triggerWith = function (types, context, args) {\r\n // `triggerHandler` is less reliant on the DOM compared to `trigger`.\r\n // pass in \"extra\" info to the intercept.\r\n $(this).triggerHandler(types, { context: context, args: args });\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.hasHandlers = function (type) {\r\n var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\r\n return hash && hash[type] && hash[type].length > 0;\r\n };\r\n return EmitterMixin;\r\n}(Mixin_1.default));\r\nexports.default = EmitterMixin;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Interaction = /** @class */ (function () {\r\n function Interaction(component) {\r\n this.view = component._getView();\r\n this.component = component;\r\n }\r\n Interaction.prototype.opt = function (name) {\r\n return this.view.opt(name);\r\n };\r\n Interaction.prototype.end = function () {\r\n // subclasses can implement\r\n };\r\n return Interaction;\r\n}());\r\nexports.default = Interaction;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Mixin = /** @class */ (function () {\r\n function Mixin() {\r\n }\r\n Mixin.mixInto = function (destClass) {\r\n var _this = this;\r\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n if (!destClass.prototype[name]) { // if destination class doesn't already define it\r\n destClass.prototype[name] = _this.prototype[name];\r\n }\r\n });\r\n };\r\n /*\r\n will override existing methods\r\n TODO: remove! not used anymore\r\n */\r\n Mixin.mixOver = function (destClass) {\r\n var _this = this;\r\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n destClass.prototype[name] = _this.prototype[name];\r\n });\r\n };\r\n return Mixin;\r\n}());\r\nexports.default = Mixin;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar EventDateProfile = /** @class */ (function () {\r\n function EventDateProfile(start, end, calendar) {\r\n this.start = start;\r\n this.end = end || null;\r\n this.unzonedRange = this.buildUnzonedRange(calendar);\r\n }\r\n /*\r\n Needs an EventSource object\r\n */\r\n EventDateProfile.parse = function (rawProps, source) {\r\n var startInput = rawProps.start || rawProps.date;\r\n var endInput = rawProps.end;\r\n if (!startInput) {\r\n return false;\r\n }\r\n var calendar = source.calendar;\r\n var start = calendar.moment(startInput);\r\n var end = endInput ? calendar.moment(endInput) : null;\r\n var forcedAllDay = rawProps.allDay;\r\n var forceEventDuration = calendar.opt('forceEventDuration');\r\n if (!start.isValid()) {\r\n return false;\r\n }\r\n if (forcedAllDay == null) {\r\n forcedAllDay = source.allDayDefault;\r\n if (forcedAllDay == null) {\r\n forcedAllDay = calendar.opt('allDayDefault');\r\n }\r\n }\r\n if (forcedAllDay === true) {\r\n start.stripTime();\r\n if (end) {\r\n end.stripTime();\r\n }\r\n }\r\n else if (forcedAllDay === false) {\r\n if (!start.hasTime()) {\r\n start.time(0);\r\n }\r\n if (end && !end.hasTime()) {\r\n end.time(0);\r\n }\r\n }\r\n if (end && (!end.isValid() || !end.isAfter(start))) {\r\n end = null;\r\n }\r\n if (!end && forceEventDuration) {\r\n end = calendar.getDefaultEventEnd(!start.hasTime(), start);\r\n }\r\n return new EventDateProfile(start, end, calendar);\r\n };\r\n EventDateProfile.isStandardProp = function (propName) {\r\n return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\r\n };\r\n EventDateProfile.prototype.isAllDay = function () {\r\n return !(this.start.hasTime() || (this.end && this.end.hasTime()));\r\n };\r\n /*\r\n Needs a Calendar object\r\n */\r\n EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\r\n var startMs = this.start.clone().stripZone().valueOf();\r\n var endMs = this.getEnd(calendar).stripZone().valueOf();\r\n return new UnzonedRange_1.default(startMs, endMs);\r\n };\r\n /*\r\n Needs a Calendar object\r\n */\r\n EventDateProfile.prototype.getEnd = function (calendar) {\r\n return this.end ?\r\n this.end.clone() :\r\n // derive the end from the start and allDay. compute allDay if necessary\r\n calendar.getDefaultEventEnd(this.isAllDay(), this.start);\r\n };\r\n return EventDateProfile;\r\n}());\r\nexports.default = EventDateProfile;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar DragListener_1 = __webpack_require__(59);\r\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n------------------------------------------------------------------------------------------------------------------------\r\noptions:\r\n- subjectEl\r\n- subjectCenter\r\n*/\r\nvar HitDragListener = /** @class */ (function (_super) {\r\n tslib_1.__extends(HitDragListener, _super);\r\n function HitDragListener(component, options) {\r\n var _this = _super.call(this, options) || this;\r\n _this.component = component;\r\n return _this;\r\n }\r\n // Called when drag listening starts (but a real drag has not necessarily began).\r\n // ev might be undefined if dragging was started manually.\r\n HitDragListener.prototype.handleInteractionStart = function (ev) {\r\n var subjectEl = this.subjectEl;\r\n var subjectRect;\r\n var origPoint;\r\n var point;\r\n this.component.hitsNeeded();\r\n this.computeScrollBounds(); // for autoscroll\r\n if (ev) {\r\n origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };\r\n point = origPoint;\r\n // constrain the point to bounds of the element being dragged\r\n if (subjectEl) {\r\n subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\r\n point = util_1.constrainPoint(point, subjectRect);\r\n }\r\n this.origHit = this.queryHit(point.left, point.top);\r\n // treat the center of the subject as the collision point?\r\n if (subjectEl && this.options.subjectCenter) {\r\n // only consider the area the subject overlaps the hit. best for large subjects.\r\n // TODO: skip this if hit didn't supply left/right/top/bottom\r\n if (this.origHit) {\r\n subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||\r\n subjectRect; // in case there is no intersection\r\n }\r\n point = util_1.getRectCenter(subjectRect);\r\n }\r\n this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\r\n }\r\n else {\r\n this.origHit = null;\r\n this.coordAdjust = null;\r\n }\r\n // call the super-method. do it after origHit has been computed\r\n _super.prototype.handleInteractionStart.call(this, ev);\r\n };\r\n // Called when the actual drag has started\r\n HitDragListener.prototype.handleDragStart = function (ev) {\r\n var hit;\r\n _super.prototype.handleDragStart.call(this, ev);\r\n // might be different from this.origHit if the min-distance is large\r\n hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n // report the initial hit the mouse is over\r\n // especially important if no min-distance and drag starts immediately\r\n if (hit) {\r\n this.handleHitOver(hit);\r\n }\r\n };\r\n // Called when the drag moves\r\n HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n var hit;\r\n _super.prototype.handleDrag.call(this, dx, dy, ev);\r\n hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n if (!isHitsEqual(hit, this.hit)) { // a different hit than before?\r\n if (this.hit) {\r\n this.handleHitOut();\r\n }\r\n if (hit) {\r\n this.handleHitOver(hit);\r\n }\r\n }\r\n };\r\n // Called when dragging has been stopped\r\n HitDragListener.prototype.handleDragEnd = function (ev) {\r\n this.handleHitDone();\r\n _super.prototype.handleDragEnd.call(this, ev);\r\n };\r\n // Called when a the mouse has just moved over a new hit\r\n HitDragListener.prototype.handleHitOver = function (hit) {\r\n var isOrig = isHitsEqual(hit, this.origHit);\r\n this.hit = hit;\r\n this.trigger('hitOver', this.hit, isOrig, this.origHit);\r\n };\r\n // Called when the mouse has just moved out of a hit\r\n HitDragListener.prototype.handleHitOut = function () {\r\n if (this.hit) {\r\n this.trigger('hitOut', this.hit);\r\n this.handleHitDone();\r\n this.hit = null;\r\n }\r\n };\r\n // Called after a hitOut. Also called before a dragStop\r\n HitDragListener.prototype.handleHitDone = function () {\r\n if (this.hit) {\r\n this.trigger('hitDone', this.hit);\r\n }\r\n };\r\n // Called when the interaction ends, whether there was a real drag or not\r\n HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\r\n this.origHit = null;\r\n this.hit = null;\r\n this.component.hitsNotNeeded();\r\n };\r\n // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n HitDragListener.prototype.handleScrollEnd = function () {\r\n _super.prototype.handleScrollEnd.call(this);\r\n // hits' absolute positions will be in new places after a user's scroll.\r\n // HACK for recomputing.\r\n if (this.isDragging) {\r\n this.component.releaseHits();\r\n this.component.prepareHits();\r\n }\r\n };\r\n // Gets the hit underneath the coordinates for the given mouse event\r\n HitDragListener.prototype.queryHit = function (left, top) {\r\n if (this.coordAdjust) {\r\n left += this.coordAdjust.left;\r\n top += this.coordAdjust.top;\r\n }\r\n return this.component.queryHit(left, top);\r\n };\r\n return HitDragListener;\r\n}(DragListener_1.default));\r\nexports.default = HitDragListener;\r\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\r\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\r\nfunction isHitsEqual(hit0, hit1) {\r\n if (!hit0 && !hit1) {\r\n return true;\r\n }\r\n if (hit0 && hit1) {\r\n return hit0.component === hit1.component &&\r\n isHitPropsWithin(hit0, hit1) &&\r\n isHitPropsWithin(hit1, hit0); // ensures all props are identical\r\n }\r\n return false;\r\n}\r\n// Returns true if all of subHit's non-standard properties are within superHit\r\nfunction isHitPropsWithin(subHit, superHit) {\r\n for (var propName in subHit) {\r\n if (!/^(component|left|right|top|bottom)$/.test(propName)) {\r\n if (subHit[propName] !== superHit[propName]) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.version = '3.10.5';\r\n// When introducing internal API incompatibilities (where fullcalendar plugins would break),\r\n// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\r\n// and the below integer should be incremented.\r\nexports.internalApiVersion = 12;\r\nvar util_1 = __webpack_require__(4);\r\nexports.applyAll = util_1.applyAll;\r\nexports.debounce = util_1.debounce;\r\nexports.isInt = util_1.isInt;\r\nexports.htmlEscape = util_1.htmlEscape;\r\nexports.cssToStr = util_1.cssToStr;\r\nexports.proxy = util_1.proxy;\r\nexports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\r\nexports.getOuterRect = util_1.getOuterRect;\r\nexports.getClientRect = util_1.getClientRect;\r\nexports.getContentRect = util_1.getContentRect;\r\nexports.getScrollbarWidths = util_1.getScrollbarWidths;\r\nexports.preventDefault = util_1.preventDefault;\r\nexports.parseFieldSpecs = util_1.parseFieldSpecs;\r\nexports.compareByFieldSpecs = util_1.compareByFieldSpecs;\r\nexports.compareByFieldSpec = util_1.compareByFieldSpec;\r\nexports.flexibleCompare = util_1.flexibleCompare;\r\nexports.computeGreatestUnit = util_1.computeGreatestUnit;\r\nexports.divideRangeByDuration = util_1.divideRangeByDuration;\r\nexports.divideDurationByDuration = util_1.divideDurationByDuration;\r\nexports.multiplyDuration = util_1.multiplyDuration;\r\nexports.durationHasTime = util_1.durationHasTime;\r\nexports.log = util_1.log;\r\nexports.warn = util_1.warn;\r\nexports.removeExact = util_1.removeExact;\r\nexports.intersectRects = util_1.intersectRects;\r\nexports.allowSelection = util_1.allowSelection;\r\nexports.attrsToStr = util_1.attrsToStr;\r\nexports.compareNumbers = util_1.compareNumbers;\r\nexports.compensateScroll = util_1.compensateScroll;\r\nexports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\r\nexports.constrainPoint = util_1.constrainPoint;\r\nexports.copyOwnProps = util_1.copyOwnProps;\r\nexports.diffByUnit = util_1.diffByUnit;\r\nexports.diffDay = util_1.diffDay;\r\nexports.diffDayTime = util_1.diffDayTime;\r\nexports.diffPoints = util_1.diffPoints;\r\nexports.disableCursor = util_1.disableCursor;\r\nexports.distributeHeight = util_1.distributeHeight;\r\nexports.enableCursor = util_1.enableCursor;\r\nexports.firstDefined = util_1.firstDefined;\r\nexports.getEvIsTouch = util_1.getEvIsTouch;\r\nexports.getEvX = util_1.getEvX;\r\nexports.getEvY = util_1.getEvY;\r\nexports.getRectCenter = util_1.getRectCenter;\r\nexports.getScrollParent = util_1.getScrollParent;\r\nexports.hasOwnProp = util_1.hasOwnProp;\r\nexports.isArraysEqual = util_1.isArraysEqual;\r\nexports.isNativeDate = util_1.isNativeDate;\r\nexports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\r\nexports.isTimeString = util_1.isTimeString;\r\nexports.matchCellWidths = util_1.matchCellWidths;\r\nexports.mergeProps = util_1.mergeProps;\r\nexports.preventSelection = util_1.preventSelection;\r\nexports.removeMatching = util_1.removeMatching;\r\nexports.stripHtmlEntities = util_1.stripHtmlEntities;\r\nexports.subtractInnerElHeight = util_1.subtractInnerElHeight;\r\nexports.uncompensateScroll = util_1.uncompensateScroll;\r\nexports.undistributeHeight = util_1.undistributeHeight;\r\nexports.dayIDs = util_1.dayIDs;\r\nexports.unitsDesc = util_1.unitsDesc;\r\nvar date_formatting_1 = __webpack_require__(49);\r\nexports.formatDate = date_formatting_1.formatDate;\r\nexports.formatRange = date_formatting_1.formatRange;\r\nexports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\r\nvar locale_1 = __webpack_require__(32);\r\nexports.datepickerLocale = locale_1.datepickerLocale;\r\nexports.locale = locale_1.locale;\r\nexports.getMomentLocaleData = locale_1.getMomentLocaleData;\r\nexports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\r\nvar util_2 = __webpack_require__(19);\r\nexports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\r\nexports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\r\nexports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\r\nexports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\r\nexports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\r\nvar moment_ext_1 = __webpack_require__(11);\r\nexports.moment = moment_ext_1.default;\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nexports.EmitterMixin = EmitterMixin_1.default;\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexports.ListenerMixin = ListenerMixin_1.default;\r\nvar Model_1 = __webpack_require__(51);\r\nexports.Model = Model_1.default;\r\nvar Constraints_1 = __webpack_require__(217);\r\nexports.Constraints = Constraints_1.default;\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nexports.DateProfileGenerator = DateProfileGenerator_1.default;\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nexports.UnzonedRange = UnzonedRange_1.default;\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nexports.ComponentFootprint = ComponentFootprint_1.default;\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nexports.BusinessHourGenerator = BusinessHourGenerator_1.default;\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nexports.EventPeriod = EventPeriod_1.default;\r\nvar EventManager_1 = __webpack_require__(220);\r\nexports.EventManager = EventManager_1.default;\r\nvar EventDef_1 = __webpack_require__(37);\r\nexports.EventDef = EventDef_1.default;\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nexports.EventDefMutation = EventDefMutation_1.default;\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nexports.EventDefParser = EventDefParser_1.default;\r\nvar EventInstance_1 = __webpack_require__(53);\r\nexports.EventInstance = EventInstance_1.default;\r\nvar EventRange_1 = __webpack_require__(50);\r\nexports.EventRange = EventRange_1.default;\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.RecurringEventDef = RecurringEventDef_1.default;\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nexports.SingleEventDef = SingleEventDef_1.default;\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nexports.EventDefDateMutation = EventDefDateMutation_1.default;\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nexports.EventDateProfile = EventDateProfile_1.default;\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nexports.EventSourceParser = EventSourceParser_1.default;\r\nvar EventSource_1 = __webpack_require__(6);\r\nexports.EventSource = EventSource_1.default;\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nexports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\r\nexports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nexports.EventInstanceGroup = EventInstanceGroup_1.default;\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nexports.ArrayEventSource = ArrayEventSource_1.default;\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nexports.FuncEventSource = FuncEventSource_1.default;\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nexports.JsonFeedEventSource = JsonFeedEventSource_1.default;\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nexports.EventFootprint = EventFootprint_1.default;\r\nvar Class_1 = __webpack_require__(35);\r\nexports.Class = Class_1.default;\r\nvar Mixin_1 = __webpack_require__(15);\r\nexports.Mixin = Mixin_1.default;\r\nvar CoordCache_1 = __webpack_require__(58);\r\nexports.CoordCache = CoordCache_1.default;\r\nvar Iterator_1 = __webpack_require__(225);\r\nexports.Iterator = Iterator_1.default;\r\nvar DragListener_1 = __webpack_require__(59);\r\nexports.DragListener = DragListener_1.default;\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nexports.HitDragListener = HitDragListener_1.default;\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nexports.MouseFollower = MouseFollower_1.default;\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nexports.ParsableModelMixin = ParsableModelMixin_1.default;\r\nvar Popover_1 = __webpack_require__(227);\r\nexports.Popover = Popover_1.default;\r\nvar Promise_1 = __webpack_require__(21);\r\nexports.Promise = Promise_1.default;\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nexports.TaskQueue = TaskQueue_1.default;\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nexports.RenderQueue = RenderQueue_1.default;\r\nvar Scroller_1 = __webpack_require__(41);\r\nexports.Scroller = Scroller_1.default;\r\nvar Theme_1 = __webpack_require__(22);\r\nexports.Theme = Theme_1.default;\r\nvar Component_1 = __webpack_require__(230);\r\nexports.Component = Component_1.default;\r\nvar DateComponent_1 = __webpack_require__(231);\r\nexports.DateComponent = DateComponent_1.default;\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nexports.InteractiveDateComponent = InteractiveDateComponent_1.default;\r\nvar Calendar_1 = __webpack_require__(232);\r\nexports.Calendar = Calendar_1.default;\r\nvar View_1 = __webpack_require__(43);\r\nexports.View = View_1.default;\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nexports.defineView = ViewRegistry_1.defineView;\r\nexports.getViewConfig = ViewRegistry_1.getViewConfig;\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nexports.DayTableMixin = DayTableMixin_1.default;\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nexports.BusinessHourRenderer = BusinessHourRenderer_1.default;\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nexports.EventRenderer = EventRenderer_1.default;\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nexports.FillRenderer = FillRenderer_1.default;\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nexports.HelperRenderer = HelperRenderer_1.default;\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nexports.ExternalDropping = ExternalDropping_1.default;\r\nvar EventResizing_1 = __webpack_require__(234);\r\nexports.EventResizing = EventResizing_1.default;\r\nvar EventPointing_1 = __webpack_require__(64);\r\nexports.EventPointing = EventPointing_1.default;\r\nvar EventDragging_1 = __webpack_require__(235);\r\nexports.EventDragging = EventDragging_1.default;\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nexports.DateSelecting = DateSelecting_1.default;\r\nvar DateClicking_1 = __webpack_require__(237);\r\nexports.DateClicking = DateClicking_1.default;\r\nvar Interaction_1 = __webpack_require__(14);\r\nexports.Interaction = Interaction_1.default;\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nexports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;\r\nvar AgendaView_1 = __webpack_require__(238);\r\nexports.AgendaView = AgendaView_1.default;\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nexports.TimeGrid = TimeGrid_1.default;\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nexports.TimeGridEventRenderer = TimeGridEventRenderer_1.default;\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\nexports.TimeGridFillRenderer = TimeGridFillRenderer_1.default;\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nexports.TimeGridHelperRenderer = TimeGridHelperRenderer_1.default;\r\nvar DayGrid_1 = __webpack_require__(66);\r\nexports.DayGrid = DayGrid_1.default;\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nexports.DayGridEventRenderer = DayGridEventRenderer_1.default;\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\nexports.DayGridFillRenderer = DayGridFillRenderer_1.default;\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nexports.DayGridHelperRenderer = DayGridHelperRenderer_1.default;\r\nvar BasicView_1 = __webpack_require__(67);\r\nexports.BasicView = BasicView_1.default;\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nexports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1.default;\r\nvar MonthView_1 = __webpack_require__(246);\r\nexports.MonthView = MonthView_1.default;\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\nexports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1.default;\r\nvar ListView_1 = __webpack_require__(248);\r\nexports.ListView = ListView_1.default;\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\nexports.ListEventPointing = ListEventPointing_1.default;\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nexports.ListEventRenderer = ListEventRenderer_1.default;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange_1 = __webpack_require__(50);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\r\n var eventInstances = [];\r\n var i;\r\n for (i = 0; i < eventDefs.length; i++) {\r\n eventInstances.push.apply(eventInstances, // append\r\n eventDefs[i].buildInstances(unzonedRange));\r\n }\r\n return eventInstances;\r\n}\r\nexports.eventDefsToEventInstances = eventDefsToEventInstances;\r\nfunction eventInstanceToEventRange(eventInstance) {\r\n return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\r\n}\r\nexports.eventInstanceToEventRange = eventInstanceToEventRange;\r\nfunction eventRangeToEventFootprint(eventRange) {\r\n return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\r\n );\r\n}\r\nexports.eventRangeToEventFootprint = eventRangeToEventFootprint;\r\nfunction eventInstanceToUnzonedRange(eventInstance) {\r\n return eventInstance.dateProfile.unzonedRange;\r\n}\r\nexports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\r\nfunction eventFootprintToComponentFootprint(eventFootprint) {\r\n return eventFootprint.componentFootprint;\r\n}\r\nexports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventRange_1 = __webpack_require__(50);\r\n/*\r\nIt's expected that there will be at least one EventInstance,\r\nOR that an explicitEventDef is assigned.\r\n*/\r\nvar EventInstanceGroup = /** @class */ (function () {\r\n function EventInstanceGroup(eventInstances) {\r\n this.eventInstances = eventInstances || [];\r\n }\r\n EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\r\n if (constraintRange) {\r\n return this.sliceNormalRenderRanges(constraintRange);\r\n }\r\n else {\r\n return this.eventInstances.map(util_1.eventInstanceToEventRange);\r\n }\r\n };\r\n EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\r\n if (this.isInverse()) {\r\n return this.sliceInverseRenderRanges(constraintRange);\r\n }\r\n else {\r\n return this.sliceNormalRenderRanges(constraintRange);\r\n }\r\n };\r\n EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\r\n var eventInstances = this.eventInstances;\r\n var i;\r\n var eventInstance;\r\n var slicedRange;\r\n var slicedEventRanges = [];\r\n for (i = 0; i < eventInstances.length; i++) {\r\n eventInstance = eventInstances[i];\r\n slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\r\n if (slicedRange) {\r\n slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));\r\n }\r\n }\r\n return slicedEventRanges;\r\n };\r\n EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\r\n var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\r\n var ownerDef = this.getEventDef();\r\n unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);\r\n return unzonedRanges.map(function (unzonedRange) {\r\n return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance\r\n });\r\n };\r\n EventInstanceGroup.prototype.isInverse = function () {\r\n return this.getEventDef().hasInverseRendering();\r\n };\r\n EventInstanceGroup.prototype.getEventDef = function () {\r\n return this.explicitEventDef || this.eventInstances[0].def;\r\n };\r\n return EventInstanceGroup;\r\n}());\r\nexports.default = EventInstanceGroup;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar PromiseStub = {\r\n construct: function (executor) {\r\n var deferred = $.Deferred();\r\n var promise = deferred.promise();\r\n if (typeof executor === 'function') {\r\n executor(function (val) {\r\n deferred.resolve(val);\r\n attachImmediatelyResolvingThen(promise, val);\r\n }, function () {\r\n deferred.reject();\r\n attachImmediatelyRejectingThen(promise);\r\n });\r\n }\r\n return promise;\r\n },\r\n resolve: function (val) {\r\n var deferred = $.Deferred().resolve(val);\r\n var promise = deferred.promise();\r\n attachImmediatelyResolvingThen(promise, val);\r\n return promise;\r\n },\r\n reject: function () {\r\n var deferred = $.Deferred().reject();\r\n var promise = deferred.promise();\r\n attachImmediatelyRejectingThen(promise);\r\n return promise;\r\n }\r\n};\r\nexports.default = PromiseStub;\r\nfunction attachImmediatelyResolvingThen(promise, val) {\r\n promise.then = function (onResolve) {\r\n if (typeof onResolve === 'function') {\r\n return PromiseStub.resolve(onResolve(val));\r\n }\r\n return promise;\r\n };\r\n}\r\nfunction attachImmediatelyRejectingThen(promise) {\r\n promise.then = function (onResolve, onReject) {\r\n if (typeof onReject === 'function') {\r\n onReject();\r\n }\r\n return promise;\r\n };\r\n}\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar Theme = /** @class */ (function () {\r\n function Theme(optionsManager) {\r\n this.optionsManager = optionsManager;\r\n this.processIconOverride();\r\n }\r\n Theme.prototype.processIconOverride = function () {\r\n if (this.iconOverrideOption) {\r\n this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\r\n }\r\n };\r\n Theme.prototype.setIconOverride = function (iconOverrideHash) {\r\n var iconClassesCopy;\r\n var buttonName;\r\n if ($.isPlainObject(iconOverrideHash)) {\r\n iconClassesCopy = $.extend({}, this.iconClasses);\r\n for (buttonName in iconOverrideHash) {\r\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\r\n }\r\n this.iconClasses = iconClassesCopy;\r\n }\r\n else if (iconOverrideHash === false) {\r\n this.iconClasses = {};\r\n }\r\n };\r\n Theme.prototype.applyIconOverridePrefix = function (className) {\r\n var prefix = this.iconOverridePrefix;\r\n if (prefix && className.indexOf(prefix) !== 0) { // if not already present\r\n className = prefix + className;\r\n }\r\n return className;\r\n };\r\n Theme.prototype.getClass = function (key) {\r\n return this.classes[key] || '';\r\n };\r\n Theme.prototype.getIconClass = function (buttonName) {\r\n var className = this.iconClasses[buttonName];\r\n if (className) {\r\n return this.baseIconClass + ' ' + className;\r\n }\r\n return '';\r\n };\r\n Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\r\n var className;\r\n if (this.iconOverrideCustomButtonOption) {\r\n className = customButtonProps[this.iconOverrideCustomButtonOption];\r\n if (className) {\r\n return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\r\n }\r\n }\r\n return '';\r\n };\r\n return Theme;\r\n}());\r\nexports.default = Theme;\r\nTheme.prototype.classes = {};\r\nTheme.prototype.iconClasses = {};\r\nTheme.prototype.baseIconClass = '';\r\nTheme.prototype.iconOverridePrefix = '';\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexportHooks.touchMouseIgnoreWait = 500;\r\nvar globalEmitter = null;\r\nvar neededCount = 0;\r\n/*\r\nListens to document and window-level user-interaction events, like touch events and mouse events,\r\nand fires these events as-is to whoever is observing a GlobalEmitter.\r\nBest when used as a singleton via GlobalEmitter.get()\r\n\nNormalizes mouse/touch events. For examples:\r\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n- compensates for various buggy scenarios where a touchend does not fire\r\n*/\r\nvar GlobalEmitter = /** @class */ (function () {\r\n function GlobalEmitter() {\r\n this.isTouching = false;\r\n this.mouseIgnoreDepth = 0;\r\n }\r\n // gets the singleton\r\n GlobalEmitter.get = function () {\r\n if (!globalEmitter) {\r\n globalEmitter = new GlobalEmitter();\r\n globalEmitter.bind();\r\n }\r\n return globalEmitter;\r\n };\r\n // called when an object knows it will need a GlobalEmitter in the near future.\r\n GlobalEmitter.needed = function () {\r\n GlobalEmitter.get(); // ensures globalEmitter\r\n neededCount++;\r\n };\r\n // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\r\n GlobalEmitter.unneeded = function () {\r\n neededCount--;\r\n if (!neededCount) { // nobody else needs it\r\n globalEmitter.unbind();\r\n globalEmitter = null;\r\n }\r\n };\r\n GlobalEmitter.prototype.bind = function () {\r\n var _this = this;\r\n this.listenTo($(document), {\r\n touchstart: this.handleTouchStart,\r\n touchcancel: this.handleTouchCancel,\r\n touchend: this.handleTouchEnd,\r\n mousedown: this.handleMouseDown,\r\n mousemove: this.handleMouseMove,\r\n mouseup: this.handleMouseUp,\r\n click: this.handleClick,\r\n selectstart: this.handleSelectStart,\r\n contextmenu: this.handleContextMenu\r\n });\r\n // because we need to call preventDefault\r\n // because https://www.chromestatus.com/features/5093566007214080\r\n // TODO: investigate performance because this is a global handler\r\n window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\r\n _this.handleTouchMove($.Event(ev));\r\n }, { passive: false } // allows preventDefault()\r\n );\r\n // attach a handler to get called when ANY scroll action happens on the page.\r\n // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\r\n // http://stackoverflow.com/a/32954565/96342\r\n window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\r\n _this.handleScroll($.Event(ev));\r\n }, true // useCapture\r\n );\r\n };\r\n GlobalEmitter.prototype.unbind = function () {\r\n this.stopListeningTo($(document));\r\n window.removeEventListener('touchmove', this.handleTouchMoveProxy, { passive: false } // use same options as addEventListener\r\n );\r\n window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\r\n );\r\n };\r\n // Touch Handlers\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.handleTouchStart = function (ev) {\r\n // if a previous touch interaction never ended with a touchend, then implicitly end it,\r\n // but since a new touch interaction is about to begin, don't start the mouse ignore period.\r\n this.stopTouch(ev, true); // skipMouseIgnore=true\r\n this.isTouching = true;\r\n this.trigger('touchstart', ev);\r\n };\r\n GlobalEmitter.prototype.handleTouchMove = function (ev) {\r\n if (this.isTouching) {\r\n this.trigger('touchmove', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleTouchCancel = function (ev) {\r\n if (this.isTouching) {\r\n this.trigger('touchcancel', ev);\r\n // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\r\n // If touchend fires later, it won't have any effect b/c isTouching will be false.\r\n this.stopTouch(ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleTouchEnd = function (ev) {\r\n this.stopTouch(ev);\r\n };\r\n // Mouse Handlers\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.handleMouseDown = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('mousedown', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleMouseMove = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('mousemove', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleMouseUp = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('mouseup', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleClick = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('click', ev);\r\n }\r\n };\r\n // Misc Handlers\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.handleSelectStart = function (ev) {\r\n this.trigger('selectstart', ev);\r\n };\r\n GlobalEmitter.prototype.handleContextMenu = function (ev) {\r\n this.trigger('contextmenu', ev);\r\n };\r\n GlobalEmitter.prototype.handleScroll = function (ev) {\r\n this.trigger('scroll', ev);\r\n };\r\n // Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\r\n if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }\r\n if (this.isTouching) {\r\n this.isTouching = false;\r\n this.trigger('touchend', ev);\r\n if (!skipMouseIgnore) {\r\n this.startTouchMouseIgnore();\r\n }\r\n }\r\n };\r\n GlobalEmitter.prototype.startTouchMouseIgnore = function () {\r\n var _this = this;\r\n var wait = exportHooks.touchMouseIgnoreWait;\r\n if (wait) {\r\n this.mouseIgnoreDepth++;\r\n setTimeout(function () {\r\n _this.mouseIgnoreDepth--;\r\n }, wait);\r\n }\r\n };\r\n GlobalEmitter.prototype.shouldIgnoreMouse = function () {\r\n return this.isTouching || Boolean(this.mouseIgnoreDepth);\r\n };\r\n return GlobalEmitter;\r\n}());\r\nexports.default = GlobalEmitter;\r\nListenerMixin_1.default.mixInto(GlobalEmitter);\r\nEmitterMixin_1.default.mixInto(GlobalEmitter);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(18);\r\nexports.viewHash = {};\r\nexportHooks.views = exports.viewHash;\r\nfunction defineView(viewName, viewConfig) {\r\n exports.viewHash[viewName] = viewConfig;\r\n}\r\nexports.defineView = defineView;\r\nfunction getViewConfig(viewName) {\r\n return exports.viewHash[viewName];\r\n}\r\nexports.getViewConfig = getViewConfig;\r\n\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar options_1 = __webpack_require__(33);\r\nvar util_1 = __webpack_require__(4);\r\nexports.localeOptionHash = {};\r\nexportHooks.locales = exports.localeOptionHash;\r\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\r\n// configs, so make sure there are English fallbacks for these in the defaults file.\r\nvar dpComputableOptions = {\r\n buttonText: function (dpOptions) {\r\n return {\r\n // the translations sometimes wrongly contain HTML entities\r\n prev: util_1.stripHtmlEntities(dpOptions.prevText),\r\n next: util_1.stripHtmlEntities(dpOptions.nextText),\r\n today: util_1.stripHtmlEntities(dpOptions.currentText)\r\n };\r\n },\r\n // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\r\n monthYearFormat: function (dpOptions) {\r\n return dpOptions.showMonthAfterYear ?\r\n 'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\r\n 'MMMM YYYY[' + dpOptions.yearSuffix + ']';\r\n }\r\n};\r\nvar momComputableOptions = {\r\n // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\r\n dayOfMonthFormat: function (momOptions, fcOptions) {\r\n var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\r\n // strip the year off the edge, as well as other misc non-whitespace chars\r\n format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\r\n if (fcOptions.isRTL) {\r\n format += ' ddd'; // for RTL, add day-of-week to end\r\n }\r\n else {\r\n format = 'ddd ' + format; // for LTR, add day-of-week to beginning\r\n }\r\n return format;\r\n },\r\n // Produces format strings like \"h:mma\" -> \"6:00pm\"\r\n mediumTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\r\n smallTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(':mm', '(:mm)')\r\n .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\r\n extraSmallTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(':mm', '(:mm)')\r\n .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\r\n hourFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(':mm', '')\r\n .replace(/(\\Wmm)$/, '') // like above, but for foreign locales\r\n .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\r\n noMeridiemTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(/\\s*a$/i, ''); // remove trailing AM/PM\r\n }\r\n};\r\n// options that should be computed off live calendar options (considers override options)\r\n// TODO: best place for this? related to locale?\r\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\r\nvar instanceComputableOptions = {\r\n // Produces format strings for results like \"Mo 16\"\r\n smallDayDateFormat: function (options) {\r\n return options.isRTL ?\r\n 'D dd' :\r\n 'dd D';\r\n },\r\n // Produces format strings for results like \"Wk 5\"\r\n weekFormat: function (options) {\r\n return options.isRTL ?\r\n 'w[ ' + options.weekNumberTitle + ']' :\r\n '[' + options.weekNumberTitle + ' ]w';\r\n },\r\n // Produces format strings for results like \"Wk5\"\r\n smallWeekFormat: function (options) {\r\n return options.isRTL ?\r\n 'w[' + options.weekNumberTitle + ']' :\r\n '[' + options.weekNumberTitle + ']w';\r\n }\r\n};\r\n// TODO: make these computable properties in optionsManager\r\nfunction populateInstanceComputableOptions(options) {\r\n $.each(instanceComputableOptions, function (name, func) {\r\n if (options[name] == null) {\r\n options[name] = func(options);\r\n }\r\n });\r\n}\r\nexports.populateInstanceComputableOptions = populateInstanceComputableOptions;\r\n// Initialize jQuery UI datepicker translations while using some of the translations\r\n// Will set this as the default locales for datepicker.\r\nfunction datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\r\n // get the FullCalendar internal option hash for this locale. create if necessary\r\n var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n // transfer some simple options from datepicker to fc\r\n fcOptions.isRTL = dpOptions.isRTL;\r\n fcOptions.weekNumberTitle = dpOptions.weekHeader;\r\n // compute some more complex options from datepicker\r\n $.each(dpComputableOptions, function (name, func) {\r\n fcOptions[name] = func(dpOptions);\r\n });\r\n var jqDatePicker = $.datepicker;\r\n // is jQuery UI Datepicker is on the page?\r\n if (jqDatePicker) {\r\n // Register the locale data.\r\n // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\r\n // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\r\n // Make an alias so the locale can be referenced either way.\r\n jqDatePicker.regional[dpLocaleCode] =\r\n jqDatePicker.regional[localeCode] = // alias\r\n dpOptions;\r\n // Alias 'en' to the default locale data. Do this every time.\r\n jqDatePicker.regional.en = jqDatePicker.regional[''];\r\n // Set as Datepicker's global defaults.\r\n jqDatePicker.setDefaults(dpOptions);\r\n }\r\n}\r\nexports.datepickerLocale = datepickerLocale;\r\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\r\nfunction locale(localeCode, newFcOptions) {\r\n var fcOptions;\r\n var momOptions;\r\n // get the FullCalendar internal option hash for this locale. create if necessary\r\n fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n // provided new options for this locales? merge them in\r\n if (newFcOptions) {\r\n fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\r\n }\r\n // compute locale options that weren't defined.\r\n // always do this. newFcOptions can be undefined when initializing from i18n file,\r\n // so no way to tell if this is an initialization or a default-setting.\r\n momOptions = getMomentLocaleData(localeCode); // will fall back to en\r\n $.each(momComputableOptions, function (name, func) {\r\n if (fcOptions[name] == null) {\r\n fcOptions[name] = (func)(momOptions, fcOptions);\r\n }\r\n });\r\n // set it as the default locale for FullCalendar\r\n options_1.globalDefaults.locale = localeCode;\r\n}\r\nexports.locale = locale;\r\n// Returns moment's internal locale data. If doesn't exist, returns English.\r\nfunction getMomentLocaleData(localeCode) {\r\n return moment.localeData(localeCode) || moment.localeData('en');\r\n}\r\nexports.getMomentLocaleData = getMomentLocaleData;\r\n// Initialize English by forcing computation of moment-derived options.\r\n// Also, sets it as the default.\r\nlocale('en', options_1.englishDefaults);\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nexports.globalDefaults = {\r\n titleRangeSeparator: ' \\u2013 ',\r\n monthYearFormat: 'MMMM YYYY',\r\n defaultTimedEventDuration: '02:00:00',\r\n defaultAllDayEventDuration: { days: 1 },\r\n forceEventDuration: false,\r\n nextDayThreshold: '09:00:00',\r\n // display\r\n columnHeader: true,\r\n defaultView: 'month',\r\n aspectRatio: 1.35,\r\n header: {\r\n left: 'title',\r\n center: '',\r\n right: 'today prev,next'\r\n },\r\n weekends: true,\r\n weekNumbers: false,\r\n weekNumberTitle: 'W',\r\n weekNumberCalculation: 'local',\r\n // editable: false,\r\n // nowIndicator: false,\r\n scrollTime: '06:00:00',\r\n minTime: '00:00:00',\r\n maxTime: '24:00:00',\r\n showNonCurrentDates: true,\r\n // event ajax\r\n lazyFetching: true,\r\n startParam: 'start',\r\n endParam: 'end',\r\n timezoneParam: 'timezone',\r\n timezone: false,\r\n // allDayDefault: undefined,\r\n // locale\r\n locale: null,\r\n isRTL: false,\r\n buttonText: {\r\n prev: 'prev',\r\n next: 'next',\r\n prevYear: 'prev year',\r\n nextYear: 'next year',\r\n year: 'year',\r\n today: 'today',\r\n month: 'month',\r\n week: 'week',\r\n day: 'day'\r\n },\r\n // buttonIcons: null,\r\n allDayText: 'all-day',\r\n // allows setting a min-height to the event segment to prevent short events overlapping each other\r\n agendaEventMinHeight: 0,\r\n // jquery-ui theming\r\n theme: false,\r\n // themeButtonIcons: null,\r\n // eventResizableFromStart: false,\r\n dragOpacity: .75,\r\n dragRevertDuration: 500,\r\n dragScroll: true,\r\n // selectable: false,\r\n unselectAuto: true,\r\n // selectMinDistance: 0,\r\n dropAccept: '*',\r\n eventOrder: 'title',\r\n // eventRenderWait: null,\r\n eventLimit: false,\r\n eventLimitText: 'more',\r\n eventLimitClick: 'popover',\r\n dayPopoverFormat: 'LL',\r\n handleWindowResize: true,\r\n windowResizeDelay: 100,\r\n longPressDelay: 1000\r\n};\r\nexports.englishDefaults = {\r\n dayPopoverFormat: 'dddd, MMMM D'\r\n};\r\nexports.rtlDefaults = {\r\n header: {\r\n left: 'next,prev today',\r\n center: '',\r\n right: 'title'\r\n },\r\n buttonIcons: {\r\n prev: 'right-single-arrow',\r\n next: 'left-single-arrow',\r\n prevYear: 'right-double-arrow',\r\n nextYear: 'left-double-arrow'\r\n },\r\n themeButtonIcons: {\r\n prev: 'circle-triangle-e',\r\n next: 'circle-triangle-w',\r\n nextYear: 'seek-prev',\r\n prevYear: 'seek-next'\r\n }\r\n};\r\nvar complexOptions = [\r\n 'header',\r\n 'footer',\r\n 'buttonText',\r\n 'buttonIcons',\r\n 'themeButtonIcons'\r\n];\r\n// Merges an array of option objects into a single object\r\nfunction mergeOptions(optionObjs) {\r\n return util_1.mergeProps(optionObjs, complexOptions);\r\n}\r\nexports.mergeOptions = mergeOptions;\r\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventFootprint = /** @class */ (function () {\r\n function EventFootprint(componentFootprint, eventDef, eventInstance) {\r\n this.componentFootprint = componentFootprint;\r\n this.eventDef = eventDef;\r\n if (eventInstance) {\r\n this.eventInstance = eventInstance;\r\n }\r\n }\r\n EventFootprint.prototype.getEventLegacy = function () {\r\n return (this.eventInstance || this.eventDef).toLegacy();\r\n };\r\n return EventFootprint;\r\n}());\r\nexports.default = EventFootprint;\r\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\n// Class that all other classes will inherit from\r\nvar Class = /** @class */ (function () {\r\n function Class() {\r\n }\r\n // Called on a class to create a subclass.\r\n // LIMITATION: cannot provide a constructor!\r\n Class.extend = function (members) {\r\n var SubClass = /** @class */ (function (_super) {\r\n tslib_1.__extends(SubClass, _super);\r\n function SubClass() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return SubClass;\r\n }(this));\r\n util_1.copyOwnProps(members, SubClass.prototype);\r\n return SubClass;\r\n };\r\n // Adds new member variables/methods to the class's prototype.\r\n // Can be called with another class, or a plain object hash containing new members.\r\n Class.mixin = function (members) {\r\n util_1.copyOwnProps(members, this.prototype);\r\n };\r\n return Class;\r\n}());\r\nexports.default = Class;\r\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.default = {\r\n parse: function (eventInput, source) {\r\n if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\r\n util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\r\n return RecurringEventDef_1.default.parse(eventInput, source);\r\n }\r\n else {\r\n return SingleEventDef_1.default.parse(eventInput, source);\r\n }\r\n }\r\n};\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar EventDef = /** @class */ (function () {\r\n function EventDef(source) {\r\n this.source = source;\r\n this.className = [];\r\n this.miscProps = {};\r\n }\r\n EventDef.parse = function (rawInput, source) {\r\n var def = new this(source);\r\n if (def.applyProps(rawInput)) {\r\n return def;\r\n }\r\n return false;\r\n };\r\n EventDef.normalizeId = function (id) {\r\n return String(id);\r\n };\r\n EventDef.generateId = function () {\r\n return '_fc' + (EventDef.uuid++);\r\n };\r\n EventDef.prototype.clone = function () {\r\n var copy = new this.constructor(this.source);\r\n copy.id = this.id;\r\n copy.rawId = this.rawId;\r\n copy.uid = this.uid; // not really unique anymore :(\r\n EventDef.copyVerbatimStandardProps(this, copy);\r\n copy.className = this.className.slice(); // copy\r\n copy.miscProps = $.extend({}, this.miscProps);\r\n return copy;\r\n };\r\n EventDef.prototype.hasInverseRendering = function () {\r\n return this.getRendering() === 'inverse-background';\r\n };\r\n EventDef.prototype.hasBgRendering = function () {\r\n var rendering = this.getRendering();\r\n return rendering === 'inverse-background' || rendering === 'background';\r\n };\r\n EventDef.prototype.getRendering = function () {\r\n if (this.rendering != null) {\r\n return this.rendering;\r\n }\r\n return this.source.rendering;\r\n };\r\n EventDef.prototype.getConstraint = function () {\r\n if (this.constraint != null) {\r\n return this.constraint;\r\n }\r\n if (this.source.constraint != null) {\r\n return this.source.constraint;\r\n }\r\n return this.source.calendar.opt('eventConstraint'); // what about View option?\r\n };\r\n EventDef.prototype.getOverlap = function () {\r\n if (this.overlap != null) {\r\n return this.overlap;\r\n }\r\n if (this.source.overlap != null) {\r\n return this.source.overlap;\r\n }\r\n return this.source.calendar.opt('eventOverlap'); // what about View option?\r\n };\r\n EventDef.prototype.isStartExplicitlyEditable = function () {\r\n if (this.startEditable != null) {\r\n return this.startEditable;\r\n }\r\n return this.source.startEditable;\r\n };\r\n EventDef.prototype.isDurationExplicitlyEditable = function () {\r\n if (this.durationEditable != null) {\r\n return this.durationEditable;\r\n }\r\n return this.source.durationEditable;\r\n };\r\n EventDef.prototype.isExplicitlyEditable = function () {\r\n if (this.editable != null) {\r\n return this.editable;\r\n }\r\n return this.source.editable;\r\n };\r\n EventDef.prototype.toLegacy = function () {\r\n var obj = $.extend({}, this.miscProps);\r\n obj._id = this.uid;\r\n obj.source = this.source;\r\n obj.className = this.className.slice(); // copy\r\n obj.allDay = this.isAllDay();\r\n if (this.rawId != null) {\r\n obj.id = this.rawId;\r\n }\r\n EventDef.copyVerbatimStandardProps(this, obj);\r\n return obj;\r\n };\r\n EventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n if (rawProps.id != null) {\r\n this.id = EventDef.normalizeId((this.rawId = rawProps.id));\r\n }\r\n else {\r\n this.id = EventDef.generateId();\r\n }\r\n if (rawProps._id != null) { // accept this prop, even tho somewhat internal\r\n this.uid = String(rawProps._id);\r\n }\r\n else {\r\n this.uid = EventDef.generateId();\r\n }\r\n // TODO: converge with EventSource\r\n if ($.isArray(rawProps.className)) {\r\n this.className = rawProps.className;\r\n }\r\n if (typeof rawProps.className === 'string') {\r\n this.className = rawProps.className.split(/\\s+/);\r\n }\r\n return true;\r\n };\r\n EventDef.prototype.applyMiscProps = function (rawProps) {\r\n $.extend(this.miscProps, rawProps);\r\n };\r\n EventDef.uuid = 0;\r\n EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n return EventDef;\r\n}());\r\nexports.default = EventDef;\r\nParsableModelMixin_1.default.mixInto(EventDef);\r\nEventDef.defineStandardProps({\r\n // not automatically assigned (`false`)\r\n _id: false,\r\n id: false,\r\n className: false,\r\n source: false,\r\n // automatically assigned (`true`)\r\n title: true,\r\n url: true,\r\n rendering: true,\r\n constraint: true,\r\n overlap: true,\r\n editable: true,\r\n startEditable: true,\r\n durationEditable: true,\r\n color: true,\r\n backgroundColor: true,\r\n borderColor: true,\r\n textColor: true\r\n});\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.default = {\r\n sourceClasses: [],\r\n registerClass: function (EventSourceClass) {\r\n this.sourceClasses.unshift(EventSourceClass); // give highest priority\r\n },\r\n parse: function (rawInput, calendar) {\r\n var sourceClasses = this.sourceClasses;\r\n var i;\r\n var eventSource;\r\n for (i = 0; i < sourceClasses.length; i++) {\r\n eventSource = sourceClasses[i].parse(rawInput, calendar);\r\n if (eventSource) {\r\n return eventSource;\r\n }\r\n }\r\n }\r\n};\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation = /** @class */ (function () {\r\n function EventDefMutation() {\r\n }\r\n EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\r\n var eventDef = eventInstance.def;\r\n var dateProps = {};\r\n var standardProps = {};\r\n var miscProps = {};\r\n var verbatimStandardProps = {};\r\n var eventDefId = null;\r\n var className = null;\r\n var propName;\r\n var dateProfile;\r\n var dateMutation;\r\n var defMutation;\r\n for (propName in rawProps) {\r\n if (EventDateProfile_1.default.isStandardProp(propName)) {\r\n dateProps[propName] = rawProps[propName];\r\n }\r\n else if (eventDef.isStandardProp(propName)) {\r\n standardProps[propName] = rawProps[propName];\r\n }\r\n else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed\r\n miscProps[propName] = rawProps[propName];\r\n }\r\n }\r\n dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);\r\n if (dateProfile) { // no failure?\r\n dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\r\n }\r\n if (standardProps.id !== eventDef.id) {\r\n eventDefId = standardProps.id; // only apply if there's a change\r\n }\r\n if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\r\n className = standardProps.className; // only apply if there's a change\r\n }\r\n EventDef_1.default.copyVerbatimStandardProps(standardProps, // src\r\n verbatimStandardProps // dest\r\n );\r\n defMutation = new EventDefMutation();\r\n defMutation.eventDefId = eventDefId;\r\n defMutation.className = className;\r\n defMutation.verbatimStandardProps = verbatimStandardProps;\r\n defMutation.miscProps = miscProps;\r\n if (dateMutation) {\r\n defMutation.dateMutation = dateMutation;\r\n }\r\n return defMutation;\r\n };\r\n /*\r\n eventDef assumed to be a SingleEventDef.\r\n returns an undo function.\r\n */\r\n EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n var origDateProfile;\r\n if (this.dateMutation) {\r\n origDateProfile = eventDef.dateProfile;\r\n eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\r\n }\r\n // can't undo\r\n // TODO: more DRY with EventDef::applyManualStandardProps\r\n if (this.eventDefId != null) {\r\n eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));\r\n }\r\n // can't undo\r\n // TODO: more DRY with EventDef::applyManualStandardProps\r\n if (this.className) {\r\n eventDef.className = this.className;\r\n }\r\n // can't undo\r\n if (this.verbatimStandardProps) {\r\n SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src\r\n eventDef // dest\r\n );\r\n }\r\n // can't undo\r\n if (this.miscProps) {\r\n eventDef.applyMiscProps(this.miscProps);\r\n }\r\n if (origDateProfile) {\r\n return function () {\r\n eventDef.dateProfile = origDateProfile;\r\n };\r\n }\r\n else {\r\n return function () { };\r\n }\r\n };\r\n EventDefMutation.prototype.setDateMutation = function (dateMutation) {\r\n if (dateMutation && !dateMutation.isEmpty()) {\r\n this.dateMutation = dateMutation;\r\n }\r\n else {\r\n this.dateMutation = null;\r\n }\r\n };\r\n EventDefMutation.prototype.isEmpty = function () {\r\n return !this.dateMutation;\r\n };\r\n return EventDefMutation;\r\n}());\r\nexports.default = EventDefMutation;\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDefDateMutation = /** @class */ (function () {\r\n function EventDefDateMutation() {\r\n this.clearEnd = false;\r\n this.forceTimed = false;\r\n this.forceAllDay = false;\r\n }\r\n EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\r\n var clearEnd = dateProfile0.end && !dateProfile1.end;\r\n var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\r\n var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\r\n var dateDelta;\r\n var endDiff;\r\n var endDelta;\r\n var mutation;\r\n // subtracts the dates in the appropriate way, returning a duration\r\n function subtractDates(date1, date0) {\r\n if (largeUnit) {\r\n return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\r\n }\r\n else if (dateProfile1.isAllDay()) {\r\n return util_1.diffDay(date1, date0); // poorly named\r\n }\r\n else {\r\n return util_1.diffDayTime(date1, date0); // poorly named\r\n }\r\n }\r\n dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\r\n if (dateProfile1.end) {\r\n // use unzonedRanges because dateProfile0.end might be null\r\n endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\r\n endDelta = endDiff.subtract(dateDelta);\r\n }\r\n mutation = new EventDefDateMutation();\r\n mutation.clearEnd = clearEnd;\r\n mutation.forceTimed = forceTimed;\r\n mutation.forceAllDay = forceAllDay;\r\n mutation.setDateDelta(dateDelta);\r\n mutation.setEndDelta(endDelta);\r\n return mutation;\r\n };\r\n /*\r\n returns an undo function.\r\n */\r\n EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\r\n var start = eventDateProfile.start.clone();\r\n var end = null;\r\n var shouldRezone = false;\r\n if (eventDateProfile.end && !this.clearEnd) {\r\n end = eventDateProfile.end.clone();\r\n }\r\n else if (this.endDelta && !end) {\r\n end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n }\r\n if (this.forceTimed) {\r\n shouldRezone = true;\r\n if (!start.hasTime()) {\r\n start.time(0);\r\n }\r\n if (end && !end.hasTime()) {\r\n end.time(0);\r\n }\r\n }\r\n else if (this.forceAllDay) {\r\n if (start.hasTime()) {\r\n start.stripTime();\r\n }\r\n if (end && end.hasTime()) {\r\n end.stripTime();\r\n }\r\n }\r\n if (this.dateDelta) {\r\n shouldRezone = true;\r\n start.add(this.dateDelta);\r\n if (end) {\r\n end.add(this.dateDelta);\r\n }\r\n }\r\n // do this before adding startDelta to start, so we can work off of start\r\n if (this.endDelta) {\r\n shouldRezone = true;\r\n end.add(this.endDelta);\r\n }\r\n if (this.startDelta) {\r\n shouldRezone = true;\r\n start.add(this.startDelta);\r\n }\r\n if (shouldRezone) {\r\n start = calendar.applyTimezone(start);\r\n if (end) {\r\n end = calendar.applyTimezone(end);\r\n }\r\n }\r\n // TODO: okay to access calendar option?\r\n if (!end && calendar.opt('forceEventDuration')) {\r\n end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n }\r\n return new EventDateProfile_1.default(start, end, calendar);\r\n };\r\n EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\r\n if (dateDelta && dateDelta.valueOf()) {\r\n this.dateDelta = dateDelta;\r\n }\r\n else {\r\n this.dateDelta = null;\r\n }\r\n };\r\n EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\r\n if (startDelta && startDelta.valueOf()) {\r\n this.startDelta = startDelta;\r\n }\r\n else {\r\n this.startDelta = null;\r\n }\r\n };\r\n EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\r\n if (endDelta && endDelta.valueOf()) {\r\n this.endDelta = endDelta;\r\n }\r\n else {\r\n this.endDelta = null;\r\n }\r\n };\r\n EventDefDateMutation.prototype.isEmpty = function () {\r\n return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\r\n !this.dateDelta && !this.startDelta && !this.endDelta;\r\n };\r\n return EventDefDateMutation;\r\n}());\r\nexports.default = EventDefDateMutation;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Class_1 = __webpack_require__(35);\r\n/*\r\nEmbodies a div that has potential scrollbars\r\n*/\r\nvar Scroller = /** @class */ (function (_super) {\r\n tslib_1.__extends(Scroller, _super);\r\n function Scroller(options) {\r\n var _this = _super.call(this) || this;\r\n options = options || {};\r\n _this.overflowX = options.overflowX || options.overflow || 'auto';\r\n _this.overflowY = options.overflowY || options.overflow || 'auto';\r\n return _this;\r\n }\r\n Scroller.prototype.render = function () {\r\n this.el = this.renderEl();\r\n this.applyOverflow();\r\n };\r\n Scroller.prototype.renderEl = function () {\r\n return (this.scrollEl = $('
'));\r\n };\r\n // sets to natural height, unlocks overflow\r\n Scroller.prototype.clear = function () {\r\n this.setHeight('auto');\r\n this.applyOverflow();\r\n };\r\n Scroller.prototype.destroy = function () {\r\n this.el.remove();\r\n };\r\n // Overflow\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Scroller.prototype.applyOverflow = function () {\r\n this.scrollEl.css({\r\n 'overflow-x': this.overflowX,\r\n 'overflow-y': this.overflowY\r\n });\r\n };\r\n // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\r\n // Useful for preserving scrollbar widths regardless of future resizes.\r\n // Can pass in scrollbarWidths for optimization.\r\n Scroller.prototype.lockOverflow = function (scrollbarWidths) {\r\n var overflowX = this.overflowX;\r\n var overflowY = this.overflowY;\r\n scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\r\n if (overflowX === 'auto') {\r\n overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\r\n // OR scrolling pane with massless scrollbars?\r\n this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\r\n // subtract 1 because of IE off-by-one issue\r\n ) ? 'scroll' : 'hidden';\r\n }\r\n if (overflowY === 'auto') {\r\n overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\r\n // OR scrolling pane with massless scrollbars?\r\n this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\r\n // subtract 1 because of IE off-by-one issue\r\n ) ? 'scroll' : 'hidden';\r\n }\r\n this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\r\n };\r\n // Getters / Setters\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Scroller.prototype.setHeight = function (height) {\r\n this.scrollEl.height(height);\r\n };\r\n Scroller.prototype.getScrollTop = function () {\r\n return this.scrollEl.scrollTop();\r\n };\r\n Scroller.prototype.setScrollTop = function (top) {\r\n this.scrollEl.scrollTop(top);\r\n };\r\n Scroller.prototype.getClientWidth = function () {\r\n return this.scrollEl[0].clientWidth;\r\n };\r\n Scroller.prototype.getClientHeight = function () {\r\n return this.scrollEl[0].clientHeight;\r\n };\r\n Scroller.prototype.getScrollbarWidths = function () {\r\n return util_1.getScrollbarWidths(this.scrollEl);\r\n };\r\n return Scroller;\r\n}(Class_1.default));\r\nexports.default = Scroller;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar DateComponent_1 = __webpack_require__(231);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar InteractiveDateComponent = /** @class */ (function (_super) {\r\n tslib_1.__extends(InteractiveDateComponent, _super);\r\n function InteractiveDateComponent(_view, _options) {\r\n var _this = _super.call(this, _view, _options) || this;\r\n // self-config, overridable by subclasses\r\n _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\r\n if (_this.dateSelectingClass) {\r\n _this.dateClicking = new _this.dateClickingClass(_this);\r\n }\r\n if (_this.dateSelectingClass) {\r\n _this.dateSelecting = new _this.dateSelectingClass(_this);\r\n }\r\n if (_this.eventPointingClass) {\r\n _this.eventPointing = new _this.eventPointingClass(_this);\r\n }\r\n if (_this.eventDraggingClass && _this.eventPointing) {\r\n _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\r\n }\r\n if (_this.eventResizingClass && _this.eventPointing) {\r\n _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\r\n }\r\n if (_this.externalDroppingClass) {\r\n _this.externalDropping = new _this.externalDroppingClass(_this);\r\n }\r\n return _this;\r\n }\r\n // Sets the container element that the view should render inside of, does global DOM-related initializations,\r\n // and renders all the non-date-related content inside.\r\n InteractiveDateComponent.prototype.setElement = function (el) {\r\n _super.prototype.setElement.call(this, el);\r\n if (this.dateClicking) {\r\n this.dateClicking.bindToEl(el);\r\n }\r\n if (this.dateSelecting) {\r\n this.dateSelecting.bindToEl(el);\r\n }\r\n this.bindAllSegHandlersToEl(el);\r\n };\r\n InteractiveDateComponent.prototype.removeElement = function () {\r\n this.endInteractions();\r\n _super.prototype.removeElement.call(this);\r\n };\r\n InteractiveDateComponent.prototype.executeEventUnrender = function () {\r\n this.endInteractions();\r\n _super.prototype.executeEventUnrender.call(this);\r\n };\r\n InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\r\n _super.prototype.bindGlobalHandlers.call(this);\r\n if (this.externalDropping) {\r\n this.externalDropping.bindToDocument();\r\n }\r\n };\r\n InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\r\n _super.prototype.unbindGlobalHandlers.call(this);\r\n if (this.externalDropping) {\r\n this.externalDropping.unbindFromDocument();\r\n }\r\n };\r\n InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\r\n var _this = this;\r\n // attach a handler to the grid's root element.\r\n // jQuery will take care of unregistering them when removeElement gets called.\r\n this.el.on(name, function (ev) {\r\n if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\r\n _this.segSelector + ':not(.fc-helper) *,' + // within an event element\r\n '.fc-more,' + // a \"more..\" link\r\n 'a[data-goto]' // a clickable nav link\r\n )) {\r\n return handler.call(_this, ev);\r\n }\r\n });\r\n };\r\n InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\r\n [\r\n this.eventPointing,\r\n this.eventDragging,\r\n this.eventResizing\r\n ].forEach(function (eventInteraction) {\r\n if (eventInteraction) {\r\n eventInteraction.bindToEl(el);\r\n }\r\n });\r\n };\r\n InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\r\n var _this = this;\r\n el.on(name, this.segSelector, function (ev) {\r\n var segEl = $(ev.currentTarget);\r\n if (!segEl.is('.fc-helper')) {\r\n var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\r\n if (seg && !_this.shouldIgnoreEventPointing()) {\r\n return handler.call(_this, seg, ev); // context will be the Grid\r\n }\r\n }\r\n });\r\n };\r\n InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\r\n // HACK\r\n // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\r\n return GlobalEmitter_1.default.get().shouldIgnoreMouse();\r\n };\r\n InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\r\n var view = this._getView();\r\n // On iOS (and Android?) when a new selection is initiated overtop another selection,\r\n // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\r\n // HACK: simply don't allow this to happen.\r\n // ALSO: prevent selection when an *event* is already raised.\r\n return view.isSelected || view.selectedEvent;\r\n };\r\n InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\r\n // only call the handlers if there is not a drag/resize in progress\r\n return (this.eventDragging && this.eventDragging.isDragging) ||\r\n (this.eventResizing && this.eventResizing.isResizing);\r\n };\r\n InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\r\n return util_1.getEvIsTouch(ev) &&\r\n !this.canStartResize(seg, ev) &&\r\n (this.isEventDefDraggable(seg.footprint.eventDef) ||\r\n this.isEventDefResizable(seg.footprint.eventDef));\r\n };\r\n InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\r\n return !this.canStartResize(seg, ev) &&\r\n this.isEventDefDraggable(seg.footprint.eventDef);\r\n };\r\n InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\r\n var view = this._getView();\r\n var eventDef = seg.footprint.eventDef;\r\n return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&\r\n this.isEventDefResizable(eventDef) &&\r\n $(ev.target).is('.fc-resizer');\r\n };\r\n // Kills all in-progress dragging.\r\n // Useful for when public API methods that result in re-rendering are invoked during a drag.\r\n // Also useful for when touch devices misbehave and don't fire their touchend.\r\n InteractiveDateComponent.prototype.endInteractions = function () {\r\n [\r\n this.dateClicking,\r\n this.dateSelecting,\r\n this.eventPointing,\r\n this.eventDragging,\r\n this.eventResizing\r\n ].forEach(function (interaction) {\r\n if (interaction) {\r\n interaction.end();\r\n }\r\n });\r\n };\r\n // Event Drag-n-Drop\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Computes if the given event is allowed to be dragged by the user\r\n InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n return this.isEventDefStartEditable(eventDef);\r\n };\r\n InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\r\n var isEditable = eventDef.isStartExplicitlyEditable();\r\n if (isEditable == null) {\r\n isEditable = this.opt('eventStartEditable');\r\n if (isEditable == null) {\r\n isEditable = this.isEventDefGenerallyEditable(eventDef);\r\n }\r\n }\r\n return isEditable;\r\n };\r\n InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\r\n var isEditable = eventDef.isExplicitlyEditable();\r\n if (isEditable == null) {\r\n isEditable = this.opt('editable');\r\n }\r\n return isEditable;\r\n };\r\n // Event Resizing\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Computes if the given event is allowed to be resized from its starting edge\r\n InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\r\n return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\r\n };\r\n // Computes if the given event is allowed to be resized from its ending edge\r\n InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\r\n return this.isEventDefResizable(eventDef);\r\n };\r\n // Computes if the given event is allowed to be resized by the user at all\r\n InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\r\n var isResizable = eventDef.isDurationExplicitlyEditable();\r\n if (isResizable == null) {\r\n isResizable = this.opt('eventDurationEditable');\r\n if (isResizable == null) {\r\n isResizable = this.isEventDefGenerallyEditable(eventDef);\r\n }\r\n }\r\n return isResizable;\r\n };\r\n // Event Mutation / Constraints\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Diffs the two dates, returning a duration, based on granularity of the grid\r\n // TODO: port isTimeScale into this system?\r\n InteractiveDateComponent.prototype.diffDates = function (a, b) {\r\n if (this.largeUnit) {\r\n return util_1.diffByUnit(a, b, this.largeUnit);\r\n }\r\n else {\r\n return util_1.diffDayTime(a, b);\r\n }\r\n };\r\n // is it allowed, in relation to the view's validRange?\r\n // NOTE: very similar to isExternalInstanceGroupAllowed\r\n InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n var view = this._getView();\r\n var dateProfile = this.dateProfile;\r\n var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n // TODO: just use getAllEventRanges directly\r\n if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n return false;\r\n }\r\n }\r\n return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\r\n };\r\n // NOTE: very similar to isEventInstanceGroupAllowed\r\n // when it's a completely anonymous external drag, no event.\r\n InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\r\n var view = this._getView();\r\n var dateProfile = this.dateProfile;\r\n var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n return false;\r\n }\r\n }\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n // treat it as a selection\r\n // TODO: pass in eventInstanceGroup instead\r\n // because we don't want calendar's constraint system to depend on a component's\r\n // determination of footprints.\r\n if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n return InteractiveDateComponent;\r\n}(DateComponent_1.default));\r\nexports.default = InteractiveDateComponent;\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/* An abstract class from which other views inherit from\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar View = /** @class */ (function (_super) {\r\n tslib_1.__extends(View, _super);\r\n function View(calendar, viewSpec) {\r\n var _this = _super.call(this, null, viewSpec.options) || this;\r\n _this.batchRenderDepth = 0;\r\n _this.isSelected = false; // boolean whether a range of time is user-selected or not\r\n _this.calendar = calendar;\r\n _this.viewSpec = viewSpec;\r\n // shortcuts\r\n _this.type = viewSpec.type;\r\n // .name is deprecated\r\n _this.name = _this.type;\r\n _this.initRenderQueue();\r\n _this.initHiddenDays();\r\n _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\r\n _this.bindBaseRenderHandlers();\r\n _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));\r\n // legacy\r\n if (_this['initialize']) {\r\n _this['initialize']();\r\n }\r\n return _this;\r\n }\r\n View.prototype._getView = function () {\r\n return this;\r\n };\r\n // Retrieves an option with the given name\r\n View.prototype.opt = function (name) {\r\n return this.options[name];\r\n };\r\n /* Render Queue\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.initRenderQueue = function () {\r\n this.renderQueue = new RenderQueue_1.default({\r\n event: this.opt('eventRenderWait')\r\n });\r\n this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\r\n this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\r\n this.on('before:change', this.startBatchRender);\r\n this.on('change', this.stopBatchRender);\r\n };\r\n View.prototype.onRenderQueueStart = function () {\r\n this.calendar.freezeContentHeight();\r\n this.addScroll(this.queryScroll());\r\n };\r\n View.prototype.onRenderQueueStop = function () {\r\n if (this.calendar.updateViewSize()) { // success?\r\n this.popScroll();\r\n }\r\n this.calendar.thawContentHeight();\r\n };\r\n View.prototype.startBatchRender = function () {\r\n if (!(this.batchRenderDepth++)) {\r\n this.renderQueue.pause();\r\n }\r\n };\r\n View.prototype.stopBatchRender = function () {\r\n if (!(--this.batchRenderDepth)) {\r\n this.renderQueue.resume();\r\n }\r\n };\r\n View.prototype.requestRender = function (func, namespace, actionType) {\r\n this.renderQueue.queue(func, namespace, actionType);\r\n };\r\n // given func will auto-bind to `this`\r\n View.prototype.whenSizeUpdated = function (func) {\r\n if (this.renderQueue.isRunning) {\r\n this.renderQueue.one('stop', func.bind(this));\r\n }\r\n else {\r\n func.call(this);\r\n }\r\n };\r\n /* Title and Date Formatting\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Computes what the title at the top of the calendar should be for this view\r\n View.prototype.computeTitle = function (dateProfile) {\r\n var unzonedRange;\r\n // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\r\n if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\r\n unzonedRange = dateProfile.currentUnzonedRange;\r\n }\r\n else { // for day units or smaller, use the actual day range\r\n unzonedRange = dateProfile.activeUnzonedRange;\r\n }\r\n return this.formatRange({\r\n start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\r\n end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\r\n }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\r\n };\r\n // Generates the format string that should be used to generate the title for the current date range.\r\n // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\r\n View.prototype.computeTitleFormat = function (dateProfile) {\r\n var currentRangeUnit = dateProfile.currentRangeUnit;\r\n if (currentRangeUnit === 'year') {\r\n return 'YYYY';\r\n }\r\n else if (currentRangeUnit === 'month') {\r\n return this.opt('monthYearFormat'); // like \"September 2014\"\r\n }\r\n else if (dateProfile.currentUnzonedRange.as('days') > 1) {\r\n return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\r\n }\r\n else {\r\n return 'LL'; // one day. longer, like \"September 9 2014\"\r\n }\r\n };\r\n // Date Setting/Unsetting\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.setDate = function (date) {\r\n var currentDateProfile = this.get('dateProfile');\r\n var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\r\n if (!currentDateProfile ||\r\n !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\r\n this.set('dateProfile', newDateProfile);\r\n }\r\n };\r\n View.prototype.unsetDate = function () {\r\n this.unset('dateProfile');\r\n };\r\n // Event Data\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.fetchInitialEvents = function (dateProfile) {\r\n var calendar = this.calendar;\r\n var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\r\n return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\r\n };\r\n View.prototype.bindEventChanges = function () {\r\n this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\r\n };\r\n View.prototype.unbindEventChanges = function () {\r\n this.stopListeningTo(this.calendar, 'eventsReset');\r\n };\r\n View.prototype.setEvents = function (eventsPayload) {\r\n this.set('currentEvents', eventsPayload);\r\n this.set('hasEvents', true);\r\n };\r\n View.prototype.unsetEvents = function () {\r\n this.unset('currentEvents');\r\n this.unset('hasEvents');\r\n };\r\n View.prototype.resetEvents = function (eventsPayload) {\r\n this.startBatchRender();\r\n this.unsetEvents();\r\n this.setEvents(eventsPayload);\r\n this.stopBatchRender();\r\n };\r\n // Date High-level Rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.requestDateRender = function (dateProfile) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeDateRender(dateProfile);\r\n }, 'date', 'init');\r\n };\r\n View.prototype.requestDateUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeDateUnrender();\r\n }, 'date', 'destroy');\r\n };\r\n // if dateProfile not specified, uses current\r\n View.prototype.executeDateRender = function (dateProfile) {\r\n _super.prototype.executeDateRender.call(this, dateProfile);\r\n if (this['render']) {\r\n this['render'](); // TODO: deprecate\r\n }\r\n this.trigger('datesRendered');\r\n this.addScroll({ isDateInit: true });\r\n this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\r\n };\r\n View.prototype.executeDateUnrender = function () {\r\n this.unselect();\r\n this.stopNowIndicator();\r\n this.trigger('before:datesUnrendered');\r\n if (this['destroy']) {\r\n this['destroy'](); // TODO: deprecate\r\n }\r\n _super.prototype.executeDateUnrender.call(this);\r\n };\r\n // \"Base\" rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.bindBaseRenderHandlers = function () {\r\n var _this = this;\r\n this.on('datesRendered', function () {\r\n _this.whenSizeUpdated(_this.triggerViewRender);\r\n });\r\n this.on('before:datesUnrendered', function () {\r\n _this.triggerViewDestroy();\r\n });\r\n };\r\n View.prototype.triggerViewRender = function () {\r\n this.publiclyTrigger('viewRender', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n View.prototype.triggerViewDestroy = function () {\r\n this.publiclyTrigger('viewDestroy', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n // Event High-level Rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.requestEventsRender = function (eventsPayload) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeEventRender(eventsPayload);\r\n _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\r\n }, 'event', 'init');\r\n };\r\n View.prototype.requestEventsUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.triggerBeforeEventsDestroyed();\r\n _this.executeEventUnrender();\r\n }, 'event', 'destroy');\r\n };\r\n // Business Hour High-level Rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.renderBusinessHours(businessHourGenerator);\r\n }, 'businessHours', 'init');\r\n };\r\n View.prototype.requestBusinessHoursUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.unrenderBusinessHours();\r\n }, 'businessHours', 'destroy');\r\n };\r\n // Misc view rendering utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Binds DOM handlers to elements that reside outside the view container, such as the document\r\n View.prototype.bindGlobalHandlers = function () {\r\n _super.prototype.bindGlobalHandlers.call(this);\r\n this.listenTo(GlobalEmitter_1.default.get(), {\r\n touchstart: this.processUnselect,\r\n mousedown: this.handleDocumentMousedown\r\n });\r\n };\r\n // Unbinds DOM handlers from elements that reside outside the view container\r\n View.prototype.unbindGlobalHandlers = function () {\r\n _super.prototype.unbindGlobalHandlers.call(this);\r\n this.stopListeningTo(GlobalEmitter_1.default.get());\r\n };\r\n /* Now Indicator\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Immediately render the current time indicator and begins re-rendering it at an interval,\r\n // which is defined by this.getNowIndicatorUnit().\r\n // TODO: somehow do this for the current whole day's background too\r\n View.prototype.startNowIndicator = function () {\r\n var _this = this;\r\n var unit;\r\n var update;\r\n var delay; // ms wait value\r\n if (this.opt('nowIndicator')) {\r\n unit = this.getNowIndicatorUnit();\r\n if (unit) {\r\n update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\r\n this.initialNowDate = this.calendar.getNow();\r\n this.initialNowQueriedMs = new Date().valueOf();\r\n // wait until the beginning of the next interval\r\n delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\r\n this.nowIndicatorTimeoutID = setTimeout(function () {\r\n _this.nowIndicatorTimeoutID = null;\r\n update();\r\n delay = +moment.duration(1, unit);\r\n delay = Math.max(100, delay); // prevent too frequent\r\n _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\r\n }, delay);\r\n }\r\n // rendering will be initiated in updateSize\r\n }\r\n };\r\n // rerenders the now indicator, computing the new current time from the amount of time that has passed\r\n // since the initial getNow call.\r\n View.prototype.updateNowIndicator = function () {\r\n if (this.isDatesRendered &&\r\n this.initialNowDate // activated before?\r\n ) {\r\n this.unrenderNowIndicator(); // won't unrender if unnecessary\r\n this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\r\n );\r\n this.isNowIndicatorRendered = true;\r\n }\r\n };\r\n // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\r\n // Won't cause side effects if indicator isn't rendered.\r\n View.prototype.stopNowIndicator = function () {\r\n if (this.isNowIndicatorRendered) {\r\n if (this.nowIndicatorTimeoutID) {\r\n clearTimeout(this.nowIndicatorTimeoutID);\r\n this.nowIndicatorTimeoutID = null;\r\n }\r\n if (this.nowIndicatorIntervalID) {\r\n clearInterval(this.nowIndicatorIntervalID);\r\n this.nowIndicatorIntervalID = null;\r\n }\r\n this.unrenderNowIndicator();\r\n this.isNowIndicatorRendered = false;\r\n }\r\n };\r\n /* Dimensions\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n if (this['setHeight']) { // for legacy API\r\n this['setHeight'](totalHeight, isAuto);\r\n }\r\n else {\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n }\r\n this.updateNowIndicator();\r\n };\r\n /* Scroller\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.addScroll = function (scroll) {\r\n var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\r\n $.extend(queuedScroll, scroll);\r\n };\r\n View.prototype.popScroll = function () {\r\n this.applyQueuedScroll();\r\n this.queuedScroll = null;\r\n };\r\n View.prototype.applyQueuedScroll = function () {\r\n if (this.queuedScroll) {\r\n this.applyScroll(this.queuedScroll);\r\n }\r\n };\r\n View.prototype.queryScroll = function () {\r\n var scroll = {};\r\n if (this.isDatesRendered) {\r\n $.extend(scroll, this.queryDateScroll());\r\n }\r\n return scroll;\r\n };\r\n View.prototype.applyScroll = function (scroll) {\r\n if (scroll.isDateInit && this.isDatesRendered) {\r\n $.extend(scroll, this.computeInitialDateScroll());\r\n }\r\n if (this.isDatesRendered) {\r\n this.applyDateScroll(scroll);\r\n }\r\n };\r\n View.prototype.computeInitialDateScroll = function () {\r\n return {}; // subclasses must implement\r\n };\r\n View.prototype.queryDateScroll = function () {\r\n return {}; // subclasses must implement\r\n };\r\n View.prototype.applyDateScroll = function (scroll) {\r\n // subclasses must implement\r\n };\r\n /* Event Drag-n-Drop\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\r\n var eventManager = this.calendar.eventManager;\r\n var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n var dateMutation = eventMutation.dateMutation;\r\n // update the EventInstance, for handlers\r\n if (dateMutation) {\r\n eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n }\r\n this.triggerEventDrop(eventInstance, \r\n // a drop doesn't necessarily mean a date mutation (ex: resource change)\r\n (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);\r\n };\r\n // Triggers event-drop handlers that have subscribed via the API\r\n View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\r\n this.publiclyTrigger('eventDrop', {\r\n context: el[0],\r\n args: [\r\n eventInstance.toLegacy(),\r\n dateDelta,\r\n undoFunc,\r\n ev,\r\n {},\r\n this\r\n ]\r\n });\r\n };\r\n /* External Element Drag-n-Drop\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\r\n // `meta` is the parsed data that has been embedded into the dragging event.\r\n // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\r\n View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\r\n if (isEvent) {\r\n this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\r\n }\r\n this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\r\n };\r\n // Triggers external-drop handlers that have subscribed via the API\r\n View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n // trigger 'drop' regardless of whether element represents an event\r\n this.publiclyTrigger('drop', {\r\n context: el[0],\r\n args: [\r\n singleEventDef.dateProfile.start.clone(),\r\n ev,\r\n ui,\r\n this\r\n ]\r\n });\r\n if (isEvent) {\r\n // signal an external event landed\r\n this.publiclyTrigger('eventReceive', {\r\n context: this,\r\n args: [\r\n singleEventDef.buildInstance().toLegacy(),\r\n this\r\n ]\r\n });\r\n }\r\n };\r\n /* Event Resizing\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Must be called when an event in the view has been resized to a new length\r\n View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\r\n var eventManager = this.calendar.eventManager;\r\n var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n // update the EventInstance, for handlers\r\n eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\r\n this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\r\n };\r\n // Triggers event-resize handlers that have subscribed via the API\r\n View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\r\n this.publiclyTrigger('eventResize', {\r\n context: el[0],\r\n args: [\r\n eventInstance.toLegacy(),\r\n resizeDelta,\r\n undoFunc,\r\n ev,\r\n {},\r\n this\r\n ]\r\n });\r\n };\r\n /* Selection (time range)\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Selects a date span on the view. `start` and `end` are both Moments.\r\n // `ev` is the native mouse event that begin the interaction.\r\n View.prototype.select = function (footprint, ev) {\r\n this.unselect(ev);\r\n this.renderSelectionFootprint(footprint);\r\n this.reportSelection(footprint, ev);\r\n };\r\n View.prototype.renderSelectionFootprint = function (footprint) {\r\n if (this['renderSelection']) { // legacy method in custom view classes\r\n this['renderSelection'](footprint.toLegacy(this.calendar));\r\n }\r\n else {\r\n _super.prototype.renderSelectionFootprint.call(this, footprint);\r\n }\r\n };\r\n // Called when a new selection is made. Updates internal state and triggers handlers.\r\n View.prototype.reportSelection = function (footprint, ev) {\r\n this.isSelected = true;\r\n this.triggerSelect(footprint, ev);\r\n };\r\n // Triggers handlers to 'select'\r\n View.prototype.triggerSelect = function (footprint, ev) {\r\n var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n this.publiclyTrigger('select', {\r\n context: this,\r\n args: [\r\n dateProfile.start,\r\n dateProfile.end,\r\n ev,\r\n this\r\n ]\r\n });\r\n };\r\n // Undoes a selection. updates in the internal state and triggers handlers.\r\n // `ev` is the native mouse event that began the interaction.\r\n View.prototype.unselect = function (ev) {\r\n if (this.isSelected) {\r\n this.isSelected = false;\r\n if (this['destroySelection']) {\r\n this['destroySelection'](); // TODO: deprecate\r\n }\r\n this.unrenderSelection();\r\n this.publiclyTrigger('unselect', {\r\n context: this,\r\n args: [ev, this]\r\n });\r\n }\r\n };\r\n /* Event Selection\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.selectEventInstance = function (eventInstance) {\r\n if (!this.selectedEventInstance ||\r\n this.selectedEventInstance !== eventInstance) {\r\n this.unselectEventInstance();\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.footprint.eventInstance === eventInstance &&\r\n seg.el // necessary?\r\n ) {\r\n seg.el.addClass('fc-selected');\r\n }\r\n });\r\n this.selectedEventInstance = eventInstance;\r\n }\r\n };\r\n View.prototype.unselectEventInstance = function () {\r\n if (this.selectedEventInstance) {\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.el) { // necessary?\r\n seg.el.removeClass('fc-selected');\r\n }\r\n });\r\n this.selectedEventInstance = null;\r\n }\r\n };\r\n View.prototype.isEventDefSelected = function (eventDef) {\r\n // event references might change on refetchEvents(), while selectedEventInstance doesn't,\r\n // so compare IDs\r\n return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\r\n };\r\n /* Mouse / Touch Unselecting (time range & event unselection)\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // TODO: move consistently to down/start or up/end?\r\n // TODO: don't kill previous selection if touch scrolling\r\n View.prototype.handleDocumentMousedown = function (ev) {\r\n if (util_1.isPrimaryMouseButton(ev)) {\r\n this.processUnselect(ev);\r\n }\r\n };\r\n View.prototype.processUnselect = function (ev) {\r\n this.processRangeUnselect(ev);\r\n this.processEventUnselect(ev);\r\n };\r\n View.prototype.processRangeUnselect = function (ev) {\r\n var ignore;\r\n // is there a time-range selection?\r\n if (this.isSelected && this.opt('unselectAuto')) {\r\n // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\r\n ignore = this.opt('unselectCancel');\r\n if (!ignore || !$(ev.target).closest(ignore).length) {\r\n this.unselect(ev);\r\n }\r\n }\r\n };\r\n View.prototype.processEventUnselect = function (ev) {\r\n if (this.selectedEventInstance) {\r\n if (!$(ev.target).closest('.fc-selected').length) {\r\n this.unselectEventInstance();\r\n }\r\n }\r\n };\r\n /* Triggers\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.triggerBaseRendered = function () {\r\n this.publiclyTrigger('viewRender', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n View.prototype.triggerBaseUnrendered = function () {\r\n this.publiclyTrigger('viewDestroy', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n // Triggers handlers to 'dayClick'\r\n // Span has start/end of the clicked area. Only the start is useful.\r\n View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n this.publiclyTrigger('dayClick', {\r\n context: dayEl,\r\n args: [dateProfile.start, ev, this]\r\n });\r\n };\r\n /* Date Utils\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // For DateComponent::getDayClasses\r\n View.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n return false;\r\n };\r\n // Arguments after name will be forwarded to a hypothetical function value\r\n // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\r\n // Always clone your objects if you fear mutation.\r\n View.prototype.getUnzonedRangeOption = function (name) {\r\n var val = this.opt(name);\r\n if (typeof val === 'function') {\r\n val = val.apply(null, Array.prototype.slice.call(arguments, 1));\r\n }\r\n if (val) {\r\n return this.calendar.parseUnzonedRange(val);\r\n }\r\n };\r\n /* Hidden Days\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Initializes internal variables related to calculating hidden days-of-week\r\n View.prototype.initHiddenDays = function () {\r\n var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\r\n var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\r\n var dayCnt = 0;\r\n var i;\r\n if (this.opt('weekends') === false) {\r\n hiddenDays.push(0, 6); // 0=sunday, 6=saturday\r\n }\r\n for (i = 0; i < 7; i++) {\r\n if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\r\n dayCnt++;\r\n }\r\n }\r\n if (!dayCnt) {\r\n throw new Error('invalid hiddenDays'); // all days were hidden? bad.\r\n }\r\n this.isHiddenDayHash = isHiddenDayHash;\r\n };\r\n // Remove days from the beginning and end of the range that are computed as hidden.\r\n // If the whole range is trimmed off, returns null\r\n View.prototype.trimHiddenDays = function (inputUnzonedRange) {\r\n var start = inputUnzonedRange.getStart();\r\n var end = inputUnzonedRange.getEnd();\r\n if (start) {\r\n start = this.skipHiddenDays(start);\r\n }\r\n if (end) {\r\n end = this.skipHiddenDays(end, -1, true);\r\n }\r\n if (start === null || end === null || start < end) {\r\n return new UnzonedRange_1.default(start, end);\r\n }\r\n return null;\r\n };\r\n // Is the current day hidden?\r\n // `day` is a day-of-week index (0-6), or a Moment\r\n View.prototype.isHiddenDay = function (day) {\r\n if (moment.isMoment(day)) {\r\n day = day.day();\r\n }\r\n return this.isHiddenDayHash[day];\r\n };\r\n // Incrementing the current day until it is no longer a hidden day, returning a copy.\r\n // DOES NOT CONSIDER validUnzonedRange!\r\n // If the initial value of `date` is not a hidden day, don't do anything.\r\n // Pass `isExclusive` as `true` if you are dealing with an end date.\r\n // `inc` defaults to `1` (increment one day forward each time)\r\n View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\r\n if (inc === void 0) { inc = 1; }\r\n if (isExclusive === void 0) { isExclusive = false; }\r\n var out = date.clone();\r\n while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\r\n out.add(inc, 'days');\r\n }\r\n return out;\r\n };\r\n return View;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = View;\r\nView.prototype.usesMinMaxTime = false;\r\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;\r\nView.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\r\n this.requestDateRender(deps.dateProfile);\r\n}, function () {\r\n this.requestDateUnrender();\r\n});\r\nView.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\r\n this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n}, function () {\r\n this.requestBusinessHoursUnrender();\r\n});\r\nView.watch('initialEvents', ['dateProfile'], function (deps) {\r\n return this.fetchInitialEvents(deps.dateProfile);\r\n});\r\nView.watch('bindingEvents', ['initialEvents'], function (deps) {\r\n this.setEvents(deps.initialEvents);\r\n this.bindEventChanges();\r\n}, function () {\r\n this.unbindEventChanges();\r\n this.unsetEvents();\r\n});\r\nView.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\r\n this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n this.requestEventsUnrender();\r\n});\r\nView.watch('title', ['dateProfile'], function (deps) {\r\n return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons\r\n});\r\nView.watch('legacyDateProps', ['dateProfile'], function (deps) {\r\n var calendar = this.calendar;\r\n var dateProfile = deps.dateProfile;\r\n // DEPRECATED, but we need to keep it updated...\r\n this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n});\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer = /** @class */ (function () {\r\n function EventRenderer(component, fillRenderer) {\r\n this.view = component._getView();\r\n this.component = component;\r\n this.fillRenderer = fillRenderer;\r\n }\r\n EventRenderer.prototype.opt = function (name) {\r\n return this.view.opt(name);\r\n };\r\n // Updates values that rely on options and also relate to range\r\n EventRenderer.prototype.rangeUpdated = function () {\r\n var displayEventTime;\r\n var displayEventEnd;\r\n this.eventTimeFormat =\r\n this.opt('eventTimeFormat') ||\r\n this.opt('timeFormat') || // deprecated\r\n this.computeEventTimeFormat();\r\n displayEventTime = this.opt('displayEventTime');\r\n if (displayEventTime == null) {\r\n displayEventTime = this.computeDisplayEventTime(); // might be based off of range\r\n }\r\n displayEventEnd = this.opt('displayEventEnd');\r\n if (displayEventEnd == null) {\r\n displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\r\n }\r\n this.displayEventTime = displayEventTime;\r\n this.displayEventEnd = displayEventEnd;\r\n };\r\n EventRenderer.prototype.render = function (eventsPayload) {\r\n var dateProfile = this.component._getDateProfile();\r\n var eventDefId;\r\n var instanceGroup;\r\n var eventRanges;\r\n var bgRanges = [];\r\n var fgRanges = [];\r\n for (eventDefId in eventsPayload) {\r\n instanceGroup = eventsPayload[eventDefId];\r\n eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n if (instanceGroup.getEventDef().hasBgRendering()) {\r\n bgRanges.push.apply(bgRanges, eventRanges);\r\n }\r\n else {\r\n fgRanges.push.apply(fgRanges, eventRanges);\r\n }\r\n }\r\n this.renderBgRanges(bgRanges);\r\n this.renderFgRanges(fgRanges);\r\n };\r\n EventRenderer.prototype.unrender = function () {\r\n this.unrenderBgRanges();\r\n this.unrenderFgRanges();\r\n };\r\n EventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n // render an `.el` on each seg\r\n // returns a subset of the segs. segs that were actually rendered\r\n segs = this.renderFgSegEls(segs);\r\n if (this.renderFgSegs(segs) !== false) { // no failure?\r\n this.fgSegs = segs;\r\n }\r\n };\r\n EventRenderer.prototype.unrenderFgRanges = function () {\r\n this.unrenderFgSegs(this.fgSegs || []);\r\n this.fgSegs = null;\r\n };\r\n EventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n if (this.renderBgSegs(segs) !== false) { // no failure?\r\n this.bgSegs = segs;\r\n }\r\n };\r\n EventRenderer.prototype.unrenderBgRanges = function () {\r\n this.unrenderBgSegs();\r\n this.bgSegs = null;\r\n };\r\n EventRenderer.prototype.getSegs = function () {\r\n return (this.bgSegs || []).concat(this.fgSegs || []);\r\n };\r\n // Renders foreground event segments onto the grid\r\n EventRenderer.prototype.renderFgSegs = function (segs) {\r\n // subclasses must implement\r\n // segs already has rendered els, and has been filtered.\r\n return false; // signal failure if not implemented\r\n };\r\n // Unrenders all currently rendered foreground segments\r\n EventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n // subclasses must implement\r\n };\r\n EventRenderer.prototype.renderBgSegs = function (segs) {\r\n var _this = this;\r\n if (this.fillRenderer) {\r\n this.fillRenderer.renderSegs('bgEvent', segs, {\r\n getClasses: function (seg) {\r\n return _this.getBgClasses(seg.footprint.eventDef);\r\n },\r\n getCss: function (seg) {\r\n return {\r\n 'background-color': _this.getBgColor(seg.footprint.eventDef)\r\n };\r\n },\r\n filterEl: function (seg, el) {\r\n return _this.filterEventRenderEl(seg.footprint, el);\r\n }\r\n });\r\n }\r\n else {\r\n return false; // signal failure if no fillRenderer\r\n }\r\n };\r\n EventRenderer.prototype.unrenderBgSegs = function () {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.unrender('bgEvent');\r\n }\r\n };\r\n // Renders and assigns an `el` property for each foreground event segment.\r\n // Only returns segments that successfully rendered.\r\n EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\r\n var _this = this;\r\n if (disableResizing === void 0) { disableResizing = false; }\r\n var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\r\n var html = '';\r\n var renderedSegs = [];\r\n var i;\r\n if (segs.length) { // don't build an empty html string\r\n // build a large concatenation of event segment HTML\r\n for (i = 0; i < segs.length; i++) {\r\n this.beforeFgSegHtml(segs[i]);\r\n html += this.fgSegHtml(segs[i], disableResizing);\r\n }\r\n // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\r\n $(html).each(function (i, node) {\r\n var seg = segs[i];\r\n var el = $(node);\r\n if (hasEventRenderHandlers) { // optimization\r\n el = _this.filterEventRenderEl(seg.footprint, el);\r\n }\r\n if (el) {\r\n el.data('fc-seg', seg); // used by handlers\r\n seg.el = el;\r\n renderedSegs.push(seg);\r\n }\r\n });\r\n }\r\n return renderedSegs;\r\n };\r\n EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n };\r\n // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\r\n EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n // subclasses should implement\r\n };\r\n // Generic utility for generating the HTML classNames for an event segment's element\r\n EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\r\n var classes = [\r\n 'fc-event',\r\n seg.isStart ? 'fc-start' : 'fc-not-start',\r\n seg.isEnd ? 'fc-end' : 'fc-not-end'\r\n ].concat(this.getClasses(seg.footprint.eventDef));\r\n if (isDraggable) {\r\n classes.push('fc-draggable');\r\n }\r\n if (isResizable) {\r\n classes.push('fc-resizable');\r\n }\r\n // event is currently selected? attach a className.\r\n if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\r\n classes.push('fc-selected');\r\n }\r\n return classes;\r\n };\r\n // Given an event and the default element used for rendering, returns the element that should actually be used.\r\n // Basically runs events and elements through the eventRender hook.\r\n EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\r\n var legacy = eventFootprint.getEventLegacy();\r\n var custom = this.view.publiclyTrigger('eventRender', {\r\n context: legacy,\r\n args: [legacy, el, this.view]\r\n });\r\n if (custom === false) { // means don't render at all\r\n el = null;\r\n }\r\n else if (custom && custom !== true) {\r\n el = $(custom);\r\n }\r\n return el;\r\n };\r\n // Compute the text that should be displayed on an event's element.\r\n // `range` can be the Event object itself, or something range-like, with at least a `start`.\r\n // If event times are disabled, or the event has no time, will return a blank string.\r\n // If not specified, formatStr will default to the eventTimeFormat setting,\r\n // and displayEnd will default to the displayEventEnd setting.\r\n EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\r\n return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\r\n };\r\n EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\r\n if (formatStr == null) {\r\n formatStr = this.eventTimeFormat;\r\n }\r\n if (displayEnd == null) {\r\n displayEnd = this.displayEventEnd;\r\n }\r\n if (this.displayEventTime && !isAllDay) {\r\n if (displayEnd && end) {\r\n return this.view.formatRange({ start: start, end: end }, false, // allDay\r\n formatStr);\r\n }\r\n else {\r\n return start.format(formatStr);\r\n }\r\n }\r\n return '';\r\n };\r\n EventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('smallTimeFormat');\r\n };\r\n EventRenderer.prototype.computeDisplayEventTime = function () {\r\n return true;\r\n };\r\n EventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return true;\r\n };\r\n EventRenderer.prototype.getBgClasses = function (eventDef) {\r\n var classNames = this.getClasses(eventDef);\r\n classNames.push('fc-bgevent');\r\n return classNames;\r\n };\r\n EventRenderer.prototype.getClasses = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var classNames = [];\r\n for (i = 0; i < objs.length; i++) {\r\n classNames.push.apply(// append\r\n classNames, objs[i].eventClassName || objs[i].className || []);\r\n }\r\n return classNames;\r\n };\r\n // Utility for generating event skin-related CSS properties\r\n EventRenderer.prototype.getSkinCss = function (eventDef) {\r\n return {\r\n 'background-color': this.getBgColor(eventDef),\r\n 'border-color': this.getBorderColor(eventDef),\r\n color: this.getTextColor(eventDef)\r\n };\r\n };\r\n // Queries for caller-specified color, then falls back to default\r\n EventRenderer.prototype.getBgColor = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var val;\r\n for (i = 0; i < objs.length && !val; i++) {\r\n val = objs[i].eventBackgroundColor || objs[i].eventColor ||\r\n objs[i].backgroundColor || objs[i].color;\r\n }\r\n if (!val) {\r\n val = this.opt('eventBackgroundColor') || this.opt('eventColor');\r\n }\r\n return val;\r\n };\r\n // Queries for caller-specified color, then falls back to default\r\n EventRenderer.prototype.getBorderColor = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var val;\r\n for (i = 0; i < objs.length && !val; i++) {\r\n val = objs[i].eventBorderColor || objs[i].eventColor ||\r\n objs[i].borderColor || objs[i].color;\r\n }\r\n if (!val) {\r\n val = this.opt('eventBorderColor') || this.opt('eventColor');\r\n }\r\n return val;\r\n };\r\n // Queries for caller-specified color, then falls back to default\r\n EventRenderer.prototype.getTextColor = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var val;\r\n for (i = 0; i < objs.length && !val; i++) {\r\n val = objs[i].eventTextColor ||\r\n objs[i].textColor;\r\n }\r\n if (!val) {\r\n val = this.opt('eventTextColor');\r\n }\r\n return val;\r\n };\r\n EventRenderer.prototype.getStylingObjs = function (eventDef) {\r\n var objs = this.getFallbackStylingObjs(eventDef);\r\n objs.unshift(eventDef);\r\n return objs;\r\n };\r\n EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n return [eventDef.source];\r\n };\r\n EventRenderer.prototype.sortEventSegs = function (segs) {\r\n segs.sort(util_1.proxy(this, 'compareEventSegs'));\r\n };\r\n // A cmp function for determining which segments should take visual priority\r\n EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\r\n var f1 = seg1.footprint;\r\n var f2 = seg2.footprint;\r\n var cf1 = f1.componentFootprint;\r\n var cf2 = f2.componentFootprint;\r\n var r1 = cf1.unzonedRange;\r\n var r2 = cf2.unzonedRange;\r\n return r1.startMs - r2.startMs || // earlier events go first\r\n (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\r\n cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\r\n util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\r\n };\r\n return EventRenderer;\r\n}());\r\nexports.default = EventRenderer;\r\n\n\n/***/ }),\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment_ext_1 = __webpack_require__(11);\r\n// Plugin\r\n// -------------------------------------------------------------------------------------------------\r\nmoment_ext_1.newMomentProto.format = function () {\r\n if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\r\n return formatDate(this, arguments[0]); // our extended formatting\r\n }\r\n if (this._ambigTime) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n }\r\n if (this._ambigZone) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n }\r\n if (this._fullCalendar) { // enhanced non-ambig moment?\r\n // moment.format() doesn't ensure english, but we want to.\r\n return moment_ext_1.oldMomentFormat(englishMoment(this));\r\n }\r\n return moment_ext_1.oldMomentProto.format.apply(this, arguments);\r\n};\r\nmoment_ext_1.newMomentProto.toISOString = function () {\r\n if (this._ambigTime) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n }\r\n if (this._ambigZone) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n }\r\n if (this._fullCalendar) { // enhanced non-ambig moment?\r\n // depending on browser, moment might not output english. ensure english.\r\n // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\r\n return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\r\n }\r\n return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\r\n};\r\nfunction englishMoment(mom) {\r\n if (mom.locale() !== 'en') {\r\n return mom.clone().locale('en');\r\n }\r\n return mom;\r\n}\r\n// Config\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nInserted between chunks in the fake (\"intermediate\") formatting string.\r\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\nvia a regexp with an \\s.\r\n*/\r\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\r\n/*\r\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n*/\r\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\r\n/*\r\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\nHandling of these markers is done in a post-processing step at the very end of text rendering.\r\n*/\r\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\r\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\r\n/*\r\nAddition formatting tokens we want recognized\r\n*/\r\nvar specialTokens = {\r\n t: function (date) {\r\n return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\r\n },\r\n T: function (date) {\r\n return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\r\n }\r\n};\r\n/*\r\nThe first characters of formatting tokens for units that are 1 day or larger.\r\n`value` is for ranking relative size (lower means bigger).\r\n`unit` is a normalized unit, used for comparing moments.\r\n*/\r\nvar largeTokenMap = {\r\n Y: { value: 1, unit: 'year' },\r\n M: { value: 2, unit: 'month' },\r\n W: { value: 3, unit: 'week' },\r\n w: { value: 3, unit: 'week' },\r\n D: { value: 4, unit: 'day' },\r\n d: { value: 4, unit: 'day' } // day of week\r\n};\r\n// Single Date Formatting\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n*/\r\nfunction formatDate(date, formatStr) {\r\n return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\r\n}\r\nexports.formatDate = formatDate;\r\n// Date Range Formatting\r\n// -------------------------------------------------------------------------------------------------\r\n// TODO: make it work with timezone offset\r\n/*\r\nUsing a formatting string meant for a single date, generate a range string, like\r\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\nIf the dates are the same as far as the format string is concerned, just return a single\r\nrendering of one date, without any separator.\r\n*/\r\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\r\n var localeData;\r\n date1 = moment_ext_1.default.parseZone(date1);\r\n date2 = moment_ext_1.default.parseZone(date2);\r\n localeData = date1.localeData();\r\n // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\r\n // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\r\n // or non-zero areas in Moment's localized format strings.\r\n formatStr = localeData.longDateFormat(formatStr) || formatStr;\r\n return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\r\n}\r\nexports.formatRange = formatRange;\r\n/*\r\nRenders a range with an already-parsed format string.\r\n*/\r\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\r\n var sameUnits = parsedFormat.sameUnits;\r\n var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\r\n var unzonedDate2 = date2.clone().stripZone(); // \"\r\n var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\r\n var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\r\n var leftI;\r\n var leftStr = '';\r\n var rightI;\r\n var rightStr = '';\r\n var middleI;\r\n var middleStr1 = '';\r\n var middleStr2 = '';\r\n var middleStr = '';\r\n // Start at the leftmost side of the formatting string and continue until you hit a token\r\n // that is not the same between dates.\r\n for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\r\n leftStr += renderedParts1[leftI];\r\n }\r\n // Similarly, start at the rightmost side of the formatting string and move left\r\n for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\r\n // If current chunk is on the boundary of unique date-content, and is a special-case\r\n // date-formatting postfix character, then don't consume it. Consider it unique date-content.\r\n // TODO: make configurable\r\n if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\r\n break;\r\n }\r\n rightStr = renderedParts1[rightI] + rightStr;\r\n }\r\n // The area in the middle is different for both of the dates.\r\n // Collect them distinctly so we can jam them together later.\r\n for (middleI = leftI; middleI <= rightI; middleI++) {\r\n middleStr1 += renderedParts1[middleI];\r\n middleStr2 += renderedParts2[middleI];\r\n }\r\n if (middleStr1 || middleStr2) {\r\n if (isRTL) {\r\n middleStr = middleStr2 + separator + middleStr1;\r\n }\r\n else {\r\n middleStr = middleStr1 + separator + middleStr2;\r\n }\r\n }\r\n return processMaybeMarkers(leftStr + middleStr + rightStr);\r\n}\r\n// Format String Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nvar parsedFormatStrCache = {};\r\n/*\r\nReturns a parsed format string, leveraging a cache.\r\n*/\r\nfunction getParsedFormatString(formatStr) {\r\n return parsedFormatStrCache[formatStr] ||\r\n (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\r\n}\r\n/*\r\nParses a format string into the following:\r\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n If not a token, then the value is null.\r\n Always a flat array (not nested liked \"chunks\").\r\n*/\r\nfunction parseFormatString(formatStr) {\r\n var chunks = chunkFormatString(formatStr);\r\n return {\r\n fakeFormatString: buildFakeFormatString(chunks),\r\n sameUnits: buildSameUnits(chunks)\r\n };\r\n}\r\n/*\r\nBreak the formatting string into an array of chunks.\r\nA 'maybe' chunk will have nested chunks.\r\n*/\r\nfunction chunkFormatString(formatStr) {\r\n var chunks = [];\r\n var match;\r\n // TODO: more descrimination\r\n // \\4 is a backreference to the first character of a multi-character set.\r\n var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\r\n while ((match = chunker.exec(formatStr))) {\r\n if (match[1]) { // a literal string inside [ ... ]\r\n chunks.push.apply(chunks, // append\r\n splitStringLiteral(match[1]));\r\n }\r\n else if (match[2]) { // non-zero formatting inside ( ... )\r\n chunks.push({ maybe: chunkFormatString(match[2]) });\r\n }\r\n else if (match[3]) { // a formatting token\r\n chunks.push({ token: match[3] });\r\n }\r\n else if (match[5]) { // an unenclosed literal string\r\n chunks.push.apply(chunks, // append\r\n splitStringLiteral(match[5]));\r\n }\r\n }\r\n return chunks;\r\n}\r\n/*\r\nPotentially splits a literal-text string into multiple parts. For special cases.\r\n*/\r\nfunction splitStringLiteral(s) {\r\n if (s === '. ') {\r\n return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\r\n }\r\n else {\r\n return [s];\r\n }\r\n}\r\n/*\r\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\ncharacters that will eventually be given to moment for formatting, and then post-processed.\r\n*/\r\nfunction buildFakeFormatString(chunks) {\r\n var parts = [];\r\n var i;\r\n var chunk;\r\n for (i = 0; i < chunks.length; i++) {\r\n chunk = chunks[i];\r\n if (typeof chunk === 'string') {\r\n parts.push('[' + chunk + ']');\r\n }\r\n else if (chunk.token) {\r\n if (chunk.token in specialTokens) {\r\n parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\r\n '[' + chunk.token + ']' // preserve as literal text\r\n );\r\n }\r\n else {\r\n parts.push(chunk.token); // unprotected text implies a format string\r\n }\r\n }\r\n else if (chunk.maybe) {\r\n parts.push(MAYBE_MARKER + // useful during post-processing\r\n buildFakeFormatString(chunk.maybe) +\r\n MAYBE_MARKER);\r\n }\r\n }\r\n return parts.join(PART_SEPARATOR);\r\n}\r\n/*\r\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\nin which regard two dates must be similar in order to share range formatting text.\r\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n*/\r\nfunction buildSameUnits(chunks) {\r\n var units = [];\r\n var i;\r\n var chunk;\r\n var tokenInfo;\r\n for (i = 0; i < chunks.length; i++) {\r\n chunk = chunks[i];\r\n if (chunk.token) {\r\n tokenInfo = largeTokenMap[chunk.token.charAt(0)];\r\n units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\r\n }\r\n else if (chunk.maybe) {\r\n units.push.apply(units, // append\r\n buildSameUnits(chunk.maybe));\r\n }\r\n else {\r\n units.push(null);\r\n }\r\n }\r\n return units;\r\n}\r\n// Rendering to text\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats a date with a fake format string, post-processes the control characters, then returns.\r\n*/\r\nfunction renderFakeFormatString(fakeFormatString, date) {\r\n return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\r\n}\r\n/*\r\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n*/\r\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\r\n var parts = [];\r\n var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\r\n var fakeParts = fakeRender.split(PART_SEPARATOR);\r\n var i;\r\n var fakePart;\r\n for (i = 0; i < fakeParts.length; i++) {\r\n fakePart = fakeParts[i];\r\n if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\r\n parts.push(\r\n // the literal string IS the token's name.\r\n // call special token's registered function.\r\n specialTokens[fakePart.substring(1)](date));\r\n }\r\n else {\r\n parts.push(fakePart);\r\n }\r\n }\r\n return parts;\r\n}\r\n/*\r\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n*/\r\nfunction processMaybeMarkers(s) {\r\n return s.replace(MAYBE_REGEXP, function (m0, m1) {\r\n if (m1.match(/[1-9]/)) { // any non-zero numeric characters?\r\n return m1;\r\n }\r\n else {\r\n return '';\r\n }\r\n });\r\n}\r\n// Misc Utils\r\n// -------------------------------------------------------------------------------------------------\r\n/*\r\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n*/\r\nfunction queryMostGranularFormatUnit(formatStr) {\r\n var chunks = chunkFormatString(formatStr);\r\n var i;\r\n var chunk;\r\n var candidate;\r\n var best;\r\n for (i = 0; i < chunks.length; i++) {\r\n chunk = chunks[i];\r\n if (chunk.token) {\r\n candidate = largeTokenMap[chunk.token.charAt(0)];\r\n if (candidate) {\r\n if (!best || candidate.value > best.value) {\r\n best = candidate;\r\n }\r\n }\r\n }\r\n }\r\n if (best) {\r\n return best.unit;\r\n }\r\n return null;\r\n}\r\nexports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange = /** @class */ (function () {\r\n function EventRange(unzonedRange, eventDef, eventInstance) {\r\n this.unzonedRange = unzonedRange;\r\n this.eventDef = eventDef;\r\n if (eventInstance) {\r\n this.eventInstance = eventInstance;\r\n }\r\n }\r\n return EventRange;\r\n}());\r\nexports.default = EventRange;\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Model = /** @class */ (function (_super) {\r\n tslib_1.__extends(Model, _super);\r\n function Model() {\r\n var _this = _super.call(this) || this;\r\n _this._watchers = {};\r\n _this._props = {};\r\n _this.applyGlobalWatchers();\r\n _this.constructed();\r\n return _this;\r\n }\r\n Model.watch = function (name) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n // subclasses should make a masked-copy of the superclass's map\r\n // TODO: write test\r\n if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\r\n this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\r\n }\r\n this.prototype._globalWatchArgs[name] = args;\r\n };\r\n Model.prototype.constructed = function () {\r\n // useful for monkeypatching. TODO: BaseClass?\r\n };\r\n Model.prototype.applyGlobalWatchers = function () {\r\n var map = this._globalWatchArgs;\r\n var name;\r\n for (name in map) {\r\n this.watch.apply(this, [name].concat(map[name]));\r\n }\r\n };\r\n Model.prototype.has = function (name) {\r\n return name in this._props;\r\n };\r\n Model.prototype.get = function (name) {\r\n if (name === undefined) {\r\n return this._props;\r\n }\r\n return this._props[name];\r\n };\r\n Model.prototype.set = function (name, val) {\r\n var newProps;\r\n if (typeof name === 'string') {\r\n newProps = {};\r\n newProps[name] = val === undefined ? null : val;\r\n }\r\n else {\r\n newProps = name;\r\n }\r\n this.setProps(newProps);\r\n };\r\n Model.prototype.reset = function (newProps) {\r\n var oldProps = this._props;\r\n var changeset = {}; // will have undefined's to signal unsets\r\n var name;\r\n for (name in oldProps) {\r\n changeset[name] = undefined;\r\n }\r\n for (name in newProps) {\r\n changeset[name] = newProps[name];\r\n }\r\n this.setProps(changeset);\r\n };\r\n Model.prototype.unset = function (name) {\r\n var newProps = {};\r\n var names;\r\n var i;\r\n if (typeof name === 'string') {\r\n names = [name];\r\n }\r\n else {\r\n names = name;\r\n }\r\n for (i = 0; i < names.length; i++) {\r\n newProps[names[i]] = undefined;\r\n }\r\n this.setProps(newProps);\r\n };\r\n Model.prototype.setProps = function (newProps) {\r\n var changedProps = {};\r\n var changedCnt = 0;\r\n var name;\r\n var val;\r\n for (name in newProps) {\r\n val = newProps[name];\r\n // a change in value?\r\n // if an object, don't check equality, because might have been mutated internally.\r\n // TODO: eventually enforce immutability.\r\n if (typeof val === 'object' ||\r\n val !== this._props[name]) {\r\n changedProps[name] = val;\r\n changedCnt++;\r\n }\r\n }\r\n if (changedCnt) {\r\n this.trigger('before:batchChange', changedProps);\r\n for (name in changedProps) {\r\n val = changedProps[name];\r\n this.trigger('before:change', name, val);\r\n this.trigger('before:change:' + name, val);\r\n }\r\n for (name in changedProps) {\r\n val = changedProps[name];\r\n if (val === undefined) {\r\n delete this._props[name];\r\n }\r\n else {\r\n this._props[name] = val;\r\n }\r\n this.trigger('change:' + name, val);\r\n this.trigger('change', name, val);\r\n }\r\n this.trigger('batchChange', changedProps);\r\n }\r\n };\r\n Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\r\n var _this = this;\r\n this.unwatch(name);\r\n this._watchers[name] = this._watchDeps(depList, function (deps) {\r\n var res = startFunc.call(_this, deps);\r\n if (res && res.then) {\r\n _this.unset(name); // put in an unset state while resolving\r\n res.then(function (val) {\r\n _this.set(name, val);\r\n });\r\n }\r\n else {\r\n _this.set(name, res);\r\n }\r\n }, function (deps) {\r\n _this.unset(name);\r\n if (stopFunc) {\r\n stopFunc.call(_this, deps);\r\n }\r\n });\r\n };\r\n Model.prototype.unwatch = function (name) {\r\n var watcher = this._watchers[name];\r\n if (watcher) {\r\n delete this._watchers[name];\r\n watcher.teardown();\r\n }\r\n };\r\n Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\r\n var _this = this;\r\n var queuedChangeCnt = 0;\r\n var depCnt = depList.length;\r\n var satisfyCnt = 0;\r\n var values = {}; // what's passed as the `deps` arguments\r\n var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\r\n var isCallingStop = false;\r\n var onBeforeDepChange = function (depName, val, isOptional) {\r\n queuedChangeCnt++;\r\n if (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\r\n if (satisfyCnt === depCnt) { // all deps previously satisfied?\r\n isCallingStop = true;\r\n stopFunc(values);\r\n isCallingStop = false;\r\n }\r\n }\r\n };\r\n var onDepChange = function (depName, val, isOptional) {\r\n if (val === undefined) { // unsetting a value?\r\n // required dependency that was previously set?\r\n if (!isOptional && values[depName] !== undefined) {\r\n satisfyCnt--;\r\n }\r\n delete values[depName];\r\n }\r\n else { // setting a value?\r\n // required dependency that was previously unset?\r\n if (!isOptional && values[depName] === undefined) {\r\n satisfyCnt++;\r\n }\r\n values[depName] = val;\r\n }\r\n queuedChangeCnt--;\r\n if (!queuedChangeCnt) { // last change to cause a \"start\"?\r\n // now finally satisfied or satisfied all along?\r\n if (satisfyCnt === depCnt) {\r\n // if the stopFunc initiated another value change, ignore it.\r\n // it will be processed by another change event anyway.\r\n if (!isCallingStop) {\r\n startFunc(values);\r\n }\r\n }\r\n }\r\n };\r\n // intercept for .on() that remembers handlers\r\n var bind = function (eventName, handler) {\r\n _this.on(eventName, handler);\r\n bindTuples.push([eventName, handler]);\r\n };\r\n // listen to dependency changes\r\n depList.forEach(function (depName) {\r\n var isOptional = false;\r\n if (depName.charAt(0) === '?') { // TODO: more DRY\r\n depName = depName.substring(1);\r\n isOptional = true;\r\n }\r\n bind('before:change:' + depName, function (val) {\r\n onBeforeDepChange(depName, val, isOptional);\r\n });\r\n bind('change:' + depName, function (val) {\r\n onDepChange(depName, val, isOptional);\r\n });\r\n });\r\n // process current dependency values\r\n depList.forEach(function (depName) {\r\n var isOptional = false;\r\n if (depName.charAt(0) === '?') { // TODO: more DRY\r\n depName = depName.substring(1);\r\n isOptional = true;\r\n }\r\n if (_this.has(depName)) {\r\n values[depName] = _this.get(depName);\r\n satisfyCnt++;\r\n }\r\n else if (isOptional) {\r\n satisfyCnt++;\r\n }\r\n });\r\n // initially satisfied\r\n if (satisfyCnt === depCnt) {\r\n startFunc(values);\r\n }\r\n return {\r\n teardown: function () {\r\n // remove all handlers\r\n for (var i = 0; i < bindTuples.length; i++) {\r\n _this.off(bindTuples[i][0], bindTuples[i][1]);\r\n }\r\n bindTuples = null;\r\n // was satisfied, so call stopFunc\r\n if (satisfyCnt === depCnt) {\r\n stopFunc();\r\n }\r\n },\r\n flash: function () {\r\n if (satisfyCnt === depCnt) {\r\n stopFunc();\r\n startFunc(values);\r\n }\r\n }\r\n };\r\n };\r\n Model.prototype.flash = function (name) {\r\n var watcher = this._watchers[name];\r\n if (watcher) {\r\n watcher.flash();\r\n }\r\n };\r\n return Model;\r\n}(Class_1.default));\r\nexports.default = Model;\r\nModel.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\r\nEmitterMixin_1.default.mixInto(Model);\r\nListenerMixin_1.default.mixInto(Model);\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\nin class:\r\n applyProps: ParsableModelInterface['applyProps']\r\n applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n isStandardProp: ParsableModelInterface['isStandardProp']\r\n static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\nafter class:\r\n ParsableModelMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar ParsableModelMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(ParsableModelMixin, _super);\r\n function ParsableModelMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ParsableModelMixin.defineStandardProps = function (propDefs) {\r\n var proto = this.prototype;\r\n if (!proto.hasOwnProperty('standardPropMap')) {\r\n proto.standardPropMap = Object.create(proto.standardPropMap);\r\n }\r\n util_1.copyOwnProps(propDefs, proto.standardPropMap);\r\n };\r\n ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\r\n var map = this.prototype.standardPropMap;\r\n var propName;\r\n for (propName in map) {\r\n if (src[propName] != null && // in the src object?\r\n map[propName] === true // false means \"copy verbatim\"\r\n ) {\r\n dest[propName] = src[propName];\r\n }\r\n }\r\n };\r\n /*\r\n Returns true/false for success.\r\n Meant to be only called ONCE, at object creation.\r\n */\r\n ParsableModelMixin.prototype.applyProps = function (rawProps) {\r\n var standardPropMap = this.standardPropMap;\r\n var manualProps = {};\r\n var miscProps = {};\r\n var propName;\r\n for (propName in rawProps) {\r\n if (standardPropMap[propName] === true) { // copy verbatim\r\n this[propName] = rawProps[propName];\r\n }\r\n else if (standardPropMap[propName] === false) {\r\n manualProps[propName] = rawProps[propName];\r\n }\r\n else {\r\n miscProps[propName] = rawProps[propName];\r\n }\r\n }\r\n this.applyMiscProps(miscProps);\r\n return this.applyManualStandardProps(manualProps);\r\n };\r\n /*\r\n If subclasses override, they must call this supermethod and return the boolean response.\r\n Meant to be only called ONCE, at object creation.\r\n */\r\n ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\r\n return true;\r\n };\r\n /*\r\n Can be called even after initial object creation.\r\n */\r\n ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {\r\n // subclasses can implement\r\n };\r\n /*\r\n TODO: why is this a method when defineStandardProps is static\r\n */\r\n ParsableModelMixin.prototype.isStandardProp = function (propName) {\r\n return propName in this.standardPropMap;\r\n };\r\n return ParsableModelMixin;\r\n}(Mixin_1.default));\r\nexports.default = ParsableModelMixin;\r\nParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventInstance = /** @class */ (function () {\r\n function EventInstance(def, dateProfile) {\r\n this.def = def;\r\n this.dateProfile = dateProfile;\r\n }\r\n EventInstance.prototype.toLegacy = function () {\r\n var dateProfile = this.dateProfile;\r\n var obj = this.def.toLegacy();\r\n obj.start = dateProfile.start.clone();\r\n obj.end = dateProfile.end ? dateProfile.end.clone() : null;\r\n return obj;\r\n };\r\n return EventInstance;\r\n}());\r\nexports.default = EventInstance;\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar RecurringEventDef = /** @class */ (function (_super) {\r\n tslib_1.__extends(RecurringEventDef, _super);\r\n function RecurringEventDef() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n RecurringEventDef.prototype.isAllDay = function () {\r\n return !this.startTime && !this.endTime;\r\n };\r\n RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\r\n var calendar = this.source.calendar;\r\n var unzonedDate = unzonedRange.getStart();\r\n var unzonedEnd = unzonedRange.getEnd();\r\n var zonedDayStart;\r\n var instanceStart;\r\n var instanceEnd;\r\n var instances = [];\r\n while (unzonedDate.isBefore(unzonedEnd)) {\r\n // if everyday, or this particular day-of-week\r\n if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\r\n zonedDayStart = calendar.applyTimezone(unzonedDate);\r\n instanceStart = zonedDayStart.clone();\r\n instanceEnd = null;\r\n if (this.startTime) {\r\n instanceStart.time(this.startTime);\r\n }\r\n else {\r\n instanceStart.stripTime();\r\n }\r\n if (this.endTime) {\r\n instanceEnd = zonedDayStart.clone().time(this.endTime);\r\n }\r\n instances.push(new EventInstance_1.default(this, // definition\r\n new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));\r\n }\r\n unzonedDate.add(1, 'days');\r\n }\r\n return instances;\r\n };\r\n RecurringEventDef.prototype.setDow = function (dowNumbers) {\r\n if (!this.dowHash) {\r\n this.dowHash = {};\r\n }\r\n for (var i = 0; i < dowNumbers.length; i++) {\r\n this.dowHash[dowNumbers[i]] = true;\r\n }\r\n };\r\n RecurringEventDef.prototype.clone = function () {\r\n var def = _super.prototype.clone.call(this);\r\n if (def.startTime) {\r\n def.startTime = moment.duration(this.startTime);\r\n }\r\n if (def.endTime) {\r\n def.endTime = moment.duration(this.endTime);\r\n }\r\n if (this.dowHash) {\r\n def.dowHash = $.extend({}, this.dowHash);\r\n }\r\n return def;\r\n };\r\n return RecurringEventDef;\r\n}(EventDef_1.default));\r\nexports.default = RecurringEventDef;\r\n/*\r\nHACK to work with TypeScript mixins\r\nNOTE: if super-method fails, should still attempt to apply\r\n*/\r\nRecurringEventDef.prototype.applyProps = function (rawProps) {\r\n var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);\r\n if (rawProps.start) {\r\n this.startTime = moment.duration(rawProps.start);\r\n }\r\n if (rawProps.end) {\r\n this.endTime = moment.duration(rawProps.end);\r\n }\r\n if (rawProps.dow) {\r\n this.setDow(rawProps.dow);\r\n }\r\n return superSuccess;\r\n};\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nRecurringEventDef.defineStandardProps({\r\n start: false,\r\n end: false,\r\n dow: false\r\n});\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator = /** @class */ (function () {\r\n function DateProfileGenerator(_view) {\r\n this._view = _view;\r\n }\r\n DateProfileGenerator.prototype.opt = function (name) {\r\n return this._view.opt(name);\r\n };\r\n DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\r\n return this._view.trimHiddenDays(unzonedRange);\r\n };\r\n DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n return this._view.calendar.msToUtcMoment(ms, forceAllDay);\r\n };\r\n /* Date Range Computation\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\r\n DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\r\n var prevDate = currentDateProfile.date.clone()\r\n .startOf(currentDateProfile.currentRangeUnit)\r\n .subtract(currentDateProfile.dateIncrement);\r\n return this.build(prevDate, -1);\r\n };\r\n // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\r\n DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\r\n var nextDate = currentDateProfile.date.clone()\r\n .startOf(currentDateProfile.currentRangeUnit)\r\n .add(currentDateProfile.dateIncrement);\r\n return this.build(nextDate, 1);\r\n };\r\n // Builds a structure holding dates/ranges for rendering around the given date.\r\n // Optional direction param indicates whether the date is being incremented/decremented\r\n // from its previous value. decremented = -1, incremented = 1 (default).\r\n DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\r\n if (forceToValid === void 0) { forceToValid = false; }\r\n var isDateAllDay = !date.hasTime();\r\n var validUnzonedRange;\r\n var minTime = null;\r\n var maxTime = null;\r\n var currentInfo;\r\n var isRangeAllDay;\r\n var renderUnzonedRange;\r\n var activeUnzonedRange;\r\n var isValid;\r\n validUnzonedRange = this.buildValidRange();\r\n validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\r\n if (forceToValid) {\r\n date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\r\n isDateAllDay);\r\n }\r\n currentInfo = this.buildCurrentRangeInfo(date, direction);\r\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\r\n renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\r\n renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\r\n activeUnzonedRange = renderUnzonedRange.clone();\r\n if (!this.opt('showNonCurrentDates')) {\r\n activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\r\n }\r\n minTime = moment.duration(this.opt('minTime'));\r\n maxTime = moment.duration(this.opt('maxTime'));\r\n activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\r\n activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\r\n if (activeUnzonedRange) {\r\n date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\r\n isDateAllDay);\r\n }\r\n // it's invalid if the originally requested date is not contained,\r\n // or if the range is completely outside of the valid range.\r\n isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\r\n return {\r\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\r\n // an object with optional start and end properties.\r\n validUnzonedRange: validUnzonedRange,\r\n // range the view is formally responsible for.\r\n // for example, a month view might have 1st-31st, excluding padded dates\r\n currentUnzonedRange: currentInfo.unzonedRange,\r\n // name of largest unit being displayed, like \"month\" or \"week\"\r\n currentRangeUnit: currentInfo.unit,\r\n isRangeAllDay: isRangeAllDay,\r\n // dates that display events and accept drag-n-drop\r\n // will be `null` if no dates accept events\r\n activeUnzonedRange: activeUnzonedRange,\r\n // date range with a rendered skeleton\r\n // includes not-active days that need some sort of DOM\r\n renderUnzonedRange: renderUnzonedRange,\r\n // Duration object that denotes the first visible time of any given day\r\n minTime: minTime,\r\n // Duration object that denotes the exclusive visible end time of any given day\r\n maxTime: maxTime,\r\n isValid: isValid,\r\n date: date,\r\n // how far the current date will move for a prev/next operation\r\n dateIncrement: this.buildDateIncrement(currentInfo.duration)\r\n // pass a fallback (might be null) ^\r\n };\r\n };\r\n // Builds an object with optional start/end properties.\r\n // Indicates the minimum/maximum dates to display.\r\n // not responsible for trimming hidden days.\r\n DateProfileGenerator.prototype.buildValidRange = function () {\r\n return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||\r\n new UnzonedRange_1.default(); // completely open-ended\r\n };\r\n // Builds a structure with info about the \"current\" range, the range that is\r\n // highlighted as being the current month for example.\r\n // See build() for a description of `direction`.\r\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\r\n var viewSpec = this._view.viewSpec;\r\n var duration = null;\r\n var unit = null;\r\n var unzonedRange = null;\r\n var dayCount;\r\n if (viewSpec.duration) {\r\n duration = viewSpec.duration;\r\n unit = viewSpec.durationUnit;\r\n unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n }\r\n else if ((dayCount = this.opt('dayCount'))) {\r\n unit = 'day';\r\n unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\r\n }\r\n else if ((unzonedRange = this.buildCustomVisibleRange(date))) {\r\n unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\r\n }\r\n else {\r\n duration = this.getFallbackDuration();\r\n unit = util_1.computeGreatestUnit(duration);\r\n unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n }\r\n return { duration: duration, unit: unit, unzonedRange: unzonedRange };\r\n };\r\n DateProfileGenerator.prototype.getFallbackDuration = function () {\r\n return moment.duration({ days: 1 });\r\n };\r\n // Returns a new activeUnzonedRange to have time values (un-ambiguate)\r\n // minTime or maxTime causes the range to expand.\r\n DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\r\n var start = unzonedRange.getStart();\r\n var end = unzonedRange.getEnd();\r\n if (this._view.usesMinMaxTime) {\r\n if (minTime < 0) {\r\n start.time(0).add(minTime);\r\n }\r\n if (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\r\n end.time(maxTime - (24 * 60 * 60 * 1000));\r\n }\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n // Builds the \"current\" range when it is specified as an explicit duration.\r\n // `unit` is the already-computed computeGreatestUnit value of duration.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\r\n var alignment = this.opt('dateAlignment');\r\n var dateIncrementInput;\r\n var dateIncrementDuration;\r\n var start;\r\n var end;\r\n var res;\r\n // compute what the alignment should be\r\n if (!alignment) {\r\n dateIncrementInput = this.opt('dateIncrement');\r\n if (dateIncrementInput) {\r\n dateIncrementDuration = moment.duration(dateIncrementInput);\r\n // use the smaller of the two units\r\n if (dateIncrementDuration < duration) {\r\n alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\r\n }\r\n else {\r\n alignment = unit;\r\n }\r\n }\r\n else {\r\n alignment = unit;\r\n }\r\n }\r\n // if the view displays a single day or smaller\r\n if (duration.as('days') <= 1) {\r\n if (this._view.isHiddenDay(start)) {\r\n start = this._view.skipHiddenDays(start, direction);\r\n start.startOf('day');\r\n }\r\n }\r\n function computeRes() {\r\n start = date.clone().startOf(alignment);\r\n end = start.clone().add(duration);\r\n res = new UnzonedRange_1.default(start, end);\r\n }\r\n computeRes();\r\n // if range is completely enveloped by hidden days, go past the hidden days\r\n if (!this.trimHiddenDays(res)) {\r\n date = this._view.skipHiddenDays(date, direction);\r\n computeRes();\r\n }\r\n return res;\r\n };\r\n // Builds the \"current\" range when a dayCount is specified.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\r\n var customAlignment = this.opt('dateAlignment');\r\n var runningCount = 0;\r\n var start;\r\n var end;\r\n if (customAlignment || direction !== -1) {\r\n start = date.clone();\r\n if (customAlignment) {\r\n start.startOf(customAlignment);\r\n }\r\n start.startOf('day');\r\n start = this._view.skipHiddenDays(start);\r\n end = start.clone();\r\n do {\r\n end.add(1, 'day');\r\n if (!this._view.isHiddenDay(end)) {\r\n runningCount++;\r\n }\r\n } while (runningCount < dayCount);\r\n }\r\n else {\r\n end = date.clone().startOf('day').add(1, 'day');\r\n end = this._view.skipHiddenDays(end, -1, true);\r\n start = end.clone();\r\n do {\r\n start.add(-1, 'day');\r\n if (!this._view.isHiddenDay(start)) {\r\n runningCount++;\r\n }\r\n } while (runningCount < dayCount);\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n // Builds a normalized range object for the \"visible\" range,\r\n // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\r\n var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\r\n );\r\n if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\r\n return null;\r\n }\r\n return visibleUnzonedRange;\r\n };\r\n // Computes the range that will represent the element/cells for *rendering*,\r\n // but which may have voided days/times.\r\n // not responsible for trimming hidden days.\r\n DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n return currentUnzonedRange.clone();\r\n };\r\n // Compute the duration value that should be added/substracted to the current date\r\n // when a prev/next operation happens.\r\n DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\r\n var dateIncrementInput = this.opt('dateIncrement');\r\n var customAlignment;\r\n if (dateIncrementInput) {\r\n return moment.duration(dateIncrementInput);\r\n }\r\n else if ((customAlignment = this.opt('dateAlignment'))) {\r\n return moment.duration(1, customAlignment);\r\n }\r\n else if (fallback) {\r\n return fallback;\r\n }\r\n else {\r\n return moment.duration({ days: 1 });\r\n }\r\n };\r\n return DateProfileGenerator;\r\n}());\r\nexports.default = DateProfileGenerator;\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar ArrayEventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(ArrayEventSource, _super);\r\n function ArrayEventSource(calendar) {\r\n var _this = _super.call(this, calendar) || this;\r\n _this.eventDefs = []; // for if setRawEventDefs is never called\r\n return _this;\r\n }\r\n ArrayEventSource.parse = function (rawInput, calendar) {\r\n var rawProps;\r\n // normalize raw input\r\n if ($.isArray(rawInput.events)) { // extended form\r\n rawProps = rawInput;\r\n }\r\n else if ($.isArray(rawInput)) { // short form\r\n rawProps = { events: rawInput };\r\n }\r\n if (rawProps) {\r\n return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n }\r\n return false;\r\n };\r\n ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\r\n this.rawEventDefs = rawEventDefs;\r\n this.eventDefs = this.parseEventDefs(rawEventDefs);\r\n };\r\n ArrayEventSource.prototype.fetch = function (start, end, timezone) {\r\n var eventDefs = this.eventDefs;\r\n var i;\r\n if (this.currentTimezone != null &&\r\n this.currentTimezone !== timezone) {\r\n for (i = 0; i < eventDefs.length; i++) {\r\n if (eventDefs[i] instanceof SingleEventDef_1.default) {\r\n eventDefs[i].rezone();\r\n }\r\n }\r\n }\r\n this.currentTimezone = timezone;\r\n return Promise_1.default.resolve(eventDefs);\r\n };\r\n ArrayEventSource.prototype.addEventDef = function (eventDef) {\r\n this.eventDefs.push(eventDef);\r\n };\r\n /*\r\n eventDefId already normalized to a string\r\n */\r\n ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n return util_1.removeMatching(this.eventDefs, function (eventDef) {\r\n return eventDef.id === eventDefId;\r\n });\r\n };\r\n ArrayEventSource.prototype.removeAllEventDefs = function () {\r\n this.eventDefs = [];\r\n };\r\n ArrayEventSource.prototype.getPrimitive = function () {\r\n return this.rawEventDefs;\r\n };\r\n ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n this.setRawEventDefs(rawProps.events);\r\n return superSuccess;\r\n };\r\n return ArrayEventSource;\r\n}(EventSource_1.default));\r\nexports.default = ArrayEventSource;\r\nArrayEventSource.defineStandardProps({\r\n events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar themeClassHash = {};\r\nfunction defineThemeSystem(themeName, themeClass) {\r\n themeClassHash[themeName] = themeClass;\r\n}\r\nexports.defineThemeSystem = defineThemeSystem;\r\nfunction getThemeSystemClass(themeSetting) {\r\n if (!themeSetting) {\r\n return StandardTheme_1.default;\r\n }\r\n else if (themeSetting === true) {\r\n return JqueryUiTheme_1.default;\r\n }\r\n else {\r\n return themeClassHash[themeSetting];\r\n }\r\n}\r\nexports.getThemeSystemClass = getThemeSystemClass;\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/*\r\nA cache for the left/right/top/bottom/width/height values for one or more elements.\r\nWorks with both offset (from topleft document) and position (from offsetParent).\r\n\noptions:\r\n- els\r\n- isHorizontal\r\n- isVertical\r\n*/\r\nvar CoordCache = /** @class */ (function () {\r\n function CoordCache(options) {\r\n this.isHorizontal = false; // whether to query for left/right/width\r\n this.isVertical = false; // whether to query for top/bottom/height\r\n this.els = $(options.els);\r\n this.isHorizontal = options.isHorizontal;\r\n this.isVertical = options.isVertical;\r\n this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\r\n }\r\n // Queries the els for coordinates and stores them.\r\n // Call this method before using and of the get* methods below.\r\n CoordCache.prototype.build = function () {\r\n var offsetParentEl = this.forcedOffsetParentEl;\r\n if (!offsetParentEl && this.els.length > 0) {\r\n offsetParentEl = this.els.eq(0).offsetParent();\r\n }\r\n this.origin = offsetParentEl ?\r\n offsetParentEl.offset() :\r\n null;\r\n this.boundingRect = this.queryBoundingRect();\r\n if (this.isHorizontal) {\r\n this.buildElHorizontals();\r\n }\r\n if (this.isVertical) {\r\n this.buildElVerticals();\r\n }\r\n };\r\n // Destroys all internal data about coordinates, freeing memory\r\n CoordCache.prototype.clear = function () {\r\n this.origin = null;\r\n this.boundingRect = null;\r\n this.lefts = null;\r\n this.rights = null;\r\n this.tops = null;\r\n this.bottoms = null;\r\n };\r\n // When called, if coord caches aren't built, builds them\r\n CoordCache.prototype.ensureBuilt = function () {\r\n if (!this.origin) {\r\n this.build();\r\n }\r\n };\r\n // Populates the left/right internal coordinate arrays\r\n CoordCache.prototype.buildElHorizontals = function () {\r\n var lefts = [];\r\n var rights = [];\r\n this.els.each(function (i, node) {\r\n var el = $(node);\r\n var left = el.offset().left;\r\n var width = el.outerWidth();\r\n lefts.push(left);\r\n rights.push(left + width);\r\n });\r\n this.lefts = lefts;\r\n this.rights = rights;\r\n };\r\n // Populates the top/bottom internal coordinate arrays\r\n CoordCache.prototype.buildElVerticals = function () {\r\n var tops = [];\r\n var bottoms = [];\r\n this.els.each(function (i, node) {\r\n var el = $(node);\r\n var top = el.offset().top;\r\n var height = el.outerHeight();\r\n tops.push(top);\r\n bottoms.push(top + height);\r\n });\r\n this.tops = tops;\r\n this.bottoms = bottoms;\r\n };\r\n // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\r\n // If no intersection is made, returns undefined.\r\n CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\r\n this.ensureBuilt();\r\n var lefts = this.lefts;\r\n var rights = this.rights;\r\n var len = lefts.length;\r\n var i;\r\n for (i = 0; i < len; i++) {\r\n if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\r\n return i;\r\n }\r\n }\r\n };\r\n // Given a top offset (from document top), returns the index of the el that it vertically intersects.\r\n // If no intersection is made, returns undefined.\r\n CoordCache.prototype.getVerticalIndex = function (topOffset) {\r\n this.ensureBuilt();\r\n var tops = this.tops;\r\n var bottoms = this.bottoms;\r\n var len = tops.length;\r\n var i;\r\n for (i = 0; i < len; i++) {\r\n if (topOffset >= tops[i] && topOffset < bottoms[i]) {\r\n return i;\r\n }\r\n }\r\n };\r\n // Gets the left offset (from document left) of the element at the given index\r\n CoordCache.prototype.getLeftOffset = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.lefts[leftIndex];\r\n };\r\n // Gets the left position (from offsetParent left) of the element at the given index\r\n CoordCache.prototype.getLeftPosition = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.lefts[leftIndex] - this.origin.left;\r\n };\r\n // Gets the right offset (from document left) of the element at the given index.\r\n // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\r\n CoordCache.prototype.getRightOffset = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.rights[leftIndex];\r\n };\r\n // Gets the right position (from offsetParent left) of the element at the given index.\r\n // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\r\n CoordCache.prototype.getRightPosition = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.rights[leftIndex] - this.origin.left;\r\n };\r\n // Gets the width of the element at the given index\r\n CoordCache.prototype.getWidth = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.rights[leftIndex] - this.lefts[leftIndex];\r\n };\r\n // Gets the top offset (from document top) of the element at the given index\r\n CoordCache.prototype.getTopOffset = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.tops[topIndex];\r\n };\r\n // Gets the top position (from offsetParent top) of the element at the given position\r\n CoordCache.prototype.getTopPosition = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.tops[topIndex] - this.origin.top;\r\n };\r\n // Gets the bottom offset (from the document top) of the element at the given index.\r\n // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n CoordCache.prototype.getBottomOffset = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.bottoms[topIndex];\r\n };\r\n // Gets the bottom position (from the offsetParent top) of the element at the given index.\r\n // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n CoordCache.prototype.getBottomPosition = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.bottoms[topIndex] - this.origin.top;\r\n };\r\n // Gets the height of the element at the given index\r\n CoordCache.prototype.getHeight = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.bottoms[topIndex] - this.tops[topIndex];\r\n };\r\n // Bounding Rect\r\n // TODO: decouple this from CoordCache\r\n // Compute and return what the elements' bounding rectangle is, from the user's perspective.\r\n // Right now, only returns a rectangle if constrained by an overflow:scroll element.\r\n // Returns null if there are no elements\r\n CoordCache.prototype.queryBoundingRect = function () {\r\n var scrollParentEl;\r\n if (this.els.length > 0) {\r\n scrollParentEl = util_1.getScrollParent(this.els.eq(0));\r\n if (!scrollParentEl.is(document) &&\r\n !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\r\n ) {\r\n return util_1.getClientRect(scrollParentEl);\r\n }\r\n }\r\n return null;\r\n };\r\n CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\r\n return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\r\n };\r\n CoordCache.prototype.isLeftInBounds = function (leftOffset) {\r\n return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\r\n };\r\n CoordCache.prototype.isTopInBounds = function (topOffset) {\r\n return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\r\n };\r\n return CoordCache;\r\n}());\r\nexports.default = CoordCache;\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\n/* Tracks a drag's mouse movement, firing various handlers\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// TODO: use Emitter\r\nvar DragListener = /** @class */ (function () {\r\n function DragListener(options) {\r\n this.isInteracting = false;\r\n this.isDistanceSurpassed = false;\r\n this.isDelayEnded = false;\r\n this.isDragging = false;\r\n this.isTouch = false;\r\n this.isGeneric = false; // initiated by 'dragstart' (jqui)\r\n this.shouldCancelTouchScroll = true;\r\n this.scrollAlwaysKills = false;\r\n this.isAutoScroll = false;\r\n // defaults\r\n this.scrollSensitivity = 30; // pixels from edge for scrolling to start\r\n this.scrollSpeed = 200; // pixels per second, at maximum speed\r\n this.scrollIntervalMs = 50; // millisecond wait between scroll increment\r\n this.options = options || {};\r\n }\r\n // Interaction (high-level)\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.startInteraction = function (ev, extraOptions) {\r\n if (extraOptions === void 0) { extraOptions = {}; }\r\n if (ev.type === 'mousedown') {\r\n if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {\r\n return;\r\n }\r\n else if (!util_1.isPrimaryMouseButton(ev)) {\r\n return;\r\n }\r\n else {\r\n ev.preventDefault(); // prevents native selection in most browsers\r\n }\r\n }\r\n if (!this.isInteracting) {\r\n // process options\r\n this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\r\n this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\r\n this.subjectEl = this.options.subjectEl;\r\n util_1.preventSelection($('body'));\r\n this.isInteracting = true;\r\n this.isTouch = util_1.getEvIsTouch(ev);\r\n this.isGeneric = ev.type === 'dragstart';\r\n this.isDelayEnded = false;\r\n this.isDistanceSurpassed = false;\r\n this.originX = util_1.getEvX(ev);\r\n this.originY = util_1.getEvY(ev);\r\n this.scrollEl = util_1.getScrollParent($(ev.target));\r\n this.bindHandlers();\r\n this.initAutoScroll();\r\n this.handleInteractionStart(ev);\r\n this.startDelay(ev);\r\n if (!this.minDistance) {\r\n this.handleDistanceSurpassed(ev);\r\n }\r\n }\r\n };\r\n DragListener.prototype.handleInteractionStart = function (ev) {\r\n this.trigger('interactionStart', ev);\r\n };\r\n DragListener.prototype.endInteraction = function (ev, isCancelled) {\r\n if (this.isInteracting) {\r\n this.endDrag(ev);\r\n if (this.delayTimeoutId) {\r\n clearTimeout(this.delayTimeoutId);\r\n this.delayTimeoutId = null;\r\n }\r\n this.destroyAutoScroll();\r\n this.unbindHandlers();\r\n this.isInteracting = false;\r\n this.handleInteractionEnd(ev, isCancelled);\r\n util_1.allowSelection($('body'));\r\n }\r\n };\r\n DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n this.trigger('interactionEnd', ev, isCancelled || false);\r\n };\r\n // Binding To DOM\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.bindHandlers = function () {\r\n // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\r\n // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\r\n var globalEmitter = GlobalEmitter_1.default.get();\r\n if (this.isGeneric) {\r\n this.listenTo($(document), {\r\n drag: this.handleMove,\r\n dragstop: this.endInteraction\r\n });\r\n }\r\n else if (this.isTouch) {\r\n this.listenTo(globalEmitter, {\r\n touchmove: this.handleTouchMove,\r\n touchend: this.endInteraction,\r\n scroll: this.handleTouchScroll\r\n });\r\n }\r\n else {\r\n this.listenTo(globalEmitter, {\r\n mousemove: this.handleMouseMove,\r\n mouseup: this.endInteraction\r\n });\r\n }\r\n this.listenTo(globalEmitter, {\r\n selectstart: util_1.preventDefault,\r\n contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\r\n });\r\n };\r\n DragListener.prototype.unbindHandlers = function () {\r\n this.stopListeningTo(GlobalEmitter_1.default.get());\r\n this.stopListeningTo($(document)); // for isGeneric\r\n };\r\n // Drag (high-level)\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // extraOptions ignored if drag already started\r\n DragListener.prototype.startDrag = function (ev, extraOptions) {\r\n this.startInteraction(ev, extraOptions); // ensure interaction began\r\n if (!this.isDragging) {\r\n this.isDragging = true;\r\n this.handleDragStart(ev);\r\n }\r\n };\r\n DragListener.prototype.handleDragStart = function (ev) {\r\n this.trigger('dragStart', ev);\r\n };\r\n DragListener.prototype.handleMove = function (ev) {\r\n var dx = util_1.getEvX(ev) - this.originX;\r\n var dy = util_1.getEvY(ev) - this.originY;\r\n var minDistance = this.minDistance;\r\n var distanceSq; // current distance from the origin, squared\r\n if (!this.isDistanceSurpassed) {\r\n distanceSq = dx * dx + dy * dy;\r\n if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\r\n this.handleDistanceSurpassed(ev);\r\n }\r\n }\r\n if (this.isDragging) {\r\n this.handleDrag(dx, dy, ev);\r\n }\r\n };\r\n // Called while the mouse is being moved and when we know a legitimate drag is taking place\r\n DragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n this.trigger('drag', dx, dy, ev);\r\n this.updateAutoScroll(ev); // will possibly cause scrolling\r\n };\r\n DragListener.prototype.endDrag = function (ev) {\r\n if (this.isDragging) {\r\n this.isDragging = false;\r\n this.handleDragEnd(ev);\r\n }\r\n };\r\n DragListener.prototype.handleDragEnd = function (ev) {\r\n this.trigger('dragEnd', ev);\r\n };\r\n // Delay\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.startDelay = function (initialEv) {\r\n var _this = this;\r\n if (this.delay) {\r\n this.delayTimeoutId = setTimeout(function () {\r\n _this.handleDelayEnd(initialEv);\r\n }, this.delay);\r\n }\r\n else {\r\n this.handleDelayEnd(initialEv);\r\n }\r\n };\r\n DragListener.prototype.handleDelayEnd = function (initialEv) {\r\n this.isDelayEnded = true;\r\n if (this.isDistanceSurpassed) {\r\n this.startDrag(initialEv);\r\n }\r\n };\r\n // Distance\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.handleDistanceSurpassed = function (ev) {\r\n this.isDistanceSurpassed = true;\r\n if (this.isDelayEnded) {\r\n this.startDrag(ev);\r\n }\r\n };\r\n // Mouse / Touch\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.handleTouchMove = function (ev) {\r\n // prevent inertia and touchmove-scrolling while dragging\r\n if (this.isDragging && this.shouldCancelTouchScroll) {\r\n ev.preventDefault();\r\n }\r\n this.handleMove(ev);\r\n };\r\n DragListener.prototype.handleMouseMove = function (ev) {\r\n this.handleMove(ev);\r\n };\r\n // Scrolling (unrelated to auto-scroll)\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.handleTouchScroll = function (ev) {\r\n // if the drag is being initiated by touch, but a scroll happens before\r\n // the drag-initiating delay is over, cancel the drag\r\n if (!this.isDragging || this.scrollAlwaysKills) {\r\n this.endInteraction(ev, true); // isCancelled=true\r\n }\r\n };\r\n // Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Triggers a callback. Calls a function in the option hash of the same name.\r\n // Arguments beyond the first `name` are forwarded on.\r\n DragListener.prototype.trigger = function (name) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (this.options[name]) {\r\n this.options[name].apply(this, args);\r\n }\r\n // makes _methods callable by event name. TODO: kill this\r\n if (this['_' + name]) {\r\n this['_' + name].apply(this, args);\r\n }\r\n };\r\n // Auto-scroll\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.initAutoScroll = function () {\r\n var scrollEl = this.scrollEl;\r\n this.isAutoScroll =\r\n this.options.scroll &&\r\n scrollEl &&\r\n !scrollEl.is(window) &&\r\n !scrollEl.is(document);\r\n if (this.isAutoScroll) {\r\n // debounce makes sure rapid calls don't happen\r\n this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\r\n }\r\n };\r\n DragListener.prototype.destroyAutoScroll = function () {\r\n this.endAutoScroll(); // kill any animation loop\r\n // remove the scroll handler if there is a scrollEl\r\n if (this.isAutoScroll) {\r\n this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\r\n }\r\n };\r\n // Computes and stores the bounding rectangle of scrollEl\r\n DragListener.prototype.computeScrollBounds = function () {\r\n if (this.isAutoScroll) {\r\n this.scrollBounds = util_1.getOuterRect(this.scrollEl);\r\n // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\r\n }\r\n };\r\n // Called when the dragging is in progress and scrolling should be updated\r\n DragListener.prototype.updateAutoScroll = function (ev) {\r\n var sensitivity = this.scrollSensitivity;\r\n var bounds = this.scrollBounds;\r\n var topCloseness;\r\n var bottomCloseness;\r\n var leftCloseness;\r\n var rightCloseness;\r\n var topVel = 0;\r\n var leftVel = 0;\r\n if (bounds) { // only scroll if scrollEl exists\r\n // compute closeness to edges. valid range is from 0.0 - 1.0\r\n topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\r\n bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\r\n leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\r\n rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;\r\n // translate vertical closeness into velocity.\r\n // mouse must be completely in bounds for velocity to happen.\r\n if (topCloseness >= 0 && topCloseness <= 1) {\r\n topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\r\n }\r\n else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\r\n topVel = bottomCloseness * this.scrollSpeed;\r\n }\r\n // translate horizontal closeness into velocity\r\n if (leftCloseness >= 0 && leftCloseness <= 1) {\r\n leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\r\n }\r\n else if (rightCloseness >= 0 && rightCloseness <= 1) {\r\n leftVel = rightCloseness * this.scrollSpeed;\r\n }\r\n }\r\n this.setScrollVel(topVel, leftVel);\r\n };\r\n // Sets the speed-of-scrolling for the scrollEl\r\n DragListener.prototype.setScrollVel = function (topVel, leftVel) {\r\n this.scrollTopVel = topVel;\r\n this.scrollLeftVel = leftVel;\r\n this.constrainScrollVel(); // massages into realistic values\r\n // if there is non-zero velocity, and an animation loop hasn't already started, then START\r\n if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\r\n this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\r\n this.scrollIntervalMs);\r\n }\r\n };\r\n // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\r\n DragListener.prototype.constrainScrollVel = function () {\r\n var el = this.scrollEl;\r\n if (this.scrollTopVel < 0) { // scrolling up?\r\n if (el.scrollTop() <= 0) { // already scrolled all the way up?\r\n this.scrollTopVel = 0;\r\n }\r\n }\r\n else if (this.scrollTopVel > 0) { // scrolling down?\r\n if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\r\n this.scrollTopVel = 0;\r\n }\r\n }\r\n if (this.scrollLeftVel < 0) { // scrolling left?\r\n if (el.scrollLeft() <= 0) { // already scrolled all the left?\r\n this.scrollLeftVel = 0;\r\n }\r\n }\r\n else if (this.scrollLeftVel > 0) { // scrolling right?\r\n if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\r\n this.scrollLeftVel = 0;\r\n }\r\n }\r\n };\r\n // This function gets called during every iteration of the scrolling animation loop\r\n DragListener.prototype.scrollIntervalFunc = function () {\r\n var el = this.scrollEl;\r\n var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\r\n // change the value of scrollEl's scroll\r\n if (this.scrollTopVel) {\r\n el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\r\n }\r\n if (this.scrollLeftVel) {\r\n el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\r\n }\r\n this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\r\n // if scrolled all the way, which causes the vels to be zero, stop the animation loop\r\n if (!this.scrollTopVel && !this.scrollLeftVel) {\r\n this.endAutoScroll();\r\n }\r\n };\r\n // Kills any existing scrolling animation loop\r\n DragListener.prototype.endAutoScroll = function () {\r\n if (this.scrollIntervalId) {\r\n clearInterval(this.scrollIntervalId);\r\n this.scrollIntervalId = null;\r\n this.handleScrollEnd();\r\n }\r\n };\r\n // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\r\n DragListener.prototype.handleDebouncedScroll = function () {\r\n // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\r\n if (!this.scrollIntervalId) {\r\n this.handleScrollEnd();\r\n }\r\n };\r\n DragListener.prototype.handleScrollEnd = function () {\r\n // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n };\r\n return DragListener;\r\n}());\r\nexports.default = DragListener;\r\nListenerMixin_1.default.mixInto(DragListener);\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\n/*\r\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\nPrerequisite: the object being mixed into needs to be a *Grid*\r\n*/\r\nvar DayTableMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayTableMixin, _super);\r\n function DayTableMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Populates internal variables used for date calculation and rendering\r\n DayTableMixin.prototype.updateDayTable = function () {\r\n var t = this;\r\n var view = t.view;\r\n var calendar = view.calendar;\r\n var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\r\n var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\r\n var dayIndex = -1;\r\n var dayIndices = [];\r\n var dayDates = [];\r\n var daysPerRow;\r\n var firstDay;\r\n var rowCnt;\r\n while (date.isBefore(end)) { // loop each day from start to end\r\n if (view.isHiddenDay(date)) {\r\n dayIndices.push(dayIndex + 0.5); // mark that it's between indices\r\n }\r\n else {\r\n dayIndex++;\r\n dayIndices.push(dayIndex);\r\n dayDates.push(date.clone());\r\n }\r\n date.add(1, 'days');\r\n }\r\n if (this.breakOnWeeks) {\r\n // count columns until the day-of-week repeats\r\n firstDay = dayDates[0].day();\r\n for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\r\n if (dayDates[daysPerRow].day() === firstDay) {\r\n break;\r\n }\r\n }\r\n rowCnt = Math.ceil(dayDates.length / daysPerRow);\r\n }\r\n else {\r\n rowCnt = 1;\r\n daysPerRow = dayDates.length;\r\n }\r\n this.dayDates = dayDates;\r\n this.dayIndices = dayIndices;\r\n this.daysPerRow = daysPerRow;\r\n this.rowCnt = rowCnt;\r\n this.updateDayTableCols();\r\n };\r\n // Computes and assigned the colCnt property and updates any options that may be computed from it\r\n DayTableMixin.prototype.updateDayTableCols = function () {\r\n this.colCnt = this.computeColCnt();\r\n this.colHeadFormat =\r\n this.opt('columnHeaderFormat') ||\r\n this.opt('columnFormat') || // deprecated\r\n this.computeColHeadFormat();\r\n };\r\n // Determines how many columns there should be in the table\r\n DayTableMixin.prototype.computeColCnt = function () {\r\n return this.daysPerRow;\r\n };\r\n // Computes the ambiguously-timed moment for the given cell\r\n DayTableMixin.prototype.getCellDate = function (row, col) {\r\n return this.dayDates[this.getCellDayIndex(row, col)].clone();\r\n };\r\n // Computes the ambiguously-timed date range for the given cell\r\n DayTableMixin.prototype.getCellRange = function (row, col) {\r\n var start = this.getCellDate(row, col);\r\n var end = start.clone().add(1, 'days');\r\n return { start: start, end: end };\r\n };\r\n // Returns the number of day cells, chronologically, from the first of the grid (0-based)\r\n DayTableMixin.prototype.getCellDayIndex = function (row, col) {\r\n return row * this.daysPerRow + this.getColDayIndex(col);\r\n };\r\n // Returns the numner of day cells, chronologically, from the first cell in *any given row*\r\n DayTableMixin.prototype.getColDayIndex = function (col) {\r\n if (this.isRTL) {\r\n return this.colCnt - 1 - col;\r\n }\r\n else {\r\n return col;\r\n }\r\n };\r\n // Given a date, returns its chronolocial cell-index from the first cell of the grid.\r\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\r\n // If before the first offset, returns a negative number.\r\n // If after the last offset, returns an offset past the last cell offset.\r\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\r\n DayTableMixin.prototype.getDateDayIndex = function (date) {\r\n var dayIndices = this.dayIndices;\r\n var dayOffset = date.diff(this.dayDates[0], 'days');\r\n if (dayOffset < 0) {\r\n return dayIndices[0] - 1;\r\n }\r\n else if (dayOffset >= dayIndices.length) {\r\n return dayIndices[dayIndices.length - 1] + 1;\r\n }\r\n else {\r\n return dayIndices[dayOffset];\r\n }\r\n };\r\n /* Options\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Computes a default column header formatting string if `colFormat` is not explicitly defined\r\n DayTableMixin.prototype.computeColHeadFormat = function () {\r\n // if more than one week row, or if there are a lot of columns with not much space,\r\n // put just the day numbers will be in each cell\r\n if (this.rowCnt > 1 || this.colCnt > 10) {\r\n return 'ddd'; // \"Sat\"\r\n }\r\n else if (this.colCnt > 1) {\r\n return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\r\n }\r\n else {\r\n return 'dddd'; // \"Saturday\"\r\n }\r\n };\r\n /* Slicing\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Slices up a date range into a segment for every week-row it intersects with\r\n DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\r\n var daysPerRow = this.daysPerRow;\r\n var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n var segs = [];\r\n var row;\r\n var rowFirst;\r\n var rowLast; // inclusive day-index range for current row\r\n var segFirst;\r\n var segLast; // inclusive day-index range for segment\r\n for (row = 0; row < this.rowCnt; row++) {\r\n rowFirst = row * daysPerRow;\r\n rowLast = rowFirst + daysPerRow - 1;\r\n // intersect segment's offset range with the row's\r\n segFirst = Math.max(rangeFirst, rowFirst);\r\n segLast = Math.min(rangeLast, rowLast);\r\n // deal with in-between indices\r\n segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n if (segFirst <= segLast) { // was there any intersection with the current row?\r\n segs.push({\r\n row: row,\r\n // normalize to start of row\r\n firstRowDayIndex: segFirst - rowFirst,\r\n lastRowDayIndex: segLast - rowFirst,\r\n // must be matching integers to be the segment's start/end\r\n isStart: segFirst === rangeFirst,\r\n isEnd: segLast === rangeLast\r\n });\r\n }\r\n }\r\n return segs;\r\n };\r\n // Slices up a date range into a segment for every day-cell it intersects with.\r\n // TODO: make more DRY with sliceRangeByRow somehow.\r\n DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\r\n var daysPerRow = this.daysPerRow;\r\n var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n var segs = [];\r\n var row;\r\n var rowFirst;\r\n var rowLast; // inclusive day-index range for current row\r\n var i;\r\n var segFirst;\r\n var segLast; // inclusive day-index range for segment\r\n for (row = 0; row < this.rowCnt; row++) {\r\n rowFirst = row * daysPerRow;\r\n rowLast = rowFirst + daysPerRow - 1;\r\n for (i = rowFirst; i <= rowLast; i++) {\r\n // intersect segment's offset range with the row's\r\n segFirst = Math.max(rangeFirst, i);\r\n segLast = Math.min(rangeLast, i);\r\n // deal with in-between indices\r\n segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n if (segFirst <= segLast) { // was there any intersection with the current row?\r\n segs.push({\r\n row: row,\r\n // normalize to start of row\r\n firstRowDayIndex: segFirst - rowFirst,\r\n lastRowDayIndex: segLast - rowFirst,\r\n // must be matching integers to be the segment's start/end\r\n isStart: segFirst === rangeFirst,\r\n isEnd: segLast === rangeLast\r\n });\r\n }\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Header Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayTableMixin.prototype.renderHeadHtml = function () {\r\n var theme = this.view.calendar.theme;\r\n return '' +\r\n '
' +\r\n '' +\r\n '' +\r\n this.renderHeadTrHtml() +\r\n '' +\r\n '
' +\r\n '
';\r\n };\r\n DayTableMixin.prototype.renderHeadIntroHtml = function () {\r\n return this.renderIntroHtml(); // fall back to generic\r\n };\r\n DayTableMixin.prototype.renderHeadTrHtml = function () {\r\n return '' +\r\n '' +\r\n (this.isRTL ? '' : this.renderHeadIntroHtml()) +\r\n this.renderHeadDateCellsHtml() +\r\n (this.isRTL ? this.renderHeadIntroHtml() : '') +\r\n '';\r\n };\r\n DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\r\n var htmls = [];\r\n var col;\r\n var date;\r\n for (col = 0; col < this.colCnt; col++) {\r\n date = this.getCellDate(0, col);\r\n htmls.push(this.renderHeadDateCellHtml(date));\r\n }\r\n return htmls.join('');\r\n };\r\n // TODO: when internalApiVersion, accept an object for HTML attributes\r\n // (colspan should be no different)\r\n DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\r\n var t = this;\r\n var view = t.view;\r\n var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n var classNames = [\r\n 'fc-day-header',\r\n view.calendar.theme.getClass('widgetHeader')\r\n ];\r\n var innerHtml;\r\n if (typeof t.opt('columnHeaderHtml') === 'function') {\r\n innerHtml = t.opt('columnHeaderHtml')(date);\r\n }\r\n else if (typeof t.opt('columnHeaderText') === 'function') {\r\n innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\r\n }\r\n else {\r\n innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\r\n }\r\n // if only one row of days, the classNames on the header can represent the specific days beneath\r\n if (t.rowCnt === 1) {\r\n classNames = classNames.concat(\r\n // includes the day-of-week class\r\n // noThemeHighlight=true (don't highlight the header)\r\n t.getDayClasses(date, true));\r\n }\r\n else {\r\n classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\r\n }\r\n return '' +\r\n ' 1 ?\r\n ' colspan=\"' + colspan + '\"' :\r\n '') +\r\n (otherAttrs ?\r\n ' ' + otherAttrs :\r\n '') +\r\n '>' +\r\n (isDateValid ?\r\n // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\r\n view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :\r\n // if not valid, display text, but no link\r\n innerHtml) +\r\n '';\r\n };\r\n /* Background Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayTableMixin.prototype.renderBgTrHtml = function (row) {\r\n return '' +\r\n '' +\r\n (this.isRTL ? '' : this.renderBgIntroHtml(row)) +\r\n this.renderBgCellsHtml(row) +\r\n (this.isRTL ? this.renderBgIntroHtml(row) : '') +\r\n '';\r\n };\r\n DayTableMixin.prototype.renderBgIntroHtml = function (row) {\r\n return this.renderIntroHtml(); // fall back to generic\r\n };\r\n DayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n var htmls = [];\r\n var col;\r\n var date;\r\n for (col = 0; col < this.colCnt; col++) {\r\n date = this.getCellDate(row, col);\r\n htmls.push(this.renderBgCellHtml(date));\r\n }\r\n return htmls.join('');\r\n };\r\n DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\r\n var t = this;\r\n var view = t.view;\r\n var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n var classes = t.getDayClasses(date);\r\n classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\r\n return '';\r\n };\r\n /* Generic\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayTableMixin.prototype.renderIntroHtml = function () {\r\n // Generates the default HTML intro for any row. User classes should override\r\n };\r\n // TODO: a generic method for dealing with , RTL, intro\r\n // when increment internalApiVersion\r\n // wrapTr (scheduler)\r\n /* Utils\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\r\n // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\r\n DayTableMixin.prototype.bookendCells = function (trEl) {\r\n var introHtml = this.renderIntroHtml();\r\n if (introHtml) {\r\n if (this.isRTL) {\r\n trEl.append(introHtml);\r\n }\r\n else {\r\n trEl.prepend(introHtml);\r\n }\r\n }\r\n };\r\n return DayTableMixin;\r\n}(Mixin_1.default));\r\nexports.default = DayTableMixin;\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar BusinessHourRenderer = /** @class */ (function () {\r\n /*\r\n component implements:\r\n - eventRangesToEventFootprints\r\n - eventFootprintsToSegs\r\n */\r\n function BusinessHourRenderer(component, fillRenderer) {\r\n this.component = component;\r\n this.fillRenderer = fillRenderer;\r\n }\r\n BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\r\n var component = this.component;\r\n var unzonedRange = component._getDateProfile().activeUnzonedRange;\r\n var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\r\n var eventFootprints = eventInstanceGroup ?\r\n component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :\r\n [];\r\n this.renderEventFootprints(eventFootprints);\r\n };\r\n BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n this.renderSegs(segs);\r\n this.segs = segs;\r\n };\r\n BusinessHourRenderer.prototype.renderSegs = function (segs) {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.renderSegs('businessHours', segs, {\r\n getClasses: function (seg) {\r\n return ['fc-nonbusiness', 'fc-bgevent'];\r\n }\r\n });\r\n }\r\n };\r\n BusinessHourRenderer.prototype.unrender = function () {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.unrender('businessHours');\r\n }\r\n this.segs = null;\r\n };\r\n BusinessHourRenderer.prototype.getSegs = function () {\r\n return this.segs || [];\r\n };\r\n return BusinessHourRenderer;\r\n}());\r\nexports.default = BusinessHourRenderer;\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar FillRenderer = /** @class */ (function () {\r\n function FillRenderer(component) {\r\n this.fillSegTag = 'div';\r\n this.component = component;\r\n this.elsByFill = {};\r\n }\r\n FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\r\n this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\r\n };\r\n FillRenderer.prototype.renderSegs = function (type, segs, props) {\r\n var els;\r\n segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\r\n els = this.attachSegEls(type, segs);\r\n if (els) {\r\n this.reportEls(type, els);\r\n }\r\n return segs;\r\n };\r\n // Unrenders a specific type of fill that is currently rendered on the grid\r\n FillRenderer.prototype.unrender = function (type) {\r\n var el = this.elsByFill[type];\r\n if (el) {\r\n el.remove();\r\n delete this.elsByFill[type];\r\n }\r\n };\r\n // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\r\n // Only returns segments that successfully rendered.\r\n FillRenderer.prototype.buildSegEls = function (type, segs, props) {\r\n var _this = this;\r\n var html = '';\r\n var renderedSegs = [];\r\n var i;\r\n if (segs.length) {\r\n // build a large concatenation of segment HTML\r\n for (i = 0; i < segs.length; i++) {\r\n html += this.buildSegHtml(type, segs[i], props);\r\n }\r\n // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n // Then, compute the 'el' for each segment.\r\n $(html).each(function (i, node) {\r\n var seg = segs[i];\r\n var el = $(node);\r\n // allow custom filter methods per-type\r\n if (props.filterEl) {\r\n el = props.filterEl(seg, el);\r\n }\r\n if (el) { // custom filters did not cancel the render\r\n el = $(el); // allow custom filter to return raw DOM node\r\n // correct element type? (would be bad if a non-TD were inserted into a table for example)\r\n if (el.is(_this.fillSegTag)) {\r\n seg.el = el;\r\n renderedSegs.push(seg);\r\n }\r\n }\r\n });\r\n }\r\n return renderedSegs;\r\n };\r\n // Builds the HTML needed for one fill segment. Generic enough to work with different types.\r\n FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\r\n // custom hooks per-type\r\n var classes = props.getClasses ? props.getClasses(seg) : [];\r\n var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\r\n return '<' + this.fillSegTag +\r\n (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\r\n (css ? ' style=\"' + css + '\"' : '') +\r\n '>';\r\n };\r\n // Should return wrapping DOM structure\r\n FillRenderer.prototype.attachSegEls = function (type, segs) {\r\n // subclasses must implement\r\n };\r\n FillRenderer.prototype.reportEls = function (type, nodes) {\r\n if (this.elsByFill[type]) {\r\n this.elsByFill[type] = this.elsByFill[type].add(nodes);\r\n }\r\n else {\r\n this.elsByFill[type] = $(nodes);\r\n }\r\n };\r\n return FillRenderer;\r\n}());\r\nexports.default = FillRenderer;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar HelperRenderer = /** @class */ (function () {\r\n function HelperRenderer(component, eventRenderer) {\r\n this.view = component._getView();\r\n this.component = component;\r\n this.eventRenderer = eventRenderer;\r\n }\r\n HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\r\n this.renderEventFootprints([\r\n this.fabricateEventFootprint(componentFootprint)\r\n ]);\r\n };\r\n HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\r\n };\r\n HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\r\n };\r\n HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n var classNames = 'fc-helper ' + (extraClassNames || '');\r\n var i;\r\n // assigns each seg's el and returns a subset of segs that were rendered\r\n segs = this.eventRenderer.renderFgSegEls(segs);\r\n for (i = 0; i < segs.length; i++) {\r\n segs[i].el.addClass(classNames);\r\n }\r\n if (opacity != null) {\r\n for (i = 0; i < segs.length; i++) {\r\n segs[i].el.css('opacity', opacity);\r\n }\r\n }\r\n this.helperEls = this.renderSegs(segs, sourceSeg);\r\n };\r\n /*\r\n Must return all mock event elements\r\n */\r\n HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n // Subclasses must implement\r\n };\r\n HelperRenderer.prototype.unrender = function () {\r\n if (this.helperEls) {\r\n this.helperEls.remove();\r\n this.helperEls = null;\r\n }\r\n };\r\n HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\r\n var calendar = this.view.calendar;\r\n var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\r\n var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));\r\n var dummyInstance;\r\n dummyEvent.dateProfile = eventDateProfile;\r\n dummyInstance = dummyEvent.buildInstance();\r\n return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);\r\n };\r\n return HelperRenderer;\r\n}());\r\nexports.default = HelperRenderer;\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventPointing = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventPointing, _super);\r\n function EventPointing() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n component must implement:\r\n - publiclyTrigger\r\n */\r\n EventPointing.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\r\n component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\r\n component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\r\n };\r\n EventPointing.prototype.handleClick = function (seg, ev) {\r\n var res = this.component.publiclyTrigger('eventClick', {\r\n context: seg.el[0],\r\n args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n });\r\n if (res === false) {\r\n ev.preventDefault();\r\n }\r\n };\r\n // Updates internal state and triggers handlers for when an event element is moused over\r\n EventPointing.prototype.handleMouseover = function (seg, ev) {\r\n if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&\r\n !this.mousedOverSeg) {\r\n this.mousedOverSeg = seg;\r\n // TODO: move to EventSelecting's responsibility\r\n if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n seg.el.addClass('fc-allow-mouse-resize');\r\n }\r\n this.component.publiclyTrigger('eventMouseover', {\r\n context: seg.el[0],\r\n args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n });\r\n }\r\n };\r\n // Updates internal state and triggers handlers for when an event element is moused out.\r\n // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\r\n EventPointing.prototype.handleMouseout = function (seg, ev) {\r\n if (this.mousedOverSeg) {\r\n this.mousedOverSeg = null;\r\n // TODO: move to EventSelecting's responsibility\r\n if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n seg.el.removeClass('fc-allow-mouse-resize');\r\n }\r\n this.component.publiclyTrigger('eventMouseout', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev || {},\r\n this.view\r\n ]\r\n });\r\n }\r\n };\r\n EventPointing.prototype.end = function () {\r\n if (this.mousedOverSeg) {\r\n this.handleMouseout(this.mousedOverSeg);\r\n }\r\n };\r\n return EventPointing;\r\n}(Interaction_1.default));\r\nexports.default = EventPointing;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar DateClicking_1 = __webpack_require__(237);\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar EventDragging_1 = __webpack_require__(235);\r\nvar EventResizing_1 = __webpack_require__(234);\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nvar StandardInteractionsMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(StandardInteractionsMixin, _super);\r\n function StandardInteractionsMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return StandardInteractionsMixin;\r\n}(Mixin_1.default));\r\nexports.default = StandardInteractionsMixin;\r\nStandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;\r\nStandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;\r\nStandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;\r\nStandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;\r\nStandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;\r\nStandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar Popover_1 = __webpack_require__(227);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGrid = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGrid, _super);\r\n function DayGrid(view) {\r\n var _this = _super.call(this, view) || this;\r\n _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\r\n _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\r\n // isRigid determines whether the individual rows should ignore the contents and be a constant height.\r\n // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\r\n _this.isRigid = false;\r\n _this.hasAllDayBusinessHours = true;\r\n return _this;\r\n }\r\n // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n if (this.isRTL) {\r\n seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\r\n seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\r\n }\r\n else {\r\n seg.leftCol = seg.firstRowDayIndex;\r\n seg.rightCol = seg.lastRowDayIndex;\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Date Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.renderDates = function (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n this.updateDayTable();\r\n this.renderGrid();\r\n };\r\n DayGrid.prototype.unrenderDates = function () {\r\n this.removeSegPopover();\r\n };\r\n // Renders the rows and columns into the component's `this.el`, which should already be assigned.\r\n DayGrid.prototype.renderGrid = function () {\r\n var view = this.view;\r\n var rowCnt = this.rowCnt;\r\n var colCnt = this.colCnt;\r\n var html = '';\r\n var row;\r\n var col;\r\n if (this.headContainerEl) {\r\n this.headContainerEl.html(this.renderHeadHtml());\r\n }\r\n for (row = 0; row < rowCnt; row++) {\r\n html += this.renderDayRowHtml(row, this.isRigid);\r\n }\r\n this.el.html(html);\r\n this.rowEls = this.el.find('.fc-row');\r\n this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\r\n this.rowCoordCache = new CoordCache_1.default({\r\n els: this.rowEls,\r\n isVertical: true\r\n });\r\n this.colCoordCache = new CoordCache_1.default({\r\n els: this.cellEls.slice(0, this.colCnt),\r\n isHorizontal: true\r\n });\r\n // trigger dayRender with each cell's element\r\n for (row = 0; row < rowCnt; row++) {\r\n for (col = 0; col < colCnt; col++) {\r\n this.publiclyTrigger('dayRender', {\r\n context: view,\r\n args: [\r\n this.getCellDate(row, col),\r\n this.getCellEl(row, col),\r\n view\r\n ]\r\n });\r\n }\r\n }\r\n };\r\n // Generates the HTML for a single row, which is a div that wraps a table.\r\n // `row` is the row number.\r\n DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\r\n var theme = this.view.calendar.theme;\r\n var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\r\n if (isRigid) {\r\n classes.push('fc-rigid');\r\n }\r\n return '' +\r\n '
' +\r\n '
' +\r\n '' +\r\n this.renderBgTrHtml(row) +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n (this.getIsNumbersVisible() ?\r\n '' +\r\n this.renderNumberTrHtml(row) +\r\n '' :\r\n '') +\r\n '
' +\r\n '
' +\r\n '
';\r\n };\r\n DayGrid.prototype.getIsNumbersVisible = function () {\r\n return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\r\n };\r\n DayGrid.prototype.getIsDayNumbersVisible = function () {\r\n return this.rowCnt > 1;\r\n };\r\n /* Grid Number Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.renderNumberTrHtml = function (row) {\r\n return '' +\r\n '' +\r\n (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\r\n this.renderNumberCellsHtml(row) +\r\n (this.isRTL ? this.renderNumberIntroHtml(row) : '') +\r\n '';\r\n };\r\n DayGrid.prototype.renderNumberIntroHtml = function (row) {\r\n return this.renderIntroHtml();\r\n };\r\n DayGrid.prototype.renderNumberCellsHtml = function (row) {\r\n var htmls = [];\r\n var col;\r\n var date;\r\n for (col = 0; col < this.colCnt; col++) {\r\n date = this.getCellDate(row, col);\r\n htmls.push(this.renderNumberCellHtml(date));\r\n }\r\n return htmls.join('');\r\n };\r\n // Generates the HTML for the s of the \"number\" row in the DayGrid's content skeleton.\r\n // The number row will only exist if either day numbers or week numbers are turned on.\r\n DayGrid.prototype.renderNumberCellHtml = function (date) {\r\n var view = this.view;\r\n var html = '';\r\n var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\r\n var classes;\r\n var weekCalcFirstDoW;\r\n if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\r\n // no numbers in day cell (week number must be along the side)\r\n return ''; // will create an empty space above events :(\r\n }\r\n classes = this.getDayClasses(date);\r\n classes.unshift('fc-day-top');\r\n if (this.cellWeekNumbersVisible) {\r\n // To determine the day of week number change under ISO, we cannot\r\n // rely on moment.js methods such as firstDayOfWeek() or weekday(),\r\n // because they rely on the locale's dow (possibly overridden by\r\n // our firstDay option), which may not be Monday. We cannot change\r\n // dow, because that would affect the calendar start day as well.\r\n if (date._locale._fullCalendar_weekCalc === 'ISO') {\r\n weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\r\n }\r\n else {\r\n weekCalcFirstDoW = date._locale.firstDayOfWeek();\r\n }\r\n }\r\n html += '';\r\n if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {\r\n html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML\r\n );\r\n }\r\n if (isDayNumberVisible) {\r\n html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML\r\n );\r\n }\r\n html += '';\r\n return html;\r\n };\r\n /* Hit System\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.prepareHits = function () {\r\n this.colCoordCache.build();\r\n this.rowCoordCache.build();\r\n this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\r\n };\r\n DayGrid.prototype.releaseHits = function () {\r\n this.colCoordCache.clear();\r\n this.rowCoordCache.clear();\r\n };\r\n DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\r\n var col = this.colCoordCache.getHorizontalIndex(leftOffset);\r\n var row = this.rowCoordCache.getVerticalIndex(topOffset);\r\n if (row != null && col != null) {\r\n return this.getCellHit(row, col);\r\n }\r\n }\r\n };\r\n DayGrid.prototype.getHitFootprint = function (hit) {\r\n var range = this.getCellRange(hit.row, hit.col);\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?\r\n );\r\n };\r\n DayGrid.prototype.getHitEl = function (hit) {\r\n return this.getCellEl(hit.row, hit.col);\r\n };\r\n /* Cell System\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // FYI: the first column is the leftmost column, regardless of date\r\n DayGrid.prototype.getCellHit = function (row, col) {\r\n return {\r\n row: row,\r\n col: col,\r\n component: this,\r\n left: this.colCoordCache.getLeftOffset(col),\r\n right: this.colCoordCache.getRightOffset(col),\r\n top: this.rowCoordCache.getTopOffset(row),\r\n bottom: this.rowCoordCache.getBottomOffset(row)\r\n };\r\n };\r\n DayGrid.prototype.getCellEl = function (row, col) {\r\n return this.cellEls.eq(row * this.colCnt + col);\r\n };\r\n /* Event Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Unrenders all events currently rendered on the grid\r\n DayGrid.prototype.executeEventUnrender = function () {\r\n this.removeSegPopover(); // removes the \"more..\" events popover\r\n _super.prototype.executeEventUnrender.call(this);\r\n };\r\n // Retrieves all rendered segment objects currently rendered on the grid\r\n DayGrid.prototype.getOwnEventSegs = function () {\r\n // append the segments from the \"more...\" popover\r\n return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\r\n };\r\n /* Event Drag Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event or external element being dragged.\r\n // `eventLocation` has zoned start and end (optional)\r\n DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n this.renderHighlight(eventFootprints[i].componentFootprint);\r\n }\r\n // render drags from OTHER components as helpers\r\n if (eventFootprints.length && seg && seg.component !== this) {\r\n this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n return true; // signal helpers rendered\r\n }\r\n };\r\n // Unrenders any visual indication of a hovering event\r\n DayGrid.prototype.unrenderDrag = function () {\r\n this.unrenderHighlight();\r\n this.helperRenderer.unrender();\r\n };\r\n /* Event Resize Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event being resized\r\n DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n this.renderHighlight(eventFootprints[i].componentFootprint);\r\n }\r\n this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n };\r\n // Unrenders a visual indication of an event being resized\r\n DayGrid.prototype.unrenderEventResize = function () {\r\n this.unrenderHighlight();\r\n this.helperRenderer.unrender();\r\n };\r\n /* More+ Link Popover\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.removeSegPopover = function () {\r\n if (this.segPopover) {\r\n this.segPopover.hide(); // in handler, will call segPopover's removeElement\r\n }\r\n };\r\n // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\r\n // `levelLimit` can be false (don't limit), a number, or true (should be computed).\r\n DayGrid.prototype.limitRows = function (levelLimit) {\r\n var rowStructs = this.eventRenderer.rowStructs || [];\r\n var row; // row #\r\n var rowLevelLimit;\r\n for (row = 0; row < rowStructs.length; row++) {\r\n this.unlimitRow(row);\r\n if (!levelLimit) {\r\n rowLevelLimit = false;\r\n }\r\n else if (typeof levelLimit === 'number') {\r\n rowLevelLimit = levelLimit;\r\n }\r\n else {\r\n rowLevelLimit = this.computeRowLevelLimit(row);\r\n }\r\n if (rowLevelLimit !== false) {\r\n this.limitRow(row, rowLevelLimit);\r\n }\r\n }\r\n };\r\n // Computes the number of levels a row will accomodate without going outside its bounds.\r\n // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\r\n // `row` is the row number.\r\n DayGrid.prototype.computeRowLevelLimit = function (row) {\r\n var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\r\n var rowHeight = rowEl.height(); // TODO: cache somehow?\r\n var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\r\n var i;\r\n var trEl;\r\n var trHeight;\r\n function iterInnerHeights(i, childNode) {\r\n trHeight = Math.max(trHeight, $(childNode).outerHeight());\r\n }\r\n // Reveal one level at a time and stop when we find one out of bounds\r\n for (i = 0; i < trEls.length; i++) {\r\n trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\r\n // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\r\n // so instead, find the tallest inner content element.\r\n trHeight = 0;\r\n trEl.find('> td > :first-child').each(iterInnerHeights);\r\n if (trEl.position().top + trHeight > rowHeight) {\r\n return i;\r\n }\r\n }\r\n return false; // should not limit at all\r\n };\r\n // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\r\n // `row` is the row number.\r\n // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\r\n DayGrid.prototype.limitRow = function (row, levelLimit) {\r\n var _this = this;\r\n var rowStruct = this.eventRenderer.rowStructs[row];\r\n var moreNodes = []; // array of \"more\" links and DOM nodes\r\n var col = 0; // col #, left-to-right (not chronologically)\r\n var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\r\n var cellMatrix; // a matrix (by level, then column) of all jQuery elements in the row\r\n var limitedNodes; // array of temporarily hidden level and segment DOM nodes\r\n var i;\r\n var seg;\r\n var segsBelow; // array of segment objects below `seg` in the current `col`\r\n var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\r\n var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\r\n var td;\r\n var rowspan;\r\n var segMoreNodes; // array of \"more\" cells that will stand-in for the current seg's cell\r\n var j;\r\n var moreTd;\r\n var moreWrap;\r\n var moreLink;\r\n // Iterates through empty level cells and places \"more\" links inside if need be\r\n var emptyCellsUntil = function (endCol) {\r\n while (col < endCol) {\r\n segsBelow = _this.getCellSegs(row, col, levelLimit);\r\n if (segsBelow.length) {\r\n td = cellMatrix[levelLimit - 1][col];\r\n moreLink = _this.renderMoreLink(row, col, segsBelow);\r\n moreWrap = $('
').append(moreLink);\r\n td.append(moreWrap);\r\n moreNodes.push(moreWrap[0]);\r\n }\r\n col++;\r\n }\r\n };\r\n if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\r\n levelSegs = rowStruct.segLevels[levelLimit - 1];\r\n cellMatrix = rowStruct.cellMatrix;\r\n limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level elements past the limit\r\n .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\r\n // iterate though segments in the last allowable level\r\n for (i = 0; i < levelSegs.length; i++) {\r\n seg = levelSegs[i];\r\n emptyCellsUntil(seg.leftCol); // process empty cells before the segment\r\n // determine *all* segments below `seg` that occupy the same columns\r\n colSegsBelow = [];\r\n totalSegsBelow = 0;\r\n while (col <= seg.rightCol) {\r\n segsBelow = this.getCellSegs(row, col, levelLimit);\r\n colSegsBelow.push(segsBelow);\r\n totalSegsBelow += segsBelow.length;\r\n col++;\r\n }\r\n if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\r\n td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\r\n rowspan = td.attr('rowspan') || 1;\r\n segMoreNodes = [];\r\n // make a replacement for each column the segment occupies. will be one for each colspan\r\n for (j = 0; j < colSegsBelow.length; j++) {\r\n moreTd = $('').attr('rowspan', rowspan);\r\n segsBelow = colSegsBelow[j];\r\n moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\r\n );\r\n moreWrap = $('
').append(moreLink);\r\n moreTd.append(moreWrap);\r\n segMoreNodes.push(moreTd[0]);\r\n moreNodes.push(moreTd[0]);\r\n }\r\n td.addClass('fc-limited').after($(segMoreNodes)); // hide original and inject replacements\r\n limitedNodes.push(td[0]);\r\n }\r\n }\r\n emptyCellsUntil(this.colCnt); // finish off the level\r\n rowStruct.moreEls = $(moreNodes); // for easy undoing later\r\n rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\r\n }\r\n };\r\n // Reveals all levels and removes all \"more\"-related elements for a grid's row.\r\n // `row` is a row number.\r\n DayGrid.prototype.unlimitRow = function (row) {\r\n var rowStruct = this.eventRenderer.rowStructs[row];\r\n if (rowStruct.moreEls) {\r\n rowStruct.moreEls.remove();\r\n rowStruct.moreEls = null;\r\n }\r\n if (rowStruct.limitedEls) {\r\n rowStruct.limitedEls.removeClass('fc-limited');\r\n rowStruct.limitedEls = null;\r\n }\r\n };\r\n // Renders an element that represents hidden event element for a cell.\r\n // Responsible for attaching click handler as well.\r\n DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\r\n var _this = this;\r\n var view = this.view;\r\n return $('')\r\n .text(this.getMoreLinkText(hiddenSegs.length))\r\n .on('click', function (ev) {\r\n var clickOption = _this.opt('eventLimitClick');\r\n var date = _this.getCellDate(row, col);\r\n var moreEl = $(ev.currentTarget);\r\n var dayEl = _this.getCellEl(row, col);\r\n var allSegs = _this.getCellSegs(row, col);\r\n // rescope the segments to be within the cell's date\r\n var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\r\n var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\r\n if (typeof clickOption === 'function') {\r\n // the returned value can be an atomic option\r\n clickOption = _this.publiclyTrigger('eventLimitClick', {\r\n context: view,\r\n args: [\r\n {\r\n date: date.clone(),\r\n dayEl: dayEl,\r\n moreEl: moreEl,\r\n segs: reslicedAllSegs,\r\n hiddenSegs: reslicedHiddenSegs\r\n },\r\n ev,\r\n view\r\n ]\r\n });\r\n }\r\n if (clickOption === 'popover') {\r\n _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\r\n }\r\n else if (typeof clickOption === 'string') { // a view name\r\n view.calendar.zoomTo(date, clickOption);\r\n }\r\n });\r\n };\r\n // Reveals the popover that displays all events within a cell\r\n DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\r\n var _this = this;\r\n var view = this.view;\r\n var moreWrap = moreLink.parent(); // the
wrapper around the \r\n var topEl; // the element we want to match the top coordinate of\r\n var options;\r\n if (this.rowCnt === 1) {\r\n topEl = view.el; // will cause the popover to cover any sort of header\r\n }\r\n else {\r\n topEl = this.rowEls.eq(row); // will align with top of row\r\n }\r\n options = {\r\n className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\r\n content: this.renderSegPopoverContent(row, col, segs),\r\n parentEl: view.el,\r\n top: topEl.offset().top,\r\n autoHide: true,\r\n viewportConstrain: this.opt('popoverViewportConstrain'),\r\n hide: function () {\r\n // kill everything when the popover is hidden\r\n // notify events to be removed\r\n if (_this.popoverSegs) {\r\n _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\r\n }\r\n _this.segPopover.removeElement();\r\n _this.segPopover = null;\r\n _this.popoverSegs = null;\r\n }\r\n };\r\n // Determine horizontal coordinate.\r\n // We use the moreWrap instead of the to avoid border confusion.\r\n if (this.isRTL) {\r\n options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\r\n }\r\n else {\r\n options.left = moreWrap.offset().left - 1; // -1 to be over cell border\r\n }\r\n this.segPopover = new Popover_1.default(options);\r\n this.segPopover.show();\r\n // the popover doesn't live within the grid's container element, and thus won't get the event\r\n // delegated-handlers for free. attach event-related handlers to the popover.\r\n this.bindAllSegHandlersToEl(this.segPopover.el);\r\n this.triggerAfterEventSegsRendered(segs);\r\n };\r\n // Builds the inner DOM contents of the segment popover\r\n DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\r\n var view = this.view;\r\n var theme = view.calendar.theme;\r\n var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\r\n var content = $('
' +\r\n '' +\r\n '' +\r\n util_1.htmlEscape(title) +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
');\r\n var segContainer = content.find('.fc-event-container');\r\n var i;\r\n // render each seg's `el` and only return the visible segs\r\n segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\r\n this.popoverSegs = segs;\r\n for (i = 0; i < segs.length; i++) {\r\n // because segments in the popover are not part of a grid coordinate system, provide a hint to any\r\n // grids that want to do drag-n-drop about which cell it came from\r\n this.hitsNeeded();\r\n segs[i].hit = this.getCellHit(row, col);\r\n this.hitsNotNeeded();\r\n segContainer.append(segs[i].el);\r\n }\r\n return content;\r\n };\r\n // Given the events within an array of segment objects, reslice them to be in a single day\r\n DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\r\n var dayStart = dayDate.clone();\r\n var dayEnd = dayStart.clone().add(1, 'days');\r\n var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);\r\n var newSegs = [];\r\n var i;\r\n var seg;\r\n var slicedRange;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\r\n if (slicedRange) {\r\n newSegs.push($.extend({}, seg, {\r\n footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\r\n isStart: seg.isStart && slicedRange.isStart,\r\n isEnd: seg.isEnd && slicedRange.isEnd\r\n }));\r\n }\r\n }\r\n // force an order because eventsToSegs doesn't guarantee one\r\n // TODO: research if still needed\r\n this.eventRenderer.sortEventSegs(newSegs);\r\n return newSegs;\r\n };\r\n // Generates the text that should be inside a \"more\" link, given the number of events it represents\r\n DayGrid.prototype.getMoreLinkText = function (num) {\r\n var opt = this.opt('eventLimitText');\r\n if (typeof opt === 'function') {\r\n return opt(num);\r\n }\r\n else {\r\n return '+' + num + ' ' + opt;\r\n }\r\n };\r\n // Returns segments within a given cell.\r\n // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\r\n DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\r\n var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\r\n var level = startLevel || 0;\r\n var segs = [];\r\n var seg;\r\n while (level < segMatrix.length) {\r\n seg = segMatrix[level][col];\r\n if (seg) {\r\n segs.push(seg);\r\n }\r\n level++;\r\n }\r\n return segs;\r\n };\r\n return DayGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = DayGrid;\r\nDayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;\r\nDayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nDayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;\r\nDayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(DayGrid);\r\nDayTableMixin_1.default.mixInto(DayGrid);\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar DayGrid_1 = __webpack_require__(66);\r\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\r\n// It is responsible for managing width/height.\r\nvar BasicView = /** @class */ (function (_super) {\r\n tslib_1.__extends(BasicView, _super);\r\n function BasicView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.dayGrid = _this.instantiateDayGrid();\r\n _this.dayGrid.isRigid = _this.hasRigidRows();\r\n if (_this.opt('weekNumbers')) {\r\n if (_this.opt('weekNumbersWithinDays')) {\r\n _this.dayGrid.cellWeekNumbersVisible = true;\r\n _this.dayGrid.colWeekNumbersVisible = false;\r\n }\r\n else {\r\n _this.dayGrid.cellWeekNumbersVisible = false;\r\n _this.dayGrid.colWeekNumbersVisible = true;\r\n }\r\n }\r\n _this.addChild(_this.dayGrid);\r\n _this.scroller = new Scroller_1.default({\r\n overflowX: 'hidden',\r\n overflowY: 'auto'\r\n });\r\n return _this;\r\n }\r\n // Generates the DayGrid object this view needs. Draws from this.dayGridClass\r\n BasicView.prototype.instantiateDayGrid = function () {\r\n // generate a subclass on the fly with BasicView-specific behavior\r\n // TODO: cache this subclass\r\n var subclass = makeDayGridSubclass(this.dayGridClass);\r\n return new subclass(this);\r\n };\r\n BasicView.prototype.executeDateRender = function (dateProfile) {\r\n this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\r\n _super.prototype.executeDateRender.call(this, dateProfile);\r\n };\r\n BasicView.prototype.renderSkeleton = function () {\r\n var dayGridContainerEl;\r\n var dayGridEl;\r\n this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\r\n this.scroller.render();\r\n dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\r\n dayGridEl = $('
').appendTo(dayGridContainerEl);\r\n this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\r\n this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\r\n this.dayGrid.setElement(dayGridEl);\r\n };\r\n BasicView.prototype.unrenderSkeleton = function () {\r\n this.dayGrid.removeElement();\r\n this.scroller.destroy();\r\n };\r\n // Builds the HTML skeleton for the view.\r\n // The day-grid component will render inside of a container defined by this HTML.\r\n BasicView.prototype.renderSkeletonHtml = function () {\r\n var theme = this.calendar.theme;\r\n return '' +\r\n '' +\r\n (this.opt('columnHeader') ?\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' :\r\n '') +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
 
';\r\n };\r\n // Generates an HTML attribute string for setting the width of the week number column, if it is known\r\n BasicView.prototype.weekNumberStyleAttr = function () {\r\n if (this.weekNumberWidth != null) {\r\n return 'style=\"width:' + this.weekNumberWidth + 'px\"';\r\n }\r\n return '';\r\n };\r\n // Determines whether each row should have a constant height\r\n BasicView.prototype.hasRigidRows = function () {\r\n var eventLimit = this.opt('eventLimit');\r\n return eventLimit && typeof eventLimit !== 'number';\r\n };\r\n /* Dimensions\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Refreshes the horizontal dimensions of the view\r\n BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n var eventLimit = this.opt('eventLimit');\r\n var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\r\n var scrollerHeight;\r\n var scrollbarWidths;\r\n // hack to give the view some height prior to dayGrid's columns being rendered\r\n // TODO: separate setting height from scroller VS dayGrid.\r\n if (!this.dayGrid.rowEls) {\r\n if (!isAuto) {\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n return;\r\n }\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n if (this.dayGrid.colWeekNumbersVisible) {\r\n // Make sure all week number cells running down the side have the same width.\r\n // Record the width for cells created later.\r\n this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\r\n }\r\n // reset all heights to be natural\r\n this.scroller.clear();\r\n util_1.uncompensateScroll(headRowEl);\r\n this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n // is the event limit a constant level number?\r\n if (eventLimit && typeof eventLimit === 'number') {\r\n this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\r\n }\r\n // distribute the height to the rows\r\n // (totalHeight is a \"recommended\" value if isAuto)\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.setGridHeight(scrollerHeight, isAuto);\r\n // is the event limit dynamically calculated?\r\n if (eventLimit && typeof eventLimit !== 'number') {\r\n this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\r\n }\r\n if (!isAuto) { // should we force dimensions of the scroll container?\r\n this.scroller.setHeight(scrollerHeight);\r\n scrollbarWidths = this.scroller.getScrollbarWidths();\r\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n util_1.compensateScroll(headRowEl, scrollbarWidths);\r\n // doing the scrollbar compensation might have created text overflow which created more height. redo\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n // guarantees the same scrollbar widths\r\n this.scroller.lockOverflow(scrollbarWidths);\r\n }\r\n };\r\n // given a desired total height of the view, returns what the height of the scroller should be\r\n BasicView.prototype.computeScrollerHeight = function (totalHeight) {\r\n return totalHeight -\r\n util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n };\r\n // Sets the height of just the DayGrid component in this view\r\n BasicView.prototype.setGridHeight = function (height, isAuto) {\r\n if (isAuto) {\r\n util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\r\n }\r\n else {\r\n util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\r\n }\r\n };\r\n /* Scroll\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n BasicView.prototype.computeInitialDateScroll = function () {\r\n return { top: 0 };\r\n };\r\n BasicView.prototype.queryDateScroll = function () {\r\n return { top: this.scroller.getScrollTop() };\r\n };\r\n BasicView.prototype.applyDateScroll = function (scroll) {\r\n if (scroll.top !== undefined) {\r\n this.scroller.setScrollTop(scroll.top);\r\n }\r\n };\r\n return BasicView;\r\n}(View_1.default));\r\nexports.default = BasicView;\r\nBasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;\r\nBasicView.prototype.dayGridClass = DayGrid_1.default;\r\n// customize the rendering behavior of BasicView's dayGrid\r\nfunction makeDayGridSubclass(SuperClass) {\r\n return /** @class */ (function (_super) {\r\n tslib_1.__extends(SubClass, _super);\r\n function SubClass() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.colWeekNumbersVisible = false; // display week numbers along the side?\r\n return _this;\r\n }\r\n // Generates the HTML that will go before the day-of week header cells\r\n SubClass.prototype.renderHeadIntroHtml = function () {\r\n var view = this.view;\r\n if (this.colWeekNumbersVisible) {\r\n return '' +\r\n '' +\r\n '' + // needed for matchCellWidths\r\n util_1.htmlEscape(this.opt('weekNumberTitle')) +\r\n '' +\r\n '';\r\n }\r\n return '';\r\n };\r\n // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\r\n SubClass.prototype.renderNumberIntroHtml = function (row) {\r\n var view = this.view;\r\n var weekStart = this.getCellDate(row, 0);\r\n if (this.colWeekNumbersVisible) {\r\n return '' +\r\n '' +\r\n view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML\r\n ) +\r\n '';\r\n }\r\n return '';\r\n };\r\n // Generates the HTML that goes before the day bg cells for each day-row\r\n SubClass.prototype.renderBgIntroHtml = function () {\r\n var view = this.view;\r\n if (this.colWeekNumbersVisible) {\r\n return '';\r\n }\r\n return '';\r\n };\r\n // Generates the HTML that goes before every other type of row generated by DayGrid.\r\n // Affects helper-skeleton and highlight-skeleton rows.\r\n SubClass.prototype.renderIntroHtml = function () {\r\n var view = this.view;\r\n if (this.colWeekNumbersVisible) {\r\n return '';\r\n }\r\n return '';\r\n };\r\n SubClass.prototype.getIsNumbersVisible = function () {\r\n return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\r\n };\r\n return SubClass;\r\n }(SuperClass));\r\n}\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar BasicViewDateProfileGenerator = /** @class */ (function (_super) {\r\n tslib_1.__extends(BasicViewDateProfileGenerator, _super);\r\n function BasicViewDateProfileGenerator() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Computes the date range that will be rendered.\r\n BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\r\n var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n // year and month views should be aligned with weeks. this is already done for week\r\n if (/^(year|month)$/.test(currentRangeUnit)) {\r\n start.startOf('week');\r\n // make end-of-week if not already\r\n if (end.weekday()) {\r\n end.add(1, 'week').startOf('week'); // exclusively move backwards\r\n }\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n return BasicViewDateProfileGenerator;\r\n}(DateProfileGenerator_1.default));\r\nexports.default = BasicViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */,\n/* 80 */,\n/* 81 */,\n/* 82 */,\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */,\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar util_1 = __webpack_require__(19);\r\nvar Constraints = /** @class */ (function () {\r\n function Constraints(eventManager, _calendar) {\r\n this.eventManager = eventManager;\r\n this._calendar = _calendar;\r\n }\r\n Constraints.prototype.opt = function (name) {\r\n return this._calendar.opt(name);\r\n };\r\n /*\r\n determines if eventInstanceGroup is allowed,\r\n in relation to other EVENTS and business hours.\r\n */\r\n Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n var eventDef = eventInstanceGroup.getEventDef();\r\n var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n var i;\r\n var peerEventInstances = this.getPeerEventInstances(eventDef);\r\n var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n var constraintVal = eventDef.getConstraint();\r\n var overlapVal = eventDef.getOverlap();\r\n var eventAllowFunc = this.opt('eventAllow');\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\r\n return false;\r\n }\r\n }\r\n if (eventAllowFunc) {\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n Constraints.prototype.getPeerEventInstances = function (eventDef) {\r\n return this.eventManager.getEventInstancesWithoutId(eventDef.id);\r\n };\r\n Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n var peerEventInstances = this.eventManager.getEventInstances();\r\n var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n var selectAllowFunc;\r\n if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\r\n selectAllowFunc = this.opt('selectAllow');\r\n if (selectAllowFunc) {\r\n return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\r\n ) {\r\n var constraintFootprints; // ComponentFootprint[]\r\n var overlapEventFootprints; // EventFootprint[]\r\n if (constraintVal != null) {\r\n constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\r\n if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\r\n return false;\r\n }\r\n }\r\n overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\r\n if (overlapVal === false) {\r\n if (overlapEventFootprints.length) {\r\n return false;\r\n }\r\n }\r\n else if (typeof overlapVal === 'function') {\r\n if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\r\n return false;\r\n }\r\n }\r\n if (subjectEventInstance) {\r\n if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n // Constraint\r\n // ------------------------------------------------------------------------------------------------\r\n Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\r\n var i;\r\n for (i = 0; i < constraintFootprints.length; i++) {\r\n if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\r\n var eventInstances;\r\n if (constraintVal === 'businessHours') {\r\n return this.buildCurrentBusinessFootprints(isAllDay);\r\n }\r\n else if (typeof constraintVal === 'object') {\r\n eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\r\n if (!eventInstances) { // invalid input. fallback to parsing footprint directly\r\n return this.parseFootprints(constraintVal);\r\n }\r\n else {\r\n return this.eventInstancesToFootprints(eventInstances);\r\n }\r\n }\r\n else if (constraintVal != null) { // an ID\r\n eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\r\n return this.eventInstancesToFootprints(eventInstances);\r\n }\r\n };\r\n // returns ComponentFootprint[]\r\n // uses current view's range\r\n Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n var view = this._calendar.view;\r\n var businessHourGenerator = view.get('businessHourGenerator');\r\n var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n if (eventInstanceGroup) {\r\n return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\r\n }\r\n else {\r\n return [];\r\n }\r\n };\r\n // conversion util\r\n Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\r\n var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\r\n var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\r\n return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\r\n };\r\n // Overlap\r\n // ------------------------------------------------------------------------------------------------\r\n Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\r\n var overlapEventFootprints = [];\r\n var i;\r\n for (i = 0; i < peerEventFootprints.length; i++) {\r\n if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\r\n overlapEventFootprints.push(peerEventFootprints[i]);\r\n }\r\n }\r\n return overlapEventFootprints;\r\n };\r\n // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\r\n // ------------------------------------------------------------------------------------------------\r\n // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\r\n // constraints whereas the Grid code is related to rendering. Each approach might want to convert\r\n // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\r\n // this more DRY.\r\n /*\r\n Returns false on invalid input.\r\n */\r\n Constraints.prototype.parseEventDefToInstances = function (eventInput) {\r\n var eventManager = this.eventManager;\r\n var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));\r\n if (!eventDef) { // invalid\r\n return false;\r\n }\r\n return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\r\n };\r\n Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n var i;\r\n var eventFootprints = [];\r\n for (i = 0; i < eventRanges.length; i++) {\r\n eventFootprints.push.apply(// footprints\r\n eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n }\r\n return eventFootprints;\r\n };\r\n Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n return [util_1.eventRangeToEventFootprint(eventRange)];\r\n };\r\n /*\r\n Parses footprints directly.\r\n Very similar to EventDateProfile::parse :(\r\n */\r\n Constraints.prototype.parseFootprints = function (rawInput) {\r\n var start;\r\n var end;\r\n if (rawInput.start) {\r\n start = this._calendar.moment(rawInput.start);\r\n if (!start.isValid()) {\r\n start = null;\r\n }\r\n }\r\n if (rawInput.end) {\r\n end = this._calendar.moment(rawInput.end);\r\n if (!end.isValid()) {\r\n end = null;\r\n }\r\n }\r\n return [\r\n new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\r\n )\r\n ];\r\n };\r\n // Footprint Utils\r\n // ----------------------------------------------------------------------------------------\r\n Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\r\n };\r\n Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\r\n };\r\n return Constraints;\r\n}());\r\nexports.default = Constraints;\r\n// optional subjectEventInstance\r\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\r\n var i;\r\n for (i = 0; i < overlapEventFootprints.length; i++) {\r\n if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\r\n var subjectLegacyInstance = subjectEventInstance.toLegacy();\r\n var i;\r\n var overlapEventInstance;\r\n var overlapEventDef;\r\n var overlapVal;\r\n for (i = 0; i < overlapEventFootprints.length; i++) {\r\n overlapEventInstance = overlapEventFootprints[i].eventInstance;\r\n overlapEventDef = overlapEventInstance.def;\r\n // don't need to pass in calendar, because don't want to consider global eventOverlap property,\r\n // because we already considered that earlier in the process.\r\n overlapVal = overlapEventDef.getOverlap();\r\n if (overlapVal === false) {\r\n return false;\r\n }\r\n else if (typeof overlapVal === 'function') {\r\n if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\r\n start: '09:00',\r\n end: '17:00',\r\n dow: [1, 2, 3, 4, 5],\r\n rendering: 'inverse-background'\r\n // classNames are defined in businessHoursSegClasses\r\n};\r\nvar BusinessHourGenerator = /** @class */ (function () {\r\n function BusinessHourGenerator(rawComplexDef, calendar) {\r\n this.rawComplexDef = rawComplexDef;\r\n this.calendar = calendar;\r\n }\r\n BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\r\n var eventDefs = this.buildEventDefs(isAllDay);\r\n var eventInstanceGroup;\r\n if (eventDefs.length) {\r\n eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));\r\n // so that inverse-background rendering can happen even when no eventRanges in view\r\n eventInstanceGroup.explicitEventDef = eventDefs[0];\r\n return eventInstanceGroup;\r\n }\r\n };\r\n BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\r\n var rawComplexDef = this.rawComplexDef;\r\n var rawDefs = [];\r\n var requireDow = false;\r\n var i;\r\n var defs = [];\r\n if (rawComplexDef === true) {\r\n rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\r\n }\r\n else if ($.isPlainObject(rawComplexDef)) {\r\n rawDefs = [rawComplexDef];\r\n }\r\n else if ($.isArray(rawComplexDef)) {\r\n rawDefs = rawComplexDef;\r\n requireDow = true; // every sub-definition NEEDS a day-of-week\r\n }\r\n for (i = 0; i < rawDefs.length; i++) {\r\n if (!requireDow || rawDefs[i].dow) {\r\n defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\r\n }\r\n }\r\n return defs;\r\n };\r\n BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\r\n var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\r\n if (isAllDay) {\r\n fullRawDef.start = null;\r\n fullRawDef.end = null;\r\n }\r\n return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source\r\n );\r\n };\r\n return BusinessHourGenerator;\r\n}());\r\nexports.default = BusinessHourGenerator;\r\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventPeriod = /** @class */ (function () {\r\n function EventPeriod(start, end, timezone) {\r\n this.pendingCnt = 0;\r\n this.freezeDepth = 0;\r\n this.stuntedReleaseCnt = 0;\r\n this.releaseCnt = 0;\r\n this.start = start;\r\n this.end = end;\r\n this.timezone = timezone;\r\n this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());\r\n this.requestsByUid = {};\r\n this.eventDefsByUid = {};\r\n this.eventDefsById = {};\r\n this.eventInstanceGroupsById = {};\r\n }\r\n EventPeriod.prototype.isWithinRange = function (start, end) {\r\n // TODO: use a range util function?\r\n return !start.isBefore(this.start) && !end.isAfter(this.end);\r\n };\r\n // Requesting and Purging\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.requestSources = function (sources) {\r\n this.freeze();\r\n for (var i = 0; i < sources.length; i++) {\r\n this.requestSource(sources[i]);\r\n }\r\n this.thaw();\r\n };\r\n EventPeriod.prototype.requestSource = function (source) {\r\n var _this = this;\r\n var request = { source: source, status: 'pending', eventDefs: null };\r\n this.requestsByUid[source.uid] = request;\r\n this.pendingCnt += 1;\r\n source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\r\n if (request.status !== 'cancelled') {\r\n request.status = 'completed';\r\n request.eventDefs = eventDefs;\r\n _this.addEventDefs(eventDefs);\r\n _this.pendingCnt--;\r\n _this.tryRelease();\r\n }\r\n }, function () {\r\n if (request.status !== 'cancelled') {\r\n request.status = 'failed';\r\n _this.pendingCnt--;\r\n _this.tryRelease();\r\n }\r\n });\r\n };\r\n EventPeriod.prototype.purgeSource = function (source) {\r\n var request = this.requestsByUid[source.uid];\r\n if (request) {\r\n delete this.requestsByUid[source.uid];\r\n if (request.status === 'pending') {\r\n request.status = 'cancelled';\r\n this.pendingCnt--;\r\n this.tryRelease();\r\n }\r\n else if (request.status === 'completed') {\r\n request.eventDefs.forEach(this.removeEventDef.bind(this));\r\n }\r\n }\r\n };\r\n EventPeriod.prototype.purgeAllSources = function () {\r\n var requestsByUid = this.requestsByUid;\r\n var uid;\r\n var request;\r\n var completedCnt = 0;\r\n for (uid in requestsByUid) {\r\n request = requestsByUid[uid];\r\n if (request.status === 'pending') {\r\n request.status = 'cancelled';\r\n }\r\n else if (request.status === 'completed') {\r\n completedCnt++;\r\n }\r\n }\r\n this.requestsByUid = {};\r\n this.pendingCnt = 0;\r\n if (completedCnt) {\r\n this.removeAllEventDefs(); // might release\r\n }\r\n };\r\n // Event Definitions\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\r\n return this.eventDefsByUid[eventDefUid];\r\n };\r\n EventPeriod.prototype.getEventDefsById = function (eventDefId) {\r\n var a = this.eventDefsById[eventDefId];\r\n if (a) {\r\n return a.slice(); // clone\r\n }\r\n return [];\r\n };\r\n EventPeriod.prototype.addEventDefs = function (eventDefs) {\r\n for (var i = 0; i < eventDefs.length; i++) {\r\n this.addEventDef(eventDefs[i]);\r\n }\r\n };\r\n EventPeriod.prototype.addEventDef = function (eventDef) {\r\n var eventDefsById = this.eventDefsById;\r\n var eventDefId = eventDef.id;\r\n var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\r\n var eventInstances = eventDef.buildInstances(this.unzonedRange);\r\n var i;\r\n eventDefs.push(eventDef);\r\n this.eventDefsByUid[eventDef.uid] = eventDef;\r\n for (i = 0; i < eventInstances.length; i++) {\r\n this.addEventInstance(eventInstances[i], eventDefId);\r\n }\r\n };\r\n EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\r\n var _this = this;\r\n this.getEventDefsById(eventDefId).forEach(function (eventDef) {\r\n _this.removeEventDef(eventDef);\r\n });\r\n };\r\n EventPeriod.prototype.removeAllEventDefs = function () {\r\n var isEmpty = $.isEmptyObject(this.eventDefsByUid);\r\n this.eventDefsByUid = {};\r\n this.eventDefsById = {};\r\n this.eventInstanceGroupsById = {};\r\n if (!isEmpty) {\r\n this.tryRelease();\r\n }\r\n };\r\n EventPeriod.prototype.removeEventDef = function (eventDef) {\r\n var eventDefsById = this.eventDefsById;\r\n var eventDefs = eventDefsById[eventDef.id];\r\n delete this.eventDefsByUid[eventDef.uid];\r\n if (eventDefs) {\r\n util_1.removeExact(eventDefs, eventDef);\r\n if (!eventDefs.length) {\r\n delete eventDefsById[eventDef.id];\r\n }\r\n this.removeEventInstancesForDef(eventDef);\r\n }\r\n };\r\n // Event Instances\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.getEventInstances = function () {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var eventInstances = [];\r\n var id;\r\n for (id in eventInstanceGroupsById) {\r\n eventInstances.push.apply(eventInstances, // append\r\n eventInstanceGroupsById[id].eventInstances);\r\n }\r\n return eventInstances;\r\n };\r\n EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\r\n var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\r\n if (eventInstanceGroup) {\r\n return eventInstanceGroup.eventInstances.slice(); // clone\r\n }\r\n return [];\r\n };\r\n EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var matchingInstances = [];\r\n var id;\r\n for (id in eventInstanceGroupsById) {\r\n if (id !== eventDefId) {\r\n matchingInstances.push.apply(matchingInstances, // append\r\n eventInstanceGroupsById[id].eventInstances);\r\n }\r\n }\r\n return matchingInstances;\r\n };\r\n EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\r\n (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());\r\n eventInstanceGroup.eventInstances.push(eventInstance);\r\n this.tryRelease();\r\n };\r\n EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\r\n var removeCnt;\r\n if (eventInstanceGroup) {\r\n removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\r\n return currentEventInstance.def === eventDef;\r\n });\r\n if (!eventInstanceGroup.eventInstances.length) {\r\n delete eventInstanceGroupsById[eventDef.id];\r\n }\r\n if (removeCnt) {\r\n this.tryRelease();\r\n }\r\n }\r\n };\r\n // Releasing and Freezing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.tryRelease = function () {\r\n if (!this.pendingCnt) {\r\n if (!this.freezeDepth) {\r\n this.release();\r\n }\r\n else {\r\n this.stuntedReleaseCnt++;\r\n }\r\n }\r\n };\r\n EventPeriod.prototype.release = function () {\r\n this.releaseCnt++;\r\n this.trigger('release', this.eventInstanceGroupsById);\r\n };\r\n EventPeriod.prototype.whenReleased = function () {\r\n var _this = this;\r\n if (this.releaseCnt) {\r\n return Promise_1.default.resolve(this.eventInstanceGroupsById);\r\n }\r\n else {\r\n return Promise_1.default.construct(function (onResolve) {\r\n _this.one('release', onResolve);\r\n });\r\n }\r\n };\r\n EventPeriod.prototype.freeze = function () {\r\n if (!(this.freezeDepth++)) {\r\n this.stuntedReleaseCnt = 0;\r\n }\r\n };\r\n EventPeriod.prototype.thaw = function () {\r\n if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\r\n this.release();\r\n }\r\n };\r\n return EventPeriod;\r\n}());\r\nexports.default = EventPeriod;\r\nEmitterMixin_1.default.mixInto(EventPeriod);\r\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar EventManager = /** @class */ (function () {\r\n function EventManager(calendar) {\r\n this.calendar = calendar;\r\n this.stickySource = new ArrayEventSource_1.default(calendar);\r\n this.otherSources = [];\r\n }\r\n EventManager.prototype.requestEvents = function (start, end, timezone, force) {\r\n if (force ||\r\n !this.currentPeriod ||\r\n !this.currentPeriod.isWithinRange(start, end) ||\r\n timezone !== this.currentPeriod.timezone) {\r\n this.setPeriod(// will change this.currentPeriod\r\n new EventPeriod_1.default(start, end, timezone));\r\n }\r\n return this.currentPeriod.whenReleased();\r\n };\r\n // Source Adding/Removing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.addSource = function (eventSource) {\r\n this.otherSources.push(eventSource);\r\n if (this.currentPeriod) {\r\n this.currentPeriod.requestSource(eventSource); // might release\r\n }\r\n };\r\n EventManager.prototype.removeSource = function (doomedSource) {\r\n util_1.removeExact(this.otherSources, doomedSource);\r\n if (this.currentPeriod) {\r\n this.currentPeriod.purgeSource(doomedSource); // might release\r\n }\r\n };\r\n EventManager.prototype.removeAllSources = function () {\r\n this.otherSources = [];\r\n if (this.currentPeriod) {\r\n this.currentPeriod.purgeAllSources(); // might release\r\n }\r\n };\r\n // Source Refetching\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.refetchSource = function (eventSource) {\r\n var currentPeriod = this.currentPeriod;\r\n if (currentPeriod) {\r\n currentPeriod.freeze();\r\n currentPeriod.purgeSource(eventSource);\r\n currentPeriod.requestSource(eventSource);\r\n currentPeriod.thaw();\r\n }\r\n };\r\n EventManager.prototype.refetchAllSources = function () {\r\n var currentPeriod = this.currentPeriod;\r\n if (currentPeriod) {\r\n currentPeriod.freeze();\r\n currentPeriod.purgeAllSources();\r\n currentPeriod.requestSources(this.getSources());\r\n currentPeriod.thaw();\r\n }\r\n };\r\n // Source Querying\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.getSources = function () {\r\n return [this.stickySource].concat(this.otherSources);\r\n };\r\n // like querySources, but accepts multple match criteria (like multiple IDs)\r\n EventManager.prototype.multiQuerySources = function (matchInputs) {\r\n // coerce into an array\r\n if (!matchInputs) {\r\n matchInputs = [];\r\n }\r\n else if (!$.isArray(matchInputs)) {\r\n matchInputs = [matchInputs];\r\n }\r\n var matchingSources = [];\r\n var i;\r\n // resolve raw inputs to real event source objects\r\n for (i = 0; i < matchInputs.length; i++) {\r\n matchingSources.push.apply(// append\r\n matchingSources, this.querySources(matchInputs[i]));\r\n }\r\n return matchingSources;\r\n };\r\n // matchInput can either by a real event source object, an ID, or the function/URL for the source.\r\n // returns an array of matching source objects.\r\n EventManager.prototype.querySources = function (matchInput) {\r\n var sources = this.otherSources;\r\n var i;\r\n var source;\r\n // given a proper event source object\r\n for (i = 0; i < sources.length; i++) {\r\n source = sources[i];\r\n if (source === matchInput) {\r\n return [source];\r\n }\r\n }\r\n // an ID match\r\n source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));\r\n if (source) {\r\n return [source];\r\n }\r\n // parse as an event source\r\n matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);\r\n if (matchInput) {\r\n return $.grep(sources, function (source) {\r\n return isSourcesEquivalent(matchInput, source);\r\n });\r\n }\r\n };\r\n /*\r\n ID assumed to already be normalized\r\n */\r\n EventManager.prototype.getSourceById = function (id) {\r\n return $.grep(this.otherSources, function (source) {\r\n return source.id && source.id === id;\r\n })[0];\r\n };\r\n // Event-Period\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.setPeriod = function (eventPeriod) {\r\n if (this.currentPeriod) {\r\n this.unbindPeriod(this.currentPeriod);\r\n this.currentPeriod = null;\r\n }\r\n this.currentPeriod = eventPeriod;\r\n this.bindPeriod(eventPeriod);\r\n eventPeriod.requestSources(this.getSources());\r\n };\r\n EventManager.prototype.bindPeriod = function (eventPeriod) {\r\n this.listenTo(eventPeriod, 'release', function (eventsPayload) {\r\n this.trigger('release', eventsPayload);\r\n });\r\n };\r\n EventManager.prototype.unbindPeriod = function (eventPeriod) {\r\n this.stopListeningTo(eventPeriod);\r\n };\r\n // Event Getting/Adding/Removing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.getEventDefByUid = function (uid) {\r\n if (this.currentPeriod) {\r\n return this.currentPeriod.getEventDefByUid(uid);\r\n }\r\n };\r\n EventManager.prototype.addEventDef = function (eventDef, isSticky) {\r\n if (isSticky) {\r\n this.stickySource.addEventDef(eventDef);\r\n }\r\n if (this.currentPeriod) {\r\n this.currentPeriod.addEventDef(eventDef); // might release\r\n }\r\n };\r\n EventManager.prototype.removeEventDefsById = function (eventId) {\r\n this.getSources().forEach(function (eventSource) {\r\n eventSource.removeEventDefsById(eventId);\r\n });\r\n if (this.currentPeriod) {\r\n this.currentPeriod.removeEventDefsById(eventId); // might release\r\n }\r\n };\r\n EventManager.prototype.removeAllEventDefs = function () {\r\n this.getSources().forEach(function (eventSource) {\r\n eventSource.removeAllEventDefs();\r\n });\r\n if (this.currentPeriod) {\r\n this.currentPeriod.removeAllEventDefs();\r\n }\r\n };\r\n // Event Mutating\r\n // -----------------------------------------------------------------------------------------------------------------\r\n /*\r\n Returns an undo function.\r\n */\r\n EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\r\n var currentPeriod = this.currentPeriod;\r\n var eventDefs;\r\n var undoFuncs = [];\r\n if (currentPeriod) {\r\n currentPeriod.freeze();\r\n eventDefs = currentPeriod.getEventDefsById(eventDefId);\r\n eventDefs.forEach(function (eventDef) {\r\n // add/remove esp because id might change\r\n currentPeriod.removeEventDef(eventDef);\r\n undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\r\n currentPeriod.addEventDef(eventDef);\r\n });\r\n currentPeriod.thaw();\r\n return function () {\r\n currentPeriod.freeze();\r\n for (var i = 0; i < eventDefs.length; i++) {\r\n currentPeriod.removeEventDef(eventDefs[i]);\r\n undoFuncs[i]();\r\n currentPeriod.addEventDef(eventDefs[i]);\r\n }\r\n currentPeriod.thaw();\r\n };\r\n }\r\n return function () { };\r\n };\r\n /*\r\n copies and then mutates\r\n */\r\n EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\r\n var eventDefs = this.getEventDefsById(eventDefId);\r\n var i;\r\n var defCopy;\r\n var allInstances = [];\r\n for (i = 0; i < eventDefs.length; i++) {\r\n defCopy = eventDefs[i].clone();\r\n if (defCopy instanceof SingleEventDef_1.default) {\r\n eventDefMutation.mutateSingle(defCopy);\r\n allInstances.push.apply(allInstances, // append\r\n defCopy.buildInstances());\r\n }\r\n }\r\n return new EventInstanceGroup_1.default(allInstances);\r\n };\r\n // Freezing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.freeze = function () {\r\n if (this.currentPeriod) {\r\n this.currentPeriod.freeze();\r\n }\r\n };\r\n EventManager.prototype.thaw = function () {\r\n if (this.currentPeriod) {\r\n this.currentPeriod.thaw();\r\n }\r\n };\r\n // methods that simply forward to EventPeriod\r\n EventManager.prototype.getEventDefsById = function (eventDefId) {\r\n return this.currentPeriod.getEventDefsById(eventDefId);\r\n };\r\n EventManager.prototype.getEventInstances = function () {\r\n return this.currentPeriod.getEventInstances();\r\n };\r\n EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\r\n return this.currentPeriod.getEventInstancesWithId(eventDefId);\r\n };\r\n EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\r\n };\r\n return EventManager;\r\n}());\r\nexports.default = EventManager;\r\nEmitterMixin_1.default.mixInto(EventManager);\r\nListenerMixin_1.default.mixInto(EventManager);\r\nfunction isSourcesEquivalent(source0, source1) {\r\n return source0.getPrimitive() === source1.getPrimitive();\r\n}\r\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar StandardTheme = /** @class */ (function (_super) {\r\n tslib_1.__extends(StandardTheme, _super);\r\n function StandardTheme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return StandardTheme;\r\n}(Theme_1.default));\r\nexports.default = StandardTheme;\r\nStandardTheme.prototype.classes = {\r\n widget: 'fc-unthemed',\r\n widgetHeader: 'fc-widget-header',\r\n widgetContent: 'fc-widget-content',\r\n buttonGroup: 'fc-button-group',\r\n button: 'fc-button',\r\n cornerLeft: 'fc-corner-left',\r\n cornerRight: 'fc-corner-right',\r\n stateDefault: 'fc-state-default',\r\n stateActive: 'fc-state-active',\r\n stateDisabled: 'fc-state-disabled',\r\n stateHover: 'fc-state-hover',\r\n stateDown: 'fc-state-down',\r\n popoverHeader: 'fc-widget-header',\r\n popoverContent: 'fc-widget-content',\r\n // day grid\r\n headerRow: 'fc-widget-header',\r\n dayRow: 'fc-widget-content',\r\n // list view\r\n listView: 'fc-widget-content'\r\n};\r\nStandardTheme.prototype.baseIconClass = 'fc-icon';\r\nStandardTheme.prototype.iconClasses = {\r\n close: 'fc-icon-x',\r\n prev: 'fc-icon-left-single-arrow',\r\n next: 'fc-icon-right-single-arrow',\r\n prevYear: 'fc-icon-left-double-arrow',\r\n nextYear: 'fc-icon-right-double-arrow'\r\n};\r\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\r\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar JqueryUiTheme = /** @class */ (function (_super) {\r\n tslib_1.__extends(JqueryUiTheme, _super);\r\n function JqueryUiTheme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return JqueryUiTheme;\r\n}(Theme_1.default));\r\nexports.default = JqueryUiTheme;\r\nJqueryUiTheme.prototype.classes = {\r\n widget: 'ui-widget',\r\n widgetHeader: 'ui-widget-header',\r\n widgetContent: 'ui-widget-content',\r\n buttonGroup: 'fc-button-group',\r\n button: 'ui-button',\r\n cornerLeft: 'ui-corner-left',\r\n cornerRight: 'ui-corner-right',\r\n stateDefault: 'ui-state-default',\r\n stateActive: 'ui-state-active',\r\n stateDisabled: 'ui-state-disabled',\r\n stateHover: 'ui-state-hover',\r\n stateDown: 'ui-state-down',\r\n today: 'ui-state-highlight',\r\n popoverHeader: 'ui-widget-header',\r\n popoverContent: 'ui-widget-content',\r\n // day grid\r\n headerRow: 'ui-widget-header',\r\n dayRow: 'ui-widget-content',\r\n // list view\r\n listView: 'ui-widget-content'\r\n};\r\nJqueryUiTheme.prototype.baseIconClass = 'ui-icon';\r\nJqueryUiTheme.prototype.iconClasses = {\r\n close: 'ui-icon-closethick',\r\n prev: 'ui-icon-circle-triangle-w',\r\n next: 'ui-icon-circle-triangle-e',\r\n prevYear: 'ui-icon-seek-prev',\r\n nextYear: 'ui-icon-seek-next'\r\n};\r\nJqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\r\nJqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\r\nJqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\r\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar FuncEventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(FuncEventSource, _super);\r\n function FuncEventSource() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n FuncEventSource.parse = function (rawInput, calendar) {\r\n var rawProps;\r\n // normalize raw input\r\n if ($.isFunction(rawInput.events)) { // extended form\r\n rawProps = rawInput;\r\n }\r\n else if ($.isFunction(rawInput)) { // short form\r\n rawProps = { events: rawInput };\r\n }\r\n if (rawProps) {\r\n return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n }\r\n return false;\r\n };\r\n FuncEventSource.prototype.fetch = function (start, end, timezone) {\r\n var _this = this;\r\n this.calendar.pushLoading();\r\n return Promise_1.default.construct(function (onResolve) {\r\n _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\r\n _this.calendar.popLoading();\r\n onResolve(_this.parseEventDefs(rawEventDefs));\r\n });\r\n });\r\n };\r\n FuncEventSource.prototype.getPrimitive = function () {\r\n return this.func;\r\n };\r\n FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n this.func = rawProps.events;\r\n return superSuccess;\r\n };\r\n return FuncEventSource;\r\n}(EventSource_1.default));\r\nexports.default = FuncEventSource;\r\nFuncEventSource.defineStandardProps({\r\n events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar JsonFeedEventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(JsonFeedEventSource, _super);\r\n function JsonFeedEventSource() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n JsonFeedEventSource.parse = function (rawInput, calendar) {\r\n var rawProps;\r\n // normalize raw input\r\n if (typeof rawInput.url === 'string') { // extended form\r\n rawProps = rawInput;\r\n }\r\n else if (typeof rawInput === 'string') { // short form\r\n rawProps = { url: rawInput };\r\n }\r\n if (rawProps) {\r\n return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n }\r\n return false;\r\n };\r\n JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\r\n var _this = this;\r\n var ajaxSettings = this.ajaxSettings;\r\n var onSuccess = ajaxSettings.success;\r\n var onError = ajaxSettings.error;\r\n var requestParams = this.buildRequestParams(start, end, timezone);\r\n // todo: eventually handle the promise's then,\r\n // don't intercept success/error\r\n // tho will be a breaking API change\r\n this.calendar.pushLoading();\r\n return Promise_1.default.construct(function (onResolve, onReject) {\r\n $.ajax($.extend({}, // destination\r\n JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r\n url: _this.url,\r\n data: requestParams,\r\n success: function (rawEventDefs, status, xhr) {\r\n var callbackRes;\r\n _this.calendar.popLoading();\r\n if (rawEventDefs) {\r\n callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\r\n if ($.isArray(callbackRes)) {\r\n rawEventDefs = callbackRes;\r\n }\r\n onResolve(_this.parseEventDefs(rawEventDefs));\r\n }\r\n else {\r\n onReject();\r\n }\r\n },\r\n error: function (xhr, statusText, errorThrown) {\r\n _this.calendar.popLoading();\r\n util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\r\n onReject();\r\n }\r\n }));\r\n });\r\n };\r\n JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r\n var calendar = this.calendar;\r\n var ajaxSettings = this.ajaxSettings;\r\n var startParam;\r\n var endParam;\r\n var timezoneParam;\r\n var customRequestParams;\r\n var params = {};\r\n startParam = this.startParam;\r\n if (startParam == null) {\r\n startParam = calendar.opt('startParam');\r\n }\r\n endParam = this.endParam;\r\n if (endParam == null) {\r\n endParam = calendar.opt('endParam');\r\n }\r\n timezoneParam = this.timezoneParam;\r\n if (timezoneParam == null) {\r\n timezoneParam = calendar.opt('timezoneParam');\r\n }\r\n // retrieve any outbound GET/POST $.ajax data from the options\r\n if ($.isFunction(ajaxSettings.data)) {\r\n // supplied as a function that returns a key/value object\r\n customRequestParams = ajaxSettings.data();\r\n }\r\n else {\r\n // probably supplied as a straight key/value object\r\n customRequestParams = ajaxSettings.data || {};\r\n }\r\n $.extend(params, customRequestParams);\r\n params[startParam] = start.format();\r\n params[endParam] = end.format();\r\n if (timezone && timezone !== 'local') {\r\n params[timezoneParam] = timezone;\r\n }\r\n return params;\r\n };\r\n JsonFeedEventSource.prototype.getPrimitive = function () {\r\n return this.url;\r\n };\r\n JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\r\n this.ajaxSettings = rawProps;\r\n };\r\n JsonFeedEventSource.AJAX_DEFAULTS = {\r\n dataType: 'json',\r\n cache: false\r\n };\r\n return JsonFeedEventSource;\r\n}(EventSource_1.default));\r\nexports.default = JsonFeedEventSource;\r\nJsonFeedEventSource.defineStandardProps({\r\n // automatically transfer (true)...\r\n url: true,\r\n startParam: true,\r\n endParam: true,\r\n timezoneParam: true\r\n});\r\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Iterator = /** @class */ (function () {\r\n function Iterator(items) {\r\n this.items = items || [];\r\n }\r\n /* Calls a method on every item passing the arguments through */\r\n Iterator.prototype.proxyCall = function (methodName) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var results = [];\r\n this.items.forEach(function (item) {\r\n results.push(item[methodName].apply(item, args));\r\n });\r\n return results;\r\n };\r\n return Iterator;\r\n}());\r\nexports.default = Iterator;\r\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\n/* Creates a clone of an element and lets it track the mouse as it moves\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MouseFollower = /** @class */ (function () {\r\n function MouseFollower(sourceEl, options) {\r\n this.isFollowing = false;\r\n this.isHidden = false;\r\n this.isAnimating = false; // doing the revert animation?\r\n this.options = options = options || {};\r\n this.sourceEl = sourceEl;\r\n this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\r\n }\r\n // Causes the element to start following the mouse\r\n MouseFollower.prototype.start = function (ev) {\r\n if (!this.isFollowing) {\r\n this.isFollowing = true;\r\n this.y0 = util_1.getEvY(ev);\r\n this.x0 = util_1.getEvX(ev);\r\n this.topDelta = 0;\r\n this.leftDelta = 0;\r\n if (!this.isHidden) {\r\n this.updatePosition();\r\n }\r\n if (util_1.getEvIsTouch(ev)) {\r\n this.listenTo($(document), 'touchmove', this.handleMove);\r\n }\r\n else {\r\n this.listenTo($(document), 'mousemove', this.handleMove);\r\n }\r\n }\r\n };\r\n // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\r\n // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\r\n MouseFollower.prototype.stop = function (shouldRevert, callback) {\r\n var _this = this;\r\n var revertDuration = this.options.revertDuration;\r\n var complete = function () {\r\n _this.isAnimating = false;\r\n _this.removeElement();\r\n _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\r\n this.isFollowing = false;\r\n this.stopListeningTo($(document));\r\n if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\r\n this.isAnimating = true;\r\n this.el.animate({\r\n top: this.top0,\r\n left: this.left0\r\n }, {\r\n duration: revertDuration,\r\n complete: complete\r\n });\r\n }\r\n else {\r\n complete();\r\n }\r\n }\r\n };\r\n // Gets the tracking element. Create it if necessary\r\n MouseFollower.prototype.getEl = function () {\r\n var el = this.el;\r\n if (!el) {\r\n el = this.el = this.sourceEl.clone()\r\n .addClass(this.options.additionalClass || '')\r\n .css({\r\n position: 'absolute',\r\n visibility: '',\r\n display: this.isHidden ? 'none' : '',\r\n margin: 0,\r\n right: 'auto',\r\n bottom: 'auto',\r\n width: this.sourceEl.width(),\r\n height: this.sourceEl.height(),\r\n opacity: this.options.opacity || '',\r\n zIndex: this.options.zIndex\r\n });\r\n // we don't want long taps or any mouse interaction causing selection/menus.\r\n // would use preventSelection(), but that prevents selectstart, causing problems.\r\n el.addClass('fc-unselectable');\r\n el.appendTo(this.parentEl);\r\n }\r\n return el;\r\n };\r\n // Removes the tracking element if it has already been created\r\n MouseFollower.prototype.removeElement = function () {\r\n if (this.el) {\r\n this.el.remove();\r\n this.el = null;\r\n }\r\n };\r\n // Update the CSS position of the tracking element\r\n MouseFollower.prototype.updatePosition = function () {\r\n var sourceOffset;\r\n var origin;\r\n this.getEl(); // ensure this.el\r\n // make sure origin info was computed\r\n if (this.top0 == null) {\r\n sourceOffset = this.sourceEl.offset();\r\n origin = this.el.offsetParent().offset();\r\n this.top0 = sourceOffset.top - origin.top;\r\n this.left0 = sourceOffset.left - origin.left;\r\n }\r\n this.el.css({\r\n top: this.top0 + this.topDelta,\r\n left: this.left0 + this.leftDelta\r\n });\r\n };\r\n // Gets called when the user moves the mouse\r\n MouseFollower.prototype.handleMove = function (ev) {\r\n this.topDelta = util_1.getEvY(ev) - this.y0;\r\n this.leftDelta = util_1.getEvX(ev) - this.x0;\r\n if (!this.isHidden) {\r\n this.updatePosition();\r\n }\r\n };\r\n // Temporarily makes the tracking element invisible. Can be called before following starts\r\n MouseFollower.prototype.hide = function () {\r\n if (!this.isHidden) {\r\n this.isHidden = true;\r\n if (this.el) {\r\n this.el.hide();\r\n }\r\n }\r\n };\r\n // Show the tracking element after it has been temporarily hidden\r\n MouseFollower.prototype.show = function () {\r\n if (this.isHidden) {\r\n this.isHidden = false;\r\n this.updatePosition();\r\n this.getEl().show();\r\n }\r\n };\r\n return MouseFollower;\r\n}());\r\nexports.default = MouseFollower;\r\nListenerMixin_1.default.mixInto(MouseFollower);\r\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* A rectangular panel that is absolutely positioned over other content\r\n------------------------------------------------------------------------------------------------------------------------\r\nOptions:\r\n - className (string)\r\n - content (HTML string or jQuery element set)\r\n - parentEl\r\n - top\r\n - left\r\n - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n - autoHide (boolean)\r\n - show (callback)\r\n - hide (callback)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Popover = /** @class */ (function () {\r\n function Popover(options) {\r\n this.isHidden = true;\r\n this.margin = 10; // the space required between the popover and the edges of the scroll container\r\n this.options = options || {};\r\n }\r\n // Shows the popover on the specified position. Renders it if not already\r\n Popover.prototype.show = function () {\r\n if (this.isHidden) {\r\n if (!this.el) {\r\n this.render();\r\n }\r\n this.el.show();\r\n this.position();\r\n this.isHidden = false;\r\n this.trigger('show');\r\n }\r\n };\r\n // Hides the popover, through CSS, but does not remove it from the DOM\r\n Popover.prototype.hide = function () {\r\n if (!this.isHidden) {\r\n this.el.hide();\r\n this.isHidden = true;\r\n this.trigger('hide');\r\n }\r\n };\r\n // Creates `this.el` and renders content inside of it\r\n Popover.prototype.render = function () {\r\n var _this = this;\r\n var options = this.options;\r\n this.el = $('
')\r\n .addClass(options.className || '')\r\n .css({\r\n // position initially to the top left to avoid creating scrollbars\r\n top: 0,\r\n left: 0\r\n })\r\n .append(options.content)\r\n .appendTo(options.parentEl);\r\n // when a click happens on anything inside with a 'fc-close' className, hide the popover\r\n this.el.on('click', '.fc-close', function () {\r\n _this.hide();\r\n });\r\n if (options.autoHide) {\r\n this.listenTo($(document), 'mousedown', this.documentMousedown);\r\n }\r\n };\r\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\r\n Popover.prototype.documentMousedown = function (ev) {\r\n // only hide the popover if the click happened outside the popover\r\n if (this.el && !$(ev.target).closest(this.el).length) {\r\n this.hide();\r\n }\r\n };\r\n // Hides and unregisters any handlers\r\n Popover.prototype.removeElement = function () {\r\n this.hide();\r\n if (this.el) {\r\n this.el.remove();\r\n this.el = null;\r\n }\r\n this.stopListeningTo($(document), 'mousedown');\r\n };\r\n // Positions the popover optimally, using the top/left/right options\r\n Popover.prototype.position = function () {\r\n var options = this.options;\r\n var origin = this.el.offsetParent().offset();\r\n var width = this.el.outerWidth();\r\n var height = this.el.outerHeight();\r\n var windowEl = $(window);\r\n var viewportEl = util_1.getScrollParent(this.el);\r\n var viewportTop;\r\n var viewportLeft;\r\n var viewportOffset;\r\n var top; // the \"position\" (not \"offset\") values for the popover\r\n var left; //\r\n // compute top and left\r\n top = options.top || 0;\r\n if (options.left !== undefined) {\r\n left = options.left;\r\n }\r\n else if (options.right !== undefined) {\r\n left = options.right - width; // derive the left value from the right value\r\n }\r\n else {\r\n left = 0;\r\n }\r\n if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\r\n viewportEl = windowEl;\r\n viewportTop = 0; // the window is always at the top left\r\n viewportLeft = 0; // (and .offset() won't work if called here)\r\n }\r\n else {\r\n viewportOffset = viewportEl.offset();\r\n viewportTop = viewportOffset.top;\r\n viewportLeft = viewportOffset.left;\r\n }\r\n // if the window is scrolled, it causes the visible area to be further down\r\n viewportTop += windowEl.scrollTop();\r\n viewportLeft += windowEl.scrollLeft();\r\n // constrain to the view port. if constrained by two edges, give precedence to top/left\r\n if (options.viewportConstrain !== false) {\r\n top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\r\n top = Math.max(top, viewportTop + this.margin);\r\n left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\r\n left = Math.max(left, viewportLeft + this.margin);\r\n }\r\n this.el.css({\r\n top: top - origin.top,\r\n left: left - origin.left\r\n });\r\n };\r\n // Triggers a callback. Calls a function in the option hash of the same name.\r\n // Arguments beyond the first `name` are forwarded on.\r\n // TODO: better code reuse for this. Repeat code\r\n Popover.prototype.trigger = function (name) {\r\n if (this.options[name]) {\r\n this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n };\r\n return Popover;\r\n}());\r\nexports.default = Popover;\r\nListenerMixin_1.default.mixInto(Popover);\r\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar TaskQueue = /** @class */ (function () {\r\n function TaskQueue() {\r\n this.q = [];\r\n this.isPaused = false;\r\n this.isRunning = false;\r\n }\r\n TaskQueue.prototype.queue = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this.q.push.apply(this.q, args); // append\r\n this.tryStart();\r\n };\r\n TaskQueue.prototype.pause = function () {\r\n this.isPaused = true;\r\n };\r\n TaskQueue.prototype.resume = function () {\r\n this.isPaused = false;\r\n this.tryStart();\r\n };\r\n TaskQueue.prototype.getIsIdle = function () {\r\n return !this.isRunning && !this.isPaused;\r\n };\r\n TaskQueue.prototype.tryStart = function () {\r\n if (!this.isRunning && this.canRunNext()) {\r\n this.isRunning = true;\r\n this.trigger('start');\r\n this.runRemaining();\r\n }\r\n };\r\n TaskQueue.prototype.canRunNext = function () {\r\n return !this.isPaused && this.q.length;\r\n };\r\n TaskQueue.prototype.runRemaining = function () {\r\n var _this = this;\r\n var task;\r\n var res;\r\n do {\r\n task = this.q.shift(); // always freshly reference q. might have been reassigned.\r\n res = this.runTask(task);\r\n if (res && res.then) {\r\n res.then(function () {\r\n if (_this.canRunNext()) {\r\n _this.runRemaining();\r\n }\r\n });\r\n return; // prevent marking as stopped\r\n }\r\n } while (this.canRunNext());\r\n this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\r\n this.isRunning = false;\r\n // if 'stop' handler added more tasks.... TODO: write test for this\r\n this.tryStart();\r\n };\r\n TaskQueue.prototype.runTask = function (task) {\r\n return task(); // task *is* the function, but subclasses can change the format of a task\r\n };\r\n return TaskQueue;\r\n}());\r\nexports.default = TaskQueue;\r\nEmitterMixin_1.default.mixInto(TaskQueue);\r\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nvar RenderQueue = /** @class */ (function (_super) {\r\n tslib_1.__extends(RenderQueue, _super);\r\n function RenderQueue(waitsByNamespace) {\r\n var _this = _super.call(this) || this;\r\n _this.waitsByNamespace = waitsByNamespace || {};\r\n return _this;\r\n }\r\n RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\r\n var task = {\r\n func: taskFunc,\r\n namespace: namespace,\r\n type: type\r\n };\r\n var waitMs;\r\n if (namespace) {\r\n waitMs = this.waitsByNamespace[namespace];\r\n }\r\n if (this.waitNamespace) {\r\n if (namespace === this.waitNamespace && waitMs != null) {\r\n this.delayWait(waitMs);\r\n }\r\n else {\r\n this.clearWait();\r\n this.tryStart();\r\n }\r\n }\r\n if (this.compoundTask(task)) { // appended to queue?\r\n if (!this.waitNamespace && waitMs != null) {\r\n this.startWait(namespace, waitMs);\r\n }\r\n else {\r\n this.tryStart();\r\n }\r\n }\r\n };\r\n RenderQueue.prototype.startWait = function (namespace, waitMs) {\r\n this.waitNamespace = namespace;\r\n this.spawnWait(waitMs);\r\n };\r\n RenderQueue.prototype.delayWait = function (waitMs) {\r\n clearTimeout(this.waitId);\r\n this.spawnWait(waitMs);\r\n };\r\n RenderQueue.prototype.spawnWait = function (waitMs) {\r\n var _this = this;\r\n this.waitId = setTimeout(function () {\r\n _this.waitNamespace = null;\r\n _this.tryStart();\r\n }, waitMs);\r\n };\r\n RenderQueue.prototype.clearWait = function () {\r\n if (this.waitNamespace) {\r\n clearTimeout(this.waitId);\r\n this.waitId = null;\r\n this.waitNamespace = null;\r\n }\r\n };\r\n RenderQueue.prototype.canRunNext = function () {\r\n if (!_super.prototype.canRunNext.call(this)) {\r\n return false;\r\n }\r\n // waiting for a certain namespace to stop receiving tasks?\r\n if (this.waitNamespace) {\r\n var q = this.q;\r\n // if there was a different namespace task in the meantime,\r\n // that forces all previously-waiting tasks to suddenly execute.\r\n // TODO: find a way to do this in constant time.\r\n for (var i = 0; i < q.length; i++) {\r\n if (q[i].namespace !== this.waitNamespace) {\r\n return true; // allow execution\r\n }\r\n }\r\n return false;\r\n }\r\n return true;\r\n };\r\n RenderQueue.prototype.runTask = function (task) {\r\n task.func();\r\n };\r\n RenderQueue.prototype.compoundTask = function (newTask) {\r\n var q = this.q;\r\n var shouldAppend = true;\r\n var i;\r\n var task;\r\n if (newTask.namespace && newTask.type === 'destroy') {\r\n // remove all init/add/remove ops with same namespace, regardless of order\r\n for (i = q.length - 1; i >= 0; i--) {\r\n task = q[i];\r\n if (task.namespace === newTask.namespace) {\r\n switch (task.type) {\r\n case 'init':\r\n shouldAppend = false;\r\n // the latest destroy is cancelled out by not doing the init\r\n /* falls through */\r\n case 'add':\r\n /* falls through */\r\n case 'remove':\r\n q.splice(i, 1); // remove task\r\n }\r\n }\r\n }\r\n }\r\n if (shouldAppend) {\r\n q.push(newTask);\r\n }\r\n return shouldAppend;\r\n };\r\n return RenderQueue;\r\n}(TaskQueue_1.default));\r\nexports.default = RenderQueue;\r\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Model_1 = __webpack_require__(51);\r\nvar Component = /** @class */ (function (_super) {\r\n tslib_1.__extends(Component, _super);\r\n function Component() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Component.prototype.setElement = function (el) {\r\n this.el = el;\r\n this.bindGlobalHandlers();\r\n this.renderSkeleton();\r\n this.set('isInDom', true);\r\n };\r\n Component.prototype.removeElement = function () {\r\n this.unset('isInDom');\r\n this.unrenderSkeleton();\r\n this.unbindGlobalHandlers();\r\n this.el.remove();\r\n // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\r\n // We don't null-out the View's other jQuery element references upon destroy,\r\n // so we shouldn't kill this.el either.\r\n };\r\n Component.prototype.bindGlobalHandlers = function () {\r\n // subclasses can override\r\n };\r\n Component.prototype.unbindGlobalHandlers = function () {\r\n // subclasses can override\r\n };\r\n /*\r\n NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n */\r\n // Renders the basic structure of the view before any content is rendered\r\n Component.prototype.renderSkeleton = function () {\r\n // subclasses should implement\r\n };\r\n // Unrenders the basic structure of the view\r\n Component.prototype.unrenderSkeleton = function () {\r\n // subclasses should implement\r\n };\r\n return Component;\r\n}(Model_1.default));\r\nexports.default = Component;\r\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar date_formatting_1 = __webpack_require__(49);\r\nvar Component_1 = __webpack_require__(230);\r\nvar util_2 = __webpack_require__(19);\r\nvar DateComponent = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateComponent, _super);\r\n function DateComponent(_view, _options) {\r\n var _this = _super.call(this) || this;\r\n _this.isRTL = false; // frequently accessed options\r\n _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\r\n _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\r\n _this.isDatesRendered = false;\r\n // hack to set options prior to the this.opt calls\r\n if (_view) {\r\n _this['view'] = _view;\r\n }\r\n if (_options) {\r\n _this['options'] = _options;\r\n }\r\n _this.uid = String(DateComponent.guid++);\r\n _this.childrenByUid = {};\r\n _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\r\n _this.isRTL = _this.opt('isRTL');\r\n if (_this.fillRendererClass) {\r\n _this.fillRenderer = new _this.fillRendererClass(_this);\r\n }\r\n if (_this.eventRendererClass) { // fillRenderer is optional -----v\r\n _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\r\n }\r\n if (_this.helperRendererClass && _this.eventRenderer) {\r\n _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\r\n }\r\n if (_this.businessHourRendererClass && _this.fillRenderer) {\r\n _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\r\n }\r\n return _this;\r\n }\r\n DateComponent.prototype.addChild = function (child) {\r\n if (!this.childrenByUid[child.uid]) {\r\n this.childrenByUid[child.uid] = child;\r\n return true;\r\n }\r\n return false;\r\n };\r\n DateComponent.prototype.removeChild = function (child) {\r\n if (this.childrenByUid[child.uid]) {\r\n delete this.childrenByUid[child.uid];\r\n return true;\r\n }\r\n return false;\r\n };\r\n // TODO: only do if isInDom?\r\n // TODO: make part of Component, along with children/batch-render system?\r\n DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n this.callChildren('updateSize', arguments);\r\n };\r\n // Options\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.opt = function (name) {\r\n return this._getView().opt(name); // default implementation\r\n };\r\n DateComponent.prototype.publiclyTrigger = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var calendar = this._getCalendar();\r\n return calendar.publiclyTrigger.apply(calendar, args);\r\n };\r\n DateComponent.prototype.hasPublicHandlers = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var calendar = this._getCalendar();\r\n return calendar.hasPublicHandlers.apply(calendar, args);\r\n };\r\n // Date\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.executeDateRender = function (dateProfile) {\r\n this.dateProfile = dateProfile; // for rendering\r\n this.renderDates(dateProfile);\r\n this.isDatesRendered = true;\r\n this.callChildren('executeDateRender', arguments);\r\n };\r\n DateComponent.prototype.executeDateUnrender = function () {\r\n this.callChildren('executeDateUnrender', arguments);\r\n this.dateProfile = null;\r\n this.unrenderDates();\r\n this.isDatesRendered = false;\r\n };\r\n // date-cell content only\r\n DateComponent.prototype.renderDates = function (dateProfile) {\r\n // subclasses should implement\r\n };\r\n // date-cell content only\r\n DateComponent.prototype.unrenderDates = function () {\r\n // subclasses should override\r\n };\r\n // Now-Indicator\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\r\n // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\r\n DateComponent.prototype.getNowIndicatorUnit = function () {\r\n // subclasses should implement\r\n };\r\n // Renders a current time indicator at the given datetime\r\n DateComponent.prototype.renderNowIndicator = function (date) {\r\n this.callChildren('renderNowIndicator', arguments);\r\n };\r\n // Undoes the rendering actions from renderNowIndicator\r\n DateComponent.prototype.unrenderNowIndicator = function () {\r\n this.callChildren('unrenderNowIndicator', arguments);\r\n };\r\n // Business Hours\r\n // ---------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n if (this.businessHourRenderer) {\r\n this.businessHourRenderer.render(businessHourGenerator);\r\n }\r\n this.callChildren('renderBusinessHours', arguments);\r\n };\r\n // Unrenders previously-rendered business-hours\r\n DateComponent.prototype.unrenderBusinessHours = function () {\r\n this.callChildren('unrenderBusinessHours', arguments);\r\n if (this.businessHourRenderer) {\r\n this.businessHourRenderer.unrender();\r\n }\r\n };\r\n // Event Displaying\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.executeEventRender = function (eventsPayload) {\r\n if (this.eventRenderer) {\r\n this.eventRenderer.rangeUpdated(); // poorly named now\r\n this.eventRenderer.render(eventsPayload);\r\n }\r\n else if (this['renderEvents']) { // legacy\r\n this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\r\n }\r\n this.callChildren('executeEventRender', arguments);\r\n };\r\n DateComponent.prototype.executeEventUnrender = function () {\r\n this.callChildren('executeEventUnrender', arguments);\r\n if (this.eventRenderer) {\r\n this.eventRenderer.unrender();\r\n }\r\n else if (this['destroyEvents']) { // legacy\r\n this['destroyEvents']();\r\n }\r\n };\r\n DateComponent.prototype.getBusinessHourSegs = function () {\r\n var segs = this.getOwnBusinessHourSegs();\r\n this.iterChildren(function (child) {\r\n segs.push.apply(segs, child.getBusinessHourSegs());\r\n });\r\n return segs;\r\n };\r\n DateComponent.prototype.getOwnBusinessHourSegs = function () {\r\n if (this.businessHourRenderer) {\r\n return this.businessHourRenderer.getSegs();\r\n }\r\n return [];\r\n };\r\n DateComponent.prototype.getEventSegs = function () {\r\n var segs = this.getOwnEventSegs();\r\n this.iterChildren(function (child) {\r\n segs.push.apply(segs, child.getEventSegs());\r\n });\r\n return segs;\r\n };\r\n DateComponent.prototype.getOwnEventSegs = function () {\r\n if (this.eventRenderer) {\r\n return this.eventRenderer.getSegs();\r\n }\r\n return [];\r\n };\r\n // Event Rendering Triggering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.triggerAfterEventsRendered = function () {\r\n this.triggerAfterEventSegsRendered(this.getEventSegs());\r\n this.publiclyTrigger('eventAfterAllRender', {\r\n context: this,\r\n args: [this]\r\n });\r\n };\r\n DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\r\n var _this = this;\r\n // an optimization, because getEventLegacy is expensive\r\n if (this.hasPublicHandlers('eventAfterRender')) {\r\n segs.forEach(function (seg) {\r\n var legacy;\r\n if (seg.el) { // necessary?\r\n legacy = seg.footprint.getEventLegacy();\r\n _this.publiclyTrigger('eventAfterRender', {\r\n context: legacy,\r\n args: [legacy, seg.el, _this]\r\n });\r\n }\r\n });\r\n }\r\n };\r\n DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\r\n this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\r\n };\r\n DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\r\n var _this = this;\r\n if (this.hasPublicHandlers('eventDestroy')) {\r\n segs.forEach(function (seg) {\r\n var legacy;\r\n if (seg.el) { // necessary?\r\n legacy = seg.footprint.getEventLegacy();\r\n _this.publiclyTrigger('eventDestroy', {\r\n context: legacy,\r\n args: [legacy, seg.el, _this]\r\n });\r\n }\r\n });\r\n }\r\n };\r\n // Event Rendering Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Hides all rendered event segments linked to the given event\r\n // RECURSIVE with subcomponents\r\n DateComponent.prototype.showEventsWithId = function (eventDefId) {\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.footprint.eventDef.id === eventDefId &&\r\n seg.el // necessary?\r\n ) {\r\n seg.el.css('visibility', '');\r\n }\r\n });\r\n this.callChildren('showEventsWithId', arguments);\r\n };\r\n // Shows all rendered event segments linked to the given event\r\n // RECURSIVE with subcomponents\r\n DateComponent.prototype.hideEventsWithId = function (eventDefId) {\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.footprint.eventDef.id === eventDefId &&\r\n seg.el // necessary?\r\n ) {\r\n seg.el.css('visibility', 'hidden');\r\n }\r\n });\r\n this.callChildren('hideEventsWithId', arguments);\r\n };\r\n // Drag-n-Drop Rendering (for both events and external elements)\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of a event or external-element drag over the given drop zone.\r\n // If an external-element, seg will be `null`.\r\n // Must return elements used for any mock events.\r\n DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var renderedHelper = false;\r\n this.iterChildren(function (child) {\r\n if (child.renderDrag(eventFootprints, seg, isTouch)) {\r\n renderedHelper = true;\r\n }\r\n });\r\n return renderedHelper;\r\n };\r\n // Unrenders a visual indication of an event or external-element being dragged.\r\n DateComponent.prototype.unrenderDrag = function () {\r\n this.callChildren('unrenderDrag', arguments);\r\n };\r\n // Event Resizing\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of an event being resized.\r\n DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n this.callChildren('renderEventResize', arguments);\r\n };\r\n // Unrenders a visual indication of an event being resized.\r\n DateComponent.prototype.unrenderEventResize = function () {\r\n this.callChildren('unrenderEventResize', arguments);\r\n };\r\n // Selection\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of the selection\r\n // TODO: rename to `renderSelection` after legacy is gone\r\n DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n this.renderHighlight(componentFootprint);\r\n this.callChildren('renderSelectionFootprint', arguments);\r\n };\r\n // Unrenders a visual indication of selection\r\n DateComponent.prototype.unrenderSelection = function () {\r\n this.unrenderHighlight();\r\n this.callChildren('unrenderSelection', arguments);\r\n };\r\n // Highlight\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\r\n DateComponent.prototype.renderHighlight = function (componentFootprint) {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.renderFootprint('highlight', componentFootprint, {\r\n getClasses: function () {\r\n return ['fc-highlight'];\r\n }\r\n });\r\n }\r\n this.callChildren('renderHighlight', arguments);\r\n };\r\n // Unrenders the emphasis on a date range\r\n DateComponent.prototype.unrenderHighlight = function () {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.unrender('highlight');\r\n }\r\n this.callChildren('unrenderHighlight', arguments);\r\n };\r\n // Hit Areas\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // just because all DateComponents support this interface\r\n // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\r\n DateComponent.prototype.hitsNeeded = function () {\r\n if (!(this.hitsNeededDepth++)) {\r\n this.prepareHits();\r\n }\r\n this.callChildren('hitsNeeded', arguments);\r\n };\r\n DateComponent.prototype.hitsNotNeeded = function () {\r\n if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\r\n this.releaseHits();\r\n }\r\n this.callChildren('hitsNotNeeded', arguments);\r\n };\r\n DateComponent.prototype.prepareHits = function () {\r\n // subclasses can implement\r\n };\r\n DateComponent.prototype.releaseHits = function () {\r\n // subclasses can implement\r\n };\r\n // Given coordinates from the topleft of the document, return data about the date-related area underneath.\r\n // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\r\n // Must have a `grid` property, a reference to this current grid. TODO: avoid this\r\n // The returned object will be processed by getHitFootprint and getHitEl.\r\n DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\r\n var childrenByUid = this.childrenByUid;\r\n var uid;\r\n var hit;\r\n for (uid in childrenByUid) {\r\n hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\r\n if (hit) {\r\n break;\r\n }\r\n }\r\n return hit;\r\n };\r\n DateComponent.prototype.getSafeHitFootprint = function (hit) {\r\n var footprint = this.getHitFootprint(hit);\r\n if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\r\n return null;\r\n }\r\n return footprint;\r\n };\r\n DateComponent.prototype.getHitFootprint = function (hit) {\r\n // what about being abstract!?\r\n };\r\n // Given position-level information about a date-related area within the grid,\r\n // should return a jQuery element that best represents it. passed to dayClick callback.\r\n DateComponent.prototype.getHitEl = function (hit) {\r\n // what about being abstract!?\r\n };\r\n /* Converting eventRange -> eventFootprint\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n var eventFootprints = [];\r\n var i;\r\n for (i = 0; i < eventRanges.length; i++) {\r\n eventFootprints.push.apply(// append\r\n eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n }\r\n return eventFootprints;\r\n };\r\n DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n return [util_2.eventRangeToEventFootprint(eventRange)];\r\n };\r\n /* Converting componentFootprint/eventFootprint -> segs\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\r\n var segs = [];\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\r\n }\r\n return segs;\r\n };\r\n // Given an event's span (unzoned start/end and other misc data), and the event itself,\r\n // slices into segments and attaches event-derived properties to them.\r\n // eventSpan - { start, end, isStart, isEnd, otherthings... }\r\n DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\r\n var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\r\n var segs;\r\n var i;\r\n var seg;\r\n segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n if (!unzonedRange.isStart) {\r\n seg.isStart = false;\r\n }\r\n if (!unzonedRange.isEnd) {\r\n seg.isEnd = false;\r\n }\r\n seg.footprint = eventFootprint;\r\n // TODO: rename to seg.eventFootprint\r\n }\r\n return segs;\r\n };\r\n DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n return [];\r\n };\r\n // Utils\r\n // ---------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.callChildren = function (methodName, args) {\r\n this.iterChildren(function (child) {\r\n child[methodName].apply(child, args);\r\n });\r\n };\r\n DateComponent.prototype.iterChildren = function (func) {\r\n var childrenByUid = this.childrenByUid;\r\n var uid;\r\n for (uid in childrenByUid) {\r\n func(childrenByUid[uid]);\r\n }\r\n };\r\n DateComponent.prototype._getCalendar = function () {\r\n var t = this;\r\n return t.calendar || t.view.calendar;\r\n };\r\n DateComponent.prototype._getView = function () {\r\n return this.view;\r\n };\r\n DateComponent.prototype._getDateProfile = function () {\r\n return this._getView().get('dateProfile');\r\n };\r\n // Generates HTML for an anchor to another view into the calendar.\r\n // Will either generate an tag or a non-clickable tag, depending on enabled settings.\r\n // `gotoOptions` can either be a moment input, or an object with the form:\r\n // { date, type, forceOff }\r\n // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\r\n // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\r\n DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\r\n var date;\r\n var type;\r\n var forceOff;\r\n var finalOptions;\r\n if ($.isPlainObject(gotoOptions)) {\r\n date = gotoOptions.date;\r\n type = gotoOptions.type;\r\n forceOff = gotoOptions.forceOff;\r\n }\r\n else {\r\n date = gotoOptions; // a single moment input\r\n }\r\n date = moment_ext_1.default(date); // if a string, parse it\r\n finalOptions = {\r\n date: date.format('YYYY-MM-DD'),\r\n type: type || 'day'\r\n };\r\n if (typeof attrs === 'string') {\r\n innerHtml = attrs;\r\n attrs = null;\r\n }\r\n attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\r\n innerHtml = innerHtml || '';\r\n if (!forceOff && this.opt('navLinks')) {\r\n return '' +\r\n innerHtml +\r\n '';\r\n }\r\n else {\r\n return '' +\r\n innerHtml +\r\n '';\r\n }\r\n };\r\n DateComponent.prototype.getAllDayHtml = function () {\r\n return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\r\n };\r\n // Computes HTML classNames for a single-day element\r\n DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\r\n var view = this._getView();\r\n var classes = [];\r\n var today;\r\n if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\r\n classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\r\n }\r\n else {\r\n classes.push('fc-' + util_1.dayIDs[date.day()]);\r\n if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow\r\n classes.push('fc-other-month');\r\n }\r\n today = view.calendar.getNow();\r\n if (date.isSame(today, 'day')) {\r\n classes.push('fc-today');\r\n if (noThemeHighlight !== true) {\r\n classes.push(view.calendar.theme.getClass('today'));\r\n }\r\n }\r\n else if (date < today) {\r\n classes.push('fc-past');\r\n }\r\n else {\r\n classes.push('fc-future');\r\n }\r\n }\r\n return classes;\r\n };\r\n // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\r\n // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\r\n // The timezones of the dates within `range` will be respected.\r\n DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\r\n var end = range.end;\r\n if (isAllDay) {\r\n end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\r\n }\r\n return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\r\n };\r\n // Compute the number of the give units in the \"current\" range.\r\n // Will return a floating-point number. Won't round.\r\n DateComponent.prototype.currentRangeAs = function (unit) {\r\n return this._getDateProfile().currentUnzonedRange.as(unit);\r\n };\r\n // Returns the date range of the full days the given range visually appears to occupy.\r\n // Returns a plain object with start/end, NOT an UnzonedRange!\r\n DateComponent.prototype.computeDayRange = function (unzonedRange) {\r\n var calendar = this._getCalendar();\r\n var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\r\n var end = calendar.msToUtcMoment(unzonedRange.endMs);\r\n var endTimeMS = +end.time(); // # of milliseconds into `endDay`\r\n var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\r\n // If the end time is actually inclusively part of the next day and is equal to or\r\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\r\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\r\n if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\r\n endDay.add(1, 'days');\r\n }\r\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\r\n if (endDay <= startDay) {\r\n endDay = startDay.clone().add(1, 'days');\r\n }\r\n return { start: startDay, end: endDay };\r\n };\r\n // Does the given range visually appear to occupy more than one day?\r\n DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\r\n var dayRange = this.computeDayRange(unzonedRange);\r\n return dayRange.end.diff(dayRange.start, 'days') > 1;\r\n };\r\n DateComponent.guid = 0; // TODO: better system for this?\r\n return DateComponent;\r\n}(Component_1.default));\r\nexports.default = DateComponent;\r\n// legacy\r\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\r\n var eventDefId;\r\n var eventInstances;\r\n var legacyEvents = [];\r\n var i;\r\n for (eventDefId in eventsPayload) {\r\n eventInstances = eventsPayload[eventDefId].eventInstances;\r\n for (i = 0; i < eventInstances.length; i++) {\r\n legacyEvents.push(eventInstances[i].toLegacy());\r\n }\r\n }\r\n return legacyEvents;\r\n}\r\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar Iterator_1 = __webpack_require__(225);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Toolbar_1 = __webpack_require__(257);\r\nvar OptionsManager_1 = __webpack_require__(258);\r\nvar ViewSpecManager_1 = __webpack_require__(259);\r\nvar Constraints_1 = __webpack_require__(217);\r\nvar locale_1 = __webpack_require__(32);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventManager_1 = __webpack_require__(220);\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar Calendar = /** @class */ (function () {\r\n function Calendar(el, overrides) {\r\n this.loadingLevel = 0; // number of simultaneous loading tasks\r\n this.ignoreUpdateViewSize = 0;\r\n this.freezeContentHeightDepth = 0;\r\n // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\r\n // unneeded() is called in destroy.\r\n GlobalEmitter_1.default.needed();\r\n this.el = el;\r\n this.viewsByType = {};\r\n this.optionsManager = new OptionsManager_1.default(this, overrides);\r\n this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);\r\n this.initMomentInternals(); // needs to happen after options hash initialized\r\n this.initCurrentDate();\r\n this.initEventManager();\r\n this.constraints = new Constraints_1.default(this.eventManager, this);\r\n this.constructed();\r\n }\r\n Calendar.prototype.constructed = function () {\r\n // useful for monkeypatching. used?\r\n };\r\n Calendar.prototype.getView = function () {\r\n return this.view;\r\n };\r\n Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\r\n var optHandler = this.opt(name);\r\n var context;\r\n var args;\r\n if ($.isPlainObject(triggerInfo)) {\r\n context = triggerInfo.context;\r\n args = triggerInfo.args;\r\n }\r\n else if ($.isArray(triggerInfo)) {\r\n args = triggerInfo;\r\n }\r\n if (context == null) {\r\n context = this.el[0]; // fallback context\r\n }\r\n if (!args) {\r\n args = [];\r\n }\r\n this.triggerWith(name, context, args); // Emitter's method\r\n if (optHandler) {\r\n return optHandler.apply(context, args);\r\n }\r\n };\r\n Calendar.prototype.hasPublicHandlers = function (name) {\r\n return this.hasHandlers(name) ||\r\n this.opt(name); // handler specified in options\r\n };\r\n // Options Public API\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // public getter/setter\r\n Calendar.prototype.option = function (name, value) {\r\n var newOptionHash;\r\n if (typeof name === 'string') {\r\n if (value === undefined) { // getter\r\n return this.optionsManager.get(name);\r\n }\r\n else { // setter for individual option\r\n newOptionHash = {};\r\n newOptionHash[name] = value;\r\n this.optionsManager.add(newOptionHash);\r\n }\r\n }\r\n else if (typeof name === 'object') { // compound setter with object input\r\n this.optionsManager.add(name);\r\n }\r\n };\r\n // private getter\r\n Calendar.prototype.opt = function (name) {\r\n return this.optionsManager.get(name);\r\n };\r\n // View\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Given a view name for a custom view or a standard view, creates a ready-to-go View object\r\n Calendar.prototype.instantiateView = function (viewType) {\r\n var spec = this.viewSpecManager.getViewSpec(viewType);\r\n if (!spec) {\r\n throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\r\n }\r\n return new spec['class'](this, spec);\r\n };\r\n // Returns a boolean about whether the view is okay to instantiate at some point\r\n Calendar.prototype.isValidViewType = function (viewType) {\r\n return Boolean(this.viewSpecManager.getViewSpec(viewType));\r\n };\r\n Calendar.prototype.changeView = function (viewName, dateOrRange) {\r\n if (dateOrRange) {\r\n if (dateOrRange.start && dateOrRange.end) { // a range\r\n this.optionsManager.recordOverrides({\r\n visibleRange: dateOrRange\r\n });\r\n }\r\n else { // a date\r\n this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\r\n }\r\n }\r\n this.renderView(viewName);\r\n };\r\n // Forces navigation to a view for the given date.\r\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\r\n Calendar.prototype.zoomTo = function (newDate, viewType) {\r\n var spec;\r\n viewType = viewType || 'day'; // day is default zoom\r\n spec = this.viewSpecManager.getViewSpec(viewType) ||\r\n this.viewSpecManager.getUnitViewSpec(viewType);\r\n this.currentDate = newDate.clone();\r\n this.renderView(spec ? spec.type : null);\r\n };\r\n // Current Date\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initCurrentDate = function () {\r\n var defaultDateInput = this.opt('defaultDate');\r\n // compute the initial ambig-timezone date\r\n if (defaultDateInput != null) {\r\n this.currentDate = this.moment(defaultDateInput).stripZone();\r\n }\r\n else {\r\n this.currentDate = this.getNow(); // getNow already returns unzoned\r\n }\r\n };\r\n Calendar.prototype.prev = function () {\r\n var view = this.view;\r\n var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n if (prevInfo.isValid) {\r\n this.currentDate = prevInfo.date;\r\n this.renderView();\r\n }\r\n };\r\n Calendar.prototype.next = function () {\r\n var view = this.view;\r\n var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n if (nextInfo.isValid) {\r\n this.currentDate = nextInfo.date;\r\n this.renderView();\r\n }\r\n };\r\n Calendar.prototype.prevYear = function () {\r\n this.currentDate.add(-1, 'years');\r\n this.renderView();\r\n };\r\n Calendar.prototype.nextYear = function () {\r\n this.currentDate.add(1, 'years');\r\n this.renderView();\r\n };\r\n Calendar.prototype.today = function () {\r\n this.currentDate = this.getNow(); // should deny like prev/next?\r\n this.renderView();\r\n };\r\n Calendar.prototype.gotoDate = function (zonedDateInput) {\r\n this.currentDate = this.moment(zonedDateInput).stripZone();\r\n this.renderView();\r\n };\r\n Calendar.prototype.incrementDate = function (delta) {\r\n this.currentDate.add(moment.duration(delta));\r\n this.renderView();\r\n };\r\n // for external API\r\n Calendar.prototype.getDate = function () {\r\n return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\r\n };\r\n // Loading Triggering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Should be called when any type of async data fetching begins\r\n Calendar.prototype.pushLoading = function () {\r\n if (!(this.loadingLevel++)) {\r\n this.publiclyTrigger('loading', [true, this.view]);\r\n }\r\n };\r\n // Should be called when any type of async data fetching completes\r\n Calendar.prototype.popLoading = function () {\r\n if (!(--this.loadingLevel)) {\r\n this.publiclyTrigger('loading', [false, this.view]);\r\n }\r\n };\r\n // High-level Rendering\r\n // -----------------------------------------------------------------------------------\r\n Calendar.prototype.render = function () {\r\n if (!this.contentEl) {\r\n this.initialRender();\r\n }\r\n else if (this.elementVisible()) {\r\n // mainly for the public API\r\n this.calcSize();\r\n this.updateViewSize();\r\n }\r\n };\r\n Calendar.prototype.initialRender = function () {\r\n var _this = this;\r\n var el = this.el;\r\n el.addClass('fc');\r\n // event delegation for nav links\r\n el.on('click.fc', 'a[data-goto]', function (ev) {\r\n var anchorEl = $(ev.currentTarget);\r\n var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\r\n var date = _this.moment(gotoOptions.date);\r\n var viewType = gotoOptions.type;\r\n // property like \"navLinkDayClick\". might be a string or a function\r\n var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\r\n if (typeof customAction === 'function') {\r\n customAction(date, ev);\r\n }\r\n else {\r\n if (typeof customAction === 'string') {\r\n viewType = customAction;\r\n }\r\n _this.zoomTo(date, viewType);\r\n }\r\n });\r\n // called immediately, and upon option change\r\n this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\r\n var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\r\n var theme = new themeClass(_this.optionsManager);\r\n var widgetClass = theme.getClass('widget');\r\n _this.theme = theme;\r\n if (widgetClass) {\r\n el.addClass(widgetClass);\r\n }\r\n }, function () {\r\n var widgetClass = _this.theme.getClass('widget');\r\n _this.theme = null;\r\n if (widgetClass) {\r\n el.removeClass(widgetClass);\r\n }\r\n });\r\n this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\r\n _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);\r\n if (_this.view) {\r\n _this.view.set('businessHourGenerator', _this.businessHourGenerator);\r\n }\r\n }, function () {\r\n _this.businessHourGenerator = null;\r\n });\r\n // called immediately, and upon option change.\r\n // HACK: locale often affects isRTL, so we explicitly listen to that too.\r\n this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\r\n el.toggleClass('fc-ltr', !opts.isRTL);\r\n el.toggleClass('fc-rtl', opts.isRTL);\r\n });\r\n this.contentEl = $(\"
\").prependTo(el);\r\n this.initToolbars();\r\n this.renderHeader();\r\n this.renderFooter();\r\n this.renderView(this.opt('defaultView'));\r\n if (this.opt('handleWindowResize')) {\r\n $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls\r\n this.windowResize.bind(this), this.opt('windowResizeDelay')));\r\n }\r\n };\r\n Calendar.prototype.destroy = function () {\r\n if (this.view) {\r\n this.clearView();\r\n }\r\n this.toolbarsManager.proxyCall('removeElement');\r\n this.contentEl.remove();\r\n this.el.removeClass('fc fc-ltr fc-rtl');\r\n // removes theme-related root className\r\n this.optionsManager.unwatch('settingTheme');\r\n this.optionsManager.unwatch('settingBusinessHourGenerator');\r\n this.el.off('.fc'); // unbind nav link handlers\r\n if (this.windowResizeProxy) {\r\n $(window).unbind('resize', this.windowResizeProxy);\r\n this.windowResizeProxy = null;\r\n }\r\n GlobalEmitter_1.default.unneeded();\r\n };\r\n Calendar.prototype.elementVisible = function () {\r\n return this.el.is(':visible');\r\n };\r\n // Render Queue\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.bindViewHandlers = function (view) {\r\n var _this = this;\r\n view.watch('titleForCalendar', ['title'], function (deps) {\r\n if (view === _this.view) { // hack\r\n _this.setToolbarsTitle(deps.title);\r\n }\r\n });\r\n view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\r\n if (view === _this.view) { // hack\r\n _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\r\n _this.updateToolbarButtons(deps.dateProfile);\r\n }\r\n });\r\n };\r\n Calendar.prototype.unbindViewHandlers = function (view) {\r\n view.unwatch('titleForCalendar');\r\n view.unwatch('dateProfileForCalendar');\r\n };\r\n // View Rendering\r\n // -----------------------------------------------------------------------------------\r\n // Renders a view because of a date change, view-type change, or for the first time.\r\n // If not given a viewType, keep the current view but render different dates.\r\n // Accepts an optional scroll state to restore to.\r\n Calendar.prototype.renderView = function (viewType) {\r\n var oldView = this.view;\r\n var newView;\r\n this.freezeContentHeight();\r\n if (oldView && viewType && oldView.type !== viewType) {\r\n this.clearView();\r\n }\r\n // if viewType changed, or the view was never created, create a fresh view\r\n if (!this.view && viewType) {\r\n newView = this.view =\r\n this.viewsByType[viewType] ||\r\n (this.viewsByType[viewType] = this.instantiateView(viewType));\r\n this.bindViewHandlers(newView);\r\n newView.startBatchRender(); // so that setElement+setDate rendering are joined\r\n newView.setElement($(\"
\").appendTo(this.contentEl));\r\n this.toolbarsManager.proxyCall('activateButton', viewType);\r\n }\r\n if (this.view) {\r\n // prevent unnecessary change firing\r\n if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\r\n this.view.set('businessHourGenerator', this.businessHourGenerator);\r\n }\r\n this.view.setDate(this.currentDate);\r\n if (newView) {\r\n newView.stopBatchRender();\r\n }\r\n }\r\n this.thawContentHeight();\r\n };\r\n // Unrenders the current view and reflects this change in the Header.\r\n // Unregsiters the `view`, but does not remove from viewByType hash.\r\n Calendar.prototype.clearView = function () {\r\n var currentView = this.view;\r\n this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\r\n this.unbindViewHandlers(currentView);\r\n currentView.removeElement();\r\n currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\r\n this.view = null;\r\n };\r\n // Destroys the view, including the view object. Then, re-instantiates it and renders it.\r\n // Maintains the same scroll state.\r\n // TODO: maintain any other user-manipulated state.\r\n Calendar.prototype.reinitView = function () {\r\n var oldView = this.view;\r\n var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\r\n this.freezeContentHeight();\r\n this.clearView();\r\n this.calcSize();\r\n this.renderView(oldView.type); // needs the type to freshly render\r\n this.view.applyScroll(scroll);\r\n this.thawContentHeight();\r\n };\r\n // Resizing\r\n // -----------------------------------------------------------------------------------\r\n Calendar.prototype.getSuggestedViewHeight = function () {\r\n if (this.suggestedViewHeight == null) {\r\n this.calcSize();\r\n }\r\n return this.suggestedViewHeight;\r\n };\r\n Calendar.prototype.isHeightAuto = function () {\r\n return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\r\n };\r\n Calendar.prototype.updateViewSize = function (isResize) {\r\n if (isResize === void 0) { isResize = false; }\r\n var view = this.view;\r\n var scroll;\r\n if (!this.ignoreUpdateViewSize && view) {\r\n if (isResize) {\r\n this.calcSize();\r\n scroll = view.queryScroll();\r\n }\r\n this.ignoreUpdateViewSize++;\r\n view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\r\n this.ignoreUpdateViewSize--;\r\n if (isResize) {\r\n view.applyScroll(scroll);\r\n }\r\n return true; // signal success\r\n }\r\n };\r\n Calendar.prototype.calcSize = function () {\r\n if (this.elementVisible()) {\r\n this._calcSize();\r\n }\r\n };\r\n Calendar.prototype._calcSize = function () {\r\n var contentHeightInput = this.opt('contentHeight');\r\n var heightInput = this.opt('height');\r\n if (typeof contentHeightInput === 'number') { // exists and not 'auto'\r\n this.suggestedViewHeight = contentHeightInput;\r\n }\r\n else if (typeof contentHeightInput === 'function') { // exists and is a function\r\n this.suggestedViewHeight = contentHeightInput();\r\n }\r\n else if (typeof heightInput === 'number') { // exists and not 'auto'\r\n this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\r\n }\r\n else if (typeof heightInput === 'function') { // exists and is a function\r\n this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\r\n }\r\n else if (heightInput === 'parent') { // set to height of parent element\r\n this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\r\n }\r\n else {\r\n this.suggestedViewHeight = Math.round(this.contentEl.width() /\r\n Math.max(this.opt('aspectRatio'), .5));\r\n }\r\n };\r\n Calendar.prototype.windowResize = function (ev) {\r\n if (\r\n // the purpose: so we don't process jqui \"resize\" events that have bubbled up\r\n // cast to any because .target, which is Element, can't be compared to window for some reason.\r\n ev.target === window &&\r\n this.view &&\r\n this.view.isDatesRendered) {\r\n if (this.updateViewSize(true)) { // isResize=true, returns true on success\r\n this.publiclyTrigger('windowResize', [this.view]);\r\n }\r\n }\r\n };\r\n /* Height \"Freezing\"\r\n -----------------------------------------------------------------------------*/\r\n Calendar.prototype.freezeContentHeight = function () {\r\n if (!(this.freezeContentHeightDepth++)) {\r\n this.forceFreezeContentHeight();\r\n }\r\n };\r\n Calendar.prototype.forceFreezeContentHeight = function () {\r\n this.contentEl.css({\r\n width: '100%',\r\n height: this.contentEl.height(),\r\n overflow: 'hidden'\r\n });\r\n };\r\n Calendar.prototype.thawContentHeight = function () {\r\n this.freezeContentHeightDepth--;\r\n // always bring back to natural height\r\n this.contentEl.css({\r\n width: '',\r\n height: '',\r\n overflow: ''\r\n });\r\n // but if there are future thaws, re-freeze\r\n if (this.freezeContentHeightDepth) {\r\n this.forceFreezeContentHeight();\r\n }\r\n };\r\n // Toolbar\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initToolbars = function () {\r\n this.header = new Toolbar_1.default(this, this.computeHeaderOptions());\r\n this.footer = new Toolbar_1.default(this, this.computeFooterOptions());\r\n this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);\r\n };\r\n Calendar.prototype.computeHeaderOptions = function () {\r\n return {\r\n extraClasses: 'fc-header-toolbar',\r\n layout: this.opt('header')\r\n };\r\n };\r\n Calendar.prototype.computeFooterOptions = function () {\r\n return {\r\n extraClasses: 'fc-footer-toolbar',\r\n layout: this.opt('footer')\r\n };\r\n };\r\n // can be called repeatedly and Header will rerender\r\n Calendar.prototype.renderHeader = function () {\r\n var header = this.header;\r\n header.setToolbarOptions(this.computeHeaderOptions());\r\n header.render();\r\n if (header.el) {\r\n this.el.prepend(header.el);\r\n }\r\n };\r\n // can be called repeatedly and Footer will rerender\r\n Calendar.prototype.renderFooter = function () {\r\n var footer = this.footer;\r\n footer.setToolbarOptions(this.computeFooterOptions());\r\n footer.render();\r\n if (footer.el) {\r\n this.el.append(footer.el);\r\n }\r\n };\r\n Calendar.prototype.setToolbarsTitle = function (title) {\r\n this.toolbarsManager.proxyCall('updateTitle', title);\r\n };\r\n Calendar.prototype.updateToolbarButtons = function (dateProfile) {\r\n var now = this.getNow();\r\n var view = this.view;\r\n var todayInfo = view.dateProfileGenerator.build(now);\r\n var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?\r\n 'enableButton' :\r\n 'disableButton', 'today');\r\n this.toolbarsManager.proxyCall(prevInfo.isValid ?\r\n 'enableButton' :\r\n 'disableButton', 'prev');\r\n this.toolbarsManager.proxyCall(nextInfo.isValid ?\r\n 'enableButton' :\r\n 'disableButton', 'next');\r\n };\r\n Calendar.prototype.queryToolbarsHeight = function () {\r\n return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\r\n var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\r\n return accumulator + toolbarHeight;\r\n }, 0);\r\n };\r\n // Selection\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // this public method receives start/end dates in any format, with any timezone\r\n Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\r\n this.view.select(this.buildSelectFootprint.apply(this, arguments));\r\n };\r\n Calendar.prototype.unselect = function () {\r\n if (this.view) {\r\n this.view.unselect();\r\n }\r\n };\r\n // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\r\n Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\r\n var start = this.moment(zonedStartInput).stripZone();\r\n var end;\r\n if (zonedEndInput) {\r\n end = this.moment(zonedEndInput).stripZone();\r\n }\r\n else if (start.hasTime()) {\r\n end = start.clone().add(this.defaultTimedEventDuration);\r\n }\r\n else {\r\n end = start.clone().add(this.defaultAllDayEventDuration);\r\n }\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());\r\n };\r\n // Date Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initMomentInternals = function () {\r\n var _this = this;\r\n this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\r\n this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\r\n // Called immediately, and when any of the options change.\r\n // Happens before any internal objects rebuild or rerender, because this is very core.\r\n this.optionsManager.watch('buildingMomentLocale', [\r\n '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\r\n '?firstDay', '?weekNumberCalculation'\r\n ], function (opts) {\r\n var weekNumberCalculation = opts.weekNumberCalculation;\r\n var firstDay = opts.firstDay;\r\n var _week;\r\n // normalize\r\n if (weekNumberCalculation === 'iso') {\r\n weekNumberCalculation = 'ISO'; // normalize\r\n }\r\n var localeData = Object.create(// make a cheap copy\r\n locale_1.getMomentLocaleData(opts.locale) // will fall back to en\r\n );\r\n if (opts.monthNames) {\r\n localeData._months = opts.monthNames;\r\n }\r\n if (opts.monthNamesShort) {\r\n localeData._monthsShort = opts.monthNamesShort;\r\n }\r\n if (opts.dayNames) {\r\n localeData._weekdays = opts.dayNames;\r\n }\r\n if (opts.dayNamesShort) {\r\n localeData._weekdaysShort = opts.dayNamesShort;\r\n }\r\n if (firstDay == null && weekNumberCalculation === 'ISO') {\r\n firstDay = 1;\r\n }\r\n if (firstDay != null) {\r\n _week = Object.create(localeData._week); // _week: { dow: # }\r\n _week.dow = firstDay;\r\n localeData._week = _week;\r\n }\r\n if ( // whitelist certain kinds of input\r\n weekNumberCalculation === 'ISO' ||\r\n weekNumberCalculation === 'local' ||\r\n typeof weekNumberCalculation === 'function') {\r\n localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\r\n }\r\n _this.localeData = localeData;\r\n // If the internal current date object already exists, move to new locale.\r\n // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\r\n if (_this.currentDate) {\r\n _this.localizeMoment(_this.currentDate); // sets to localeData\r\n }\r\n });\r\n };\r\n // Builds a moment using the settings of the current calendar: timezone and locale.\r\n // Accepts anything the vanilla moment() constructor accepts.\r\n Calendar.prototype.moment = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var mom;\r\n if (this.opt('timezone') === 'local') {\r\n mom = moment_ext_1.default.apply(null, args);\r\n // Force the moment to be local, because momentExt doesn't guarantee it.\r\n if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\r\n mom.local();\r\n }\r\n }\r\n else if (this.opt('timezone') === 'UTC') {\r\n mom = moment_ext_1.default.utc.apply(null, args); // process as UTC\r\n }\r\n else {\r\n mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone\r\n }\r\n this.localizeMoment(mom); // TODO\r\n return mom;\r\n };\r\n Calendar.prototype.msToMoment = function (ms, forceAllDay) {\r\n var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n if (forceAllDay) {\r\n mom.stripTime();\r\n }\r\n else {\r\n mom = this.applyTimezone(mom); // may or may not apply locale\r\n }\r\n this.localizeMoment(mom);\r\n return mom;\r\n };\r\n Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n if (forceAllDay) {\r\n mom.stripTime();\r\n }\r\n this.localizeMoment(mom);\r\n return mom;\r\n };\r\n // Updates the given moment's locale settings to the current calendar locale settings.\r\n Calendar.prototype.localizeMoment = function (mom) {\r\n mom._locale = this.localeData;\r\n };\r\n // Returns a boolean about whether or not the calendar knows how to calculate\r\n // the timezone offset of arbitrary dates in the current timezone.\r\n Calendar.prototype.getIsAmbigTimezone = function () {\r\n return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\r\n };\r\n // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\r\n Calendar.prototype.applyTimezone = function (date) {\r\n if (!date.hasTime()) {\r\n return date.clone();\r\n }\r\n var zonedDate = this.moment(date.toArray());\r\n var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\r\n var adjustedZonedDate;\r\n // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\r\n if (timeAdjust) { // is the time result different than expected?\r\n adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\r\n if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?\r\n zonedDate = adjustedZonedDate;\r\n }\r\n }\r\n return zonedDate;\r\n };\r\n /*\r\n Assumes the footprint is non-open-ended.\r\n */\r\n Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\r\n if (ignoreEnd === void 0) { ignoreEnd = false; }\r\n var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);\r\n var end;\r\n if (!ignoreEnd) {\r\n end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);\r\n }\r\n if (componentFootprint.isAllDay) {\r\n start.stripTime();\r\n if (end) {\r\n end.stripTime();\r\n }\r\n }\r\n else {\r\n start = this.applyTimezone(start);\r\n if (end) {\r\n end = this.applyTimezone(end);\r\n }\r\n }\r\n this.localizeMoment(start);\r\n if (end) {\r\n this.localizeMoment(end);\r\n }\r\n return new EventDateProfile_1.default(start, end, this);\r\n };\r\n // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\r\n // Will return an moment with an ambiguous timezone.\r\n Calendar.prototype.getNow = function () {\r\n var now = this.opt('now');\r\n if (typeof now === 'function') {\r\n now = now();\r\n }\r\n return this.moment(now).stripZone();\r\n };\r\n // Produces a human-readable string for the given duration.\r\n // Side-effect: changes the locale of the given duration.\r\n Calendar.prototype.humanizeDuration = function (duration) {\r\n return duration.locale(this.opt('locale')).humanize();\r\n };\r\n // will return `null` if invalid range\r\n Calendar.prototype.parseUnzonedRange = function (rangeInput) {\r\n var start = null;\r\n var end = null;\r\n if (rangeInput.start) {\r\n start = this.moment(rangeInput.start).stripZone();\r\n }\r\n if (rangeInput.end) {\r\n end = this.moment(rangeInput.end).stripZone();\r\n }\r\n if (!start && !end) {\r\n return null;\r\n }\r\n if (start && end && end.isBefore(start)) {\r\n return null;\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n // Event-Date Utilities\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initEventManager = function () {\r\n var _this = this;\r\n var eventManager = new EventManager_1.default(this);\r\n var rawSources = this.opt('eventSources') || [];\r\n var singleRawSource = this.opt('events');\r\n this.eventManager = eventManager;\r\n if (singleRawSource) {\r\n rawSources.unshift(singleRawSource);\r\n }\r\n eventManager.on('release', function (eventsPayload) {\r\n _this.trigger('eventsReset', eventsPayload);\r\n });\r\n eventManager.freeze();\r\n rawSources.forEach(function (rawSource) {\r\n var source = EventSourceParser_1.default.parse(rawSource, _this);\r\n if (source) {\r\n eventManager.addSource(source);\r\n }\r\n });\r\n eventManager.thaw();\r\n };\r\n Calendar.prototype.requestEvents = function (start, end) {\r\n return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\r\n };\r\n // Get an event's normalized end date. If not present, calculate it from the defaults.\r\n Calendar.prototype.getEventEnd = function (event) {\r\n if (event.end) {\r\n return event.end.clone();\r\n }\r\n else {\r\n return this.getDefaultEventEnd(event.allDay, event.start);\r\n }\r\n };\r\n // Given an event's allDay status and start date, return what its fallback end date should be.\r\n // TODO: rename to computeDefaultEventEnd\r\n Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\r\n var end = zonedStart.clone();\r\n if (allDay) {\r\n end.stripTime().add(this.defaultAllDayEventDuration);\r\n }\r\n else {\r\n end.add(this.defaultTimedEventDuration);\r\n }\r\n if (this.getIsAmbigTimezone()) {\r\n end.stripZone(); // we don't know what the tzo should be\r\n }\r\n return end;\r\n };\r\n // Public Events API\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.rerenderEvents = function () {\r\n this.view.flash('displayingEvents');\r\n };\r\n Calendar.prototype.refetchEvents = function () {\r\n this.eventManager.refetchAllSources();\r\n };\r\n Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\r\n this.eventManager.freeze();\r\n for (var i = 0; i < eventInputs.length; i++) {\r\n this.renderEvent(eventInputs[i], isSticky);\r\n }\r\n this.eventManager.thaw();\r\n };\r\n Calendar.prototype.renderEvent = function (eventInput, isSticky) {\r\n if (isSticky === void 0) { isSticky = false; }\r\n var eventManager = this.eventManager;\r\n var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);\r\n if (eventDef) {\r\n eventManager.addEventDef(eventDef, isSticky);\r\n }\r\n };\r\n // legacyQuery operates on legacy event instance objects\r\n Calendar.prototype.removeEvents = function (legacyQuery) {\r\n var eventManager = this.eventManager;\r\n var legacyInstances = [];\r\n var idMap = {};\r\n var eventDef;\r\n var i;\r\n if (legacyQuery == null) { // shortcut for removing all\r\n eventManager.removeAllEventDefs(); // persist=true\r\n }\r\n else {\r\n eventManager.getEventInstances().forEach(function (eventInstance) {\r\n legacyInstances.push(eventInstance.toLegacy());\r\n });\r\n legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\r\n // compute unique IDs\r\n for (i = 0; i < legacyInstances.length; i++) {\r\n eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\r\n idMap[eventDef.id] = true;\r\n }\r\n eventManager.freeze();\r\n for (i in idMap) { // reuse `i` as an \"id\"\r\n eventManager.removeEventDefsById(i); // persist=true\r\n }\r\n eventManager.thaw();\r\n }\r\n };\r\n // legacyQuery operates on legacy event instance objects\r\n Calendar.prototype.clientEvents = function (legacyQuery) {\r\n var legacyEventInstances = [];\r\n this.eventManager.getEventInstances().forEach(function (eventInstance) {\r\n legacyEventInstances.push(eventInstance.toLegacy());\r\n });\r\n return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\r\n };\r\n Calendar.prototype.updateEvents = function (eventPropsArray) {\r\n this.eventManager.freeze();\r\n for (var i = 0; i < eventPropsArray.length; i++) {\r\n this.updateEvent(eventPropsArray[i]);\r\n }\r\n this.eventManager.thaw();\r\n };\r\n Calendar.prototype.updateEvent = function (eventProps) {\r\n var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\r\n var eventInstance;\r\n var eventDefMutation;\r\n if (eventDef instanceof SingleEventDef_1.default) {\r\n eventInstance = eventDef.buildInstance();\r\n eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props\r\n null // largeUnit -- who uses it?\r\n );\r\n this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\r\n }\r\n };\r\n // Public Event Sources API\r\n // ------------------------------------------------------------------------------------\r\n Calendar.prototype.getEventSources = function () {\r\n return this.eventManager.otherSources.slice(); // clone\r\n };\r\n Calendar.prototype.getEventSourceById = function (id) {\r\n return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));\r\n };\r\n Calendar.prototype.addEventSource = function (sourceInput) {\r\n var source = EventSourceParser_1.default.parse(sourceInput, this);\r\n if (source) {\r\n this.eventManager.addSource(source);\r\n }\r\n };\r\n Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\r\n var eventManager = this.eventManager;\r\n var sources;\r\n var i;\r\n if (sourceMultiQuery == null) {\r\n this.eventManager.removeAllSources();\r\n }\r\n else {\r\n sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n eventManager.freeze();\r\n for (i = 0; i < sources.length; i++) {\r\n eventManager.removeSource(sources[i]);\r\n }\r\n eventManager.thaw();\r\n }\r\n };\r\n Calendar.prototype.removeEventSource = function (sourceQuery) {\r\n var eventManager = this.eventManager;\r\n var sources = eventManager.querySources(sourceQuery);\r\n var i;\r\n eventManager.freeze();\r\n for (i = 0; i < sources.length; i++) {\r\n eventManager.removeSource(sources[i]);\r\n }\r\n eventManager.thaw();\r\n };\r\n Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\r\n var eventManager = this.eventManager;\r\n var sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n var i;\r\n eventManager.freeze();\r\n for (i = 0; i < sources.length; i++) {\r\n eventManager.refetchSource(sources[i]);\r\n }\r\n eventManager.thaw();\r\n };\r\n // not for internal use. use options module directly instead.\r\n Calendar.defaults = options_1.globalDefaults;\r\n Calendar.englishDefaults = options_1.englishDefaults;\r\n Calendar.rtlDefaults = options_1.rtlDefaults;\r\n return Calendar;\r\n}());\r\nexports.default = Calendar;\r\nEmitterMixin_1.default.mixInto(Calendar);\r\nListenerMixin_1.default.mixInto(Calendar);\r\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\r\n if (legacyQuery == null) {\r\n return legacyEventInstances;\r\n }\r\n else if ($.isFunction(legacyQuery)) {\r\n return legacyEventInstances.filter(legacyQuery);\r\n }\r\n else { // an event ID\r\n legacyQuery += ''; // normalize to string\r\n return legacyEventInstances.filter(function (legacyEventInstance) {\r\n // soft comparison because id not be normalized to string\r\n // tslint:disable-next-line\r\n return legacyEventInstance.id == legacyQuery ||\r\n legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\r\n });\r\n }\r\n}\r\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar ExternalDropping = /** @class */ (function (_super) {\r\n tslib_1.__extends(ExternalDropping, _super);\r\n function ExternalDropping() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.isDragging = false; // jqui-dragging an external element? boolean\r\n return _this;\r\n }\r\n /*\r\n component impements:\r\n - eventRangesToEventFootprints\r\n - isEventInstanceGroupAllowed\r\n - isExternalInstanceGroupAllowed\r\n - renderDrag\r\n - unrenderDrag\r\n */\r\n ExternalDropping.prototype.end = function () {\r\n if (this.dragListener) {\r\n this.dragListener.endInteraction();\r\n }\r\n };\r\n ExternalDropping.prototype.bindToDocument = function () {\r\n this.listenTo($(document), {\r\n dragstart: this.handleDragStart,\r\n sortstart: this.handleDragStart // jqui\r\n });\r\n };\r\n ExternalDropping.prototype.unbindFromDocument = function () {\r\n this.stopListeningTo($(document));\r\n };\r\n // Called when a jQuery UI drag is initiated anywhere in the DOM\r\n ExternalDropping.prototype.handleDragStart = function (ev, ui) {\r\n var el;\r\n var accept;\r\n if (this.opt('droppable')) { // only listen if this setting is on\r\n el = $((ui ? ui.item : null) || ev.target);\r\n // Test that the dragged element passes the dropAccept selector or filter function.\r\n // FYI, the default is \"*\" (matches all)\r\n accept = this.opt('dropAccept');\r\n if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\r\n if (!this.isDragging) { // prevent double-listening if fired twice\r\n this.listenToExternalDrag(el, ev, ui);\r\n }\r\n }\r\n }\r\n };\r\n // Called when a jQuery UI drag starts and it needs to be monitored for dropping\r\n ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\r\n var _this = this;\r\n var component = this.component;\r\n var view = this.view;\r\n var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\r\n var singleEventDef; // a null value signals an unsuccessful drag\r\n // listener that tracks mouse movement over date-associated pixel regions\r\n var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n interactionStart: function () {\r\n _this.isDragging = true;\r\n },\r\n hitOver: function (hit) {\r\n var isAllowed = true;\r\n var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\r\n var mutatedEventInstanceGroup;\r\n if (hitFootprint) {\r\n singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\r\n if (singleEventDef) {\r\n mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());\r\n isAllowed = meta.eventProps ? // isEvent?\r\n component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\r\n component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n if (!isAllowed) {\r\n singleEventDef = null;\r\n util_1.disableCursor();\r\n }\r\n if (singleEventDef) {\r\n component.renderDrag(// called without a seg parameter\r\n component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\r\n }\r\n },\r\n hitOut: function () {\r\n singleEventDef = null; // signal unsuccessful\r\n },\r\n hitDone: function () {\r\n util_1.enableCursor();\r\n component.unrenderDrag();\r\n },\r\n interactionEnd: function (ev) {\r\n if (singleEventDef) { // element was dropped on a valid hit\r\n view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\r\n Boolean(meta.stick), // isSticky\r\n el, ev, ui);\r\n }\r\n _this.isDragging = false;\r\n _this.dragListener = null;\r\n }\r\n });\r\n dragListener.startDrag(ev); // start listening immediately\r\n };\r\n // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\r\n // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\r\n // Returning a null value signals an invalid drop hit.\r\n // DOES NOT consider overlap/constraint.\r\n // Assumes both footprints are non-open-ended.\r\n ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n var calendar = this.view.calendar;\r\n var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();\r\n var end;\r\n var eventDef;\r\n if (componentFootprint.isAllDay) {\r\n // if dropped on an all-day span, and element's metadata specified a time, set it\r\n if (meta.startTime) {\r\n start.time(meta.startTime);\r\n }\r\n else {\r\n start.stripTime();\r\n }\r\n }\r\n if (meta.duration) {\r\n end = start.clone().add(meta.duration);\r\n }\r\n start = calendar.applyTimezone(start);\r\n if (end) {\r\n end = calendar.applyTimezone(end);\r\n }\r\n eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {\r\n start: start,\r\n end: end\r\n }), new EventSource_1.default(calendar));\r\n return eventDef;\r\n };\r\n return ExternalDropping;\r\n}(Interaction_1.default));\r\nexports.default = ExternalDropping;\r\nListenerMixin_1.default.mixInto(ExternalDropping);\r\n/* External-Dragging-Element Data\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\r\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\r\nexportHooks.dataAttrPrefix = '';\r\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\r\n// to be used for Event Object creation.\r\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\r\nfunction getDraggedElMeta(el) {\r\n var prefix = exportHooks.dataAttrPrefix;\r\n var eventProps; // properties for creating the event, not related to date/time\r\n var startTime; // a Duration\r\n var duration;\r\n var stick;\r\n if (prefix) {\r\n prefix += '-';\r\n }\r\n eventProps = el.data(prefix + 'event') || null;\r\n if (eventProps) {\r\n if (typeof eventProps === 'object') {\r\n eventProps = $.extend({}, eventProps); // make a copy\r\n }\r\n else { // something like 1 or true. still signal event creation\r\n eventProps = {};\r\n }\r\n // pluck special-cased date/time properties\r\n startTime = eventProps.start;\r\n if (startTime == null) {\r\n startTime = eventProps.time;\r\n } // accept 'time' as well\r\n duration = eventProps.duration;\r\n stick = eventProps.stick;\r\n delete eventProps.start;\r\n delete eventProps.time;\r\n delete eventProps.duration;\r\n delete eventProps.stick;\r\n }\r\n // fallback to standalone attribute values for each of the date/time properties\r\n if (startTime == null) {\r\n startTime = el.data(prefix + 'start');\r\n }\r\n if (startTime == null) {\r\n startTime = el.data(prefix + 'time');\r\n } // accept 'time' as well\r\n if (duration == null) {\r\n duration = el.data(prefix + 'duration');\r\n }\r\n if (stick == null) {\r\n stick = el.data(prefix + 'stick');\r\n }\r\n // massage into correct data types\r\n startTime = startTime != null ? moment.duration(startTime) : null;\r\n duration = duration != null ? moment.duration(duration) : null;\r\n stick = Boolean(stick);\r\n return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\r\n}\r\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventResizing = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventResizing, _super);\r\n /*\r\n component impements:\r\n - bindSegHandlerToEl\r\n - publiclyTrigger\r\n - diffDates\r\n - eventRangesToEventFootprints\r\n - isEventInstanceGroupAllowed\r\n - getSafeHitFootprint\r\n */\r\n function EventResizing(component, eventPointing) {\r\n var _this = _super.call(this, component) || this;\r\n _this.isResizing = false;\r\n _this.eventPointing = eventPointing;\r\n return _this;\r\n }\r\n EventResizing.prototype.end = function () {\r\n if (this.dragListener) {\r\n this.dragListener.endInteraction();\r\n }\r\n };\r\n EventResizing.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\r\n component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n };\r\n EventResizing.prototype.handleMouseDown = function (seg, ev) {\r\n if (this.component.canStartResize(seg, ev)) {\r\n this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n .startInteraction(ev, { distance: 5 });\r\n }\r\n };\r\n EventResizing.prototype.handleTouchStart = function (seg, ev) {\r\n if (this.component.canStartResize(seg, ev)) {\r\n this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n .startInteraction(ev);\r\n }\r\n };\r\n // Creates a listener that tracks the user as they resize an event segment.\r\n // Generic enough to work with any type of Grid.\r\n EventResizing.prototype.buildDragListener = function (seg, isStart) {\r\n var _this = this;\r\n var component = this.component;\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var eventManager = calendar.eventManager;\r\n var el = seg.el;\r\n var eventDef = seg.footprint.eventDef;\r\n var eventInstance = seg.footprint.eventInstance;\r\n var isDragging;\r\n var resizeMutation; // zoned event date properties. falsy if invalid resize\r\n // Tracks mouse movement over the *grid's* coordinate map\r\n var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n scroll: this.opt('dragScroll'),\r\n subjectEl: el,\r\n interactionStart: function () {\r\n isDragging = false;\r\n },\r\n dragStart: function (ev) {\r\n isDragging = true;\r\n // ensure a mouseout on the manipulated event has been reported\r\n _this.eventPointing.handleMouseout(seg, ev);\r\n _this.segResizeStart(seg, ev);\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n var isAllowed = true;\r\n var origHitFootprint = component.getSafeHitFootprint(origHit);\r\n var hitFootprint = component.getSafeHitFootprint(hit);\r\n var mutatedEventInstanceGroup;\r\n if (origHitFootprint && hitFootprint) {\r\n resizeMutation = isStart ?\r\n _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\r\n _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\r\n if (resizeMutation) {\r\n mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\r\n isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n if (!isAllowed) {\r\n resizeMutation = null;\r\n util_1.disableCursor();\r\n }\r\n else if (resizeMutation.isEmpty()) {\r\n // no change. (FYI, event dates might have zones)\r\n resizeMutation = null;\r\n }\r\n if (resizeMutation) {\r\n view.hideEventsWithId(seg.footprint.eventDef.id);\r\n view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\r\n }\r\n },\r\n hitOut: function () {\r\n resizeMutation = null;\r\n },\r\n hitDone: function () {\r\n view.unrenderEventResize(seg);\r\n view.showEventsWithId(seg.footprint.eventDef.id);\r\n util_1.enableCursor();\r\n },\r\n interactionEnd: function (ev) {\r\n if (isDragging) {\r\n _this.segResizeStop(seg, ev);\r\n }\r\n if (resizeMutation) { // valid date to resize to?\r\n // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n view.reportEventResize(eventInstance, resizeMutation, el, ev);\r\n }\r\n _this.dragListener = null;\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Called before event segment resizing starts\r\n EventResizing.prototype.segResizeStart = function (seg, ev) {\r\n this.isResizing = true;\r\n this.component.publiclyTrigger('eventResizeStart', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // Called after event segment resizing stops\r\n EventResizing.prototype.segResizeStop = function (seg, ev) {\r\n this.isResizing = false;\r\n this.component.publiclyTrigger('eventResizeStop', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // Returns new date-information for an event segment being resized from its start\r\n EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\r\n var dateMutation;\r\n var eventDefMutation;\r\n if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\r\n dateMutation = new EventDefDateMutation_1.default();\r\n dateMutation.setStartDelta(startDelta);\r\n eventDefMutation = new EventDefMutation_1.default();\r\n eventDefMutation.setDateMutation(dateMutation);\r\n return eventDefMutation;\r\n }\r\n return false;\r\n };\r\n // Returns new date-information for an event segment being resized from its end\r\n EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\r\n var dateMutation;\r\n var eventDefMutation;\r\n if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\r\n dateMutation = new EventDefDateMutation_1.default();\r\n dateMutation.setEndDelta(endDelta);\r\n eventDefMutation = new EventDefMutation_1.default();\r\n eventDefMutation.setDateMutation(dateMutation);\r\n return eventDefMutation;\r\n }\r\n return false;\r\n };\r\n return EventResizing;\r\n}(Interaction_1.default));\r\nexports.default = EventResizing;\r\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar DragListener_1 = __webpack_require__(59);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventDragging = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventDragging, _super);\r\n /*\r\n component implements:\r\n - bindSegHandlerToEl\r\n - publiclyTrigger\r\n - diffDates\r\n - eventRangesToEventFootprints\r\n - isEventInstanceGroupAllowed\r\n */\r\n function EventDragging(component, eventPointing) {\r\n var _this = _super.call(this, component) || this;\r\n _this.isDragging = false;\r\n _this.eventPointing = eventPointing;\r\n return _this;\r\n }\r\n EventDragging.prototype.end = function () {\r\n if (this.dragListener) {\r\n this.dragListener.endInteraction();\r\n }\r\n };\r\n EventDragging.prototype.getSelectionDelay = function () {\r\n var delay = this.opt('eventLongPressDelay');\r\n if (delay == null) {\r\n delay = this.opt('longPressDelay'); // fallback\r\n }\r\n return delay;\r\n };\r\n EventDragging.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\r\n component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n };\r\n EventDragging.prototype.handleMousedown = function (seg, ev) {\r\n if (!this.component.shouldIgnoreMouse() &&\r\n this.component.canStartDrag(seg, ev)) {\r\n this.buildDragListener(seg).startInteraction(ev, { distance: 5 });\r\n }\r\n };\r\n EventDragging.prototype.handleTouchStart = function (seg, ev) {\r\n var component = this.component;\r\n var settings = {\r\n delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\r\n 0 : this.getSelectionDelay()\r\n };\r\n if (component.canStartDrag(seg, ev)) {\r\n this.buildDragListener(seg).startInteraction(ev, settings);\r\n }\r\n else if (component.canStartSelection(seg, ev)) {\r\n this.buildSelectListener(seg).startInteraction(ev, settings);\r\n }\r\n };\r\n // seg isn't draggable, but let's use a generic DragListener\r\n // simply for the delay, so it can be selected.\r\n // Has side effect of setting/unsetting `dragListener`\r\n EventDragging.prototype.buildSelectListener = function (seg) {\r\n var _this = this;\r\n var view = this.view;\r\n var eventDef = seg.footprint.eventDef;\r\n var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n if (this.dragListener) {\r\n return this.dragListener;\r\n }\r\n var dragListener = this.dragListener = new DragListener_1.default({\r\n dragStart: function (ev) {\r\n if (dragListener.isTouch &&\r\n !view.isEventDefSelected(eventDef) &&\r\n eventInstance) {\r\n // if not previously selected, will fire after a delay. then, select the event\r\n view.selectEventInstance(eventInstance);\r\n }\r\n },\r\n interactionEnd: function (ev) {\r\n _this.dragListener = null;\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Builds a listener that will track user-dragging on an event segment.\r\n // Generic enough to work with any type of Grid.\r\n // Has side effect of setting/unsetting `dragListener`\r\n EventDragging.prototype.buildDragListener = function (seg) {\r\n var _this = this;\r\n var component = this.component;\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var eventManager = calendar.eventManager;\r\n var el = seg.el;\r\n var eventDef = seg.footprint.eventDef;\r\n var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n var isDragging;\r\n var mouseFollower; // A clone of the original element that will move with the mouse\r\n var eventDefMutation;\r\n if (this.dragListener) {\r\n return this.dragListener;\r\n }\r\n // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\r\n // of the view.\r\n var dragListener = this.dragListener = new HitDragListener_1.default(view, {\r\n scroll: this.opt('dragScroll'),\r\n subjectEl: el,\r\n subjectCenter: true,\r\n interactionStart: function (ev) {\r\n seg.component = component; // for renderDrag\r\n isDragging = false;\r\n mouseFollower = new MouseFollower_1.default(seg.el, {\r\n additionalClass: 'fc-dragging',\r\n parentEl: view.el,\r\n opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\r\n revertDuration: _this.opt('dragRevertDuration'),\r\n zIndex: 2 // one above the .fc-view\r\n });\r\n mouseFollower.hide(); // don't show until we know this is a real drag\r\n mouseFollower.start(ev);\r\n },\r\n dragStart: function (ev) {\r\n if (dragListener.isTouch &&\r\n !view.isEventDefSelected(eventDef) &&\r\n eventInstance) {\r\n // if not previously selected, will fire after a delay. then, select the event\r\n view.selectEventInstance(eventInstance);\r\n }\r\n isDragging = true;\r\n // ensure a mouseout on the manipulated event has been reported\r\n _this.eventPointing.handleMouseout(seg, ev);\r\n _this.segDragStart(seg, ev);\r\n view.hideEventsWithId(seg.footprint.eventDef.id);\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n var isAllowed = true;\r\n var origFootprint;\r\n var footprint;\r\n var mutatedEventInstanceGroup;\r\n // starting hit could be forced (DayGrid.limit)\r\n if (seg.hit) {\r\n origHit = seg.hit;\r\n }\r\n // hit might not belong to this grid, so query origin grid\r\n origFootprint = origHit.component.getSafeHitFootprint(origHit);\r\n footprint = hit.component.getSafeHitFootprint(hit);\r\n if (origFootprint && footprint) {\r\n eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\r\n if (eventDefMutation) {\r\n mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\r\n isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n if (!isAllowed) {\r\n eventDefMutation = null;\r\n util_1.disableCursor();\r\n }\r\n // if a valid drop location, have the subclass render a visual indication\r\n if (eventDefMutation &&\r\n view.renderDrag(// truthy if rendered something\r\n component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\r\n mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\r\n }\r\n else {\r\n mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\r\n }\r\n if (isOrig) {\r\n // needs to have moved hits to be a valid drop\r\n eventDefMutation = null;\r\n }\r\n },\r\n hitOut: function () {\r\n view.unrenderDrag(seg); // unrender whatever was done in renderDrag\r\n mouseFollower.show(); // show in case we are moving out of all hits\r\n eventDefMutation = null;\r\n },\r\n hitDone: function () {\r\n util_1.enableCursor();\r\n },\r\n interactionEnd: function (ev) {\r\n delete seg.component; // prevent side effects\r\n // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\r\n mouseFollower.stop(!eventDefMutation, function () {\r\n if (isDragging) {\r\n view.unrenderDrag(seg);\r\n _this.segDragStop(seg, ev);\r\n }\r\n view.showEventsWithId(seg.footprint.eventDef.id);\r\n if (eventDefMutation) {\r\n // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\r\n }\r\n });\r\n _this.dragListener = null;\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Called before event segment dragging starts\r\n EventDragging.prototype.segDragStart = function (seg, ev) {\r\n this.isDragging = true;\r\n this.component.publiclyTrigger('eventDragStart', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // Called after event segment dragging stops\r\n EventDragging.prototype.segDragStop = function (seg, ev) {\r\n this.isDragging = false;\r\n this.component.publiclyTrigger('eventDragStop', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // DOES NOT consider overlap/constraint\r\n EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n var eventDefMutation = new EventDefMutation_1.default();\r\n eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n return eventDefMutation;\r\n };\r\n EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\r\n var date0 = startFootprint.unzonedRange.getStart();\r\n var date1 = endFootprint.unzonedRange.getStart();\r\n var clearEnd = false;\r\n var forceTimed = false;\r\n var forceAllDay = false;\r\n var dateDelta;\r\n var dateMutation;\r\n if (startFootprint.isAllDay !== endFootprint.isAllDay) {\r\n clearEnd = true;\r\n if (endFootprint.isAllDay) {\r\n forceAllDay = true;\r\n date0.stripTime();\r\n }\r\n else {\r\n forceTimed = true;\r\n }\r\n }\r\n dateDelta = this.component.diffDates(date1, date0);\r\n dateMutation = new EventDefDateMutation_1.default();\r\n dateMutation.clearEnd = clearEnd;\r\n dateMutation.forceTimed = forceTimed;\r\n dateMutation.forceAllDay = forceAllDay;\r\n dateMutation.setDateDelta(dateDelta);\r\n return dateMutation;\r\n };\r\n return EventDragging;\r\n}(Interaction_1.default));\r\nexports.default = EventDragging;\r\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateSelecting = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateSelecting, _super);\r\n /*\r\n component must implement:\r\n - bindDateHandlerToEl\r\n - getSafeHitFootprint\r\n - renderHighlight\r\n - unrenderHighlight\r\n */\r\n function DateSelecting(component) {\r\n var _this = _super.call(this, component) || this;\r\n _this.dragListener = _this.buildDragListener();\r\n return _this;\r\n }\r\n DateSelecting.prototype.end = function () {\r\n this.dragListener.endInteraction();\r\n };\r\n DateSelecting.prototype.getDelay = function () {\r\n var delay = this.opt('selectLongPressDelay');\r\n if (delay == null) {\r\n delay = this.opt('longPressDelay'); // fallback\r\n }\r\n return delay;\r\n };\r\n DateSelecting.prototype.bindToEl = function (el) {\r\n var _this = this;\r\n var component = this.component;\r\n var dragListener = this.dragListener;\r\n component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\r\n dragListener.startInteraction(ev, {\r\n distance: _this.opt('selectMinDistance')\r\n });\r\n }\r\n });\r\n component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\r\n dragListener.startInteraction(ev, {\r\n delay: _this.getDelay()\r\n });\r\n }\r\n });\r\n util_1.preventSelection(el);\r\n };\r\n // Creates a listener that tracks the user's drag across day elements, for day selecting.\r\n DateSelecting.prototype.buildDragListener = function () {\r\n var _this = this;\r\n var component = this.component;\r\n var selectionFootprint; // null if invalid selection\r\n var dragListener = new HitDragListener_1.default(component, {\r\n scroll: this.opt('dragScroll'),\r\n interactionStart: function () {\r\n selectionFootprint = null;\r\n },\r\n dragStart: function (ev) {\r\n _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n var origHitFootprint;\r\n var hitFootprint;\r\n if (origHit) { // click needs to have started on a hit\r\n origHitFootprint = component.getSafeHitFootprint(origHit);\r\n hitFootprint = component.getSafeHitFootprint(hit);\r\n if (origHitFootprint && hitFootprint) {\r\n selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\r\n }\r\n else {\r\n selectionFootprint = null;\r\n }\r\n if (selectionFootprint) {\r\n component.renderSelectionFootprint(selectionFootprint);\r\n }\r\n else if (selectionFootprint === false) {\r\n util_1.disableCursor();\r\n }\r\n }\r\n },\r\n hitOut: function () {\r\n selectionFootprint = null;\r\n component.unrenderSelection();\r\n },\r\n hitDone: function () {\r\n util_1.enableCursor();\r\n },\r\n interactionEnd: function (ev, isCancelled) {\r\n if (!isCancelled && selectionFootprint) {\r\n // the selection will already have been rendered. just report it\r\n _this.view.reportSelection(selectionFootprint, ev);\r\n }\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Given the first and last date-spans of a selection, returns another date-span object.\r\n // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\r\n // Will return false if the selection is invalid and this should be indicated to the user.\r\n // Will return null/undefined if a selection invalid but no error should be reported.\r\n DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\r\n var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\r\n if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\r\n return false;\r\n }\r\n return wholeFootprint;\r\n };\r\n // Given two spans, must return the combination of the two.\r\n // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\r\n // Assumes both footprints are non-open-ended.\r\n DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\r\n var ms = [\r\n footprint0.unzonedRange.startMs,\r\n footprint0.unzonedRange.endMs,\r\n footprint1.unzonedRange.startMs,\r\n footprint1.unzonedRange.endMs\r\n ];\r\n ms.sort(util_1.compareNumbers);\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);\r\n };\r\n DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\r\n this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\r\n };\r\n return DateSelecting;\r\n}(Interaction_1.default));\r\nexports.default = DateSelecting;\r\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateClicking = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateClicking, _super);\r\n /*\r\n component must implement:\r\n - bindDateHandlerToEl\r\n - getSafeHitFootprint\r\n - getHitEl\r\n */\r\n function DateClicking(component) {\r\n var _this = _super.call(this, component) || this;\r\n _this.dragListener = _this.buildDragListener();\r\n return _this;\r\n }\r\n DateClicking.prototype.end = function () {\r\n this.dragListener.endInteraction();\r\n };\r\n DateClicking.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n var dragListener = this.dragListener;\r\n component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n if (!component.shouldIgnoreMouse()) {\r\n dragListener.startInteraction(ev);\r\n }\r\n });\r\n component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n if (!component.shouldIgnoreTouch()) {\r\n dragListener.startInteraction(ev);\r\n }\r\n });\r\n };\r\n // Creates a listener that tracks the user's drag across day elements, for day clicking.\r\n DateClicking.prototype.buildDragListener = function () {\r\n var _this = this;\r\n var component = this.component;\r\n var dayClickHit; // null if invalid dayClick\r\n var dragListener = new HitDragListener_1.default(component, {\r\n scroll: this.opt('dragScroll'),\r\n interactionStart: function () {\r\n dayClickHit = dragListener.origHit;\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n // if user dragged to another cell at any point, it can no longer be a dayClick\r\n if (!isOrig) {\r\n dayClickHit = null;\r\n }\r\n },\r\n hitOut: function () {\r\n dayClickHit = null;\r\n },\r\n interactionEnd: function (ev, isCancelled) {\r\n var componentFootprint;\r\n if (!isCancelled && dayClickHit) {\r\n componentFootprint = component.getSafeHitFootprint(dayClickHit);\r\n if (componentFootprint) {\r\n _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\r\n }\r\n }\r\n }\r\n });\r\n // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\r\n // which will kill any touchmoving/scrolling. Prevent this.\r\n dragListener.shouldCancelTouchScroll = false;\r\n dragListener.scrollAlwaysKills = true;\r\n return dragListener;\r\n };\r\n return DateClicking;\r\n}(Interaction_1.default));\r\nexports.default = DateClicking;\r\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nvar DayGrid_1 = __webpack_require__(66);\r\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\r\nvar agendaTimeGridMethods;\r\nvar agendaDayGridMethods;\r\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\r\n// Responsible for managing width/height.\r\nvar AgendaView = /** @class */ (function (_super) {\r\n tslib_1.__extends(AgendaView, _super);\r\n function AgendaView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\r\n _this.timeGrid = _this.instantiateTimeGrid();\r\n _this.addChild(_this.timeGrid);\r\n if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\r\n _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\r\n _this.addChild(_this.dayGrid);\r\n }\r\n _this.scroller = new Scroller_1.default({\r\n overflowX: 'hidden',\r\n overflowY: 'auto'\r\n });\r\n return _this;\r\n }\r\n // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\r\n AgendaView.prototype.instantiateTimeGrid = function () {\r\n var timeGrid = new this.timeGridClass(this);\r\n util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\r\n return timeGrid;\r\n };\r\n // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\r\n AgendaView.prototype.instantiateDayGrid = function () {\r\n var dayGrid = new this.dayGridClass(this);\r\n util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\r\n return dayGrid;\r\n };\r\n /* Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n AgendaView.prototype.renderSkeleton = function () {\r\n var timeGridWrapEl;\r\n var timeGridEl;\r\n this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\r\n this.scroller.render();\r\n timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\r\n timeGridEl = $('
').appendTo(timeGridWrapEl);\r\n this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\r\n this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\r\n this.timeGrid.setElement(timeGridEl);\r\n if (this.dayGrid) {\r\n this.dayGrid.setElement(this.el.find('.fc-day-grid'));\r\n // have the day-grid extend it's coordinate area over the
dividing the two grids\r\n this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\r\n }\r\n };\r\n AgendaView.prototype.unrenderSkeleton = function () {\r\n this.timeGrid.removeElement();\r\n if (this.dayGrid) {\r\n this.dayGrid.removeElement();\r\n }\r\n this.scroller.destroy();\r\n };\r\n // Builds the HTML skeleton for the view.\r\n // The day-grid and time-grid components will render inside containers defined by this HTML.\r\n AgendaView.prototype.renderSkeletonHtml = function () {\r\n var theme = this.calendar.theme;\r\n return '' +\r\n '' +\r\n (this.opt('columnHeader') ?\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' :\r\n '') +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
 
' +\r\n (this.dayGrid ?\r\n '
' +\r\n '
' :\r\n '') +\r\n '
';\r\n };\r\n // Generates an HTML attribute string for setting the width of the axis, if it is known\r\n AgendaView.prototype.axisStyleAttr = function () {\r\n if (this.axisWidth != null) {\r\n return 'style=\"width:' + this.axisWidth + 'px\"';\r\n }\r\n return '';\r\n };\r\n /* Now Indicator\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n AgendaView.prototype.getNowIndicatorUnit = function () {\r\n return this.timeGrid.getNowIndicatorUnit();\r\n };\r\n /* Dimensions\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Adjusts the vertical dimensions of the view to the specified values\r\n AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n var eventLimit;\r\n var scrollerHeight;\r\n var scrollbarWidths;\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n // make all axis cells line up, and record the width so newly created axis cells will have it\r\n this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));\r\n // hack to give the view some height prior to timeGrid's columns being rendered\r\n // TODO: separate setting height from scroller VS timeGrid.\r\n if (!this.timeGrid.colEls) {\r\n if (!isAuto) {\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n return;\r\n }\r\n // set of fake row elements that must compensate when scroller has scrollbars\r\n var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');\r\n // reset all dimensions back to the original state\r\n this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this
is necessary\r\n this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n util_1.uncompensateScroll(noScrollRowEls);\r\n // limit number of events in the all-day area\r\n if (this.dayGrid) {\r\n this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n eventLimit = this.opt('eventLimit');\r\n if (eventLimit && typeof eventLimit !== 'number') {\r\n eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\r\n }\r\n if (eventLimit) {\r\n this.dayGrid.limitRows(eventLimit);\r\n }\r\n }\r\n if (!isAuto) { // should we force dimensions of the scroll container?\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n scrollbarWidths = this.scroller.getScrollbarWidths();\r\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n // make the all-day and header rows lines up\r\n util_1.compensateScroll(noScrollRowEls, scrollbarWidths);\r\n // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\r\n // and reapply the desired height to the scroller.\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n // guarantees the same scrollbar widths\r\n this.scroller.lockOverflow(scrollbarWidths);\r\n // if there's any space below the slats, show the horizontal rule.\r\n // this won't cause any new overflow, because lockOverflow already called.\r\n if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\r\n this.timeGrid.bottomRuleEl.show();\r\n }\r\n }\r\n };\r\n // given a desired total height of the view, returns what the height of the scroller should be\r\n AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\r\n return totalHeight -\r\n util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n };\r\n /* Scroll\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Computes the initial pre-configured scroll state prior to allowing the user to change it\r\n AgendaView.prototype.computeInitialDateScroll = function () {\r\n var scrollTime = moment.duration(this.opt('scrollTime'));\r\n var top = this.timeGrid.computeTimeTop(scrollTime);\r\n // zoom can give weird floating-point values. rather scroll a little bit further\r\n top = Math.ceil(top);\r\n if (top) {\r\n top++; // to overcome top border that slots beyond the first have. looks better\r\n }\r\n return { top: top };\r\n };\r\n AgendaView.prototype.queryDateScroll = function () {\r\n return { top: this.scroller.getScrollTop() };\r\n };\r\n AgendaView.prototype.applyDateScroll = function (scroll) {\r\n if (scroll.top !== undefined) {\r\n this.scroller.setScrollTop(scroll.top);\r\n }\r\n };\r\n /* Hit Areas\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // forward all hit-related method calls to the grids (dayGrid might not be defined)\r\n AgendaView.prototype.getHitFootprint = function (hit) {\r\n // TODO: hit.component is set as a hack to identify where the hit came from\r\n return hit.component.getHitFootprint(hit);\r\n };\r\n AgendaView.prototype.getHitEl = function (hit) {\r\n // TODO: hit.component is set as a hack to identify where the hit came from\r\n return hit.component.getHitEl(hit);\r\n };\r\n /* Event Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n AgendaView.prototype.executeEventRender = function (eventsPayload) {\r\n var dayEventsPayload = {};\r\n var timedEventsPayload = {};\r\n var id;\r\n var eventInstanceGroup;\r\n // separate the events into all-day and timed\r\n for (id in eventsPayload) {\r\n eventInstanceGroup = eventsPayload[id];\r\n if (eventInstanceGroup.getEventDef().isAllDay()) {\r\n dayEventsPayload[id] = eventInstanceGroup;\r\n }\r\n else {\r\n timedEventsPayload[id] = eventInstanceGroup;\r\n }\r\n }\r\n this.timeGrid.executeEventRender(timedEventsPayload);\r\n if (this.dayGrid) {\r\n this.dayGrid.executeEventRender(dayEventsPayload);\r\n }\r\n };\r\n /* Dragging/Resizing Routing\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n var renderedHelper = false;\r\n renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\r\n if (this.dayGrid) {\r\n renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\r\n }\r\n return renderedHelper;\r\n };\r\n AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\r\n if (this.dayGrid) {\r\n this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\r\n }\r\n };\r\n /* Selection\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of a selection\r\n AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n if (!componentFootprint.isAllDay) {\r\n this.timeGrid.renderSelectionFootprint(componentFootprint);\r\n }\r\n else if (this.dayGrid) {\r\n this.dayGrid.renderSelectionFootprint(componentFootprint);\r\n }\r\n };\r\n return AgendaView;\r\n}(View_1.default));\r\nexports.default = AgendaView;\r\nAgendaView.prototype.timeGridClass = TimeGrid_1.default;\r\nAgendaView.prototype.dayGridClass = DayGrid_1.default;\r\n// Will customize the rendering behavior of the AgendaView's timeGrid\r\nagendaTimeGridMethods = {\r\n // Generates the HTML that will go before the day-of week header cells\r\n renderHeadIntroHtml: function () {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\r\n var weekText;\r\n if (this.opt('weekNumbers')) {\r\n weekText = weekStart.format(this.opt('smallWeekFormat'));\r\n return '' +\r\n '' +\r\n view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML\r\n ) +\r\n '';\r\n }\r\n else {\r\n return '';\r\n }\r\n },\r\n // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\r\n renderBgIntroHtml: function () {\r\n var view = this.view;\r\n return '';\r\n },\r\n // Generates the HTML that goes before all other types of cells.\r\n // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n renderIntroHtml: function () {\r\n var view = this.view;\r\n return '';\r\n }\r\n};\r\n// Will customize the rendering behavior of the AgendaView's dayGrid\r\nagendaDayGridMethods = {\r\n // Generates the HTML that goes before the all-day cells\r\n renderBgIntroHtml: function () {\r\n var view = this.view;\r\n return '' +\r\n '' +\r\n '' + // needed for matchCellWidths\r\n view.getAllDayHtml() +\r\n '' +\r\n '';\r\n },\r\n // Generates the HTML that goes before all other types of cells.\r\n // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n renderIntroHtml: function () {\r\n var view = this.view;\r\n return '';\r\n }\r\n};\r\nfunction groupEventFootprintsByAllDay(eventFootprints) {\r\n var allDay = [];\r\n var timed = [];\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (eventFootprints[i].componentFootprint.isAllDay) {\r\n allDay.push(eventFootprints[i]);\r\n }\r\n else {\r\n timed.push(eventFootprints[i]);\r\n }\r\n }\r\n return { allDay: allDay, timed: timed };\r\n}\r\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\n/* A component that renders one or more columns of vertical time slots\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// We mixin DayTable, even though there is only a single row of days\r\n// potential nice values for the slot-duration and interval-duration\r\n// from largest to smallest\r\nvar AGENDA_STOCK_SUB_DURATIONS = [\r\n { hours: 1 },\r\n { minutes: 30 },\r\n { minutes: 15 },\r\n { seconds: 30 },\r\n { seconds: 15 }\r\n];\r\nvar TimeGrid = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGrid, _super);\r\n function TimeGrid(view) {\r\n var _this = _super.call(this, view) || this;\r\n _this.processOptions();\r\n return _this;\r\n }\r\n // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\r\n var i;\r\n for (i = 0; i < segs.length; i++) {\r\n if (this.isRTL) {\r\n segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\r\n }\r\n else {\r\n segs[i].col = segs[i].dayIndex;\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Date Handling\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\r\n var segs = [];\r\n var segRange;\r\n var dayIndex;\r\n for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\r\n segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\r\n if (segRange) {\r\n segs.push({\r\n startMs: segRange.startMs,\r\n endMs: segRange.endMs,\r\n isStart: segRange.isStart,\r\n isEnd: segRange.isEnd,\r\n dayIndex: dayIndex\r\n });\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Options\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Parses various options into properties of this object\r\n TimeGrid.prototype.processOptions = function () {\r\n var slotDuration = this.opt('slotDuration');\r\n var snapDuration = this.opt('snapDuration');\r\n var input;\r\n slotDuration = moment.duration(slotDuration);\r\n snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\r\n this.slotDuration = slotDuration;\r\n this.snapDuration = snapDuration;\r\n this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\r\n // might be an array value (for TimelineView).\r\n // if so, getting the most granular entry (the last one probably).\r\n input = this.opt('slotLabelFormat');\r\n if ($.isArray(input)) {\r\n input = input[input.length - 1];\r\n }\r\n this.labelFormat = input ||\r\n this.opt('smallTimeFormat'); // the computed default\r\n input = this.opt('slotLabelInterval');\r\n this.labelInterval = input ?\r\n moment.duration(input) :\r\n this.computeLabelInterval(slotDuration);\r\n };\r\n // Computes an automatic value for slotLabelInterval\r\n TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\r\n var i;\r\n var labelInterval;\r\n var slotsPerLabel;\r\n // find the smallest stock label interval that results in more than one slots-per-label\r\n for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\r\n labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\r\n slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\r\n if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\r\n return labelInterval;\r\n }\r\n }\r\n return moment.duration(slotDuration); // fall back. clone\r\n };\r\n /* Date Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.renderDates = function (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n this.updateDayTable();\r\n this.renderSlats();\r\n this.renderColumns();\r\n };\r\n TimeGrid.prototype.unrenderDates = function () {\r\n // this.unrenderSlats(); // don't need this because repeated .html() calls clear\r\n this.unrenderColumns();\r\n };\r\n TimeGrid.prototype.renderSkeleton = function () {\r\n var theme = this.view.calendar.theme;\r\n this.el.html('
' +\r\n '
' +\r\n '
');\r\n this.bottomRuleEl = this.el.find('hr');\r\n };\r\n TimeGrid.prototype.renderSlats = function () {\r\n var theme = this.view.calendar.theme;\r\n this.slatContainerEl = this.el.find('> .fc-slats')\r\n .html(// avoids needing ::unrenderSlats()\r\n '' +\r\n this.renderSlatRowHtml() +\r\n '
');\r\n this.slatEls = this.slatContainerEl.find('tr');\r\n this.slatCoordCache = new CoordCache_1.default({\r\n els: this.slatEls,\r\n isVertical: true\r\n });\r\n };\r\n // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\r\n TimeGrid.prototype.renderSlatRowHtml = function () {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var theme = calendar.theme;\r\n var isRTL = this.isRTL;\r\n var dateProfile = this.dateProfile;\r\n var html = '';\r\n var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\r\n var slotIterator = moment.duration(0);\r\n var slotDate; // will be on the view's first day, but we only care about its time\r\n var isLabeled;\r\n var axisHtml;\r\n // Calculate the time for each slot\r\n while (slotTime < dateProfile.maxTime) {\r\n slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\r\n isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\r\n axisHtml =\r\n '' +\r\n (isLabeled ?\r\n '' + // for matchCellWidths\r\n util_1.htmlEscape(slotDate.format(this.labelFormat)) +\r\n '' :\r\n '') +\r\n '';\r\n html +=\r\n '' +\r\n (!isRTL ? axisHtml : '') +\r\n '' +\r\n (isRTL ? axisHtml : '') +\r\n '';\r\n slotTime.add(this.slotDuration);\r\n slotIterator.add(this.slotDuration);\r\n }\r\n return html;\r\n };\r\n TimeGrid.prototype.renderColumns = function () {\r\n var dateProfile = this.dateProfile;\r\n var theme = this.view.calendar.theme;\r\n this.dayRanges = this.dayDates.map(function (dayDate) {\r\n return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\r\n });\r\n if (this.headContainerEl) {\r\n this.headContainerEl.html(this.renderHeadHtml());\r\n }\r\n this.el.find('> .fc-bg').html('' +\r\n this.renderBgTrHtml(0) + // row=0\r\n '
');\r\n this.colEls = this.el.find('.fc-day, .fc-disabled-day');\r\n this.colCoordCache = new CoordCache_1.default({\r\n els: this.colEls,\r\n isHorizontal: true\r\n });\r\n this.renderContentSkeleton();\r\n };\r\n TimeGrid.prototype.unrenderColumns = function () {\r\n this.unrenderContentSkeleton();\r\n };\r\n /* Content Skeleton\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders the DOM that the view's content will live in\r\n TimeGrid.prototype.renderContentSkeleton = function () {\r\n var cellHtml = '';\r\n var i;\r\n var skeletonEl;\r\n for (i = 0; i < this.colCnt; i++) {\r\n cellHtml +=\r\n '' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '';\r\n }\r\n skeletonEl = this.contentSkeletonEl = $('
' +\r\n '' +\r\n '' + cellHtml + '' +\r\n '
' +\r\n '
');\r\n this.colContainerEls = skeletonEl.find('.fc-content-col');\r\n this.helperContainerEls = skeletonEl.find('.fc-helper-container');\r\n this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\r\n this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\r\n this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\r\n this.businessContainerEls = skeletonEl.find('.fc-business-container');\r\n this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\r\n this.el.append(skeletonEl);\r\n };\r\n TimeGrid.prototype.unrenderContentSkeleton = function () {\r\n if (this.contentSkeletonEl) { // defensive :(\r\n this.contentSkeletonEl.remove();\r\n this.contentSkeletonEl = null;\r\n this.colContainerEls = null;\r\n this.helperContainerEls = null;\r\n this.fgContainerEls = null;\r\n this.bgContainerEls = null;\r\n this.highlightContainerEls = null;\r\n this.businessContainerEls = null;\r\n }\r\n };\r\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\r\n TimeGrid.prototype.groupSegsByCol = function (segs) {\r\n var segsByCol = [];\r\n var i;\r\n for (i = 0; i < this.colCnt; i++) {\r\n segsByCol.push([]);\r\n }\r\n for (i = 0; i < segs.length; i++) {\r\n segsByCol[segs[i].col].push(segs[i]);\r\n }\r\n return segsByCol;\r\n };\r\n // Given segments grouped by column, insert the segments' elements into a parallel array of container\r\n // elements, each living within a column.\r\n TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\r\n var col;\r\n var segs;\r\n var i;\r\n for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\r\n segs = segsByCol[col];\r\n for (i = 0; i < segs.length; i++) {\r\n containerEls.eq(col).append(segs[i].el);\r\n }\r\n }\r\n };\r\n /* Now Indicator\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.getNowIndicatorUnit = function () {\r\n return 'minute'; // will refresh on the minute\r\n };\r\n TimeGrid.prototype.renderNowIndicator = function (date) {\r\n // HACK: if date columns not ready for some reason (scheduler)\r\n if (!this.colContainerEls) {\r\n return;\r\n }\r\n // seg system might be overkill, but it handles scenario where line needs to be rendered\r\n // more than once because of columns with the same date (resources columns for example)\r\n var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range\r\n false // all-day\r\n ));\r\n var top = this.computeDateTop(date, date);\r\n var nodes = [];\r\n var i;\r\n // render lines within the columns\r\n for (i = 0; i < segs.length; i++) {\r\n nodes.push($('
')\r\n .css('top', top)\r\n .appendTo(this.colContainerEls.eq(segs[i].col))[0]);\r\n }\r\n // render an arrow over the axis\r\n if (segs.length > 0) { // is the current time in view?\r\n nodes.push($('
')\r\n .css('top', top)\r\n .appendTo(this.el.find('.fc-content-skeleton'))[0]);\r\n }\r\n this.nowIndicatorEls = $(nodes);\r\n };\r\n TimeGrid.prototype.unrenderNowIndicator = function () {\r\n if (this.nowIndicatorEls) {\r\n this.nowIndicatorEls.remove();\r\n this.nowIndicatorEls = null;\r\n }\r\n };\r\n /* Coordinates\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n this.slatCoordCache.build();\r\n if (isResize) {\r\n this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\r\n }\r\n };\r\n TimeGrid.prototype.getTotalSlatHeight = function () {\r\n return this.slatContainerEl.outerHeight();\r\n };\r\n // Computes the top coordinate, relative to the bounds of the grid, of the given date.\r\n // `ms` can be a millisecond UTC time OR a UTC moment.\r\n // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\r\n TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\r\n return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\r\n };\r\n // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\r\n TimeGrid.prototype.computeTimeTop = function (time) {\r\n var len = this.slatEls.length;\r\n var dateProfile = this.dateProfile;\r\n var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\r\n var slatIndex;\r\n var slatRemainder;\r\n // compute a floating-point number for how many slats should be progressed through.\r\n // from 0 to number of slats (inclusive)\r\n // constrained because minTime/maxTime might be customized.\r\n slatCoverage = Math.max(0, slatCoverage);\r\n slatCoverage = Math.min(len, slatCoverage);\r\n // an integer index of the furthest whole slat\r\n // from 0 to number slats (*exclusive*, so len-1)\r\n slatIndex = Math.floor(slatCoverage);\r\n slatIndex = Math.min(slatIndex, len - 1);\r\n // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\r\n // could be 1.0 if slatCoverage is covering *all* the slots\r\n slatRemainder = slatCoverage - slatIndex;\r\n return this.slatCoordCache.getTopPosition(slatIndex) +\r\n this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\r\n };\r\n // Refreshes the CSS top/bottom coordinates for each segment element.\r\n // Works when called after initial render, after a window resize/zoom for example.\r\n TimeGrid.prototype.updateSegVerticals = function (segs) {\r\n this.computeSegVerticals(segs);\r\n this.assignSegVerticals(segs);\r\n };\r\n // For each segment in an array, computes and assigns its top and bottom properties\r\n TimeGrid.prototype.computeSegVerticals = function (segs) {\r\n var eventMinHeight = this.opt('agendaEventMinHeight');\r\n var i;\r\n var seg;\r\n var dayDate;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n dayDate = this.dayDates[seg.dayIndex];\r\n seg.top = this.computeDateTop(seg.startMs, dayDate);\r\n seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\r\n }\r\n };\r\n // Given segments that already have their top/bottom properties computed, applies those values to\r\n // the segments' elements.\r\n TimeGrid.prototype.assignSegVerticals = function (segs) {\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n seg.el.css(this.generateSegVerticalCss(seg));\r\n }\r\n };\r\n // Generates an object with CSS properties for the top/bottom coordinates of a segment element\r\n TimeGrid.prototype.generateSegVerticalCss = function (seg) {\r\n return {\r\n top: seg.top,\r\n bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\r\n };\r\n };\r\n /* Hit System\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.prepareHits = function () {\r\n this.colCoordCache.build();\r\n this.slatCoordCache.build();\r\n };\r\n TimeGrid.prototype.releaseHits = function () {\r\n this.colCoordCache.clear();\r\n // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\r\n };\r\n TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n var snapsPerSlot = this.snapsPerSlot;\r\n var colCoordCache = this.colCoordCache;\r\n var slatCoordCache = this.slatCoordCache;\r\n if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\r\n var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\r\n var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\r\n if (colIndex != null && slatIndex != null) {\r\n var slatTop = slatCoordCache.getTopOffset(slatIndex);\r\n var slatHeight = slatCoordCache.getHeight(slatIndex);\r\n var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\r\n var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\r\n var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\r\n var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\r\n var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\r\n return {\r\n col: colIndex,\r\n snap: snapIndex,\r\n component: this,\r\n left: colCoordCache.getLeftOffset(colIndex),\r\n right: colCoordCache.getRightOffset(colIndex),\r\n top: snapTop,\r\n bottom: snapBottom\r\n };\r\n }\r\n }\r\n };\r\n TimeGrid.prototype.getHitFootprint = function (hit) {\r\n var start = this.getCellDate(0, hit.col); // row=0\r\n var time = this.computeSnapTime(hit.snap); // pass in the snap-index\r\n var end;\r\n start.time(time);\r\n end = start.clone().add(this.snapDuration);\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?\r\n );\r\n };\r\n // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\r\n TimeGrid.prototype.computeSnapTime = function (snapIndex) {\r\n return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\r\n };\r\n TimeGrid.prototype.getHitEl = function (hit) {\r\n return this.colEls.eq(hit.col);\r\n };\r\n /* Event Drag Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event being dragged over the specified date(s).\r\n // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var i;\r\n if (seg) { // if there is event information for this drag, render a helper event\r\n if (eventFootprints.length) {\r\n this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n // signal that a helper has been rendered\r\n return true;\r\n }\r\n }\r\n else { // otherwise, just render a highlight\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n this.renderHighlight(eventFootprints[i].componentFootprint);\r\n }\r\n }\r\n };\r\n // Unrenders any visual indication of an event being dragged\r\n TimeGrid.prototype.unrenderDrag = function () {\r\n this.unrenderHighlight();\r\n this.helperRenderer.unrender();\r\n };\r\n /* Event Resize Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event being resized\r\n TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n };\r\n // Unrenders any visual indication of an event being resized\r\n TimeGrid.prototype.unrenderEventResize = function () {\r\n this.helperRenderer.unrender();\r\n };\r\n /* Selection\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\r\n TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\r\n this.helperRenderer.renderComponentFootprint(componentFootprint);\r\n }\r\n else {\r\n this.renderHighlight(componentFootprint);\r\n }\r\n };\r\n // Unrenders any visual indication of a selection\r\n TimeGrid.prototype.unrenderSelection = function () {\r\n this.helperRenderer.unrender();\r\n this.unrenderHighlight();\r\n };\r\n return TimeGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = TimeGrid;\r\nTimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;\r\nTimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nTimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;\r\nTimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(TimeGrid);\r\nDayTableMixin_1.default.mixInto(TimeGrid);\r\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/*\r\nOnly handles foreground segs.\r\nDoes not own rendering. Use for low-level util methods by TimeGrid.\r\n*/\r\nvar TimeGridEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGridEventRenderer, _super);\r\n function TimeGridEventRenderer(timeGrid, fillRenderer) {\r\n var _this = _super.call(this, timeGrid, fillRenderer) || this;\r\n _this.timeGrid = timeGrid;\r\n return _this;\r\n }\r\n TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\r\n };\r\n // Given an array of foreground segments, render a DOM element for each, computes position,\r\n // and attaches to the column inner-container elements.\r\n TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\r\n var segsByCol;\r\n var col;\r\n segsByCol = this.timeGrid.groupSegsByCol(segs);\r\n for (col = 0; col < this.timeGrid.colCnt; col++) {\r\n this.updateFgSegCoords(segsByCol[col]);\r\n }\r\n this.timeGrid.attachSegsByCol(segsByCol, containerEls);\r\n };\r\n TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n if (this.fgSegs) { // hack\r\n this.fgSegs.forEach(function (seg) {\r\n seg.el.remove();\r\n });\r\n }\r\n };\r\n // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\r\n };\r\n // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return true;\r\n };\r\n // Renders the HTML for a single event segment's default rendering\r\n TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var componentFootprint = seg.footprint.componentFootprint;\r\n var isAllDay = componentFootprint.isAllDay;\r\n var eventDef = seg.footprint.eventDef;\r\n var isDraggable = view.isEventDefDraggable(eventDef);\r\n var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n var timeText;\r\n var fullTimeText; // more verbose time text. for the print stylesheet\r\n var startTimeText; // just the start time text\r\n classes.unshift('fc-time-grid-event', 'fc-v-event');\r\n // if the event appears to span more than one day...\r\n if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n // Don't display time text on segments that run entirely through a day.\r\n // That would appear as midnight-midnight and would look dumb.\r\n // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\r\n if (seg.isStart || seg.isEnd) {\r\n var zonedStart = calendar.msToMoment(seg.startMs);\r\n var zonedEnd = calendar.msToMoment(seg.endMs);\r\n timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\r\n fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\r\n startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\r\n }\r\n }\r\n else {\r\n // Display the normal time text for the *event's* times\r\n timeText = this.getTimeText(seg.footprint);\r\n fullTimeText = this.getTimeText(seg.footprint, 'LT');\r\n startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\r\n }\r\n return '' +\r\n '
' +\r\n (timeText ?\r\n '
' +\r\n '' + util_1.htmlEscape(timeText) + '' +\r\n '
' :\r\n '') +\r\n (eventDef.title ?\r\n '
' +\r\n util_1.htmlEscape(eventDef.title) +\r\n '
' :\r\n '') +\r\n '
' +\r\n '
' +\r\n /* TODO: write CSS for this\r\n (isResizableFromStart ?\r\n '
' :\r\n ''\r\n ) +\r\n */\r\n (isResizableFromEnd ?\r\n '
' :\r\n '') +\r\n '
';\r\n };\r\n // Given segments that are assumed to all live in the *same column*,\r\n // compute their verical/horizontal coordinates and assign to their elements.\r\n TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\r\n this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\r\n this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\r\n this.timeGrid.assignSegVerticals(segs);\r\n this.assignFgSegHorizontals(segs);\r\n };\r\n // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\r\n // NOTE: Also reorders the given array by date!\r\n TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\r\n var levels;\r\n var level0;\r\n var i;\r\n this.sortEventSegs(segs); // order by certain criteria\r\n levels = buildSlotSegLevels(segs);\r\n computeForwardSlotSegs(levels);\r\n if ((level0 = levels[0])) {\r\n for (i = 0; i < level0.length; i++) {\r\n computeSlotSegPressures(level0[i]);\r\n }\r\n for (i = 0; i < level0.length; i++) {\r\n this.computeFgSegForwardBack(level0[i], 0, 0);\r\n }\r\n }\r\n };\r\n // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\r\n // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\r\n // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\r\n //\r\n // The segment might be part of a \"series\", which means consecutive segments with the same pressure\r\n // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\r\n // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\r\n // coordinate of the first segment in the series.\r\n TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\r\n var forwardSegs = seg.forwardSegs;\r\n var i;\r\n if (seg.forwardCoord === undefined) { // not already computed\r\n if (!forwardSegs.length) {\r\n // if there are no forward segments, this segment should butt up against the edge\r\n seg.forwardCoord = 1;\r\n }\r\n else {\r\n // sort highest pressure first\r\n this.sortForwardSegs(forwardSegs);\r\n // this segment's forwardCoord will be calculated from the backwardCoord of the\r\n // highest-pressure forward segment.\r\n this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\r\n seg.forwardCoord = forwardSegs[0].backwardCoord;\r\n }\r\n // calculate the backwardCoord from the forwardCoord. consider the series\r\n seg.backwardCoord = seg.forwardCoord -\r\n (seg.forwardCoord - seriesBackwardCoord) / // available width for series\r\n (seriesBackwardPressure + 1); // # of segments in the series\r\n // use this segment's coordinates to computed the coordinates of the less-pressurized\r\n // forward segments\r\n for (i = 0; i < forwardSegs.length; i++) {\r\n this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\r\n }\r\n }\r\n };\r\n TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\r\n forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\r\n };\r\n // A cmp function for determining which forward segment to rely on more when computing coordinates.\r\n TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\r\n // put higher-pressure first\r\n return seg2.forwardPressure - seg1.forwardPressure ||\r\n // put segments that are closer to initial edge first (and favor ones with no coords yet)\r\n (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\r\n // do normal sorting...\r\n this.compareEventSegs(seg1, seg2);\r\n };\r\n // Given foreground event segments that have already had their position coordinates computed,\r\n // assigns position-related CSS values to their elements.\r\n TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n seg.el.css(this.generateFgSegHorizontalCss(seg));\r\n // if the event is short that the title will be cut off,\r\n // attach a className that condenses the title into the time area.\r\n if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\r\n seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\r\n }\r\n }\r\n };\r\n // Generates an object with CSS properties/values that should be applied to an event segment element.\r\n // Contains important positioning-related properties that should be applied to any event element, customized or not.\r\n TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\r\n var shouldOverlap = this.opt('slotEventOverlap');\r\n var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\r\n var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\r\n var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\r\n var isRTL = this.timeGrid.isRTL;\r\n var left; // amount of space from left edge, a fraction of the total width\r\n var right; // amount of space from right edge, a fraction of the total width\r\n if (shouldOverlap) {\r\n // double the width, but don't go beyond the maximum forward coordinate (1.0)\r\n forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\r\n }\r\n if (isRTL) {\r\n left = 1 - forwardCoord;\r\n right = backwardCoord;\r\n }\r\n else {\r\n left = backwardCoord;\r\n right = 1 - forwardCoord;\r\n }\r\n props.zIndex = seg.level + 1; // convert from 0-base to 1-based\r\n props.left = left * 100 + '%';\r\n props.right = right * 100 + '%';\r\n if (shouldOverlap && seg.forwardPressure) {\r\n // add padding to the edge so that forward stacked events don't cover the resizer's icon\r\n props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\r\n }\r\n return props;\r\n };\r\n return TimeGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = TimeGridEventRenderer;\r\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\r\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\r\nfunction buildSlotSegLevels(segs) {\r\n var levels = [];\r\n var i;\r\n var seg;\r\n var j;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n // go through all the levels and stop on the first level where there are no collisions\r\n for (j = 0; j < levels.length; j++) {\r\n if (!computeSlotSegCollisions(seg, levels[j]).length) {\r\n break;\r\n }\r\n }\r\n seg.level = j;\r\n (levels[j] || (levels[j] = [])).push(seg);\r\n }\r\n return levels;\r\n}\r\n// For every segment, figure out the other segments that are in subsequent\r\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\r\nfunction computeForwardSlotSegs(levels) {\r\n var i;\r\n var level;\r\n var j;\r\n var seg;\r\n var k;\r\n for (i = 0; i < levels.length; i++) {\r\n level = levels[i];\r\n for (j = 0; j < level.length; j++) {\r\n seg = level[j];\r\n seg.forwardSegs = [];\r\n for (k = i + 1; k < levels.length; k++) {\r\n computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\r\n }\r\n }\r\n }\r\n}\r\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\r\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\r\nfunction computeSlotSegPressures(seg) {\r\n var forwardSegs = seg.forwardSegs;\r\n var forwardPressure = 0;\r\n var i;\r\n var forwardSeg;\r\n if (seg.forwardPressure === undefined) { // not already computed\r\n for (i = 0; i < forwardSegs.length; i++) {\r\n forwardSeg = forwardSegs[i];\r\n // figure out the child's maximum forward path\r\n computeSlotSegPressures(forwardSeg);\r\n // either use the existing maximum, or use the child's forward pressure\r\n // plus one (for the forwardSeg itself)\r\n forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\r\n }\r\n seg.forwardPressure = forwardPressure;\r\n }\r\n}\r\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\r\n// Append into an optionally-supplied `results` array and return.\r\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\r\n if (results === void 0) { results = []; }\r\n for (var i = 0; i < otherSegs.length; i++) {\r\n if (isSlotSegCollision(seg, otherSegs[i])) {\r\n results.push(otherSegs[i]);\r\n }\r\n }\r\n return results;\r\n}\r\n// Do these segments occupy the same vertical space?\r\nfunction isSlotSegCollision(seg1, seg2) {\r\n return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\r\n}\r\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar TimeGridHelperRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGridHelperRenderer, _super);\r\n function TimeGridHelperRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n var helperNodes = [];\r\n var i;\r\n var seg;\r\n var sourceEl;\r\n // TODO: not good to call eventRenderer this way\r\n this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);\r\n // Try to make the segment that is in the same row as sourceSeg look the same\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n if (sourceSeg && sourceSeg.col === seg.col) {\r\n sourceEl = sourceSeg.el;\r\n seg.el.css({\r\n left: sourceEl.css('left'),\r\n right: sourceEl.css('right'),\r\n 'margin-left': sourceEl.css('margin-left'),\r\n 'margin-right': sourceEl.css('margin-right')\r\n });\r\n }\r\n helperNodes.push(seg.el[0]);\r\n }\r\n return $(helperNodes); // must return the elements rendered\r\n };\r\n return TimeGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = TimeGridHelperRenderer;\r\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar TimeGridFillRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGridFillRenderer, _super);\r\n function TimeGridFillRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n var timeGrid = this.component;\r\n var containerEls;\r\n // TODO: more efficient lookup\r\n if (type === 'bgEvent') {\r\n containerEls = timeGrid.bgContainerEls;\r\n }\r\n else if (type === 'businessHours') {\r\n containerEls = timeGrid.businessContainerEls;\r\n }\r\n else if (type === 'highlight') {\r\n containerEls = timeGrid.highlightContainerEls;\r\n }\r\n timeGrid.updateSegVerticals(segs);\r\n timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\r\n return segs.map(function (seg) {\r\n return seg.el[0];\r\n });\r\n };\r\n return TimeGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = TimeGridFillRenderer;\r\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/* Event-rendering methods for the DayGrid class\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGridEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGridEventRenderer, _super);\r\n function DayGridEventRenderer(dayGrid, fillRenderer) {\r\n var _this = _super.call(this, dayGrid, fillRenderer) || this;\r\n _this.dayGrid = dayGrid;\r\n return _this;\r\n }\r\n DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n // don't render timed background events\r\n eventRanges = $.grep(eventRanges, function (eventRange) {\r\n return eventRange.eventDef.isAllDay();\r\n });\r\n _super.prototype.renderBgRanges.call(this, eventRanges);\r\n };\r\n // Renders the given foreground event segments onto the grid\r\n DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n var rowStructs = this.rowStructs = this.renderSegRows(segs);\r\n // append to each row's content skeleton\r\n this.dayGrid.rowEls.each(function (i, rowNode) {\r\n $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\r\n });\r\n };\r\n // Unrenders all currently rendered foreground event segments\r\n DayGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n var rowStructs = this.rowStructs || [];\r\n var rowStruct;\r\n while ((rowStruct = rowStructs.pop())) {\r\n rowStruct.tbodyEl.remove();\r\n }\r\n this.rowStructs = null;\r\n };\r\n // Uses the given events array to generate elements that should be appended to each row's content skeleton.\r\n // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\r\n // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\r\n DayGridEventRenderer.prototype.renderSegRows = function (segs) {\r\n var rowStructs = [];\r\n var segRows;\r\n var row;\r\n segRows = this.groupSegRows(segs); // group into nested arrays\r\n // iterate each row of segment groupings\r\n for (row = 0; row < segRows.length; row++) {\r\n rowStructs.push(this.renderSegRow(row, segRows[row]));\r\n }\r\n return rowStructs;\r\n };\r\n // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains\r\n // the segments. Returns object with a bunch of internal data about how the render was calculated.\r\n // NOTE: modifies rowSegs\r\n DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\r\n var colCnt = this.dayGrid.colCnt;\r\n var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\r\n var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\r\n var tbody = $('');\r\n var segMatrix = []; // lookup for which segments are rendered into which level+col cells\r\n var cellMatrix = []; // lookup for all elements of the level+col matrix\r\n var loneCellMatrix = []; // lookup for elements that only take up a single column\r\n var i;\r\n var levelSegs;\r\n var col;\r\n var tr;\r\n var j;\r\n var seg;\r\n var td;\r\n // populates empty cells from the current column (`col`) to `endCol`\r\n function emptyCellsUntil(endCol) {\r\n while (col < endCol) {\r\n // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\r\n td = (loneCellMatrix[i - 1] || [])[col];\r\n if (td) {\r\n td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\r\n }\r\n else {\r\n td = $('');\r\n tr.append(td);\r\n }\r\n cellMatrix[i][col] = td;\r\n loneCellMatrix[i][col] = td;\r\n col++;\r\n }\r\n }\r\n for (i = 0; i < levelCnt; i++) { // iterate through all levels\r\n levelSegs = segLevels[i];\r\n col = 0;\r\n tr = $('');\r\n segMatrix.push([]);\r\n cellMatrix.push([]);\r\n loneCellMatrix.push([]);\r\n // levelCnt might be 1 even though there are no actual levels. protect against this.\r\n // this single empty row is useful for styling.\r\n if (levelSegs) {\r\n for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\r\n seg = levelSegs[j];\r\n emptyCellsUntil(seg.leftCol);\r\n // create a container that occupies or more columns. append the event element.\r\n td = $('').append(seg.el);\r\n if (seg.leftCol !== seg.rightCol) {\r\n td.attr('colspan', seg.rightCol - seg.leftCol + 1);\r\n }\r\n else { // a single-column segment\r\n loneCellMatrix[i][col] = td;\r\n }\r\n while (col <= seg.rightCol) {\r\n cellMatrix[i][col] = td;\r\n segMatrix[i][col] = seg;\r\n col++;\r\n }\r\n tr.append(td);\r\n }\r\n }\r\n emptyCellsUntil(colCnt); // finish off the row\r\n this.dayGrid.bookendCells(tr);\r\n tbody.append(tr);\r\n }\r\n return {\r\n row: row,\r\n tbodyEl: tbody,\r\n cellMatrix: cellMatrix,\r\n segMatrix: segMatrix,\r\n segLevels: segLevels,\r\n segs: rowSegs\r\n };\r\n };\r\n // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\r\n // NOTE: modifies segs\r\n DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\r\n var levels = [];\r\n var i;\r\n var seg;\r\n var j;\r\n // Give preference to elements with certain criteria, so they have\r\n // a chance to be closer to the top.\r\n this.sortEventSegs(segs);\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\r\n for (j = 0; j < levels.length; j++) {\r\n if (!isDaySegCollision(seg, levels[j])) {\r\n break;\r\n }\r\n }\r\n // `j` now holds the desired subrow index\r\n seg.level = j;\r\n // create new level array if needed and append segment\r\n (levels[j] || (levels[j] = [])).push(seg);\r\n }\r\n // order segments left-to-right. very important if calendar is RTL\r\n for (j = 0; j < levels.length; j++) {\r\n levels[j].sort(compareDaySegCols);\r\n }\r\n return levels;\r\n };\r\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\r\n DayGridEventRenderer.prototype.groupSegRows = function (segs) {\r\n var segRows = [];\r\n var i;\r\n for (i = 0; i < this.dayGrid.rowCnt; i++) {\r\n segRows.push([]);\r\n }\r\n for (i = 0; i < segs.length; i++) {\r\n segRows[segs[i].row].push(segs[i]);\r\n }\r\n return segRows;\r\n };\r\n // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\r\n };\r\n // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\r\n };\r\n // Builds the HTML to be used for the default element for an individual segment\r\n DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n var view = this.view;\r\n var eventDef = seg.footprint.eventDef;\r\n var isAllDay = seg.footprint.componentFootprint.isAllDay;\r\n var isDraggable = view.isEventDefDraggable(eventDef);\r\n var isResizableFromStart = !disableResizing && isAllDay &&\r\n seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n var isResizableFromEnd = !disableResizing && isAllDay &&\r\n seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n var timeHtml = '';\r\n var timeText;\r\n var titleHtml;\r\n classes.unshift('fc-day-grid-event', 'fc-h-event');\r\n // Only display a timed events time if it is the starting segment\r\n if (seg.isStart) {\r\n timeText = this.getTimeText(seg.footprint);\r\n if (timeText) {\r\n timeHtml = '' + util_1.htmlEscape(timeText) + '';\r\n }\r\n }\r\n titleHtml =\r\n '' +\r\n (util_1.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height\r\n '';\r\n return '' +\r\n '
' +\r\n (this.dayGrid.isRTL ?\r\n titleHtml + ' ' + timeHtml : // put a natural space in between\r\n timeHtml + ' ' + titleHtml //\r\n ) +\r\n '
' +\r\n (isResizableFromStart ?\r\n '
' :\r\n '') +\r\n (isResizableFromEnd ?\r\n '
' :\r\n '') +\r\n '
';\r\n };\r\n return DayGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = DayGridEventRenderer;\r\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\r\nfunction isDaySegCollision(seg, otherSegs) {\r\n var i;\r\n var otherSeg;\r\n for (i = 0; i < otherSegs.length; i++) {\r\n otherSeg = otherSegs[i];\r\n if (otherSeg.leftCol <= seg.rightCol &&\r\n otherSeg.rightCol >= seg.leftCol) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n// A cmp function for determining the leftmost event\r\nfunction compareDaySegCols(a, b) {\r\n return a.leftCol - b.leftCol;\r\n}\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar DayGridHelperRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGridHelperRenderer, _super);\r\n function DayGridHelperRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\r\n DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n var helperNodes = [];\r\n var rowStructs;\r\n // TODO: not good to call eventRenderer this way\r\n rowStructs = this.eventRenderer.renderSegRows(segs);\r\n // inject each new event skeleton into each associated row\r\n this.component.rowEls.each(function (row, rowNode) {\r\n var rowEl = $(rowNode); // the .fc-row\r\n var skeletonEl = $('
'); // will be absolutely positioned\r\n var skeletonTopEl;\r\n var skeletonTop;\r\n // If there is an original segment, match the top position. Otherwise, put it at the row's top level\r\n if (sourceSeg && sourceSeg.row === row) {\r\n skeletonTop = sourceSeg.el.position().top;\r\n }\r\n else {\r\n skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\r\n if (!skeletonTopEl.length) { // when no events\r\n skeletonTopEl = rowEl.find('.fc-content-skeleton table');\r\n }\r\n skeletonTop = skeletonTopEl.position().top;\r\n }\r\n skeletonEl.css('top', skeletonTop)\r\n .find('table')\r\n .append(rowStructs[row].tbodyEl);\r\n rowEl.append(skeletonEl);\r\n helperNodes.push(skeletonEl[0]);\r\n });\r\n return $(helperNodes); // must return the elements rendered\r\n };\r\n return DayGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = DayGridHelperRenderer;\r\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar DayGridFillRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGridFillRenderer, _super);\r\n function DayGridFillRenderer() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.fillSegTag = 'td'; // override the default tag name\r\n return _this;\r\n }\r\n DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n var nodes = [];\r\n var i;\r\n var seg;\r\n var skeletonEl;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n skeletonEl = this.renderFillRow(type, seg);\r\n this.component.rowEls.eq(seg.row).append(skeletonEl);\r\n nodes.push(skeletonEl[0]);\r\n }\r\n return nodes;\r\n };\r\n // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\r\n DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\r\n var colCnt = this.component.colCnt;\r\n var startCol = seg.leftCol;\r\n var endCol = seg.rightCol + 1;\r\n var className;\r\n var skeletonEl;\r\n var trEl;\r\n if (type === 'businessHours') {\r\n className = 'bgevent';\r\n }\r\n else {\r\n className = type.toLowerCase();\r\n }\r\n skeletonEl = $('
' +\r\n '
' +\r\n '
');\r\n trEl = skeletonEl.find('tr');\r\n if (startCol > 0) {\r\n trEl.append(\r\n // will create (startCol + 1) td's\r\n new Array(startCol + 1).join(''));\r\n }\r\n trEl.append(seg.el.attr('colspan', endCol - startCol));\r\n if (endCol < colCnt) {\r\n trEl.append(\r\n // will create (colCnt - endCol) td's\r\n new Array(colCnt - endCol + 1).join(''));\r\n }\r\n this.component.bookendCells(trEl);\r\n return skeletonEl;\r\n };\r\n return DayGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = DayGridFillRenderer;\r\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\n/* A month view with day cells running in rows (one-per-week) and columns\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MonthView = /** @class */ (function (_super) {\r\n tslib_1.__extends(MonthView, _super);\r\n function MonthView() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Overrides the default BasicView behavior to have special multi-week auto-height logic\r\n MonthView.prototype.setGridHeight = function (height, isAuto) {\r\n // if auto, make the height of each row the height that it would be if there were 6 weeks\r\n if (isAuto) {\r\n height *= this.dayGrid.rowCnt / 6;\r\n }\r\n util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\r\n };\r\n MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\r\n };\r\n return MonthView;\r\n}(BasicView_1.default));\r\nexports.default = MonthView;\r\nMonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;\r\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar MonthViewDateProfileGenerator = /** @class */ (function (_super) {\r\n tslib_1.__extends(MonthViewDateProfileGenerator, _super);\r\n function MonthViewDateProfileGenerator() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Computes the date range that will be rendered.\r\n MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\r\n var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n var rowCnt;\r\n // ensure 6 weeks\r\n if (this.opt('fixedWeekCount')) {\r\n rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\r\n end.diff(start, 'weeks', true) // dontRound=true\r\n );\r\n end.add(6 - rowCnt, 'weeks');\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n return MonthViewDateProfileGenerator;\r\n}(BasicViewDateProfileGenerator_1.default));\r\nexports.default = MonthViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar View_1 = __webpack_require__(43);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\n/*\r\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n*/\r\nvar ListView = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListView, _super);\r\n function ListView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.segSelector = '.fc-list-item'; // which elements accept event actions\r\n _this.scroller = new Scroller_1.default({\r\n overflowX: 'hidden',\r\n overflowY: 'auto'\r\n });\r\n return _this;\r\n }\r\n ListView.prototype.renderSkeleton = function () {\r\n this.el.addClass('fc-list-view ' +\r\n this.calendar.theme.getClass('listView'));\r\n this.scroller.render();\r\n this.scroller.el.appendTo(this.el);\r\n this.contentEl = this.scroller.scrollEl; // shortcut\r\n };\r\n ListView.prototype.unrenderSkeleton = function () {\r\n this.scroller.destroy(); // will remove the Grid too\r\n };\r\n ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n if (!isAuto) {\r\n this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\r\n }\r\n };\r\n ListView.prototype.computeScrollerHeight = function (totalHeight) {\r\n return totalHeight -\r\n util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n };\r\n ListView.prototype.renderDates = function (dateProfile) {\r\n var calendar = this.calendar;\r\n var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\r\n var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\r\n var dayDates = [];\r\n var dayRanges = [];\r\n while (dayStart < viewEnd) {\r\n dayDates.push(dayStart.clone());\r\n dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));\r\n dayStart.add(1, 'day');\r\n }\r\n this.dayDates = dayDates;\r\n this.dayRanges = dayRanges;\r\n // all real rendering happens in EventRenderer\r\n };\r\n // slices by day\r\n ListView.prototype.componentFootprintToSegs = function (footprint) {\r\n var dayRanges = this.dayRanges;\r\n var dayIndex;\r\n var segRange;\r\n var seg;\r\n var segs = [];\r\n for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\r\n segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\r\n if (segRange) {\r\n seg = {\r\n startMs: segRange.startMs,\r\n endMs: segRange.endMs,\r\n isStart: segRange.isStart,\r\n isEnd: segRange.isEnd,\r\n dayIndex: dayIndex\r\n };\r\n segs.push(seg);\r\n // detect when footprint won't go fully into the next day,\r\n // and mutate the latest seg to the be the end.\r\n if (!seg.isEnd && !footprint.isAllDay &&\r\n dayIndex + 1 < dayRanges.length &&\r\n footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\r\n seg.endMs = footprint.unzonedRange.endMs;\r\n seg.isEnd = true;\r\n break;\r\n }\r\n }\r\n }\r\n return segs;\r\n };\r\n ListView.prototype.renderEmptyMessage = function () {\r\n this.contentEl.html('
' + // TODO: try less wraps\r\n '
' +\r\n '
' +\r\n util_1.htmlEscape(this.opt('noEventsMessage')) +\r\n '
' +\r\n '
' +\r\n '
');\r\n };\r\n // render the event segments in the view\r\n ListView.prototype.renderSegList = function (allSegs) {\r\n var segsByDay = this.groupSegsByDay(allSegs); // sparse array\r\n var dayIndex;\r\n var daySegs;\r\n var i;\r\n var tableEl = $('
');\r\n var tbodyEl = tableEl.find('tbody');\r\n for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\r\n daySegs = segsByDay[dayIndex];\r\n if (daySegs) { // sparse array, so might be undefined\r\n // append a day header\r\n tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\r\n this.eventRenderer.sortEventSegs(daySegs);\r\n for (i = 0; i < daySegs.length; i++) {\r\n tbodyEl.append(daySegs[i].el); // append event row\r\n }\r\n }\r\n }\r\n this.contentEl.empty().append(tableEl);\r\n };\r\n // Returns a sparse array of arrays, segs grouped by their dayIndex\r\n ListView.prototype.groupSegsByDay = function (segs) {\r\n var segsByDay = []; // sparse array\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\r\n .push(seg);\r\n }\r\n return segsByDay;\r\n };\r\n // generates the HTML for the day headers that live amongst the event rows\r\n ListView.prototype.dayHeaderHtml = function (dayDate) {\r\n var mainFormat = this.opt('listDayFormat');\r\n var altFormat = this.opt('listDayAltFormat');\r\n return '' +\r\n '' +\r\n (mainFormat ?\r\n this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\r\n ) :\r\n '') +\r\n (altFormat ?\r\n this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\r\n ) :\r\n '') +\r\n '' +\r\n '';\r\n };\r\n return ListView;\r\n}(View_1.default));\r\nexports.default = ListView;\r\nListView.prototype.eventRendererClass = ListEventRenderer_1.default;\r\nListView.prototype.eventPointingClass = ListEventPointing_1.default;\r\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nvar ListEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListEventRenderer, _super);\r\n function ListEventRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ListEventRenderer.prototype.renderFgSegs = function (segs) {\r\n if (!segs.length) {\r\n this.component.renderEmptyMessage();\r\n }\r\n else {\r\n this.component.renderSegList(segs);\r\n }\r\n };\r\n // generates the HTML for a single event row\r\n ListEventRenderer.prototype.fgSegHtml = function (seg) {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var theme = calendar.theme;\r\n var eventFootprint = seg.footprint;\r\n var eventDef = eventFootprint.eventDef;\r\n var componentFootprint = eventFootprint.componentFootprint;\r\n var url = eventDef.url;\r\n var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\r\n var bgColor = this.getBgColor(eventDef);\r\n var timeHtml;\r\n if (componentFootprint.isAllDay) {\r\n timeHtml = view.getAllDayHtml();\r\n }\r\n else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\r\n timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\r\n }\r\n else { // inner segment that lasts the whole day\r\n timeHtml = view.getAllDayHtml();\r\n }\r\n }\r\n else {\r\n // Display the normal time text for the *event's* times\r\n timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\r\n }\r\n if (url) {\r\n classes.push('fc-has-url');\r\n }\r\n return '' +\r\n (this.displayEventTime ?\r\n '' +\r\n (timeHtml || '') +\r\n '' :\r\n '') +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n util_1.htmlEscape(eventDef.title || '') +\r\n '' +\r\n '' +\r\n '';\r\n };\r\n // like \"4:00am\"\r\n ListEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('mediumTimeFormat');\r\n };\r\n return ListEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = ListEventRenderer;\r\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar ListEventPointing = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListEventPointing, _super);\r\n function ListEventPointing() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // for events with a url, the whole should be clickable,\r\n // but it's impossible to wrap with an tag. simulate this.\r\n ListEventPointing.prototype.handleClick = function (seg, ev) {\r\n var url;\r\n _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\r\n // not clicking on or within an with an href\r\n if (!$(ev.target).closest('a[href]').length) {\r\n url = seg.footprint.eventDef.url;\r\n if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\r\n window.location.href = url; // simulate link click\r\n }\r\n }\r\n };\r\n return ListEventPointing;\r\n}(EventPointing_1.default));\r\nexports.default = ListEventPointing;\r\n\n\n/***/ }),\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar Calendar_1 = __webpack_require__(232);\r\n// for intentional side-effects\r\n__webpack_require__(11);\r\n__webpack_require__(49);\r\n__webpack_require__(260);\r\n__webpack_require__(261);\r\n__webpack_require__(264);\r\n__webpack_require__(265);\r\n__webpack_require__(266);\r\n__webpack_require__(267);\r\n$.fullCalendar = exportHooks;\r\n$.fn.fullCalendar = function (options) {\r\n var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\r\n var res = this; // what this function will return (this jQuery object by default)\r\n this.each(function (i, _element) {\r\n var element = $(_element);\r\n var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\r\n var singleRes; // the returned value of this single method call\r\n // a method call\r\n if (typeof options === 'string') {\r\n if (options === 'getCalendar') {\r\n if (!i) { // first element only\r\n res = calendar;\r\n }\r\n }\r\n else if (options === 'destroy') { // don't warn if no calendar object\r\n if (calendar) {\r\n calendar.destroy();\r\n element.removeData('fullCalendar');\r\n }\r\n }\r\n else if (!calendar) {\r\n util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\r\n }\r\n else if ($.isFunction(calendar[options])) {\r\n singleRes = calendar[options].apply(calendar, args);\r\n if (!i) {\r\n res = singleRes; // record the first method call result\r\n }\r\n if (options === 'destroy') { // for the destroy method, must remove Calendar object data\r\n element.removeData('fullCalendar');\r\n }\r\n }\r\n else {\r\n util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\r\n }\r\n }\r\n else if (!calendar) { // don't initialize twice\r\n calendar = new Calendar_1.default(element, options);\r\n element.data('fullCalendar', calendar);\r\n calendar.render();\r\n }\r\n });\r\n return res;\r\n};\r\nmodule.exports = exportHooks;\r\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/* Toolbar with buttons and title\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar Toolbar = /** @class */ (function () {\r\n function Toolbar(calendar, toolbarOptions) {\r\n this.el = null; // mirrors local `el`\r\n this.viewsWithButtons = [];\r\n this.calendar = calendar;\r\n this.toolbarOptions = toolbarOptions;\r\n }\r\n // method to update toolbar-specific options, not calendar-wide options\r\n Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\r\n this.toolbarOptions = newToolbarOptions;\r\n };\r\n // can be called repeatedly and will rerender\r\n Toolbar.prototype.render = function () {\r\n var sections = this.toolbarOptions.layout;\r\n var el = this.el;\r\n if (sections) {\r\n if (!el) {\r\n el = this.el = $(\"
\");\r\n }\r\n else {\r\n el.empty();\r\n }\r\n el.append(this.renderSection('left'))\r\n .append(this.renderSection('right'))\r\n .append(this.renderSection('center'))\r\n .append('
');\r\n }\r\n else {\r\n this.removeElement();\r\n }\r\n };\r\n Toolbar.prototype.removeElement = function () {\r\n if (this.el) {\r\n this.el.remove();\r\n this.el = null;\r\n }\r\n };\r\n Toolbar.prototype.renderSection = function (position) {\r\n var _this = this;\r\n var calendar = this.calendar;\r\n var theme = calendar.theme;\r\n var optionsManager = calendar.optionsManager;\r\n var viewSpecManager = calendar.viewSpecManager;\r\n var sectionEl = $('
');\r\n var buttonStr = this.toolbarOptions.layout[position];\r\n var calendarCustomButtons = optionsManager.get('customButtons') || {};\r\n var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\r\n var calendarButtonText = optionsManager.get('buttonText') || {};\r\n if (buttonStr) {\r\n $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\r\n var groupChildren = $();\r\n var isOnlyButtons = true;\r\n var groupEl;\r\n $.each(buttonGroupStr.split(','), function (j, buttonName) {\r\n var customButtonProps;\r\n var viewSpec;\r\n var buttonClick;\r\n var buttonIcon; // only one of these will be set\r\n var buttonText; // \"\r\n var buttonInnerHtml;\r\n var buttonClasses;\r\n var buttonEl;\r\n var buttonAriaAttr;\r\n if (buttonName === 'title') {\r\n groupChildren = groupChildren.add($('

 

')); // we always want it to take up height\r\n isOnlyButtons = false;\r\n }\r\n else {\r\n if ((customButtonProps = calendarCustomButtons[buttonName])) {\r\n buttonClick = function (ev) {\r\n if (customButtonProps.click) {\r\n customButtonProps.click.call(buttonEl[0], ev);\r\n }\r\n };\r\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\r\n (buttonIcon = theme.getIconClass(buttonName)) ||\r\n (buttonText = customButtonProps.text);\r\n }\r\n else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {\r\n _this.viewsWithButtons.push(buttonName);\r\n buttonClick = function () {\r\n calendar.changeView(buttonName);\r\n };\r\n (buttonText = viewSpec.buttonTextOverride) ||\r\n (buttonIcon = theme.getIconClass(buttonName)) ||\r\n (buttonText = viewSpec.buttonTextDefault);\r\n }\r\n else if (calendar[buttonName]) { // a calendar method\r\n buttonClick = function () {\r\n calendar[buttonName]();\r\n };\r\n (buttonText = calendarButtonTextOverrides[buttonName]) ||\r\n (buttonIcon = theme.getIconClass(buttonName)) ||\r\n (buttonText = calendarButtonText[buttonName]);\r\n // ^ everything else is considered default\r\n }\r\n if (buttonClick) {\r\n buttonClasses = [\r\n 'fc-' + buttonName + '-button',\r\n theme.getClass('button'),\r\n theme.getClass('stateDefault')\r\n ];\r\n if (buttonText) {\r\n buttonInnerHtml = util_1.htmlEscape(buttonText);\r\n buttonAriaAttr = '';\r\n }\r\n else if (buttonIcon) {\r\n buttonInnerHtml = \"\";\r\n buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\r\n }\r\n buttonEl = $(// type=\"button\" so that it doesn't submit a form\r\n '')\r\n .click(function (ev) {\r\n // don't process clicks for disabled buttons\r\n if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n buttonClick(ev);\r\n // after the click action, if the button becomes the \"active\" tab, or disabled,\r\n // it should never have a hover class, so remove it now.\r\n if (buttonEl.hasClass(theme.getClass('stateActive')) ||\r\n buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n buttonEl.removeClass(theme.getClass('stateHover'));\r\n }\r\n }\r\n })\r\n .mousedown(function () {\r\n // the *down* effect (mouse pressed in).\r\n // only on buttons that are not the \"active\" tab, or disabled\r\n buttonEl\r\n .not('.' + theme.getClass('stateActive'))\r\n .not('.' + theme.getClass('stateDisabled'))\r\n .addClass(theme.getClass('stateDown'));\r\n })\r\n .mouseup(function () {\r\n // undo the *down* effect\r\n buttonEl.removeClass(theme.getClass('stateDown'));\r\n })\r\n .hover(function () {\r\n // the *hover* effect.\r\n // only on buttons that are not the \"active\" tab, or disabled\r\n buttonEl\r\n .not('.' + theme.getClass('stateActive'))\r\n .not('.' + theme.getClass('stateDisabled'))\r\n .addClass(theme.getClass('stateHover'));\r\n }, function () {\r\n // undo the *hover* effect\r\n buttonEl\r\n .removeClass(theme.getClass('stateHover'))\r\n .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\r\n });\r\n groupChildren = groupChildren.add(buttonEl);\r\n }\r\n }\r\n });\r\n if (isOnlyButtons) {\r\n groupChildren\r\n .first().addClass(theme.getClass('cornerLeft')).end()\r\n .last().addClass(theme.getClass('cornerRight')).end();\r\n }\r\n if (groupChildren.length > 1) {\r\n groupEl = $('
');\r\n if (isOnlyButtons) {\r\n groupEl.addClass(theme.getClass('buttonGroup'));\r\n }\r\n groupEl.append(groupChildren);\r\n sectionEl.append(groupEl);\r\n }\r\n else {\r\n sectionEl.append(groupChildren); // 1 or 0 children\r\n }\r\n });\r\n }\r\n return sectionEl;\r\n };\r\n Toolbar.prototype.updateTitle = function (text) {\r\n if (this.el) {\r\n this.el.find('h2').text(text);\r\n }\r\n };\r\n Toolbar.prototype.activateButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .addClass(this.calendar.theme.getClass('stateActive'));\r\n }\r\n };\r\n Toolbar.prototype.deactivateButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .removeClass(this.calendar.theme.getClass('stateActive'));\r\n }\r\n };\r\n Toolbar.prototype.disableButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .prop('disabled', true)\r\n .addClass(this.calendar.theme.getClass('stateDisabled'));\r\n }\r\n };\r\n Toolbar.prototype.enableButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .prop('disabled', false)\r\n .removeClass(this.calendar.theme.getClass('stateDisabled'));\r\n }\r\n };\r\n Toolbar.prototype.getViewsWithButtons = function () {\r\n return this.viewsWithButtons;\r\n };\r\n return Toolbar;\r\n}());\r\nexports.default = Toolbar;\r\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar Model_1 = __webpack_require__(51);\r\nvar OptionsManager = /** @class */ (function (_super) {\r\n tslib_1.__extends(OptionsManager, _super);\r\n function OptionsManager(_calendar, overrides) {\r\n var _this = _super.call(this) || this;\r\n _this._calendar = _calendar;\r\n _this.overrides = $.extend({}, overrides); // make a copy\r\n _this.dynamicOverrides = {};\r\n _this.compute();\r\n return _this;\r\n }\r\n OptionsManager.prototype.add = function (newOptionHash) {\r\n var optionCnt = 0;\r\n var optionName;\r\n this.recordOverrides(newOptionHash); // will trigger this model's watchers\r\n for (optionName in newOptionHash) {\r\n optionCnt++;\r\n }\r\n // special-case handling of single option change.\r\n // if only one option change, `optionName` will be its name.\r\n if (optionCnt === 1) {\r\n if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\r\n this._calendar.updateViewSize(true); // isResize=true\r\n return;\r\n }\r\n else if (optionName === 'defaultDate') {\r\n return; // can't change date this way. use gotoDate instead\r\n }\r\n else if (optionName === 'businessHours') {\r\n return; // this model already reacts to this\r\n }\r\n else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\r\n return; // doesn't affect rendering. only interactions.\r\n }\r\n else if (optionName === 'timezone') {\r\n this._calendar.view.flash('initialEvents');\r\n return;\r\n }\r\n }\r\n // catch-all. rerender the header and footer and rebuild/rerender the current view\r\n this._calendar.renderHeader();\r\n this._calendar.renderFooter();\r\n // even non-current views will be affected by this option change. do before rerender\r\n // TODO: detangle\r\n this._calendar.viewsByType = {};\r\n this._calendar.reinitView();\r\n };\r\n // Computes the flattened options hash for the calendar and assigns to `this.options`.\r\n // Assumes this.overrides and this.dynamicOverrides have already been initialized.\r\n OptionsManager.prototype.compute = function () {\r\n var locale;\r\n var localeDefaults;\r\n var isRTL;\r\n var dirDefaults;\r\n var rawOptions;\r\n locale = util_1.firstDefined(// explicit locale option given?\r\n this.dynamicOverrides.locale, this.overrides.locale);\r\n localeDefaults = locale_1.localeOptionHash[locale];\r\n if (!localeDefaults) { // explicit locale option not given or invalid?\r\n locale = options_1.globalDefaults.locale;\r\n localeDefaults = locale_1.localeOptionHash[locale] || {};\r\n }\r\n isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?\r\n this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\r\n dirDefaults = isRTL ? options_1.rtlDefaults : {};\r\n this.dirDefaults = dirDefaults;\r\n this.localeDefaults = localeDefaults;\r\n rawOptions = options_1.mergeOptions([\r\n options_1.globalDefaults,\r\n dirDefaults,\r\n localeDefaults,\r\n this.overrides,\r\n this.dynamicOverrides\r\n ]);\r\n locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\r\n this.reset(rawOptions);\r\n };\r\n // stores the new options internally, but does not rerender anything.\r\n OptionsManager.prototype.recordOverrides = function (newOptionHash) {\r\n var optionName;\r\n for (optionName in newOptionHash) {\r\n this.dynamicOverrides[optionName] = newOptionHash[optionName];\r\n }\r\n this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\r\n this.compute(); // this.options needs to be recomputed after the dynamic override\r\n };\r\n return OptionsManager;\r\n}(Model_1.default));\r\nexports.default = OptionsManager;\r\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar ViewSpecManager = /** @class */ (function () {\r\n function ViewSpecManager(optionsManager, _calendar) {\r\n this.optionsManager = optionsManager;\r\n this._calendar = _calendar;\r\n this.clearCache();\r\n }\r\n ViewSpecManager.prototype.clearCache = function () {\r\n this.viewSpecCache = {};\r\n };\r\n // Gets information about how to create a view. Will use a cache.\r\n ViewSpecManager.prototype.getViewSpec = function (viewType) {\r\n var cache = this.viewSpecCache;\r\n return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\r\n };\r\n // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\r\n // Preference is given to views that have corresponding buttons.\r\n ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\r\n var viewTypes;\r\n var i;\r\n var spec;\r\n if ($.inArray(unit, util_1.unitsDesc) !== -1) {\r\n // put views that have buttons first. there will be duplicates, but oh well\r\n viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\r\n $.each(ViewRegistry_1.viewHash, function (viewType) {\r\n viewTypes.push(viewType);\r\n });\r\n for (i = 0; i < viewTypes.length; i++) {\r\n spec = this.getViewSpec(viewTypes[i]);\r\n if (spec) {\r\n if (spec.singleUnit === unit) {\r\n return spec;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n // Builds an object with information on how to create a given view\r\n ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\r\n var viewOverrides = this.optionsManager.overrides.views || {};\r\n var specChain = []; // for the view. lowest to highest priority\r\n var defaultsChain = []; // for the view. lowest to highest priority\r\n var overridesChain = []; // for the view. lowest to highest priority\r\n var viewType = requestedViewType;\r\n var spec; // for the view\r\n var overrides; // for the view\r\n var durationInput;\r\n var duration;\r\n var unit;\r\n // iterate from the specific view definition to a more general one until we hit an actual View class\r\n while (viewType) {\r\n spec = ViewRegistry_1.viewHash[viewType];\r\n overrides = viewOverrides[viewType];\r\n viewType = null; // clear. might repopulate for another iteration\r\n if (typeof spec === 'function') { // TODO: deprecate\r\n spec = { 'class': spec };\r\n }\r\n if (spec) {\r\n specChain.unshift(spec);\r\n defaultsChain.unshift(spec.defaults || {});\r\n durationInput = durationInput || spec.duration;\r\n viewType = viewType || spec.type;\r\n }\r\n if (overrides) {\r\n overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\r\n durationInput = durationInput || overrides.duration;\r\n viewType = viewType || overrides.type;\r\n }\r\n }\r\n spec = util_1.mergeProps(specChain);\r\n spec.type = requestedViewType;\r\n if (!spec['class']) {\r\n return false;\r\n }\r\n // fall back to top-level `duration` option\r\n durationInput = durationInput ||\r\n this.optionsManager.dynamicOverrides.duration ||\r\n this.optionsManager.overrides.duration;\r\n if (durationInput) {\r\n duration = moment.duration(durationInput);\r\n if (duration.valueOf()) { // valid?\r\n unit = util_1.computeDurationGreatestUnit(duration, durationInput);\r\n spec.duration = duration;\r\n spec.durationUnit = unit;\r\n // view is a single-unit duration, like \"week\" or \"day\"\r\n // incorporate options for this. lowest priority\r\n if (duration.as(unit) === 1) {\r\n spec.singleUnit = unit;\r\n overridesChain.unshift(viewOverrides[unit] || {});\r\n }\r\n }\r\n }\r\n spec.defaults = options_1.mergeOptions(defaultsChain);\r\n spec.overrides = options_1.mergeOptions(overridesChain);\r\n this.buildViewSpecOptions(spec);\r\n this.buildViewSpecButtonText(spec, requestedViewType);\r\n return spec;\r\n };\r\n // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\r\n ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\r\n var optionsManager = this.optionsManager;\r\n spec.options = options_1.mergeOptions([\r\n options_1.globalDefaults,\r\n spec.defaults,\r\n optionsManager.dirDefaults,\r\n optionsManager.localeDefaults,\r\n optionsManager.overrides,\r\n spec.overrides,\r\n optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\r\n ]);\r\n locale_1.populateInstanceComputableOptions(spec.options);\r\n };\r\n // Computes and assigns a view spec's buttonText-related options\r\n ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\r\n var optionsManager = this.optionsManager;\r\n // given an options object with a possible `buttonText` hash, lookup the buttonText for the\r\n // requested view, falling back to a generic unit entry like \"week\" or \"day\"\r\n function queryButtonText(options) {\r\n var buttonText = options.buttonText || {};\r\n return buttonText[requestedViewType] ||\r\n // view can decide to look up a certain key\r\n (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\r\n // a key like \"month\"\r\n (spec.singleUnit ? buttonText[spec.singleUnit] : null);\r\n }\r\n // highest to lowest priority\r\n spec.buttonTextOverride =\r\n queryButtonText(optionsManager.dynamicOverrides) ||\r\n queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\r\n spec.overrides.buttonText; // `buttonText` for view-specific options is a string\r\n // highest to lowest priority. mirrors buildViewSpecOptions\r\n spec.buttonTextDefault =\r\n queryButtonText(optionsManager.localeDefaults) ||\r\n queryButtonText(optionsManager.dirDefaults) ||\r\n spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\r\n queryButtonText(options_1.globalDefaults) ||\r\n (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\r\n requestedViewType; // fall back to given view name\r\n };\r\n return ViewSpecManager;\r\n}());\r\nexports.default = ViewSpecManager;\r\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nEventSourceParser_1.default.registerClass(ArrayEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(FuncEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);\r\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar Bootstrap3Theme_1 = __webpack_require__(262);\r\nvar Bootstrap4Theme_1 = __webpack_require__(263);\r\nThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);\r\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap3Theme = /** @class */ (function (_super) {\r\n tslib_1.__extends(Bootstrap3Theme, _super);\r\n function Bootstrap3Theme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Bootstrap3Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap3Theme;\r\nBootstrap3Theme.prototype.classes = {\r\n widget: 'fc-bootstrap3',\r\n tableGrid: 'table-bordered',\r\n tableList: 'table',\r\n tableListHeading: 'active',\r\n buttonGroup: 'btn-group',\r\n button: 'btn btn-default',\r\n stateActive: 'active',\r\n stateDisabled: 'disabled',\r\n today: 'alert alert-info',\r\n popover: 'panel panel-default',\r\n popoverHeader: 'panel-heading',\r\n popoverContent: 'panel-body',\r\n // day grid\r\n // for left/right border color when border is inset from edges (all-day in agenda view)\r\n // avoid `panel` class b/c don't want margins/radius. only border color.\r\n headerRow: 'panel-default',\r\n dayRow: 'panel-default',\r\n // list view\r\n listView: 'panel panel-default'\r\n};\r\nBootstrap3Theme.prototype.baseIconClass = 'glyphicon';\r\nBootstrap3Theme.prototype.iconClasses = {\r\n close: 'glyphicon-remove',\r\n prev: 'glyphicon-chevron-left',\r\n next: 'glyphicon-chevron-right',\r\n prevYear: 'glyphicon-backward',\r\n nextYear: 'glyphicon-forward'\r\n};\r\nBootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\r\nBootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\r\nBootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\r\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap4Theme = /** @class */ (function (_super) {\r\n tslib_1.__extends(Bootstrap4Theme, _super);\r\n function Bootstrap4Theme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Bootstrap4Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap4Theme;\r\nBootstrap4Theme.prototype.classes = {\r\n widget: 'fc-bootstrap4',\r\n tableGrid: 'table-bordered',\r\n tableList: 'table',\r\n tableListHeading: 'table-active',\r\n buttonGroup: 'btn-group',\r\n button: 'btn btn-primary',\r\n stateActive: 'active',\r\n stateDisabled: 'disabled',\r\n today: 'alert alert-info',\r\n popover: 'card card-primary',\r\n popoverHeader: 'card-header',\r\n popoverContent: 'card-body',\r\n // day grid\r\n // for left/right border color when border is inset from edges (all-day in agenda view)\r\n // avoid `table` class b/c don't want margins/padding/structure. only border color.\r\n headerRow: 'table-bordered',\r\n dayRow: 'table-bordered',\r\n // list view\r\n listView: 'card card-primary'\r\n};\r\nBootstrap4Theme.prototype.baseIconClass = 'fa';\r\nBootstrap4Theme.prototype.iconClasses = {\r\n close: 'fa-times',\r\n prev: 'fa-chevron-left',\r\n next: 'fa-chevron-right',\r\n prevYear: 'fa-angle-double-left',\r\n nextYear: 'fa-angle-double-right'\r\n};\r\nBootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\r\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthView_1 = __webpack_require__(246);\r\nViewRegistry_1.defineView('basic', {\r\n 'class': BasicView_1.default\r\n});\r\nViewRegistry_1.defineView('basicDay', {\r\n type: 'basic',\r\n duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('basicWeek', {\r\n type: 'basic',\r\n duration: { weeks: 1 }\r\n});\r\nViewRegistry_1.defineView('month', {\r\n 'class': MonthView_1.default,\r\n duration: { months: 1 },\r\n defaults: {\r\n fixedWeekCount: true\r\n }\r\n});\r\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar AgendaView_1 = __webpack_require__(238);\r\nViewRegistry_1.defineView('agenda', {\r\n 'class': AgendaView_1.default,\r\n defaults: {\r\n allDaySlot: true,\r\n slotDuration: '00:30:00',\r\n slotEventOverlap: true // a bad name. confused with overlap/constraint system\r\n }\r\n});\r\nViewRegistry_1.defineView('agendaDay', {\r\n type: 'agenda',\r\n duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('agendaWeek', {\r\n type: 'agenda',\r\n duration: { weeks: 1 }\r\n});\r\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar ListView_1 = __webpack_require__(248);\r\nViewRegistry_1.defineView('list', {\r\n 'class': ListView_1.default,\r\n buttonTextKey: 'list',\r\n defaults: {\r\n buttonText: 'list',\r\n listDayFormat: 'LL',\r\n noEventsMessage: 'No events to display'\r\n }\r\n});\r\nViewRegistry_1.defineView('listDay', {\r\n type: 'list',\r\n duration: { days: 1 },\r\n defaults: {\r\n listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\r\n }\r\n});\r\nViewRegistry_1.defineView('listWeek', {\r\n type: 'list',\r\n duration: { weeks: 1 },\r\n defaults: {\r\n listDayFormat: 'dddd',\r\n listDayAltFormat: 'LL'\r\n }\r\n});\r\nViewRegistry_1.defineView('listMonth', {\r\n type: 'list',\r\n duration: { month: 1 },\r\n defaults: {\r\n listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n }\r\n});\r\nViewRegistry_1.defineView('listYear', {\r\n type: 'list',\r\n duration: { year: 1 },\r\n defaults: {\r\n listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n }\r\n});\r\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});","/*!\n * FullCalendar Scheduler v1.10.4\n * Docs & License: https://fullcalendar.io/scheduler/\n * (c) 2019 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"fullcalendar\"), require(\"jquery\"), require(\"moment\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"fullcalendar\", \"jquery\", \"moment\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"fullcalendar\"), require(\"jquery\"), require(\"moment\")) : factory(root[\"FullCalendar\"], root[\"jQuery\"], root[\"moment\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 36);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/*\r\nderived from:\r\nhttps://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n\nonly include the helpers we need, to keep down filesize\r\n*/\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b)\r\n if (b.hasOwnProperty(p))\r\n d[p] = b[p]; };\r\nexports.__extends = function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ }),\n/* 3 */,\n/* 4 */,\n/* 5 */,\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceComponentFootprint = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceComponentFootprint, _super);\r\n function ResourceComponentFootprint(unzonedRange, isAllDay, resourceId) {\r\n var _this = _super.call(this, unzonedRange, isAllDay) || this;\r\n _this.resourceId = resourceId;\r\n return _this;\r\n }\r\n ResourceComponentFootprint.prototype.toLegacy = function (calendar) {\r\n var obj = _super.prototype.toLegacy.call(this, calendar);\r\n obj.resourceId = this.resourceId;\r\n return obj;\r\n };\r\n return ResourceComponentFootprint;\r\n}(fullcalendar_1.ComponentFootprint));\r\nexports.default = ResourceComponentFootprint;\r\n\n\n/***/ }),\n/* 7 */,\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceViewMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceViewMixin, _super);\r\n function ResourceViewMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ResourceViewMixin.mixInto = function (destClass) {\r\n var _this = this;\r\n fullcalendar_1.Mixin.mixInto.call(this, destClass);\r\n [\r\n 'bindBaseRenderHandlers',\r\n 'queryScroll',\r\n 'applyScroll',\r\n 'triggerDayClick',\r\n 'triggerSelect',\r\n 'triggerExternalDrop',\r\n 'handleResourceAdd',\r\n 'handleResourceRemove'\r\n ].forEach(function (methodName) {\r\n destClass.prototype[methodName] = _this.prototype[methodName];\r\n });\r\n };\r\n ResourceViewMixin.prototype.initResourceView = function () {\r\n var _this = this;\r\n // new task\r\n var resourceDeps = ['hasResources'];\r\n if (!this.canHandleSpecificResources) {\r\n resourceDeps.push('displayingDates');\r\n }\r\n this.watch('displayingResources', resourceDeps, function () {\r\n _this.requestResourcesRender(_this.get('currentResources'));\r\n }, function () {\r\n _this.requestResourcesUnrender();\r\n });\r\n // start relying on displayingResources\r\n this.watch('displayingBusinessHours', [\r\n 'businessHourGenerator',\r\n 'displayingResources',\r\n 'displayingDates'\r\n ], function (deps) {\r\n _this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n }, function () {\r\n _this.requestBusinessHoursUnrender();\r\n });\r\n // start relying on resource displaying rather than just current resources\r\n this.watch('displayingEvents', ['displayingResources', 'hasEvents'], function () {\r\n _this.requestEventsRender(_this.get('currentEvents'));\r\n }, function () {\r\n _this.requestEventsUnrender();\r\n });\r\n };\r\n // Logic: base render trigger should fire when BOTH the resources and dates have rendered,\r\n // but the unrender trigger should fire after ONLY the dates are about to be unrendered.\r\n ResourceViewMixin.prototype.bindBaseRenderHandlers = function () {\r\n var isResourcesRendered = false;\r\n var isDatesRendered = false;\r\n this.on('resourcesRendered', function () {\r\n if (!isResourcesRendered) {\r\n isResourcesRendered = true;\r\n if (isDatesRendered) {\r\n this.whenSizeUpdated(this.triggerViewRender);\r\n }\r\n }\r\n });\r\n this.on('datesRendered', function () {\r\n if (!isDatesRendered) {\r\n isDatesRendered = true;\r\n if (isResourcesRendered) {\r\n this.whenSizeUpdated(this.triggerViewRender);\r\n }\r\n }\r\n });\r\n this.on('before:resourcesUnrendered', function () {\r\n if (isResourcesRendered) {\r\n isResourcesRendered = false;\r\n }\r\n });\r\n this.on('before:datesUnrendered', function () {\r\n if (isDatesRendered) {\r\n isDatesRendered = false;\r\n this.triggerViewDestroy();\r\n }\r\n });\r\n };\r\n // Scroll\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceViewMixin.prototype.queryScroll = function () {\r\n var scroll = fullcalendar_1.View.prototype.queryScroll.apply(this, arguments);\r\n if (this.isResourcesRendered) {\r\n $.extend(scroll, this.queryResourceScroll());\r\n }\r\n return scroll;\r\n };\r\n ResourceViewMixin.prototype.applyScroll = function (scroll) {\r\n fullcalendar_1.View.prototype.applyScroll.apply(this, arguments);\r\n if (this.isResourcesRendered) {\r\n this.applyResourceScroll(scroll);\r\n }\r\n };\r\n ResourceViewMixin.prototype.queryResourceScroll = function () {\r\n return {}; // subclasses must implement\r\n };\r\n ResourceViewMixin.prototype.applyResourceScroll = function () {\r\n // subclasses must implement\r\n };\r\n // Rendering Utils\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceViewMixin.prototype.getResourceText = function (resource) {\r\n return this.getResourceTextFunc()(resource);\r\n };\r\n ResourceViewMixin.prototype.getResourceTextFunc = function () {\r\n if (this.resourceTextFunc) {\r\n return this.resourceTextFunc;\r\n }\r\n else {\r\n var func = this.opt('resourceText');\r\n if (typeof func !== 'function') {\r\n func = function (resource) { return resource.title || resource.id; };\r\n }\r\n this.resourceTextFunc = func;\r\n return func;\r\n }\r\n };\r\n // Resource Change Handling\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceViewMixin.prototype.handleResourceAdd = function (resource) {\r\n this.requestResourceRender(resource);\r\n };\r\n ResourceViewMixin.prototype.handleResourceRemove = function (resource) {\r\n this.requestResourceUnrender(resource);\r\n };\r\n // Resource Rendering\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceViewMixin.prototype.requestResourcesRender = function (resources) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeResourcesRender(resources);\r\n }, 'resource', 'init');\r\n };\r\n ResourceViewMixin.prototype.requestResourcesUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeResourcesUnrender();\r\n }, 'resource', 'destroy');\r\n };\r\n ResourceViewMixin.prototype.requestResourceRender = function (resource) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeResourceRender(resource);\r\n }, 'resource', 'add');\r\n };\r\n ResourceViewMixin.prototype.requestResourceUnrender = function (resource) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeResourceUnrender(resource);\r\n }, 'resource', 'remove');\r\n };\r\n // Resource High-level Rendering/Unrendering\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceViewMixin.prototype.executeResourcesRender = function (resources) {\r\n this.renderResources(resources);\r\n this.isResourcesRendered = true;\r\n this.trigger('resourcesRendered');\r\n };\r\n ResourceViewMixin.prototype.executeResourcesUnrender = function () {\r\n this.trigger('before:resourcesUnrendered');\r\n this.unrenderResources();\r\n this.isResourcesRendered = false;\r\n };\r\n ResourceViewMixin.prototype.executeResourceRender = function (resource) {\r\n this.renderResource(resource);\r\n };\r\n ResourceViewMixin.prototype.executeResourceUnrender = function (resource) {\r\n this.unrenderResource(resource);\r\n };\r\n // Triggering\r\n // ----------------------------------------------------------------------------------------------\r\n /*\r\n footprint is a ResourceComponentFootprint\r\n */\r\n ResourceViewMixin.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n var dateProfile = this.calendar.footprintToDateProfile(footprint);\r\n this.publiclyTrigger('dayClick', {\r\n context: dayEl,\r\n args: [\r\n dateProfile.start,\r\n ev,\r\n this,\r\n footprint.resourceId ?\r\n this.calendar.resourceManager.getResourceById(footprint.resourceId) :\r\n null\r\n ]\r\n });\r\n };\r\n /*\r\n footprint is a ResourceComponentFootprint\r\n */\r\n ResourceViewMixin.prototype.triggerSelect = function (footprint, ev) {\r\n var dateProfile = this.calendar.footprintToDateProfile(footprint);\r\n this.publiclyTrigger('select', {\r\n context: this,\r\n args: [\r\n dateProfile.start,\r\n dateProfile.end,\r\n ev,\r\n this,\r\n footprint.resourceId ?\r\n this.calendar.resourceManager.getResourceById(footprint.resourceId) :\r\n null\r\n ]\r\n });\r\n };\r\n // override the view's default trigger in order to provide a resourceId to the `drop` event\r\n // TODO: make more DRY with core\r\n ResourceViewMixin.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n // trigger 'drop' regardless of whether element represents an event\r\n this.publiclyTrigger('drop', {\r\n context: el[0],\r\n args: [\r\n singleEventDef.dateProfile.start.clone(),\r\n ev,\r\n ui,\r\n singleEventDef.getResourceIds()[0],\r\n this\r\n ]\r\n });\r\n if (isEvent) {\r\n // signal an external event landed\r\n this.publiclyTrigger('eventReceive', {\r\n context: this,\r\n args: [\r\n singleEventDef.buildInstance().toLegacy(),\r\n this\r\n ]\r\n });\r\n }\r\n };\r\n return ResourceViewMixin;\r\n}(fullcalendar_1.Mixin));\r\nexports.default = ResourceViewMixin;\r\nResourceViewMixin.prototype.isResourcesRendered = false;\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */,\n/* 12 */,\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceDayTableMixin_1 = __webpack_require__(21);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\nvar ResourceDayGrid = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceDayGrid, _super);\r\n function ResourceDayGrid(view) {\r\n var _this = _super.call(this, view) || this;\r\n _this.isResourceFootprintsEnabled = true;\r\n return _this;\r\n }\r\n ResourceDayGrid.prototype.renderDates = function (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n };\r\n ResourceDayGrid.prototype.renderResources = function (resources) {\r\n this.registerResources(resources);\r\n this.renderGrid();\r\n if (this.headContainerEl) {\r\n this.processHeadResourceEls(this.headContainerEl);\r\n }\r\n };\r\n // TODO: make DRY with ResourceTimeGrid\r\n ResourceDayGrid.prototype.getHitFootprint = function (hit) {\r\n var plainFootprint = _super.prototype.getHitFootprint.call(this, hit);\r\n return new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, this.getColResource(hit.col).id);\r\n };\r\n ResourceDayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n var resourceCnt = this.resourceCnt;\r\n var genericSegs = // no assigned resources\r\n this.datesAboveResources ?\r\n this.sliceRangeByDay(componentFootprint.unzonedRange) : // each day-per-resource will need its own column\r\n this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n var resourceSegs = [];\r\n for (var _i = 0, genericSegs_1 = genericSegs; _i < genericSegs_1.length; _i++) {\r\n var seg = genericSegs_1[_i];\r\n for (var resourceIndex = 0; resourceIndex < resourceCnt; resourceIndex++) {\r\n var resourceObj = this.flattenedResources[resourceIndex];\r\n if (!(componentFootprint instanceof ResourceComponentFootprint_1.default) ||\r\n (componentFootprint.resourceId === resourceObj.id)) {\r\n var copy = $.extend({}, seg);\r\n copy.resource = resourceObj;\r\n if (this.isRTL) {\r\n copy.leftCol = this.indicesToCol(resourceIndex, seg.lastRowDayIndex);\r\n copy.rightCol = this.indicesToCol(resourceIndex, seg.firstRowDayIndex);\r\n }\r\n else {\r\n copy.leftCol = this.indicesToCol(resourceIndex, seg.firstRowDayIndex);\r\n copy.rightCol = this.indicesToCol(resourceIndex, seg.lastRowDayIndex);\r\n }\r\n resourceSegs.push(copy);\r\n }\r\n }\r\n }\r\n return resourceSegs;\r\n };\r\n return ResourceDayGrid;\r\n}(fullcalendar_1.DayGrid));\r\nexports.default = ResourceDayGrid;\r\nResourceDayTableMixin_1.default.mixInto(ResourceDayGrid);\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar moment = __webpack_require__(15);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ClippedScroller_1 = __webpack_require__(24);\r\nvar ScrollerCanvas_1 = __webpack_require__(25);\r\nvar ScrollJoiner_1 = __webpack_require__(16);\r\nvar ScrollFollower_1 = __webpack_require__(26);\r\nvar TimelineEventRenderer_1 = __webpack_require__(17);\r\nvar TimelineFillRenderer_1 = __webpack_require__(28);\r\nvar TimelineHelperRenderer_1 = __webpack_require__(29);\r\nvar TimelineEventDragging_1 = __webpack_require__(40);\r\nvar TimelineEventResizing_1 = __webpack_require__(41);\r\nvar TimelineView_defaults_1 = __webpack_require__(42);\r\nvar TimelineView = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimelineView, _super);\r\n function TimelineView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.emphasizeWeeks = false;\r\n _this.isTimeBodyScrolled = false;\r\n _this.slotWidth = _this.opt('slotWidth');\r\n return _this;\r\n }\r\n // Footprints\r\n // ------------------------------------------------------------------------------------------------------------------\r\n /*\r\n TODO: avoid using Moments. use slat system somehow\r\n THEN, can have componentFootprintToSegs handle this on its own\r\n */\r\n TimelineView.prototype.normalizeComponentFootprint = function (componentFootprint) {\r\n var adjustedEnd;\r\n var adjustedStart;\r\n var unzonedRange = componentFootprint.unzonedRange;\r\n if (this.isTimeScale) {\r\n adjustedStart = this.normalizeGridDate(unzonedRange.getStart());\r\n adjustedEnd = this.normalizeGridDate(unzonedRange.getEnd());\r\n }\r\n else {\r\n var dayRange = this.computeDayRange(unzonedRange);\r\n if (this.largeUnit) {\r\n adjustedStart = dayRange.start.clone().startOf(this.largeUnit);\r\n adjustedEnd = dayRange.end.clone().startOf(this.largeUnit);\r\n // if date is partially through the interval, or is in the same interval as the start,\r\n // make the exclusive end be the *next* interval\r\n if (!adjustedEnd.isSame(dayRange.end) || !adjustedEnd.isAfter(adjustedStart)) {\r\n adjustedEnd.add(this.slotDuration);\r\n }\r\n }\r\n else {\r\n adjustedStart = dayRange.start;\r\n adjustedEnd = dayRange.end;\r\n }\r\n }\r\n return new fullcalendar_1.ComponentFootprint(new fullcalendar_1.UnzonedRange(adjustedStart, adjustedEnd), !this.isTimeScale // isAllDay\r\n );\r\n };\r\n TimelineView.prototype.componentFootprintToSegs = function (footprint) {\r\n var footprintStart = footprint.unzonedRange.getStart();\r\n var footprintEnd = footprint.unzonedRange.getEnd();\r\n var normalFootprint = this.normalizeComponentFootprint(footprint);\r\n var segs = [];\r\n // protect against when the span is entirely in an invalid date region\r\n if (this.computeDateSnapCoverage(footprintStart) < this.computeDateSnapCoverage(footprintEnd)) {\r\n // intersect the footprint's range with the grid'd range\r\n var segRange = normalFootprint.unzonedRange.intersect(this.normalizedUnzonedRange);\r\n if (segRange) {\r\n var segStart = segRange.getStart();\r\n var segEnd = segRange.getEnd();\r\n segs.push({\r\n start: segStart,\r\n end: segEnd,\r\n isStart: segRange.isStart && this.isValidDate(segStart),\r\n isEnd: segRange.isEnd && this.isValidDate(segEnd.clone().subtract(1))\r\n });\r\n }\r\n }\r\n // TODO: what if month slots? should round it to nearest month\r\n // TODO: dragging/resizing in this situation? deltas for dragging/resizing breaks down\r\n return segs;\r\n };\r\n // Date Computation\r\n // ------------------------------------------------------------------------------------------------------------------\r\n /*\r\n Makes the given date consistent with isTimeScale/largeUnit,\r\n so, either removes the times, ensures a time, or makes it the startOf largeUnit.\r\n Strips all timezones. Returns new copy.\r\n TODO: should maybe be called \"normalizeRangeDate\".\r\n */\r\n TimelineView.prototype.normalizeGridDate = function (date) {\r\n var normalDate = date.clone();\r\n this.calendar.localizeMoment(normalDate); // mostly for startOf\r\n if (this.isTimeScale) {\r\n if (!normalDate.hasTime()) {\r\n normalDate.time(0);\r\n }\r\n }\r\n else {\r\n normalDate = normalDate.clone().stripTime();\r\n if (this.largeUnit) {\r\n normalDate.startOf(this.largeUnit);\r\n }\r\n }\r\n return normalDate;\r\n };\r\n TimelineView.prototype.isValidDate = function (date) {\r\n if (this.isHiddenDay(date)) {\r\n return false;\r\n }\r\n else if (this.isTimeScale) {\r\n // determine if the time is within minTime/maxTime, which may have wacky values\r\n var ms = date.time() - this.dateProfile.minTime; // milliseconds since minTime\r\n ms = ((ms % 86400000) + 86400000) % 86400000; // make negative values wrap to 24hr clock\r\n return ms < this.timeWindowMs; // before the maxTime?\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n TimelineView.prototype.updateGridDates = function () {\r\n var snapIndex = -1;\r\n var snapDiff = 0; // index of the diff :(\r\n var snapDiffToIndex = [];\r\n var snapIndexToDiff = [];\r\n var date = this.normalizedUnzonedStart.clone();\r\n while (date < this.normalizedUnzonedEnd) {\r\n if (this.isValidDate(date)) {\r\n snapIndex++;\r\n snapDiffToIndex.push(snapIndex);\r\n snapIndexToDiff.push(snapDiff);\r\n }\r\n else {\r\n snapDiffToIndex.push(snapIndex + 0.5);\r\n }\r\n date.add(this.snapDuration);\r\n snapDiff++;\r\n }\r\n this.snapDiffToIndex = snapDiffToIndex;\r\n this.snapIndexToDiff = snapIndexToDiff;\r\n this.snapCnt = snapIndex + 1; // is always one behind\r\n this.slotCnt = this.snapCnt / this.snapsPerSlot;\r\n };\r\n // Skeleton Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.renderSkeleton = function () {\r\n this.el.addClass('fc-timeline');\r\n if (this.opt('eventOverlap') === false) {\r\n this.el.addClass('fc-no-overlap');\r\n }\r\n this.el.html(this.renderSkeletonHtml());\r\n this.timeHeadEl = this.el.find('thead .fc-time-area');\r\n this.timeBodyEl = this.el.find('tbody .fc-time-area');\r\n this.timeHeadScroller = new ClippedScroller_1.default({\r\n overflowX: 'clipped-scroll',\r\n overflowY: 'hidden'\r\n });\r\n this.timeHeadScroller.canvas = new ScrollerCanvas_1.default();\r\n this.timeHeadScroller.render();\r\n this.timeHeadScroller.el.appendTo(this.timeHeadEl);\r\n this.timeBodyScroller = new ClippedScroller_1.default();\r\n this.timeBodyScroller.canvas = new ScrollerCanvas_1.default();\r\n this.timeBodyScroller.render();\r\n this.timeBodyScroller.el.appendTo(this.timeBodyEl);\r\n this.isTimeBodyScrolled = false; // because if the grid has been rerendered, it will get a zero scroll\r\n this.timeBodyScroller.on('scroll', fullcalendar_1.proxy(this, 'handleTimeBodyScrolled'));\r\n this.slatContainerEl = $('
').appendTo(this.timeBodyScroller.canvas.bgEl);\r\n this.segContainerEl = $('
').appendTo(this.timeBodyScroller.canvas.contentEl);\r\n this.bgSegContainerEl = this.timeBodyScroller.canvas.bgEl;\r\n this.timeBodyBoundCache = new fullcalendar_1.CoordCache({\r\n els: this.timeBodyScroller.canvas.el,\r\n isHorizontal: true,\r\n isVertical: true\r\n });\r\n this.timeScrollJoiner = new ScrollJoiner_1.default('horizontal', [this.timeHeadScroller, this.timeBodyScroller]);\r\n // the date/time text on the top axis that stays put while scrolling happens\r\n this.headDateFollower = new ScrollFollower_1.default(this.timeHeadScroller, true); // allowPointerEvents=true\r\n // the event titles that stay put while scrolling happens\r\n this.eventTitleFollower = new ScrollFollower_1.default(this.timeBodyScroller);\r\n this.eventTitleFollower.minTravel = 50;\r\n //\r\n if (this.isRTL) {\r\n this.eventTitleFollower.containOnNaturalRight = true;\r\n }\r\n else {\r\n this.eventTitleFollower.containOnNaturalLeft = true;\r\n }\r\n _super.prototype.renderSkeleton.call(this);\r\n };\r\n TimelineView.prototype.renderSkeletonHtml = function () {\r\n var theme = this.calendar.theme;\r\n return \"
\";\r\n };\r\n TimelineView.prototype.unrenderSkeleton = function () {\r\n this.handleTimeBodyScrolled(0);\r\n _super.prototype.unrenderSkeleton.call(this);\r\n };\r\n // Date Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.renderDates = function (dateProfile) {\r\n TimelineView_defaults_1.initScaleProps(this);\r\n this.timeWindowMs = dateProfile.maxTime - dateProfile.minTime;\r\n // makes sure zone is stripped\r\n this.normalizedUnzonedStart = this.normalizeGridDate(dateProfile.renderUnzonedRange.getStart());\r\n this.normalizedUnzonedEnd = this.normalizeGridDate(dateProfile.renderUnzonedRange.getEnd());\r\n // apply minTime/maxTime\r\n // TODO: move towards .time(), but didn't play well with negatives.\r\n // TODO: View should be responsible.\r\n if (this.isTimeScale) {\r\n this.normalizedUnzonedStart.add(dateProfile.minTime);\r\n this.normalizedUnzonedEnd.subtract(1, 'day').add(dateProfile.maxTime);\r\n }\r\n this.normalizedUnzonedRange = new fullcalendar_1.UnzonedRange(this.normalizedUnzonedStart, this.normalizedUnzonedEnd);\r\n var slotDates = [];\r\n var date = this.normalizedUnzonedStart.clone();\r\n this.calendar.localizeMoment(date);\r\n while (date < this.normalizedUnzonedEnd) {\r\n if (this.isValidDate(date)) {\r\n slotDates.push(date.clone());\r\n }\r\n date.add(this.slotDuration);\r\n }\r\n this.slotDates = slotDates;\r\n this.updateGridDates();\r\n var slatHtmlRes = this.renderSlatHtml();\r\n this.timeHeadScroller.canvas.contentEl.html(slatHtmlRes.headHtml);\r\n this.timeHeadColEls = this.timeHeadScroller.canvas.contentEl.find('col');\r\n this.slatContainerEl.html(slatHtmlRes.bodyHtml);\r\n this.slatColEls = this.slatContainerEl.find('col');\r\n this.slatEls = this.slatContainerEl.find('td');\r\n this.slatCoordCache = new fullcalendar_1.CoordCache({\r\n els: this.slatEls,\r\n isHorizontal: true\r\n });\r\n // for the inner divs within the slats\r\n // used for event rendering and scrollTime, to disregard slat border\r\n this.slatInnerCoordCache = new fullcalendar_1.CoordCache({\r\n els: this.slatEls.find('> div'),\r\n isHorizontal: true,\r\n // we use this coord cache for getPosition* for event rendering.\r\n // workaround for .fc-content's negative margins.\r\n offsetParent: this.timeBodyScroller.canvas.el\r\n });\r\n for (var i = 0; i < this.slotDates.length; i++) {\r\n date = this.slotDates[i];\r\n this.publiclyTrigger('dayRender', {\r\n context: this,\r\n args: [date, this.slatEls.eq(i), this]\r\n });\r\n }\r\n if (this.headDateFollower) {\r\n this.headDateFollower.setSpriteEls(this.timeHeadEl.find('tr:not(:last-child) .fc-cell-text'));\r\n }\r\n };\r\n TimelineView.prototype.unrenderDates = function () {\r\n if (this.headDateFollower) {\r\n this.headDateFollower.clearSprites();\r\n }\r\n this.timeHeadScroller.canvas.contentEl.empty();\r\n this.slatContainerEl.empty();\r\n // clear the widths,\r\n // for no jupiness when navigating\r\n this.timeHeadScroller.canvas.clearWidth();\r\n this.timeBodyScroller.canvas.clearWidth();\r\n };\r\n TimelineView.prototype.renderSlatHtml = function () {\r\n var cell;\r\n var date;\r\n var rowCells;\r\n var format;\r\n var theme = this.calendar.theme;\r\n var labelInterval = this.labelInterval;\r\n var formats = this.headerFormats;\r\n var cellRows = formats.map(function (format) { return []; }); // indexed by row,col\r\n var leadingCell = null;\r\n var prevWeekNumber = null;\r\n var slotDates = this.slotDates;\r\n var slotCells = []; // meta\r\n var rowUnits = formats.map(function (format) { return (fullcalendar_1.queryMostGranularFormatUnit(format)); });\r\n for (var _i = 0, slotDates_1 = slotDates; _i < slotDates_1.length; _i++) {\r\n date = slotDates_1[_i];\r\n var weekNumber = date.week();\r\n var isWeekStart = this.emphasizeWeeks && (prevWeekNumber !== null) && (prevWeekNumber !== weekNumber);\r\n for (var row = 0; row < formats.length; row++) {\r\n format = formats[row];\r\n rowCells = cellRows[row];\r\n leadingCell = rowCells[rowCells.length - 1];\r\n var isSuperRow = (formats.length > 1) && (row < (formats.length - 1)); // more than one row and not the last\r\n var newCell = null;\r\n if (isSuperRow) {\r\n var text = date.format(format);\r\n if (!leadingCell || (leadingCell.text !== text)) {\r\n newCell = this.buildCellObject(date, text, rowUnits[row]);\r\n }\r\n else {\r\n leadingCell.colspan += 1;\r\n }\r\n }\r\n else {\r\n if (!leadingCell || fullcalendar_1.isInt(fullcalendar_1.divideRangeByDuration(this.normalizedUnzonedStart, date, labelInterval))) {\r\n var text = date.format(format);\r\n newCell = this.buildCellObject(date, text, rowUnits[row]);\r\n }\r\n else {\r\n leadingCell.colspan += 1;\r\n }\r\n }\r\n if (newCell) {\r\n newCell.weekStart = isWeekStart;\r\n rowCells.push(newCell);\r\n }\r\n }\r\n slotCells.push({ weekStart: isWeekStart });\r\n prevWeekNumber = weekNumber;\r\n }\r\n var isChrono = labelInterval > this.slotDuration;\r\n var isSingleDay = this.slotDuration.as('days') === 1;\r\n var html = '';\r\n html += '';\r\n for (var _a = 0, slotDates_2 = slotDates; _a < slotDates_2.length; _a++) {\r\n date = slotDates_2[_a];\r\n html += '';\r\n }\r\n html += '';\r\n html += '';\r\n for (var i = 0; i < cellRows.length; i++) {\r\n rowCells = cellRows[i];\r\n var isLast = i === (cellRows.length - 1);\r\n html += '';\r\n for (var _b = 0, rowCells_1 = rowCells; _b < rowCells_1.length; _b++) {\r\n cell = rowCells_1[_b];\r\n var headerCellClassNames = [theme.getClass('widgetHeader')];\r\n if (cell.weekStart) {\r\n headerCellClassNames.push('fc-em-cell');\r\n }\r\n if (isSingleDay) {\r\n headerCellClassNames = headerCellClassNames.concat(this.getDayClasses(cell.date, true) // adds \"today\" class and other day-based classes\r\n );\r\n }\r\n html +=\r\n '';\r\n }\r\n html += '';\r\n }\r\n html += '
1 ? ' colspan=\"' + cell.colspan + '\"' : '') +\r\n '>' +\r\n '
' +\r\n cell.spanHtml +\r\n '
' +\r\n '
';\r\n var slatHtml = '';\r\n slatHtml += '';\r\n for (var _c = 0, slotCells_1 = slotCells; _c < slotCells_1.length; _c++) {\r\n cell = slotCells_1[_c];\r\n slatHtml += '';\r\n }\r\n slatHtml += '';\r\n slatHtml += '';\r\n for (var i = 0; i < slotCells.length; i++) {\r\n cell = slotCells[i];\r\n date = slotDates[i];\r\n slatHtml += this.slatCellHtml(date, cell.weekStart);\r\n }\r\n slatHtml += '
';\r\n return { headHtml: html, bodyHtml: slatHtml };\r\n };\r\n TimelineView.prototype.buildCellObject = function (date, text, rowUnit) {\r\n date = date.clone(); // ensure our own reference\r\n var spanHtml = this.buildGotoAnchorHtml({\r\n date: date,\r\n type: rowUnit,\r\n forceOff: !rowUnit\r\n }, {\r\n 'class': 'fc-cell-text'\r\n }, fullcalendar_1.htmlEscape(text));\r\n return { text: text, spanHtml: spanHtml, date: date, colspan: 1 };\r\n };\r\n TimelineView.prototype.slatCellHtml = function (date, isEm) {\r\n var classes;\r\n var theme = this.calendar.theme;\r\n if (this.isTimeScale) {\r\n classes = [];\r\n classes.push(fullcalendar_1.isInt(fullcalendar_1.divideRangeByDuration(this.normalizedUnzonedStart, date, this.labelInterval)) ?\r\n 'fc-major' :\r\n 'fc-minor');\r\n }\r\n else {\r\n classes = this.getDayClasses(date);\r\n classes.push('fc-day');\r\n }\r\n classes.unshift(theme.getClass('widgetContent'));\r\n if (isEm) {\r\n classes.push('fc-em-cell');\r\n }\r\n return '
';\r\n };\r\n // Business Hours\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.renderBusinessHours = function (businessHourPayload) {\r\n if (!this.largeUnit) {\r\n return _super.prototype.renderBusinessHours.call(this, businessHourPayload);\r\n }\r\n };\r\n // Now Indicator\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.getNowIndicatorUnit = function () {\r\n // TODO: converge with largeUnit. precompute\r\n if (this.isTimeScale) {\r\n return fullcalendar_1.computeGreatestUnit(this.slotDuration);\r\n }\r\n };\r\n // will only execute if isTimeScale\r\n TimelineView.prototype.renderNowIndicator = function (date) {\r\n var nodes = [];\r\n date = this.normalizeGridDate(date);\r\n if (this.normalizedUnzonedRange.containsDate(date)) {\r\n var coord = this.dateToCoord(date);\r\n var css = this.isRTL ?\r\n { right: -coord } :\r\n { left: coord };\r\n nodes.push($(\"
\")\r\n .css(css)\r\n .appendTo(this.timeHeadScroller.canvas.el)[0]);\r\n nodes.push($(\"
\")\r\n .css(css)\r\n .appendTo(this.timeBodyScroller.canvas.el)[0]);\r\n }\r\n this.nowIndicatorEls = $(nodes);\r\n };\r\n // will only execute if isTimeScale\r\n TimelineView.prototype.unrenderNowIndicator = function () {\r\n if (this.nowIndicatorEls) {\r\n this.nowIndicatorEls.remove();\r\n this.nowIndicatorEls = null;\r\n }\r\n };\r\n // Sizing\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n var bodyHeight;\r\n var containerMinWidth;\r\n var containerWidth;\r\n var nonLastSlotWidth;\r\n if (isAuto) {\r\n bodyHeight = 'auto';\r\n }\r\n else {\r\n bodyHeight = totalHeight - this.headHeight() - this.queryMiscHeight();\r\n }\r\n this.timeBodyScroller.setHeight(bodyHeight);\r\n // reason for this complicated method is that things went wrong when:\r\n // slots/headers didn't fill content area and needed to be stretched\r\n // cells wouldn't align (rounding issues with available width calculated\r\n // differently because of padding VS scrollbar trick)\r\n var isDatesRendered = this.timeHeadColEls; // TODO: refactor use of this\r\n if (isDatesRendered) {\r\n var slotWidth = Math.round(this.slotWidth || (this.slotWidth = this.computeSlotWidth()));\r\n containerWidth = slotWidth * this.slotDates.length;\r\n containerMinWidth = '';\r\n nonLastSlotWidth = slotWidth;\r\n var availableWidth = this.timeBodyScroller.getClientWidth();\r\n if (availableWidth > containerWidth) {\r\n containerMinWidth = availableWidth;\r\n containerWidth = '';\r\n nonLastSlotWidth = Math.floor(availableWidth / this.slotDates.length);\r\n }\r\n }\r\n else {\r\n containerWidth = '';\r\n containerMinWidth = '';\r\n }\r\n this.timeHeadScroller.canvas.setWidth(containerWidth);\r\n this.timeHeadScroller.canvas.setMinWidth(containerMinWidth);\r\n this.timeBodyScroller.canvas.setWidth(containerWidth);\r\n this.timeBodyScroller.canvas.setMinWidth(containerMinWidth);\r\n if (isDatesRendered) {\r\n this.timeHeadColEls.slice(0, -1).add(this.slatColEls.slice(0, -1))\r\n .css('width', nonLastSlotWidth);\r\n }\r\n this.timeHeadScroller.updateSize();\r\n this.timeBodyScroller.updateSize();\r\n this.timeScrollJoiner.update();\r\n if (isDatesRendered) {\r\n this.buildCoords();\r\n // TODO: left/right CSS assignment also happens earlier in renderFgSegs\r\n this.updateSegPositions();\r\n // this updateSize method is triggered by callers who don't always subsequently call updateNowIndicator,\r\n // and updateSize always has the risk of changing horizontal spacing which will affect nowIndicator positioning,\r\n // so always call it here too. will often rerender twice unfortunately.\r\n // TODO: more closely integrate updateSize with updateNowIndicator\r\n this.updateNowIndicator();\r\n }\r\n if (this.headDateFollower) {\r\n this.headDateFollower.update();\r\n }\r\n if (this.eventTitleFollower) {\r\n this.eventTitleFollower.update();\r\n }\r\n };\r\n TimelineView.prototype.queryMiscHeight = function () {\r\n return this.el.outerHeight() -\r\n this.timeHeadScroller.el.outerHeight() -\r\n this.timeBodyScroller.el.outerHeight();\r\n };\r\n TimelineView.prototype.computeSlotWidth = function () {\r\n var maxInnerWidth = 0; // TODO: harness core's `matchCellWidths` for this\r\n var innerEls = this.timeHeadEl.find('tr:last-child th .fc-cell-text'); // TODO: cache\r\n innerEls.each(function (i, node) {\r\n var innerWidth = $(node).outerWidth();\r\n return maxInnerWidth = Math.max(maxInnerWidth, innerWidth);\r\n });\r\n var headerWidth = maxInnerWidth + 1; // assume no padding, and one pixel border\r\n var slotsPerLabel = fullcalendar_1.divideDurationByDuration(this.labelInterval, this.slotDuration); // TODO: rename labelDuration?\r\n var slotWidth = Math.ceil(headerWidth / slotsPerLabel);\r\n var minWidth = this.timeHeadColEls.eq(0).css('min-width');\r\n if (minWidth) {\r\n minWidth = parseInt(minWidth, 10);\r\n if (minWidth) {\r\n slotWidth = Math.max(slotWidth, minWidth);\r\n }\r\n }\r\n return slotWidth;\r\n };\r\n // Coordinates\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.buildCoords = function () {\r\n this.timeBodyBoundCache.build();\r\n this.slatCoordCache.build();\r\n this.slatInnerCoordCache.build();\r\n };\r\n // returned value is between 0 and the number of snaps\r\n TimelineView.prototype.computeDateSnapCoverage = function (date) {\r\n var snapDiff = fullcalendar_1.divideRangeByDuration(this.normalizedUnzonedStart, date, this.snapDuration);\r\n if (snapDiff < 0) {\r\n return 0;\r\n }\r\n else if (snapDiff >= this.snapDiffToIndex.length) {\r\n return this.snapCnt;\r\n }\r\n else {\r\n var snapDiffInt = Math.floor(snapDiff);\r\n var snapCoverage = this.snapDiffToIndex[snapDiffInt];\r\n if (fullcalendar_1.isInt(snapCoverage)) { // not an in-between value\r\n snapCoverage += snapDiff - snapDiffInt; // add the remainder\r\n }\r\n else {\r\n // a fractional value, meaning the date is not visible\r\n // always round up in this case. works for start AND end dates in a range.\r\n snapCoverage = Math.ceil(snapCoverage);\r\n }\r\n return snapCoverage;\r\n }\r\n };\r\n // for LTR, results range from 0 to width of area\r\n // for RTL, results range from negative width of area to 0\r\n TimelineView.prototype.dateToCoord = function (date) {\r\n var snapCoverage = this.computeDateSnapCoverage(date);\r\n var slotCoverage = snapCoverage / this.snapsPerSlot;\r\n var slotIndex = Math.floor(slotCoverage);\r\n slotIndex = Math.min(slotIndex, this.slotCnt - 1);\r\n var partial = slotCoverage - slotIndex;\r\n var coordCache = this.slatInnerCoordCache;\r\n if (this.isRTL) {\r\n return (coordCache.getRightPosition(slotIndex) -\r\n (coordCache.getWidth(slotIndex) * partial)) - this.timeBodyBoundCache.getWidth(0);\r\n }\r\n else {\r\n return (coordCache.getLeftPosition(slotIndex) +\r\n (coordCache.getWidth(slotIndex) * partial));\r\n }\r\n };\r\n TimelineView.prototype.rangeToCoords = function (range) {\r\n if (this.isRTL) {\r\n return { right: this.dateToCoord(range.start), left: this.dateToCoord(range.end) };\r\n }\r\n else {\r\n return { left: this.dateToCoord(range.start), right: this.dateToCoord(range.end) };\r\n }\r\n };\r\n // a getter / setter\r\n TimelineView.prototype.headHeight = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var table = this.timeHeadScroller.canvas.contentEl.find('table');\r\n return table.height.apply(table, args);\r\n };\r\n // this needs to be called if v scrollbars appear on body container. or zooming\r\n TimelineView.prototype.updateSegPositions = function () {\r\n var segs = [].concat(this.getEventSegs(), this.getBusinessHourSegs());\r\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\r\n var seg = segs_1[_i];\r\n var coords = this.rangeToCoords(seg);\r\n seg.el.css({\r\n left: (seg.left = coords.left),\r\n right: -(seg.right = coords.right)\r\n });\r\n }\r\n };\r\n // Scrolling\r\n // ---------------------------------------------------------------------------------\r\n TimelineView.prototype.handleTimeBodyScrolled = function (top) {\r\n if (top) {\r\n if (!this.isTimeBodyScrolled) {\r\n this.isTimeBodyScrolled = true;\r\n this.el.addClass('fc-scrolled');\r\n }\r\n }\r\n else {\r\n if (this.isTimeBodyScrolled) {\r\n this.isTimeBodyScrolled = false;\r\n this.el.removeClass('fc-scrolled');\r\n }\r\n }\r\n };\r\n TimelineView.prototype.computeInitialDateScroll = function () {\r\n var unzonedRange = this.get('dateProfile').activeUnzonedRange;\r\n var left = 0;\r\n if (this.isTimeScale) {\r\n var scrollTime = this.opt('scrollTime');\r\n if (scrollTime) {\r\n scrollTime = moment.duration(scrollTime);\r\n left = this.dateToCoord(unzonedRange.getStart().time(scrollTime)); // TODO: fix this for RTL\r\n }\r\n }\r\n return { left: left };\r\n };\r\n TimelineView.prototype.queryDateScroll = function () {\r\n return { left: this.timeBodyScroller.getScrollLeft() };\r\n };\r\n TimelineView.prototype.applyDateScroll = function (scroll) {\r\n if (scroll.left != null) {\r\n // TODO: workaround for FF. the ScrollJoiner sibling won't react fast enough\r\n // to override the native initial crappy scroll that FF applies.\r\n // TODO: have the ScrollJoiner handle this\r\n // Similar code in ResourceTimelineView::setScroll\r\n this.timeHeadScroller.setScrollLeft(scroll.left);\r\n this.timeBodyScroller.setScrollLeft(scroll.left);\r\n }\r\n };\r\n // Hit System\r\n // ------------------------------------------------------------------------------------------------------------------\r\n TimelineView.prototype.prepareHits = function () {\r\n this.buildCoords();\r\n };\r\n // FYI: we don't want to clear the slatCoordCache in releaseHits()\r\n // because those coordinates are needed for dateToCoord()\r\n TimelineView.prototype.queryHit = function (leftOffset, topOffset) {\r\n var snapsPerSlot = this.snapsPerSlot;\r\n var slatCoordCache = this.slatCoordCache;\r\n var timeBodyBoundCache = this.timeBodyBoundCache;\r\n // within scroll container's content rectangle?\r\n if (timeBodyBoundCache.isPointInBounds(leftOffset, topOffset)) {\r\n var slatIndex = slatCoordCache.getHorizontalIndex(leftOffset);\r\n if (slatIndex != null) {\r\n var localSnapIndex = void 0;\r\n var partial = void 0;\r\n var snapIndex = void 0;\r\n var snapLeft = void 0;\r\n var snapRight = void 0;\r\n var slatWidth = slatCoordCache.getWidth(slatIndex);\r\n if (this.isRTL) {\r\n var slatRight = slatCoordCache.getRightOffset(slatIndex);\r\n partial = (slatRight - leftOffset) / slatWidth;\r\n localSnapIndex = Math.floor(partial * snapsPerSlot);\r\n snapIndex = (slatIndex * snapsPerSlot) + localSnapIndex;\r\n snapRight = slatRight - ((localSnapIndex / snapsPerSlot) * slatWidth);\r\n snapLeft = snapRight - (((localSnapIndex + 1) / snapsPerSlot) * slatWidth);\r\n }\r\n else {\r\n var slatLeft = slatCoordCache.getLeftOffset(slatIndex);\r\n partial = (leftOffset - slatLeft) / slatWidth;\r\n localSnapIndex = Math.floor(partial * snapsPerSlot);\r\n snapIndex = (slatIndex * snapsPerSlot) + localSnapIndex;\r\n snapLeft = slatLeft + ((localSnapIndex / snapsPerSlot) * slatWidth);\r\n snapRight = slatLeft + (((localSnapIndex + 1) / snapsPerSlot) * slatWidth);\r\n }\r\n return {\r\n snap: snapIndex,\r\n component: this,\r\n left: snapLeft,\r\n right: snapRight,\r\n top: timeBodyBoundCache.getTopOffset(0),\r\n bottom: timeBodyBoundCache.getBottomOffset(0)\r\n };\r\n }\r\n }\r\n };\r\n TimelineView.prototype.getHitFootprint = function (hit) {\r\n return new fullcalendar_1.ComponentFootprint(this.getSnapUnzonedRange(hit.snap), !this.isTimeScale // isAllDay\r\n );\r\n };\r\n TimelineView.prototype.getHitEl = function (hit) {\r\n return this.getSnapEl(hit.snap); // TODO: write a test for this\r\n };\r\n /*\r\n TODO: avoid using moments\r\n */\r\n TimelineView.prototype.getSnapUnzonedRange = function (snapIndex) {\r\n var start = this.normalizedUnzonedStart.clone();\r\n start.add(fullcalendar_1.multiplyDuration(this.snapDuration, this.snapIndexToDiff[snapIndex]));\r\n var end = start.clone().add(this.snapDuration);\r\n return new fullcalendar_1.UnzonedRange(start, end);\r\n };\r\n TimelineView.prototype.getSnapEl = function (snapIndex) {\r\n return this.slatEls.eq(Math.floor(snapIndex / this.snapsPerSlot));\r\n };\r\n // Event Resizing\r\n // ------------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of an event being resized\r\n TimelineView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n for (var _i = 0, eventFootprints_1 = eventFootprints; _i < eventFootprints_1.length; _i++) {\r\n var eventFootprint = eventFootprints_1[_i];\r\n this.renderHighlight(eventFootprint.componentFootprint);\r\n }\r\n return this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n };\r\n // Unrenders a visual indication of an event being resized\r\n TimelineView.prototype.unrenderEventResize = function () {\r\n this.unrenderHighlight();\r\n return this.helperRenderer.unrender();\r\n };\r\n // DnD\r\n // ------------------------------------------------------------------------------------------------------------------\r\n // TODO: different technique based on scale.\r\n // when dragging, middle of event is the drop.\r\n // should be the edges when isTimeScale.\r\n TimelineView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n if (seg) {\r\n this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n return true; // signal helper rendered\r\n }\r\n else {\r\n for (var _i = 0, eventFootprints_2 = eventFootprints; _i < eventFootprints_2.length; _i++) {\r\n var eventFootprint = eventFootprints_2[_i];\r\n this.renderHighlight(eventFootprint.componentFootprint);\r\n }\r\n return false; // signal helper not rendered\r\n }\r\n };\r\n TimelineView.prototype.unrenderDrag = function () {\r\n this.helperRenderer.unrender();\r\n return this.unrenderHighlight();\r\n };\r\n return TimelineView;\r\n}(fullcalendar_1.View));\r\nexports.default = TimelineView;\r\n// config\r\nTimelineView.prototype.usesMinMaxTime = true; // for View. indicates that minTime/maxTime affects rendering\r\n// TODO: rename these\r\nTimelineView.prototype.eventRendererClass = TimelineEventRenderer_1.default;\r\nTimelineView.prototype.fillRendererClass = TimelineFillRenderer_1.default;\r\nTimelineView.prototype.businessHourRendererClass = fullcalendar_1.BusinessHourRenderer;\r\nTimelineView.prototype.helperRendererClass = TimelineHelperRenderer_1.default;\r\nTimelineView.prototype.eventDraggingClass = TimelineEventDragging_1.default;\r\nTimelineView.prototype.eventResizingClass = TimelineEventResizing_1.default;\r\nfullcalendar_1.StandardInteractionsMixin.mixInto(TimelineView);\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ScrollJoiner = /** @class */ (function () {\r\n function ScrollJoiner(axis, scrollers) {\r\n this.axis = axis;\r\n this.scrollers = scrollers;\r\n for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {\r\n var scroller = _a[_i];\r\n this.initScroller(scroller);\r\n }\r\n }\r\n ScrollJoiner.prototype.initScroller = function (scroller) {\r\n var _this = this;\r\n // when the user scrolls via mousewheel, we know for sure the target\r\n // scroller should be the master. capture the various x-browser events that fire.\r\n scroller.scrollEl.on('wheel mousewheel DomMouseScroll MozMousePixelScroll', function () {\r\n _this.assignMasterScroller(scroller);\r\n });\r\n scroller.on('scrollStart', function () {\r\n if (!_this.masterScroller) {\r\n _this.assignMasterScroller(scroller);\r\n }\r\n }).on('scroll', function () {\r\n if (scroller === _this.masterScroller) {\r\n for (var _i = 0, _a = _this.scrollers; _i < _a.length; _i++) {\r\n var otherScroller = _a[_i];\r\n if (otherScroller !== scroller) {\r\n switch (_this.axis) {\r\n case 'horizontal':\r\n otherScroller.setNativeScrollLeft(scroller.getNativeScrollLeft());\r\n break;\r\n case 'vertical':\r\n otherScroller.setScrollTop(scroller.getScrollTop());\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }).on('scrollEnd', function () {\r\n if (scroller === _this.masterScroller) {\r\n _this.unassignMasterScroller();\r\n }\r\n });\r\n };\r\n ScrollJoiner.prototype.assignMasterScroller = function (scroller) {\r\n this.unassignMasterScroller();\r\n this.masterScroller = scroller;\r\n for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {\r\n var otherScroller = _a[_i];\r\n if (otherScroller !== scroller) {\r\n otherScroller.disableTouchScroll();\r\n }\r\n }\r\n };\r\n ScrollJoiner.prototype.unassignMasterScroller = function () {\r\n if (this.masterScroller) {\r\n for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {\r\n var otherScroller = _a[_i];\r\n otherScroller.enableTouchScroll();\r\n }\r\n this.masterScroller = null;\r\n }\r\n };\r\n ScrollJoiner.prototype.update = function () {\r\n var allWidths = this.scrollers.map(function (scroller) { return scroller.getScrollbarWidths(); });\r\n var maxLeft = 0;\r\n var maxRight = 0;\r\n var maxTop = 0;\r\n var maxBottom = 0;\r\n var scroller;\r\n var widths;\r\n var i;\r\n for (var _i = 0, allWidths_1 = allWidths; _i < allWidths_1.length; _i++) {\r\n widths = allWidths_1[_i];\r\n maxLeft = Math.max(maxLeft, widths.left);\r\n maxRight = Math.max(maxRight, widths.right);\r\n maxTop = Math.max(maxTop, widths.top);\r\n maxBottom = Math.max(maxBottom, widths.bottom);\r\n }\r\n for (i = 0; i < this.scrollers.length; i++) {\r\n scroller = this.scrollers[i];\r\n widths = allWidths[i];\r\n scroller.canvas.setGutters(this.axis === 'horizontal' ?\r\n {\r\n left: maxLeft - widths.left,\r\n right: maxRight - widths.right\r\n } :\r\n {\r\n top: maxTop - widths.top,\r\n bottom: maxBottom - widths.bottom\r\n });\r\n }\r\n };\r\n return ScrollJoiner;\r\n}());\r\nexports.default = ScrollJoiner;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ScrollFollowerSprite_1 = __webpack_require__(27);\r\nvar TimelineEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimelineEventRenderer, _super);\r\n function TimelineEventRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n component must be { segContainerEl, segContainerHeight, rangeToCoords }\r\n */\r\n TimelineEventRenderer.prototype.computeDisplayEventTime = function () {\r\n return !this.view.isTimeScale; // because times should be obvious via axis\r\n };\r\n TimelineEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return false;\r\n };\r\n // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n TimelineEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.view.opt('extraSmallTimeFormat');\r\n };\r\n TimelineEventRenderer.prototype.renderFgSegs = function (segs) {\r\n var eventTitleFollower = this.view.eventTitleFollower;\r\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\r\n var seg = segs_1[_i];\r\n // TODO: centralize logic (also in updateSegPositions)\r\n var coords = this.component.rangeToCoords(seg);\r\n seg.el.css({\r\n left: (seg.left = coords.left),\r\n right: -(seg.right = coords.right)\r\n });\r\n }\r\n // attach segs\r\n for (var _a = 0, segs_2 = segs; _a < segs_2.length; _a++) {\r\n var seg = segs_2[_a];\r\n seg.el.appendTo(this.component.segContainerEl);\r\n }\r\n // compute seg verticals\r\n for (var _b = 0, segs_3 = segs; _b < segs_3.length; _b++) {\r\n var seg = segs_3[_b];\r\n seg.height = seg.el.outerHeight(true); // include margin\r\n }\r\n this.buildSegLevels(segs);\r\n this.component.segContainerHeight = computeOffsetForSegs(segs); // returns this value!\r\n // assign seg verticals\r\n for (var _c = 0, segs_4 = segs; _c < segs_4.length; _c++) {\r\n var seg = segs_4[_c];\r\n seg.el.css('top', seg.top);\r\n }\r\n this.component.segContainerEl.height(this.component.segContainerHeight);\r\n for (var _d = 0, segs_5 = segs; _d < segs_5.length; _d++) {\r\n var seg = segs_5[_d];\r\n var titleEl = seg.el.find('.fc-title');\r\n if (titleEl.length) {\r\n seg.scrollFollowerSprite = new ScrollFollowerSprite_1.default(titleEl);\r\n eventTitleFollower.addSprite(seg.scrollFollowerSprite);\r\n }\r\n }\r\n };\r\n // NOTE: this modifies the order of segs\r\n TimelineEventRenderer.prototype.buildSegLevels = function (segs) {\r\n var segLevels = [];\r\n this.sortEventSegs(segs);\r\n for (var _i = 0, segs_6 = segs; _i < segs_6.length; _i++) {\r\n var unplacedSeg = segs_6[_i];\r\n unplacedSeg.above = [];\r\n // determine the first level with no collisions\r\n var level = 0; // level index\r\n while (level < segLevels.length) {\r\n var isLevelCollision = false;\r\n // determine collisions\r\n for (var _a = 0, _b = segLevels[level]; _a < _b.length; _a++) {\r\n var placedSeg = _b[_a];\r\n if (timeRowSegsCollide(unplacedSeg, placedSeg)) {\r\n unplacedSeg.above.push(placedSeg);\r\n isLevelCollision = true;\r\n }\r\n }\r\n if (isLevelCollision) {\r\n level += 1;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n // insert into the first non-colliding level. create if necessary\r\n (segLevels[level] || (segLevels[level] = []))\r\n .push(unplacedSeg);\r\n // record possible colliding segments below (TODO: automated test for this)\r\n level += 1;\r\n while (level < segLevels.length) {\r\n for (var _c = 0, _d = segLevels[level]; _c < _d.length; _c++) {\r\n var belowSeg = _d[_c];\r\n if (timeRowSegsCollide(unplacedSeg, belowSeg)) {\r\n belowSeg.above.push(unplacedSeg);\r\n }\r\n }\r\n level += 1;\r\n }\r\n }\r\n return segLevels;\r\n };\r\n TimelineEventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n if (this.component.segContainerEl) { // rendered before?\r\n var eventTitleFollower = this.view.eventTitleFollower;\r\n for (var _i = 0, segs_7 = segs; _i < segs_7.length; _i++) {\r\n var seg = segs_7[_i];\r\n if (seg.scrollFollowerSprite) {\r\n eventTitleFollower.removeSprite(seg.scrollFollowerSprite);\r\n }\r\n }\r\n this.component.segContainerEl.empty();\r\n this.component.segContainerEl.height('');\r\n this.component.segContainerHeight = null;\r\n }\r\n };\r\n TimelineEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n var eventDef = seg.footprint.eventDef;\r\n var isDraggable = this.view.isEventDefDraggable(eventDef);\r\n var isResizableFromStart = seg.isStart && this.view.isEventDefResizableFromStart(eventDef);\r\n var isResizableFromEnd = seg.isEnd && this.view.isEventDefResizableFromEnd(eventDef);\r\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n classes.unshift('fc-timeline-event', 'fc-h-event');\r\n var timeText = this.getTimeText(seg.footprint);\r\n return '
' +\r\n '
' +\r\n (timeText ?\r\n '' +\r\n fullcalendar_1.htmlEscape(timeText) +\r\n ''\r\n :\r\n '') +\r\n '' +\r\n (eventDef.title ? fullcalendar_1.htmlEscape(eventDef.title) : ' ') +\r\n '' +\r\n '
' +\r\n '
' +\r\n (isResizableFromStart ?\r\n '
' :\r\n '') +\r\n (isResizableFromEnd ?\r\n '
' :\r\n '') +\r\n '
';\r\n };\r\n return TimelineEventRenderer;\r\n}(fullcalendar_1.EventRenderer));\r\nexports.default = TimelineEventRenderer;\r\n// Seg Rendering Utils\r\n// ----------------------------------------------------------------------------------------------------------------------\r\nfunction computeOffsetForSegs(segs) {\r\n var max = 0;\r\n for (var _i = 0, segs_8 = segs; _i < segs_8.length; _i++) {\r\n var seg = segs_8[_i];\r\n max = Math.max(max, computeOffsetForSeg(seg));\r\n }\r\n return max;\r\n}\r\nfunction computeOffsetForSeg(seg) {\r\n if ((seg.top == null)) {\r\n seg.top = computeOffsetForSegs(seg.above);\r\n }\r\n return seg.top + seg.height;\r\n}\r\nfunction timeRowSegsCollide(seg0, seg1) {\r\n return (seg0.left < seg1.right) && (seg0.right > seg1.left);\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(44);\r\n/*\r\nAn abstract node in a row-hierarchy tree.\r\nMay be a self-contained single row, a row with subrows,\r\nOR a grouping of rows without its own distinct row.\r\n*/\r\nvar RowParent = /** @class */ (function (_super) {\r\n tslib_1.__extends(RowParent, _super);\r\n function RowParent(view) {\r\n var _this = _super.call(this, view) // will assign this.view\r\n || this;\r\n _this.children = [];\r\n _this.depth = 0;\r\n _this.trHash = {};\r\n _this.trs = $();\r\n _this.isExpanded = _this.view.opt('resourcesInitiallyExpanded');\r\n return _this;\r\n }\r\n // Hierarchy\r\n // ------------------------------------------------------------------------------------------------------------------\r\n /*\r\n Adds the given node as a child.\r\n Will be inserted at the `index`. If not given, will be appended to the end.\r\n */\r\n RowParent.prototype.addChildRowNode = function (child, index) {\r\n child.removeFromParentAndDom(); // in case it belonged somewhere else previously\r\n var children = this.children;\r\n // insert into the children array\r\n if (index != null) {\r\n children.splice(index, 0, child);\r\n }\r\n else {\r\n index = children.length;\r\n children.push(child);\r\n }\r\n // compute the previous sibling of child\r\n child.prevSibling =\r\n index > 0 ?\r\n children[index - 1] :\r\n null;\r\n // update the next sibling's prevSibling\r\n if (index < (children.length - 1)) {\r\n children[index + 1].prevSibling = child;\r\n }\r\n child.parent = this;\r\n child.depth = this.depth + (this.hasOwnRow ? 1 : 0);\r\n this.descendantAdded(child);\r\n };\r\n /*\r\n Removes the given child from the node. Assumes it is a direct child.\r\n If not a direct child, returns false and nothing happens.\r\n */\r\n RowParent.prototype.removeChild = function (child) {\r\n var i;\r\n var children = this.children;\r\n var isFound = false;\r\n // look for the node in the children array\r\n for (i = 0; i < children.length; i++) {\r\n var testChild = children[i];\r\n if (testChild === child) { // found!\r\n isFound = true;\r\n break; // after this, `i` will contain the index\r\n }\r\n }\r\n if (!isFound) {\r\n return false; // return false if not found\r\n }\r\n else {\r\n // rewire the next sibling's prevSibling to skip\r\n if (i < (children.length - 1)) { // there must be a next sibling\r\n children[i + 1].prevSibling = child.prevSibling;\r\n }\r\n children.splice(i, 1); // remove node from the array\r\n // unwire child from the parent/siblings\r\n child.parent = null;\r\n child.prevSibling = null;\r\n this.descendantRemoved(child);\r\n return child; // return on success (needed?)\r\n }\r\n };\r\n /*\r\n Removes all of the node's children from the hierarchy.\r\n */\r\n RowParent.prototype.removeChildren = function () {\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n this.descendantRemoved(child);\r\n }\r\n this.children = [];\r\n };\r\n /*\r\n Removes this node from its parent\r\n */\r\n RowParent.prototype.removeFromParentAndDom = function () {\r\n if (this.parent) {\r\n this.parent.removeChild(this);\r\n }\r\n if (this.get('isInDom')) {\r\n this.removeElement();\r\n }\r\n };\r\n /*\r\n Gets the last direct child node\r\n */\r\n RowParent.prototype.getLastChild = function () {\r\n var children = this.children;\r\n return children[children.length - 1];\r\n };\r\n /*\r\n Walks backward in the hierarchy to find the previous row leaf node.\r\n When looking at the hierarchy in a flat linear fashion, this is the revealed row just before the current.\r\n */\r\n RowParent.prototype.getPrevRowInDom = function () {\r\n var node = this;\r\n while (node) {\r\n if (node.prevSibling) {\r\n // attempt to go into the deepest last child of the previous sibling\r\n var lastChild = void 0;\r\n node = node.prevSibling;\r\n while ((lastChild = node.getLastChild())) {\r\n node = lastChild;\r\n }\r\n }\r\n else {\r\n // otherwise, move up to the parent\r\n node = node.parent;\r\n }\r\n // return this \"previous\" node if it has an exposed row\r\n if (node && node.get('isInDom') && node.hasOwnRow) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n };\r\n /*\r\n Returns the first node in the subtree that has a revealed row\r\n */\r\n RowParent.prototype.getLeadingRow = function () {\r\n if (this.hasOwnRow) {\r\n return this;\r\n }\r\n else if (this.isExpanded && this.children.length) {\r\n return this.children[0].getLeadingRow();\r\n }\r\n };\r\n /*\r\n Generates a flat array containing all the row-nodes of the subtree. Descendants + self\r\n */\r\n RowParent.prototype.getRows = function (batchArray) {\r\n if (batchArray === void 0) { batchArray = []; }\r\n if (this.hasOwnRow) {\r\n batchArray.push(this);\r\n }\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n child.getRows(batchArray);\r\n }\r\n return batchArray;\r\n };\r\n /*\r\n Generates a flat array containing all the nodes (row/non-row) of the subtree. Descendants + self\r\n */\r\n RowParent.prototype.getNodes = function (batchArray) {\r\n if (batchArray === void 0) { batchArray = []; }\r\n batchArray.push(this);\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n child.getNodes(batchArray);\r\n }\r\n return batchArray;\r\n };\r\n /*\r\n Generates a flat array containing all the descendant nodes the current node\r\n */\r\n RowParent.prototype.getDescendants = function () {\r\n var batchArray = [];\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n child.getNodes(batchArray);\r\n }\r\n return batchArray;\r\n };\r\n // Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n RowParent.prototype.show = function () {\r\n if (!this.get('isInDom')) {\r\n this.renderSkeleton();\r\n }\r\n };\r\n RowParent.prototype.hide = function () {\r\n if (this.get('isInDom')) {\r\n this.removeElement();\r\n }\r\n };\r\n /*\r\n Builds and populates the TRs for each row type. Inserts them into the DOM.\r\n Does this only for this single row. Not recursive. If not a row (hasOwnRow=false), does not render anything.\r\n PRECONDITION: assumes the parent has already been rendered.\r\n */\r\n RowParent.prototype.renderSkeleton = function () {\r\n this.trHash = {};\r\n var trNodes = [];\r\n if (this.hasOwnRow) { // only bother rendering TRs if we know this node has a real row\r\n var prevRow = this.getPrevRowInDom(); // the row before this row, in the overall linear flat list\r\n // let the view's tbody structure determine which TRs should be rendered\r\n for (var type in this.view.tbodyHash) {\r\n // build the TR and record it\r\n // assign before calling the render methods, because they might rely\r\n var tbody = this.view.tbodyHash[type];\r\n var tr = $('');\r\n this.trHash[type] = tr;\r\n trNodes.push(tr[0]);\r\n // call the subclass' render method for this row type (if available)\r\n var renderMethodName = 'render' + fullcalendar_1.capitaliseFirstLetter(type) + 'Skeleton';\r\n if (this[renderMethodName]) {\r\n this[renderMethodName](tr);\r\n }\r\n // insert the TR into the DOM\r\n if (prevRow) {\r\n prevRow.trHash[type].after(tr);\r\n }\r\n else {\r\n tbody.prepend(tr); // belongs in the very first position\r\n }\r\n }\r\n // build a single jQuery object. use event delegation for calling toggleExpanded\r\n this.trs = $(trNodes)\r\n .on('click', '.fc-expander', fullcalendar_1.proxy(this, 'toggleExpanded'));\r\n this.thisRowShown();\r\n }\r\n this.set('isInDom', true);\r\n if (this.isExpanded) {\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n child.renderSkeleton();\r\n }\r\n }\r\n };\r\n /*\r\n Unpopulates and removes all of this row's TRs from the DOM. Only for this single row. Not recursive.\r\n Will trigger \"hidden\".\r\n */\r\n RowParent.prototype.removeElement = function () {\r\n // call the subclass' render method for each row type (if available)\r\n for (var type in this.trHash) {\r\n var tr = this.trHash[type];\r\n var unrenderMethodName = 'unrender' + fullcalendar_1.capitaliseFirstLetter(type) + 'Skeleton';\r\n if (this[unrenderMethodName]) {\r\n this[unrenderMethodName](tr);\r\n }\r\n }\r\n this.unset('isInDom');\r\n this.thisRowHidden();\r\n this.trHash = {};\r\n this.trs.remove(); // remove from DOM\r\n this.trs = $();\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n if (child.get('isInDom')) {\r\n child.removeElement();\r\n }\r\n }\r\n };\r\n /*\r\n A simple getter for retrieving a TR jQuery object of a certain row type\r\n */\r\n RowParent.prototype.getTr = function (type) {\r\n return this.trHash[type];\r\n };\r\n // Expanding / Collapsing\r\n // ------------------------------------------------------------------------------------------------------------------\r\n // Use by row groups and rows with subrows\r\n /*\r\n Reveals this node's children if they have not already been revealed. Changes any expander icon.\r\n */\r\n RowParent.prototype.expand = function () {\r\n if (!this.isExpanded) {\r\n this.isExpanded = true;\r\n this.indicateExpanded();\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n child.show();\r\n }\r\n this.view.calendar.updateViewSize(); // notify view of dimension change\r\n this.animateExpand();\r\n }\r\n };\r\n /*\r\n Hides this node's children if they are not already hidden. Changes any expander icon.\r\n */\r\n RowParent.prototype.collapse = function () {\r\n if (this.isExpanded) {\r\n this.isExpanded = false;\r\n this.indicateCollapsed();\r\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n child.hide();\r\n }\r\n this.view.calendar.updateViewSize(); // notify view of dimension change\r\n }\r\n };\r\n /*\r\n Switches between expanded/collapsed states\r\n */\r\n RowParent.prototype.toggleExpanded = function () {\r\n if (this.isExpanded) {\r\n this.collapse();\r\n }\r\n else {\r\n this.expand();\r\n }\r\n };\r\n /*\r\n Changes the expander icon to the \"expanded\" state\r\n */\r\n RowParent.prototype.indicateExpanded = function () {\r\n this.trs.find('.fc-expander .fc-icon')\r\n .removeClass(this.getCollapsedIcon())\r\n .addClass(this.getExpandedIcon());\r\n };\r\n /*\r\n Changes the expander icon to the \"collapsed\" state\r\n */\r\n RowParent.prototype.indicateCollapsed = function () {\r\n this.trs.find('.fc-expander .fc-icon')\r\n .removeClass(this.getExpandedIcon())\r\n .addClass(this.getCollapsedIcon());\r\n };\r\n RowParent.prototype.indicateExpandingEnabled = function () {\r\n this.trs.find('.fc-expander-space')\r\n .addClass('fc-expander');\r\n if (this.isExpanded) {\r\n this.indicateExpanded();\r\n }\r\n else {\r\n this.indicateCollapsed();\r\n }\r\n };\r\n RowParent.prototype.indicateExpandingDisabled = function () {\r\n this.trs.find('.fc-expander-space')\r\n .removeClass('fc-expander')\r\n .find('.fc-icon')\r\n .removeClass(this.getExpandedIcon())\r\n .removeClass(this.getCollapsedIcon());\r\n };\r\n RowParent.prototype.updateExpandingEnabled = function () {\r\n if (this.hasOwnRow && this.children.length) {\r\n this.indicateExpandingEnabled();\r\n }\r\n else {\r\n this.indicateExpandingDisabled();\r\n }\r\n };\r\n RowParent.prototype.getExpandedIcon = function () {\r\n return 'fc-icon-down-triangle';\r\n };\r\n RowParent.prototype.getCollapsedIcon = function () {\r\n var dir = this.view.isRTL ? 'left' : 'right';\r\n return 'fc-icon-' + dir + '-triangle';\r\n };\r\n /*\r\n Causes a slide-down CSS transition to demonstrate that the expand has happened\r\n */\r\n RowParent.prototype.animateExpand = function () {\r\n var firstChild = this.children[0];\r\n var leadingRow = firstChild && firstChild.getLeadingRow();\r\n var trs = leadingRow && leadingRow.trs;\r\n if (trs) {\r\n trs.addClass('fc-collapsed');\r\n setTimeout(function () {\r\n trs.addClass('fc-transitioning'); // enable transitioning\r\n trs.removeClass('fc-collapsed'); // transition back to non-collapsed state\r\n });\r\n // cross-browser way to determine when the transition finishes\r\n trs.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {\r\n trs.removeClass('fc-transitioning'); // will remove the overflow:hidden\r\n });\r\n }\r\n };\r\n // Sizing\r\n // ------------------------------------------------------------------------------------------------------------------\r\n /*\r\n Find each TRs \"inner div\" (div within first cell). This div controls each TRs height.\r\n Returns the max pixel height.\r\n */\r\n RowParent.prototype.getMaxTrInnerHeight = function () {\r\n var max = 0;\r\n $.each(this.trHash, function (type, tr) {\r\n // exclude multi-rowspans (probably done for row grouping)\r\n var innerEl = util_1.getOwnCells(tr).find('> div:not(.fc-cell-content):first');\r\n max = Math.max(innerEl.height(), max);\r\n });\r\n return max;\r\n };\r\n /*\r\n Find each TRs \"inner div\" and sets all of their heights to the same value.\r\n */\r\n RowParent.prototype.setTrInnerHeight = function (height) {\r\n // exclude multi-rowspans (probably done for row grouping)\r\n $.each(this.trHash, function (type, tr) {\r\n util_1.getOwnCells(tr).find('> div:not(.fc-cell-content):first')\r\n .height(height);\r\n });\r\n };\r\n // Triggering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n RowParent.prototype.descendantAdded = function (row) {\r\n if (this.get('isInDom') && this.hasOwnRow && (this.children.length === 1)) {\r\n this.indicateExpandingEnabled();\r\n }\r\n (this.parent || this.view).descendantAdded(row);\r\n };\r\n RowParent.prototype.descendantRemoved = function (row) {\r\n if (this.get('isInDom') && this.hasOwnRow && (this.children.length === 0)) {\r\n this.indicateExpandingDisabled();\r\n }\r\n (this.parent || this.view).descendantRemoved(row);\r\n };\r\n RowParent.prototype.thisRowShown = function () {\r\n (this.parent || this.view).descendantShown(this);\r\n };\r\n RowParent.prototype.thisRowHidden = function () {\r\n (this.parent || this.view).descendantHidden(this);\r\n };\r\n RowParent.prototype.descendantShown = function (row) {\r\n (this.parent || this.view).descendantShown(row);\r\n };\r\n RowParent.prototype.descendantHidden = function (row) {\r\n (this.parent || this.view).descendantHidden(row);\r\n };\r\n return RowParent;\r\n}(fullcalendar_1.DateComponent));\r\nexports.default = RowParent;\r\nRowParent.prototype.hasOwnRow = false;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Resource = /** @class */ (function () {\r\n function Resource() {\r\n }\r\n Resource.extractIds = function (rawProps, calendar) {\r\n var resourceField = calendar.opt('eventResourceField') || 'resourceId';\r\n var resourceIds = [];\r\n if (rawProps.resourceIds) {\r\n for (var _i = 0, _a = rawProps.resourceIds; _i < _a.length; _i++) {\r\n var rawResourceId = _a[_i];\r\n resourceIds.push(Resource.normalizeId(rawResourceId));\r\n }\r\n }\r\n if (rawProps[resourceField] != null) {\r\n resourceIds.push(Resource.normalizeId(rawProps[resourceField]));\r\n }\r\n return resourceIds;\r\n };\r\n Resource.normalizeId = function (rawId) {\r\n return String(rawId);\r\n };\r\n return Resource;\r\n}());\r\nexports.default = Resource;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceViewMixin_1 = __webpack_require__(9);\r\nvar ResourceDayGrid_1 = __webpack_require__(13);\r\nvar ResourceTimeGrid_1 = __webpack_require__(38);\r\nvar ResourceAgendaView = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceAgendaView, _super);\r\n function ResourceAgendaView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.initResourceView();\r\n return _this;\r\n }\r\n return ResourceAgendaView;\r\n}(fullcalendar_1.AgendaView));\r\nexports.default = ResourceAgendaView;\r\nResourceAgendaView.prototype.timeGridClass = ResourceTimeGrid_1.default;\r\nResourceAgendaView.prototype.dayGridClass = ResourceDayGrid_1.default;\r\nResourceViewMixin_1.default.mixInto(ResourceAgendaView);\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\n/*\r\nRequirements:\r\n- must be a Grid\r\n- grid must have a view that's a ResourceView\r\n- DayTableMixin must already be mixed in\r\n*/\r\nvar ResourceDayTableMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceDayTableMixin, _super);\r\n function ResourceDayTableMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ResourceDayTableMixin.mixInto = function (destClass) {\r\n var _this = this;\r\n fullcalendar_1.Mixin.mixInto.call(this, destClass);\r\n [\r\n 'updateDayTableCols',\r\n 'computeColCnt',\r\n 'getColDayIndex',\r\n 'renderHeadTrHtml',\r\n 'renderBgCellsHtml',\r\n 'renderBusinessHours',\r\n 'allowCrossResource'\r\n ].forEach(function (methodName) {\r\n destClass.prototype[methodName] = _this.prototype[methodName];\r\n });\r\n };\r\n // Resource Data\r\n // ----------------------------------------------------------------------------------------------\r\n // does not do any rendering. rendering is responsibility of host object\r\n ResourceDayTableMixin.prototype.registerResources = function (resources) {\r\n this.flattenedResources = this.flattenResources(resources);\r\n this.resourceCnt = this.flattenedResources.length;\r\n this.updateDayTable(); // will call computeColCnt\r\n };\r\n // flattens and sorts\r\n ResourceDayTableMixin.prototype.flattenResources = function (resources) {\r\n var sortFunc;\r\n var orderVal = this.opt('resourceOrder');\r\n if (orderVal) {\r\n var orderSpecs_1 = fullcalendar_1.parseFieldSpecs(orderVal);\r\n sortFunc = function (a, b) { return fullcalendar_1.compareByFieldSpecs(a, b, orderSpecs_1); };\r\n }\r\n else {\r\n sortFunc = null;\r\n }\r\n var res = [];\r\n this.accumulateResources(resources, sortFunc, res);\r\n return res;\r\n };\r\n // just flattens\r\n ResourceDayTableMixin.prototype.accumulateResources = function (resources, sortFunc, res) {\r\n var sortedResources;\r\n if (sortFunc) {\r\n sortedResources = resources.slice(0); // make copy\r\n sortedResources.sort(sortFunc); // sorts in place\r\n }\r\n else {\r\n sortedResources = resources;\r\n }\r\n for (var _i = 0, sortedResources_1 = sortedResources; _i < sortedResources_1.length; _i++) {\r\n var resource = sortedResources_1[_i];\r\n res.push(resource);\r\n this.accumulateResources(resource.children, sortFunc, res);\r\n }\r\n };\r\n // Table Layout\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceDayTableMixin.prototype.updateDayTableCols = function () {\r\n this.datesAboveResources = this.opt('groupByDateAndResource');\r\n fullcalendar_1.DayTableMixin.prototype.updateDayTableCols.call(this);\r\n };\r\n ResourceDayTableMixin.prototype.computeColCnt = function () {\r\n return this.resourceCnt * this.daysPerRow;\r\n };\r\n ResourceDayTableMixin.prototype.getColDayIndex = function (col) {\r\n if (this.isRTL) {\r\n col = this.colCnt - 1 - col;\r\n }\r\n if (this.datesAboveResources) {\r\n return Math.floor(col / (this.resourceCnt || 1));\r\n }\r\n else {\r\n return col % this.daysPerRow;\r\n }\r\n };\r\n ResourceDayTableMixin.prototype.getColResource = function (col) {\r\n return this.flattenedResources[this.getColResourceIndex(col)];\r\n };\r\n ResourceDayTableMixin.prototype.getColResourceIndex = function (col) {\r\n if (this.isRTL) {\r\n col = this.colCnt - 1 - col;\r\n }\r\n if (this.datesAboveResources) {\r\n return col % (this.resourceCnt || 1);\r\n }\r\n else {\r\n return Math.floor(col / this.daysPerRow);\r\n }\r\n };\r\n ResourceDayTableMixin.prototype.indicesToCol = function (resourceIndex, dayIndex) {\r\n var col = this.datesAboveResources ?\r\n (dayIndex * (this.resourceCnt || 1)) + resourceIndex :\r\n (resourceIndex * this.daysPerRow) + dayIndex;\r\n if (this.isRTL) {\r\n col = this.colCnt - 1 - col;\r\n }\r\n return col;\r\n };\r\n // Header Rendering\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceDayTableMixin.prototype.renderHeadTrHtml = function () {\r\n if (this.daysPerRow > 1) {\r\n // do two levels\r\n if (this.datesAboveResources) {\r\n return this.renderHeadDateAndResourceHtml();\r\n }\r\n else {\r\n return this.renderHeadResourceAndDateHtml();\r\n }\r\n }\r\n else {\r\n // do one level\r\n return this.renderHeadResourceHtml();\r\n }\r\n };\r\n // renders one row of resources header cell\r\n ResourceDayTableMixin.prototype.renderHeadResourceHtml = function () {\r\n var _this = this;\r\n var resourceHtmls = this.flattenedResources.map(function (resource) { return (_this.renderHeadResourceCellHtml(resource)); });\r\n if (!resourceHtmls.length) {\r\n resourceHtmls.push(' ');\r\n }\r\n return this.wrapTr(resourceHtmls, 'renderHeadIntroHtml');\r\n };\r\n // renders resource cells above date cells\r\n ResourceDayTableMixin.prototype.renderHeadResourceAndDateHtml = function () {\r\n var resourceHtmls = [];\r\n var dateHtmls = [];\r\n var daysPerRow = this.daysPerRow;\r\n for (var _i = 0, _a = this.flattenedResources; _i < _a.length; _i++) {\r\n var resource = _a[_i];\r\n resourceHtmls.push(this.renderHeadResourceCellHtml(resource, null, this.daysPerRow));\r\n for (var dayIndex = 0; dayIndex < daysPerRow; dayIndex++) {\r\n var date = this.dayDates[dayIndex].clone();\r\n dateHtmls.push(this.renderHeadResourceDateCellHtml(date, resource));\r\n }\r\n }\r\n if (!resourceHtmls.length) {\r\n resourceHtmls.push(' ');\r\n }\r\n if (!dateHtmls.length) {\r\n dateHtmls.push(' ');\r\n }\r\n return this.wrapTr(resourceHtmls, 'renderHeadIntroHtml') +\r\n this.wrapTr(dateHtmls, 'renderHeadIntroHtml');\r\n };\r\n // renders date cells above resource cells\r\n ResourceDayTableMixin.prototype.renderHeadDateAndResourceHtml = function () {\r\n var dateHtmls = [];\r\n var resourceHtmls = [];\r\n var daysPerRow = this.daysPerRow;\r\n for (var dayIndex = 0; dayIndex < daysPerRow; dayIndex++) {\r\n var date = this.dayDates[dayIndex].clone();\r\n dateHtmls.push(this.renderHeadDateCellHtml(date, this.resourceCnt) // with colspan\r\n );\r\n for (var _i = 0, _a = this.flattenedResources; _i < _a.length; _i++) {\r\n var resource = _a[_i];\r\n resourceHtmls.push(this.renderHeadResourceCellHtml(resource, date));\r\n }\r\n }\r\n if (!dateHtmls.length) {\r\n dateHtmls.push(' ');\r\n }\r\n if (!resourceHtmls.length) {\r\n resourceHtmls.push(' ');\r\n }\r\n return this.wrapTr(dateHtmls, 'renderHeadIntroHtml') +\r\n this.wrapTr(resourceHtmls, 'renderHeadIntroHtml');\r\n };\r\n // given a resource and an optional date\r\n ResourceDayTableMixin.prototype.renderHeadResourceCellHtml = function (resource, date, colspan) {\r\n if (colspan === void 0) { colspan = 1; }\r\n return ' 1 ?\r\n ' colspan=\"' + colspan + '\"' :\r\n '') +\r\n '>' +\r\n fullcalendar_1.htmlEscape(this.view.getResourceText(resource)) +\r\n '';\r\n };\r\n // given a date and a required resource\r\n ResourceDayTableMixin.prototype.renderHeadResourceDateCellHtml = function (date, resource, colspan) {\r\n if (colspan === void 0) { colspan = 1; }\r\n return this.renderHeadDateCellHtml(date, colspan, 'data-resource-id=\"' + resource.id + '\"');\r\n };\r\n // given a container with already rendered resource cells\r\n ResourceDayTableMixin.prototype.processHeadResourceEls = function (containerEl) {\r\n var _this = this;\r\n containerEl.find('.fc-resource-cell').each(function (col, node) {\r\n var resource;\r\n if (_this.datesAboveResources) {\r\n // each resource is a distinct column\r\n resource = _this.getColResource(col);\r\n }\r\n else {\r\n // each resource covers multiple columns of dates\r\n resource = _this.flattenedResources[_this.isRTL ?\r\n _this.flattenedResources.length - 1 - col :\r\n col];\r\n }\r\n _this.publiclyTrigger('resourceRender', {\r\n context: resource,\r\n args: [\r\n resource,\r\n $(node),\r\n $(),\r\n _this.view\r\n ]\r\n });\r\n });\r\n };\r\n // Bg Rendering\r\n // ----------------------------------------------------------------------------------------------\r\n // TODO: unify with DayTableMixin more, instead of completely redefining\r\n ResourceDayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n var htmls = [];\r\n var colCnt = this.colCnt;\r\n for (var col = 0; col < colCnt; col++) {\r\n var date = this.getCellDate(row, col);\r\n var resource = this.getColResource(col);\r\n htmls.push(this.renderResourceBgCellHtml(date, resource));\r\n }\r\n if (!htmls.length) {\r\n htmls.push(' ');\r\n }\r\n return htmls.join(''); // already accounted for RTL\r\n };\r\n ResourceDayTableMixin.prototype.renderResourceBgCellHtml = function (date, resource) {\r\n return this.renderBgCellHtml(date, 'data-resource-id=\"' + resource.id + '\"');\r\n };\r\n // Rendering Utils\r\n // ----------------------------------------------------------------------------------------------\r\n // only works for when given cells are ordered chronologically\r\n // mutates cellHtmls\r\n // TODO: make this a DayTableMixin utility\r\n ResourceDayTableMixin.prototype.wrapTr = function (cellHtmls, introMethodName) {\r\n if (this.isRTL) {\r\n cellHtmls.reverse();\r\n return '' +\r\n cellHtmls.join('') +\r\n this[introMethodName]() +\r\n '';\r\n }\r\n else {\r\n return '' +\r\n this[introMethodName]() +\r\n cellHtmls.join('') +\r\n '';\r\n }\r\n };\r\n // Business Hours\r\n // ----------------------------------------------------------------------------------------------\r\n ResourceDayTableMixin.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n var isAllDay = this.hasAllDayBusinessHours;\r\n var unzonedRange = this.dateProfile.activeUnzonedRange;\r\n var eventFootprints = [];\r\n for (var _i = 0, _a = this.flattenedResources; _i < _a.length; _i++) {\r\n var resource = _a[_i];\r\n var eventInstanceGroup = (resource.businessHourGenerator || businessHourGenerator)\r\n .buildEventInstanceGroup(isAllDay, unzonedRange);\r\n if (eventInstanceGroup) {\r\n for (var _b = 0, _c = eventInstanceGroup.sliceRenderRanges(unzonedRange); _b < _c.length; _b++) {\r\n var eventRange = _c[_b];\r\n eventFootprints.push(new fullcalendar_1.EventFootprint(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, isAllDay, resource.id), eventRange.eventDef, eventRange.eventInstance));\r\n }\r\n }\r\n }\r\n return this.businessHourRenderer.renderEventFootprints(eventFootprints);\r\n };\r\n return ResourceDayTableMixin;\r\n}(fullcalendar_1.Mixin));\r\nexports.default = ResourceDayTableMixin;\r\nResourceDayTableMixin.prototype.resourceCnt = 0;\r\nResourceDayTableMixin.prototype.datesAboveResources = false;\r\nResourceDayTableMixin.prototype.allowCrossResource = false;\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceViewMixin_1 = __webpack_require__(9);\r\nvar ResourceDayGrid_1 = __webpack_require__(13);\r\nvar ResourceBasicView = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceBasicView, _super);\r\n function ResourceBasicView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.initResourceView();\r\n return _this;\r\n }\r\n return ResourceBasicView;\r\n}(fullcalendar_1.BasicView));\r\nexports.default = ResourceBasicView;\r\nResourceBasicView.prototype.dayGridClass = ResourceDayGrid_1.default;\r\nResourceViewMixin_1.default.mixInto(ResourceBasicView);\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceViewMixin_1 = __webpack_require__(9);\r\nvar ResourceDayGrid_1 = __webpack_require__(13);\r\nvar ResourceMonthView = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceMonthView, _super);\r\n function ResourceMonthView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.initResourceView();\r\n return _this;\r\n }\r\n return ResourceMonthView;\r\n}(fullcalendar_1.MonthView));\r\nexports.default = ResourceMonthView;\r\nResourceMonthView.prototype.dayGridClass = ResourceDayGrid_1.default;\r\nResourceViewMixin_1.default.mixInto(ResourceMonthView);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar EnhancedScroller_1 = __webpack_require__(39);\r\n/*\r\nA Scroller, but with a wrapping div that allows \"clipping\" away of native scrollbars,\r\ngiving the appearance that there are no scrollbars.\r\n*/\r\nvar ClippedScroller = /** @class */ (function (_super) {\r\n tslib_1.__extends(ClippedScroller, _super);\r\n /*\r\n Received overflows can be set to 'clipped', meaning scrollbars shouldn't be visible\r\n to the user, but the area should still scroll.\r\n */\r\n function ClippedScroller(options) {\r\n var _this = _super.call(this, options) || this;\r\n _this.isHScrollbarsClipped = false;\r\n _this.isVScrollbarsClipped = false;\r\n if (_this.overflowX === 'clipped-scroll') {\r\n _this.overflowX = 'scroll';\r\n _this.isHScrollbarsClipped = true;\r\n }\r\n if (_this.overflowY === 'clipped-scroll') {\r\n _this.overflowY = 'scroll';\r\n _this.isVScrollbarsClipped = true;\r\n }\r\n return _this;\r\n }\r\n ClippedScroller.prototype.renderEl = function () {\r\n var scrollEl = _super.prototype.renderEl.call(this);\r\n return $('
').append(scrollEl); // return value\r\n };\r\n ClippedScroller.prototype.updateSize = function () {\r\n var scrollEl = this.scrollEl;\r\n var scrollbarWidths = fullcalendar_1.getScrollbarWidths(scrollEl); // the native ones\r\n var cssProps = { marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0 };\r\n // give the inner scrolling div negative margins so that its scrollbars\r\n // are nudged outside of the bounding box of the wrapper, which is overflow:hidden\r\n if (this.isHScrollbarsClipped) {\r\n cssProps.marginTop = -scrollbarWidths.top;\r\n cssProps.marginBottom = -scrollbarWidths.bottom;\r\n }\r\n if (this.isVScrollbarsClipped) {\r\n cssProps.marginLeft = -scrollbarWidths.left;\r\n cssProps.marginRight = -scrollbarWidths.right;\r\n }\r\n scrollEl.css(cssProps);\r\n // if we are attempting to hide the scrollbars offscreen, OSX/iOS will still\r\n // display the floating scrollbars. attach a className to force-hide them.\r\n return scrollEl.toggleClass('fc-no-scrollbars', (this.isHScrollbarsClipped || (this.overflowX === 'hidden')) && // should never show?\r\n (this.isVScrollbarsClipped || (this.overflowY === 'hidden')) && // should never show?\r\n !( // doesn't have any scrollbar mass\r\n scrollbarWidths.top ||\r\n scrollbarWidths.bottom ||\r\n scrollbarWidths.left ||\r\n scrollbarWidths.right));\r\n };\r\n /*\r\n Accounts for 'clipped' scrollbars\r\n */\r\n ClippedScroller.prototype.getScrollbarWidths = function () {\r\n var widths = fullcalendar_1.getScrollbarWidths(this.scrollEl);\r\n if (this.isHScrollbarsClipped) {\r\n widths.top = 0;\r\n widths.bottom = 0;\r\n }\r\n if (this.isVScrollbarsClipped) {\r\n widths.left = 0;\r\n widths.right = 0;\r\n }\r\n return widths;\r\n };\r\n return ClippedScroller;\r\n}(EnhancedScroller_1.default));\r\nexports.default = ClippedScroller;\r\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\n/*\r\nA rectangular area of content that lives within a Scroller.\r\nCan have \"gutters\", areas of dead spacing around the perimeter.\r\nAlso very useful for forcing a width, which a Scroller cannot do alone.\r\nHas a content area that lives above a background area.\r\n*/\r\nvar ScrollerCanvas = /** @class */ (function () {\r\n function ScrollerCanvas() {\r\n this.gutters = {};\r\n }\r\n ScrollerCanvas.prototype.render = function () {\r\n this.el = $(\"
\");\r\n this.contentEl = this.el.find('.fc-content');\r\n this.bgEl = this.el.find('.fc-bg');\r\n };\r\n /*\r\n If falsy, resets all the gutters to 0\r\n */\r\n ScrollerCanvas.prototype.setGutters = function (gutters) {\r\n if (!gutters) {\r\n this.gutters = {};\r\n }\r\n else {\r\n $.extend(this.gutters, gutters);\r\n }\r\n this.updateSize();\r\n };\r\n ScrollerCanvas.prototype.setWidth = function (width) {\r\n this.width = width;\r\n this.updateSize();\r\n };\r\n ScrollerCanvas.prototype.setMinWidth = function (minWidth) {\r\n this.minWidth = minWidth;\r\n this.updateSize();\r\n };\r\n ScrollerCanvas.prototype.clearWidth = function () {\r\n this.width = null;\r\n this.minWidth = null;\r\n this.updateSize();\r\n };\r\n ScrollerCanvas.prototype.updateSize = function () {\r\n var gutters = this.gutters;\r\n this.el // is border-box (width includes padding)\r\n .toggleClass('fc-gutter-left', Boolean(gutters.left))\r\n .toggleClass('fc-gutter-right', Boolean(gutters.right))\r\n .toggleClass('fc-gutter-top', Boolean(gutters.top))\r\n .toggleClass('fc-gutter-bottom', Boolean(gutters.bottom))\r\n .css({\r\n paddingLeft: gutters.left || '',\r\n paddingRight: gutters.right || '',\r\n paddingTop: gutters.top || '',\r\n paddingBottom: gutters.bottom || '',\r\n width: (this.width != null) ?\r\n this.width + (gutters.left || 0) + (gutters.right || 0) :\r\n '',\r\n minWidth: (this.minWidth != null) ?\r\n this.minWidth + (gutters.left || 0) + (gutters.right || 0) :\r\n ''\r\n });\r\n this.bgEl.css({\r\n left: gutters.left || '',\r\n right: gutters.right || '',\r\n top: gutters.top || '',\r\n bottom: gutters.bottom || ''\r\n });\r\n };\r\n return ScrollerCanvas;\r\n}());\r\nexports.default = ScrollerCanvas;\r\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ScrollFollowerSprite_1 = __webpack_require__(27);\r\nvar ScrollFollower = /** @class */ (function () {\r\n function ScrollFollower(scroller, allowPointerEvents) {\r\n if (allowPointerEvents === void 0) { allowPointerEvents = false; }\r\n var _this = this;\r\n this.isHFollowing = true;\r\n this.isVFollowing = false;\r\n this.allowPointerEvents = false;\r\n this.containOnNaturalLeft = false;\r\n this.containOnNaturalRight = false;\r\n this.minTravel = 0;\r\n this.allowPointerEvents = allowPointerEvents;\r\n this.scroller = scroller;\r\n this.spritesById = {};\r\n scroller.on('scroll', function () {\r\n if (scroller.isTouchedEver) {\r\n // touch devices should only updated after the scroll is over\r\n _this.isTouch = true;\r\n _this.isForcedRelative = true; // touch devices scroll too quick to make absolute ever look good\r\n }\r\n else {\r\n _this.isTouch = false;\r\n // this.isForcedRelative = false // why?\r\n _this.handleScroll();\r\n }\r\n });\r\n // for touch devices\r\n scroller.on('scrollEnd', function () {\r\n _this.handleScroll();\r\n });\r\n }\r\n // TODO: have a destroy method.\r\n // View's whose skeletons get destroyed should unregister their scrollfollowers.\r\n /*\r\n `els` is as a jQuery set of elements.\r\n If elements are already position:relative, is a performance benefit.\r\n */\r\n ScrollFollower.prototype.setSpriteEls = function (els) {\r\n var _this = this;\r\n this.clearSprites();\r\n els.each(function (i, node) {\r\n _this.addSprite(new ScrollFollowerSprite_1.default($(node)));\r\n });\r\n };\r\n ScrollFollower.prototype.clearSprites = function () {\r\n this.iterSprites(function (sprite) { return sprite.clear(); });\r\n this.spritesById = {};\r\n };\r\n ScrollFollower.prototype.addSprite = function (sprite) {\r\n sprite.follower = this;\r\n this.spritesById[sprite.id] = sprite;\r\n };\r\n ScrollFollower.prototype.removeSprite = function (sprite) {\r\n sprite.clear();\r\n delete this.spritesById[sprite.id];\r\n };\r\n ScrollFollower.prototype.handleScroll = function () {\r\n this.updateViewport();\r\n this.updatePositions();\r\n };\r\n ScrollFollower.prototype.cacheDimensions = function () {\r\n this.updateViewport();\r\n this.scrollbarWidths = this.scroller.getScrollbarWidths();\r\n this.contentOffset = this.scroller.canvas.el.offset();\r\n this.iterSprites(function (sprite) { return sprite.cacheDimensions(); });\r\n };\r\n ScrollFollower.prototype.updateViewport = function () {\r\n var scroller = this.scroller;\r\n var left = scroller.getScrollFromLeft();\r\n var top = scroller.getScrollTop();\r\n // TODO: use getViewportRect() for getting this rect\r\n return this.viewportRect = {\r\n left: left,\r\n right: left + scroller.getClientWidth(),\r\n top: top,\r\n bottom: top + scroller.getClientHeight()\r\n };\r\n };\r\n ScrollFollower.prototype.forceRelative = function () {\r\n if (!this.isForcedRelative) {\r\n this.isForcedRelative = true;\r\n this.iterSprites(function (sprite) {\r\n if (sprite.doAbsolute) {\r\n return sprite.assignPosition();\r\n }\r\n });\r\n }\r\n };\r\n ScrollFollower.prototype.clearForce = function () {\r\n if (this.isForcedRelative && !this.isTouch) { // don't allow touch to ever NOT be relative\r\n this.isForcedRelative = false;\r\n this.iterSprites(function (sprite) { return sprite.assignPosition(); });\r\n }\r\n };\r\n ScrollFollower.prototype.update = function () {\r\n this.cacheDimensions();\r\n this.updatePositions();\r\n };\r\n ScrollFollower.prototype.updatePositions = function () {\r\n this.iterSprites(function (sprite) { return sprite.updatePosition(); });\r\n };\r\n // relative to inner content pane\r\n ScrollFollower.prototype.getContentRect = function (el) {\r\n return fullcalendar_1.getContentRect(el, this.contentOffset);\r\n };\r\n // relative to inner content pane\r\n ScrollFollower.prototype.getBoundingRect = function (el) {\r\n return fullcalendar_1.getOuterRect(el, this.contentOffset);\r\n };\r\n ScrollFollower.prototype.iterSprites = function (func) {\r\n for (var id in this.spritesById) {\r\n var sprite = this.spritesById[id];\r\n func(sprite, id);\r\n }\r\n };\r\n return ScrollFollower;\r\n}());\r\nexports.default = ScrollFollower;\r\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ScrollFollowerSprite = /** @class */ (function () {\r\n /*\r\n If given el is already position:relative, is a performance gain\r\n */\r\n function ScrollFollowerSprite(el) {\r\n this.isEnabled = true;\r\n this.isHFollowing = false;\r\n this.isVFollowing = false;\r\n this.doAbsolute = false;\r\n this.isAbsolute = false;\r\n this.isCentered = false;\r\n this.isBlock = false;\r\n this.el = el;\r\n this.id = String(ScrollFollowerSprite.uid++);\r\n this.isBlock = this.el.css('display') === 'block';\r\n if (this.el.css('position') !== 'relative') {\r\n this.el.css('position', 'relative');\r\n }\r\n }\r\n ScrollFollowerSprite.prototype.disable = function () {\r\n if (this.isEnabled) {\r\n this.isEnabled = false;\r\n this.resetPosition();\r\n this.unabsolutize();\r\n }\r\n };\r\n ScrollFollowerSprite.prototype.enable = function () {\r\n if (!this.isEnabled) {\r\n this.isEnabled = true;\r\n this.assignPosition();\r\n }\r\n };\r\n ScrollFollowerSprite.prototype.clear = function () {\r\n this.disable();\r\n this.follower = null;\r\n this.absoluteEl = null;\r\n };\r\n ScrollFollowerSprite.prototype.cacheDimensions = function () {\r\n var isHFollowing = false;\r\n var isVFollowing = false;\r\n var isCentered = false;\r\n this.naturalWidth = this.el.width();\r\n this.resetPosition();\r\n var follower = this.follower;\r\n var naturalRect = (this.naturalRect = follower.getBoundingRect(this.el));\r\n var parentEl = this.el.parent();\r\n this.parentRect = follower.getBoundingRect(parentEl);\r\n var containerRect = (this.containerRect = joinRects(follower.getContentRect(parentEl), naturalRect));\r\n var minTravel = follower.minTravel;\r\n if (follower.containOnNaturalLeft) {\r\n containerRect.left = naturalRect.left;\r\n }\r\n if (follower.containOnNaturalRight) {\r\n containerRect.right = naturalRect.right;\r\n }\r\n if (follower.isHFollowing) {\r\n if ((getRectWidth(containerRect) - getRectWidth(naturalRect)) >= minTravel) {\r\n isCentered = this.el.css('text-align') === 'center';\r\n isHFollowing = true;\r\n }\r\n }\r\n if (follower.isVFollowing) {\r\n if ((getRectHeight(containerRect) - getRectHeight(naturalRect)) >= minTravel) {\r\n isVFollowing = true;\r\n }\r\n }\r\n this.isHFollowing = isHFollowing;\r\n this.isVFollowing = isVFollowing;\r\n this.isCentered = isCentered;\r\n };\r\n ScrollFollowerSprite.prototype.updatePosition = function () {\r\n this.computePosition();\r\n this.assignPosition();\r\n };\r\n ScrollFollowerSprite.prototype.resetPosition = function () {\r\n this.el.css({\r\n top: '',\r\n left: ''\r\n });\r\n };\r\n ScrollFollowerSprite.prototype.computePosition = function () {\r\n var viewportRect = this.follower.viewportRect;\r\n var parentRect = this.parentRect;\r\n var containerRect = this.containerRect;\r\n var visibleParentRect = fullcalendar_1.intersectRects(viewportRect, parentRect);\r\n var rect = null;\r\n var doAbsolute = false;\r\n if (visibleParentRect) { // is parent element onscreen?\r\n rect = copyRect(this.naturalRect);\r\n var subjectRect = fullcalendar_1.intersectRects(rect, parentRect);\r\n // will we need to reposition?\r\n if ((this.isCentered && !testRectContains(viewportRect, parentRect)) || // centering and container not completely in view?\r\n (subjectRect && !testRectContains(viewportRect, subjectRect))) { // subject not completely in view?\r\n doAbsolute = true;\r\n if (this.isHFollowing) {\r\n if (this.isCentered) {\r\n var rectWidth = getRectWidth(rect);\r\n rect.left = ((visibleParentRect.left + visibleParentRect.right) / 2) - (rectWidth / 2);\r\n rect.right = rect.left + rectWidth;\r\n }\r\n else {\r\n if (!hContainRect(rect, viewportRect)) { // move into view. already there?\r\n doAbsolute = false;\r\n }\r\n }\r\n if (hContainRect(rect, containerRect)) { // move within container. needed to move?\r\n doAbsolute = false;\r\n }\r\n }\r\n if (this.isVFollowing) {\r\n if (!vContainRect(rect, viewportRect)) { // move into view. already there?\r\n doAbsolute = false;\r\n }\r\n if (vContainRect(rect, containerRect)) { // move within container. needed to move?\r\n doAbsolute = false;\r\n }\r\n }\r\n if (!testRectContains(viewportRect, rect)) { // partially offscreen?\r\n doAbsolute = false;\r\n }\r\n }\r\n }\r\n this.rect = rect;\r\n this.doAbsolute = doAbsolute;\r\n };\r\n ScrollFollowerSprite.prototype.assignPosition = function () {\r\n if (this.isEnabled) {\r\n if (!this.rect) { // completely offscreen?\r\n this.unabsolutize();\r\n }\r\n else if (this.doAbsolute && !this.follower.isForcedRelative) {\r\n this.absolutize();\r\n this.absoluteEl.css({\r\n top: (this.rect.top - this.follower.viewportRect.top) + this.follower.scrollbarWidths.top,\r\n left: (this.rect.left - this.follower.viewportRect.left) + this.follower.scrollbarWidths.left,\r\n width: this.isBlock ? this.naturalWidth : ''\r\n });\r\n }\r\n else {\r\n var top_1 = this.rect.top - this.naturalRect.top;\r\n var left = this.rect.left - this.naturalRect.left;\r\n this.unabsolutize();\r\n this.el.toggleClass('fc-following', Boolean(top_1 || left))\r\n .css({\r\n top: top_1,\r\n left: left\r\n });\r\n }\r\n }\r\n };\r\n ScrollFollowerSprite.prototype.absolutize = function () {\r\n if (!this.isAbsolute) {\r\n if (!this.absoluteEl) {\r\n this.absoluteEl = this.buildAbsoluteEl();\r\n }\r\n this.absoluteEl.appendTo(this.follower.scroller.el);\r\n this.el.css('visibility', 'hidden');\r\n this.isAbsolute = true;\r\n }\r\n };\r\n ScrollFollowerSprite.prototype.unabsolutize = function () {\r\n if (this.isAbsolute) {\r\n this.absoluteEl.detach();\r\n this.el.css('visibility', '');\r\n this.isAbsolute = false;\r\n }\r\n };\r\n ScrollFollowerSprite.prototype.buildAbsoluteEl = function () {\r\n var el = this.el.clone().addClass('fc-following');\r\n el.css({\r\n 'position': 'absolute',\r\n 'z-index': 1000,\r\n 'font-weight': this.el.css('font-weight'),\r\n 'font-size': this.el.css('font-size'),\r\n 'font-family': this.el.css('font-family'),\r\n 'text-decoration': this.el.css('text-decoration'),\r\n 'color': this.el.css('color'),\r\n 'padding-top': this.el.css('padding-top'),\r\n 'padding-bottom': this.el.css('padding-bottom'),\r\n 'padding-left': this.el.css('padding-left'),\r\n 'padding-right': this.el.css('padding-right')\r\n });\r\n if (!this.follower.allowPointerEvents) {\r\n el.css('pointer-events', 'none');\r\n }\r\n return el;\r\n };\r\n ScrollFollowerSprite.uid = 0;\r\n return ScrollFollowerSprite;\r\n}());\r\nexports.default = ScrollFollowerSprite;\r\n// Geometry Utils\r\n// ----------------------------------------------------------------------------------------------------------------------\r\n// TODO: move somewhere more common\r\nfunction copyRect(rect) {\r\n return {\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n bottom: rect.bottom\r\n };\r\n}\r\nfunction getRectWidth(rect) {\r\n return rect.right - rect.left;\r\n}\r\nfunction getRectHeight(rect) {\r\n return rect.bottom - rect.top;\r\n}\r\nfunction testRectContains(rect, innerRect) {\r\n return testRectHContains(rect, innerRect) && testRectVContains(rect, innerRect);\r\n}\r\nfunction testRectHContains(rect, innerRect) {\r\n return (innerRect.left >= rect.left) && (innerRect.right <= rect.right);\r\n}\r\nfunction testRectVContains(rect, innerRect) {\r\n return (innerRect.top >= rect.top) && (innerRect.bottom <= rect.bottom);\r\n}\r\nfunction hContainRect(rect, outerRect) {\r\n if (rect.left < outerRect.left) {\r\n rect.right = outerRect.left + getRectWidth(rect);\r\n rect.left = outerRect.left;\r\n return true;\r\n }\r\n else if (rect.right > outerRect.right) {\r\n rect.left = outerRect.right - getRectWidth(rect);\r\n rect.right = outerRect.right;\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\nfunction vContainRect(rect, outerRect) {\r\n if (rect.top < outerRect.top) {\r\n rect.bottom = outerRect.top + getRectHeight(rect);\r\n rect.top = outerRect.top;\r\n return true;\r\n }\r\n else if (rect.bottom > outerRect.bottom) {\r\n rect.top = outerRect.bottom - getRectHeight(rect);\r\n rect.bottom = outerRect.bottom;\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\nfunction joinRects(rect1, rect2) {\r\n return {\r\n left: Math.min(rect1.left, rect2.left),\r\n right: Math.max(rect1.right, rect2.right),\r\n top: Math.min(rect1.top, rect2.top),\r\n bottom: Math.max(rect1.bottom, rect2.bottom)\r\n };\r\n}\r\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar TimelineFillRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimelineFillRenderer, _super);\r\n function TimelineFillRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n component must be { bgSegContainerEl, rangeToCoords }\r\n */\r\n TimelineFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n if (segs.length) {\r\n var className = void 0;\r\n if (type === 'businessHours') {\r\n className = 'bgevent';\r\n }\r\n else {\r\n className = type.toLowerCase();\r\n }\r\n // making a new container each time is OKAY\r\n // all types of segs (background or business hours or whatever) are rendered in one pass\r\n var containerEl = $('
')\r\n .appendTo(this.component.bgSegContainerEl);\r\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\r\n var seg = segs_1[_i];\r\n var coords = this.component.rangeToCoords(seg); // TODO: make DRY\r\n seg.el.css({\r\n left: (seg.left = coords.left),\r\n right: -(seg.right = coords.right)\r\n });\r\n seg.el.appendTo(containerEl);\r\n }\r\n return containerEl; // return value\r\n }\r\n };\r\n return TimelineFillRenderer;\r\n}(fullcalendar_1.FillRenderer));\r\nexports.default = TimelineFillRenderer;\r\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar TimelineHelperRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimelineHelperRenderer, _super);\r\n function TimelineHelperRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n component must be { innerEl, rangeToCoords, ?resource }\r\n */\r\n TimelineHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n var helperNodes = []; // .fc-event-container\r\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\r\n var seg = segs_1[_i];\r\n // TODO: centralize logic (also in renderFgSegsInContainers)\r\n var coords = this.component.rangeToCoords(seg);\r\n seg.el.css({\r\n left: (seg.left = coords.left),\r\n right: -(seg.right = coords.right)\r\n });\r\n // TODO: detangle the concept of resources\r\n // TODO: how to identify these two segs as the same!?\r\n if (sourceSeg && (sourceSeg.resourceId === (this.component.resource != null ? this.component.resource.id : undefined))) {\r\n seg.el.css('top', sourceSeg.el.css('top'));\r\n }\r\n else {\r\n seg.el.css('top', 0);\r\n }\r\n }\r\n var helperContainerEl = $('
')\r\n .appendTo(this.component.innerEl);\r\n helperNodes.push(helperContainerEl[0]);\r\n for (var _a = 0, segs_2 = segs; _a < segs_2.length; _a++) {\r\n var seg = segs_2[_a];\r\n helperContainerEl.append(seg.el);\r\n }\r\n return $(helperNodes); // return value. TODO: need to accumulate across calls?\r\n };\r\n return TimelineHelperRenderer;\r\n}(fullcalendar_1.HelperRenderer));\r\nexports.default = TimelineHelperRenderer;\r\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ScrollJoiner_1 = __webpack_require__(16);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\nvar ResourceViewMixin_1 = __webpack_require__(9);\r\nvar TimelineView_1 = __webpack_require__(14);\r\nvar Spreadsheet_1 = __webpack_require__(43);\r\nvar ResourceTimelineEventRenderer_1 = __webpack_require__(45);\r\nvar RowParent_1 = __webpack_require__(18);\r\nvar ResourceRow_1 = __webpack_require__(46);\r\nvar HRowGroup_1 = __webpack_require__(47);\r\nvar VRowGroup_1 = __webpack_require__(31);\r\nvar EventRow_1 = __webpack_require__(33);\r\nvar ResourceTimelineView = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceTimelineView, _super);\r\n function ResourceTimelineView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.canHandleSpecificResources = true;\r\n _this.isResourceFootprintsEnabled = true;\r\n _this.nestingCnt = 0;\r\n _this.indiBizCnt = 0;\r\n _this.isIndiBizRendered = false;\r\n _this.isGenericBizRendered = false;\r\n _this.initResourceView();\r\n _this.processResourceOptions();\r\n _this.spreadsheet = new Spreadsheet_1.default(_this);\r\n _this.rowHierarchy = new RowParent_1.default(_this);\r\n _this.rowHierarchy.isExpanded = true; // hack to always show, regardless of resourcesInitiallyExpanded\r\n _this.resourceRowHash = {};\r\n return _this;\r\n }\r\n // Resource Options\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.processResourceOptions = function () {\r\n var allColSpecs = this.opt('resourceColumns') || [];\r\n var labelText = this.opt('resourceLabelText'); // TODO: view.override\r\n var defaultLabelText = 'Resources'; // TODO: view.defaults\r\n var superHeaderText = null;\r\n if (!allColSpecs.length) {\r\n allColSpecs.push({\r\n labelText: labelText || defaultLabelText,\r\n text: this.getResourceTextFunc()\r\n });\r\n }\r\n else {\r\n superHeaderText = labelText;\r\n }\r\n var plainColSpecs = [];\r\n var groupColSpecs = [];\r\n var groupSpecs = [];\r\n var isVGrouping = false;\r\n var isHGrouping = false;\r\n for (var _i = 0, allColSpecs_1 = allColSpecs; _i < allColSpecs_1.length; _i++) {\r\n var colSpec = allColSpecs_1[_i];\r\n if (colSpec.group) {\r\n groupColSpecs.push(colSpec);\r\n }\r\n else {\r\n plainColSpecs.push(colSpec);\r\n }\r\n }\r\n plainColSpecs[0].isMain = true;\r\n if (groupColSpecs.length) {\r\n groupSpecs = groupColSpecs;\r\n isVGrouping = true;\r\n }\r\n else {\r\n var hGroupField = this.opt('resourceGroupField');\r\n if (hGroupField) {\r\n isHGrouping = true;\r\n groupSpecs.push({\r\n field: hGroupField,\r\n text: this.opt('resourceGroupText'),\r\n render: this.opt('resourceGroupRender')\r\n });\r\n }\r\n }\r\n var allOrderSpecs = fullcalendar_1.parseFieldSpecs(this.opt('resourceOrder'));\r\n var plainOrderSpecs = [];\r\n for (var _a = 0, allOrderSpecs_1 = allOrderSpecs; _a < allOrderSpecs_1.length; _a++) {\r\n var orderSpec = allOrderSpecs_1[_a];\r\n var isGroup = false;\r\n for (var _b = 0, groupSpecs_1 = groupSpecs; _b < groupSpecs_1.length; _b++) {\r\n var groupSpec = groupSpecs_1[_b];\r\n if (groupSpec.field === orderSpec.field) {\r\n groupSpec.order = orderSpec.order; // -1, 0, 1\r\n isGroup = true;\r\n break;\r\n }\r\n }\r\n if (!isGroup) {\r\n plainOrderSpecs.push(orderSpec);\r\n }\r\n }\r\n this.superHeaderText = superHeaderText;\r\n this.isVGrouping = isVGrouping;\r\n this.isHGrouping = isHGrouping;\r\n this.groupSpecs = groupSpecs;\r\n this.colSpecs = groupColSpecs.concat(plainColSpecs);\r\n this.orderSpecs = plainOrderSpecs;\r\n };\r\n // Skeleton Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.renderSkeleton = function () {\r\n _super.prototype.renderSkeleton.call(this);\r\n var theme = this.calendar.theme;\r\n this.spreadsheet.el = this.el.find('tbody .fc-resource-area');\r\n this.spreadsheet.headEl = this.el.find('thead .fc-resource-area');\r\n this.spreadsheet.renderSkeleton();\r\n // ^ is not a Grid/DateComponent\r\n // only non-resource grid needs this, so kill it\r\n // TODO: look into better solution\r\n this.segContainerEl.remove();\r\n this.segContainerEl = null;\r\n var timeBodyContainerEl = $(\"
\").appendTo(this.timeBodyScroller.canvas.contentEl);\r\n this.timeBodyTbodyEl = timeBodyContainerEl.find('tbody');\r\n this.tbodyHash = {\r\n spreadsheet: this.spreadsheet.tbodyEl,\r\n event: this.timeBodyTbodyEl\r\n };\r\n this.resourceScrollJoiner = new ScrollJoiner_1.default('vertical', [\r\n this.spreadsheet.bodyScroller,\r\n this.timeBodyScroller\r\n ]);\r\n this.initDividerMoving();\r\n };\r\n ResourceTimelineView.prototype.renderSkeletonHtml = function () {\r\n var theme = this.calendar.theme;\r\n return \"
\";\r\n };\r\n // Divider Moving\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.initDividerMoving = function () {\r\n var _this = this;\r\n var left = this.opt('resourceAreaWidth');\r\n this.dividerEls = this.el.find('.fc-divider');\r\n // tableWidth available after spreadsheet.renderSkeleton\r\n this.dividerWidth = left != null ? left : this.spreadsheet.tableWidth;\r\n if (this.dividerWidth != null) {\r\n this.positionDivider(this.dividerWidth);\r\n }\r\n this.dividerEls.on('mousedown', function (ev) {\r\n _this.dividerMousedown(ev);\r\n });\r\n };\r\n ResourceTimelineView.prototype.dividerMousedown = function (ev) {\r\n var _this = this;\r\n var isRTL = this.opt('isRTL');\r\n var minWidth = 30;\r\n var maxWidth = this.el.width() - 30;\r\n var origWidth = this.getNaturalDividerWidth();\r\n var dragListener = new fullcalendar_1.DragListener({\r\n dragStart: function () {\r\n _this.dividerEls.addClass('fc-active');\r\n },\r\n drag: function (dx, dy) {\r\n var width;\r\n if (isRTL) {\r\n width = origWidth - dx;\r\n }\r\n else {\r\n width = origWidth + dx;\r\n }\r\n width = Math.max(width, minWidth);\r\n width = Math.min(width, maxWidth);\r\n _this.dividerWidth = width;\r\n _this.positionDivider(width);\r\n _this.calendar.updateViewSize();\r\n },\r\n dragEnd: function () {\r\n _this.dividerEls.removeClass('fc-active');\r\n }\r\n });\r\n dragListener.startInteraction(ev);\r\n };\r\n ResourceTimelineView.prototype.getNaturalDividerWidth = function () {\r\n return this.el.find('.fc-resource-area').width(); // TODO: don't we have this cached?\r\n };\r\n ResourceTimelineView.prototype.positionDivider = function (w) {\r\n this.el.find('.fc-resource-area').css('width', w); // TODO: don't we have this cached?\r\n };\r\n // Sizing\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n var bodyHeight;\r\n if (this.rowsNeedingHeightSync) {\r\n this.syncRowHeights(this.rowsNeedingHeightSync);\r\n this.rowsNeedingHeightSync = null;\r\n }\r\n else { // a resize or an event rerender\r\n this.syncRowHeights(); // sync all\r\n }\r\n var headHeight = this.syncHeadHeights();\r\n if (isAuto) {\r\n bodyHeight = 'auto';\r\n }\r\n else {\r\n bodyHeight = totalHeight - headHeight - this.queryMiscHeight();\r\n }\r\n this.timeBodyScroller.setHeight(bodyHeight);\r\n this.spreadsheet.bodyScroller.setHeight(bodyHeight);\r\n this.spreadsheet.updateSize();\r\n // do children AFTER because of ScrollFollowerSprite abs position issues\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n // do once spreadsheet area and event slat area have correct height, for gutters\r\n this.resourceScrollJoiner.update();\r\n };\r\n ResourceTimelineView.prototype.queryMiscHeight = function () {\r\n return this.el.outerHeight() -\r\n Math.max(this.spreadsheet.headScroller.el.outerHeight(), this.timeHeadScroller.el.outerHeight()) -\r\n Math.max(this.spreadsheet.bodyScroller.el.outerHeight(), this.timeBodyScroller.el.outerHeight());\r\n };\r\n ResourceTimelineView.prototype.syncHeadHeights = function () {\r\n this.spreadsheet.headHeight('auto');\r\n this.headHeight('auto');\r\n var headHeight = Math.max(this.spreadsheet.headHeight(), this.headHeight());\r\n this.spreadsheet.headHeight(headHeight);\r\n this.headHeight(headHeight);\r\n return headHeight;\r\n };\r\n // Scrolling\r\n // ------------------------------------------------------------------------------------------------------------------\r\n // this is useful for scrolling prev/next dates while resource is scrolled down\r\n ResourceTimelineView.prototype.queryResourceScroll = function () {\r\n var scroll = {};\r\n var scrollerTop = this.timeBodyScroller.scrollEl.offset().top; // TODO: use getClientRect\r\n for (var _i = 0, _a = this.getVisibleRows(); _i < _a.length; _i++) {\r\n var rowObj = _a[_i];\r\n if (rowObj.resource) {\r\n var el = rowObj.getTr('event');\r\n var elBottom = el.offset().top + el.outerHeight();\r\n if (elBottom > scrollerTop) {\r\n scroll.resourceId = rowObj.resource.id;\r\n scroll.bottom = elBottom - scrollerTop;\r\n break;\r\n }\r\n }\r\n }\r\n // TODO: what about left scroll state for spreadsheet area?\r\n return scroll;\r\n };\r\n ResourceTimelineView.prototype.applyResourceScroll = function (scroll) {\r\n if (scroll.resourceId) {\r\n var row = this.getResourceRow(scroll.resourceId);\r\n if (row) {\r\n var el = row.getTr('event');\r\n if (el) {\r\n var innerTop = this.timeBodyScroller.canvas.el.offset().top; // TODO: use -scrollHeight or something\r\n var elBottom = el.offset().top + el.outerHeight();\r\n var scrollTop = elBottom - scroll.bottom - innerTop;\r\n this.timeBodyScroller.setScrollTop(scrollTop);\r\n this.spreadsheet.bodyScroller.setScrollTop(scrollTop);\r\n }\r\n }\r\n }\r\n };\r\n ResourceTimelineView.prototype.scrollToResource = function (resource) {\r\n var row = this.getResourceRow(resource.id);\r\n if (row) {\r\n var el = row.getTr('event');\r\n if (el) {\r\n var innerTop = this.timeBodyScroller.canvas.el.offset().top; // TODO: use -scrollHeight or something\r\n var scrollTop = el.offset().top - innerTop;\r\n this.timeBodyScroller.setScrollTop(scrollTop);\r\n this.spreadsheet.bodyScroller.setScrollTop(scrollTop);\r\n }\r\n }\r\n };\r\n // Hit System\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.prepareHits = function () {\r\n var shownEventRows = [];\r\n _super.prototype.prepareHits.call(this);\r\n this.eventRows = this.getEventRows();\r\n this.eventRows.forEach(function (row) {\r\n if (row.get('isInDom')) {\r\n shownEventRows.push(row);\r\n }\r\n });\r\n var trArray = shownEventRows.map(function (row) { return (row.getTr('event')[0]); });\r\n this.shownEventRows = shownEventRows;\r\n this.rowCoordCache = new fullcalendar_1.CoordCache({\r\n els: trArray,\r\n isVertical: true\r\n });\r\n this.rowCoordCache.build();\r\n };\r\n ResourceTimelineView.prototype.releaseHits = function () {\r\n _super.prototype.releaseHits.call(this);\r\n this.eventRows = null;\r\n this.shownEventRows = null;\r\n this.rowCoordCache.clear();\r\n };\r\n ResourceTimelineView.prototype.queryHit = function (leftOffset, topOffset) {\r\n var simpleHit = _super.prototype.queryHit.call(this, leftOffset, topOffset);\r\n if (simpleHit) {\r\n var rowIndex = this.rowCoordCache.getVerticalIndex(topOffset);\r\n if (rowIndex != null) {\r\n return {\r\n resourceId: this.shownEventRows[rowIndex].resource.id,\r\n snap: simpleHit.snap,\r\n component: this,\r\n left: simpleHit.left,\r\n right: simpleHit.right,\r\n top: this.rowCoordCache.getTopOffset(rowIndex),\r\n bottom: this.rowCoordCache.getBottomOffset(rowIndex)\r\n };\r\n }\r\n }\r\n };\r\n ResourceTimelineView.prototype.getHitFootprint = function (hit) {\r\n var componentFootprint = _super.prototype.getHitFootprint.call(this, hit);\r\n return new ResourceComponentFootprint_1.default(componentFootprint.unzonedRange, componentFootprint.isAllDay, hit.resourceId);\r\n };\r\n ResourceTimelineView.prototype.getHitEl = function (hit) {\r\n return this.getSnapEl(hit.snap);\r\n };\r\n // Resource Data\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.renderResources = function (resources) {\r\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\r\n var resource = resources_1[_i];\r\n this.renderResource(resource);\r\n }\r\n };\r\n ResourceTimelineView.prototype.unrenderResources = function () {\r\n this.rowHierarchy.removeElement();\r\n this.rowHierarchy.removeChildren();\r\n for (var id in this.resourceRowHash) {\r\n this.removeChild(this.resourceRowHash[id]); // for DateComponent!\r\n }\r\n this.resourceRowHash = {};\r\n };\r\n ResourceTimelineView.prototype.renderResource = function (resource) {\r\n this.insertResource(resource);\r\n };\r\n ResourceTimelineView.prototype.unrenderResource = function (resource) {\r\n this.removeResource(resource);\r\n };\r\n // Event Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.executeEventRender = function (eventsPayload) {\r\n var payloadsByResourceId = {};\r\n var genericPayload = {};\r\n var resourceId;\r\n for (var eventDefId in eventsPayload) {\r\n var eventInstanceGroup = eventsPayload[eventDefId];\r\n var eventDef = eventInstanceGroup.getEventDef();\r\n var resourceIds = eventDef.getResourceIds();\r\n if (resourceIds.length) {\r\n for (var _i = 0, resourceIds_1 = resourceIds; _i < resourceIds_1.length; _i++) {\r\n resourceId = resourceIds_1[_i];\r\n var bucket = payloadsByResourceId[resourceId] || (payloadsByResourceId[resourceId] = {});\r\n bucket[eventDefId] = eventInstanceGroup;\r\n }\r\n // only render bg segs that have no resources\r\n }\r\n else if (eventDef.hasBgRendering()) {\r\n genericPayload[eventDefId] = eventInstanceGroup;\r\n }\r\n }\r\n this.eventRenderer.render(genericPayload);\r\n for (resourceId in payloadsByResourceId) {\r\n var resourceEventsPayload = payloadsByResourceId[resourceId];\r\n var row = this.getResourceRow(resourceId);\r\n if (row) {\r\n row.executeEventRender(resourceEventsPayload);\r\n }\r\n }\r\n };\r\n // Business Hours Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n this.genericBiz = businessHourGenerator; // save for later\r\n this.isIndiBizRendered = false;\r\n this.isGenericBizRendered = false;\r\n if (this.indiBizCnt) {\r\n this.isIndiBizRendered = true;\r\n for (var _i = 0, _a = this.getEventRows(); _i < _a.length; _i++) {\r\n var row = _a[_i];\r\n row.renderBusinessHours(row.resource.businessHourGenerator ||\r\n businessHourGenerator);\r\n }\r\n }\r\n else {\r\n this.isGenericBizRendered = true;\r\n this.businessHourRenderer.render(businessHourGenerator);\r\n }\r\n };\r\n ResourceTimelineView.prototype.updateIndiBiz = function () {\r\n if ((this.indiBizCnt && this.isGenericBizRendered) ||\r\n (!this.indiBizCnt && this.isIndiBizRendered)) {\r\n this.unrenderBusinessHours();\r\n this.renderBusinessHours(this.genericBiz);\r\n }\r\n };\r\n // Row Management\r\n // ------------------------------------------------------------------------------------------------------------------\r\n // creates a row for the given resource and inserts it into the hierarchy.\r\n // if `parentResourceRow` is given, inserts it as a direct child\r\n // does not render\r\n ResourceTimelineView.prototype.insertResource = function (resource, parentResourceRow) {\r\n var noExplicitParent = !parentResourceRow;\r\n var row = new ResourceRow_1.default(this, resource);\r\n if (!parentResourceRow) {\r\n if (resource.parent) {\r\n parentResourceRow = this.getResourceRow(resource.parent.id);\r\n }\r\n else if (resource.parentId) {\r\n parentResourceRow = this.getResourceRow(resource.parentId);\r\n }\r\n }\r\n if (parentResourceRow) {\r\n this.insertRowAsChild(row, parentResourceRow);\r\n }\r\n else {\r\n this.insertRow(row);\r\n }\r\n this.addChild(row); // for DateComponent!\r\n this.resourceRowHash[resource.id] = row;\r\n if (resource.businessHourGenerator) {\r\n this.indiBizCnt++;\r\n // hack to get dynamically-added resources with custom business hours to render\r\n if (this.isIndiBizRendered) {\r\n row.businessHourGenerator = resource.businessHourGenerator;\r\n }\r\n this.updateIndiBiz();\r\n }\r\n for (var _i = 0, _a = resource.children; _i < _a.length; _i++) {\r\n var childResource = _a[_i];\r\n this.insertResource(childResource, row);\r\n }\r\n if (noExplicitParent && computeIsChildrenVisible(row.parent)) {\r\n row.renderSkeleton();\r\n }\r\n return row;\r\n };\r\n // does not unrender\r\n ResourceTimelineView.prototype.removeResource = function (resource) {\r\n var row = this.resourceRowHash[resource.id];\r\n if (row) {\r\n delete this.resourceRowHash[resource.id];\r\n this.removeChild(row); // for DateComponent!\r\n row.removeFromParentAndDom();\r\n if (resource.businessHourGenerator) {\r\n this.indiBizCnt--;\r\n this.updateIndiBiz();\r\n }\r\n }\r\n return row;\r\n };\r\n // inserts the given row into the hierarchy.\r\n // `parent` can be any tree root of the hierarchy.\r\n // `orderSpecs` will recursively create groups within the root before inserting the row.\r\n ResourceTimelineView.prototype.insertRow = function (row, parent, groupSpecs) {\r\n if (parent === void 0) { parent = this.rowHierarchy; }\r\n if (groupSpecs === void 0) { groupSpecs = this.groupSpecs; }\r\n if (groupSpecs.length) {\r\n var group = this.ensureResourceGroup(row, parent, groupSpecs[0]);\r\n if (group instanceof HRowGroup_1.default) {\r\n this.insertRowAsChild(row, group); // horizontal rows can only be one level deep\r\n }\r\n else {\r\n this.insertRow(row, group, groupSpecs.slice(1));\r\n }\r\n }\r\n else {\r\n this.insertRowAsChild(row, parent);\r\n }\r\n };\r\n // inserts the given row as a direct child of the given parent\r\n ResourceTimelineView.prototype.insertRowAsChild = function (row, parent) {\r\n return parent.addChildRowNode(row, this.computeChildRowPosition(row, parent));\r\n };\r\n // computes the position at which the given node should be inserted into the parent's children\r\n // if no specific position is determined, returns null\r\n ResourceTimelineView.prototype.computeChildRowPosition = function (child, parent) {\r\n if (this.orderSpecs.length) {\r\n for (var i = 0; i < parent.children.length; i++) {\r\n var sibling = parent.children[i];\r\n var cmp = this.compareResources(sibling.resource || {}, child.resource || {});\r\n if (cmp > 0) { // went 1 past. insert at i\r\n return i;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n // given two resources, returns a cmp value (-1, 0, 1)\r\n ResourceTimelineView.prototype.compareResources = function (a, b) {\r\n return fullcalendar_1.compareByFieldSpecs(a, b, this.orderSpecs);\r\n };\r\n // given information on how a row should be inserted into one of the parent's child groups,\r\n // ensure a child group exists, creating it if necessary, and then return it.\r\n // spec MIGHT NOT HAVE AN ORDER\r\n ResourceTimelineView.prototype.ensureResourceGroup = function (row, parent, spec) {\r\n var i;\r\n var testGroup;\r\n var groupValue = (row.resource || {})[spec.field]; // the groupValue of the row\r\n var group = null;\r\n // find an existing group that matches, or determine the position for a new group\r\n if (spec.order) {\r\n for (i = 0; i < parent.children.length; i++) {\r\n testGroup = parent.children[i];\r\n var cmp = fullcalendar_1.flexibleCompare(testGroup.groupValue, groupValue) * spec.order;\r\n if (cmp === 0) { // an exact match with an existing group\r\n group = testGroup;\r\n break;\r\n }\r\n else if (cmp > 0) { // the row's desired group is after testGroup. insert at this position\r\n break;\r\n }\r\n }\r\n }\r\n else { // the groups are unordered\r\n for (i = 0; i < parent.children.length; i++) {\r\n testGroup = parent.children[i];\r\n if (testGroup.groupValue === groupValue) {\r\n group = testGroup;\r\n break;\r\n }\r\n }\r\n } // `i` will be at the end if group was not found\r\n // create a new group\r\n if (!group) {\r\n if (this.isVGrouping) {\r\n group = new VRowGroup_1.default(this, spec, groupValue);\r\n }\r\n else {\r\n group = new HRowGroup_1.default(this, spec, groupValue);\r\n }\r\n parent.addChildRowNode(group, i);\r\n group.renderSkeleton(); // always immediately render groups\r\n }\r\n return group;\r\n };\r\n // Row Rendering\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.descendantAdded = function (row) {\r\n var wasNesting = this.isNesting;\r\n var isNesting = Boolean(this.nestingCnt += row.depth ? 1 : 0);\r\n if (wasNesting !== isNesting) {\r\n this.el.toggleClass('fc-nested', isNesting)\r\n .toggleClass('fc-flat', !isNesting);\r\n this.isNesting = isNesting;\r\n }\r\n };\r\n ResourceTimelineView.prototype.descendantRemoved = function (row) {\r\n var wasNesting = this.isNesting;\r\n var isNesting = Boolean(this.nestingCnt -= row.depth ? 1 : 0);\r\n if (wasNesting !== isNesting) {\r\n this.el.toggleClass('fc-nested', isNesting)\r\n .toggleClass('fc-flat', !isNesting);\r\n this.isNesting = isNesting;\r\n }\r\n };\r\n ResourceTimelineView.prototype.descendantShown = function (row) {\r\n (this.rowsNeedingHeightSync || (this.rowsNeedingHeightSync = [])).push(row);\r\n };\r\n ResourceTimelineView.prototype.descendantHidden = function (row) {\r\n if (!this.rowsNeedingHeightSync) { // signals to updateSize that specific rows hidden\r\n this.rowsNeedingHeightSync = [];\r\n }\r\n };\r\n // visibleRows is flat. does not do recursive\r\n ResourceTimelineView.prototype.syncRowHeights = function (visibleRows, safe) {\r\n if (visibleRows === void 0) { visibleRows = this.getVisibleRows(); }\r\n if (safe === void 0) { safe = false; }\r\n for (var _i = 0, visibleRows_1 = visibleRows; _i < visibleRows_1.length; _i++) {\r\n var row = visibleRows_1[_i];\r\n row.setTrInnerHeight('');\r\n }\r\n var innerHeights = visibleRows.map(function (row) {\r\n var h = row.getMaxTrInnerHeight();\r\n if (safe) {\r\n h += h % 2; // FF and zoom only like even numbers for alignment\r\n }\r\n return h;\r\n });\r\n for (var i = 0; i < visibleRows.length; i++) {\r\n var row = visibleRows[i];\r\n row.setTrInnerHeight(innerHeights[i]);\r\n }\r\n if (!safe) {\r\n var h1 = this.spreadsheet.tbodyEl.height();\r\n var h2 = this.timeBodyTbodyEl.height();\r\n if (Math.abs(h1 - h2) > 1) {\r\n this.syncRowHeights(visibleRows, true);\r\n }\r\n }\r\n };\r\n // Row Querying\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.getVisibleRows = function () {\r\n var result = [];\r\n for (var _i = 0, _a = this.rowHierarchy.getRows(); _i < _a.length; _i++) {\r\n var row = _a[_i];\r\n if (row.get('isInDom')) {\r\n result.push(row);\r\n }\r\n }\r\n return result;\r\n };\r\n ResourceTimelineView.prototype.getEventRows = function () {\r\n return this.rowHierarchy.getRows().filter(function (row) { return (row instanceof EventRow_1.default); });\r\n };\r\n ResourceTimelineView.prototype.getResourceRow = function (resourceId) {\r\n return this.resourceRowHash[resourceId];\r\n };\r\n // Selection\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n if (componentFootprint.resourceId) {\r\n var rowObj = this.getResourceRow(componentFootprint.resourceId);\r\n if (rowObj) {\r\n return rowObj.renderSelectionFootprint(componentFootprint);\r\n }\r\n }\r\n else {\r\n return _super.prototype.renderSelectionFootprint.call(this, componentFootprint);\r\n }\r\n };\r\n // Event Resizing (route to rows)\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n var map = groupEventFootprintsByResourceId(eventFootprints);\r\n for (var resourceId in map) {\r\n var resourceEventFootprints = map[resourceId];\r\n var rowObj = this.getResourceRow(resourceId);\r\n // render helpers\r\n rowObj.helperRenderer.renderEventDraggingFootprints(resourceEventFootprints, seg, isTouch);\r\n // render highlight\r\n for (var _i = 0, resourceEventFootprints_1 = resourceEventFootprints; _i < resourceEventFootprints_1.length; _i++) {\r\n var eventFootprint = resourceEventFootprints_1[_i];\r\n rowObj.renderHighlight(eventFootprint.componentFootprint);\r\n }\r\n }\r\n };\r\n ResourceTimelineView.prototype.unrenderEventResize = function () {\r\n for (var _i = 0, _a = this.getEventRows(); _i < _a.length; _i++) {\r\n var rowObj = _a[_i];\r\n rowObj.helperRenderer.unrender();\r\n rowObj.unrenderHighlight();\r\n }\r\n };\r\n // DnD (route to rows)\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceTimelineView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var map = groupEventFootprintsByResourceId(eventFootprints);\r\n var resourceEventFootprints;\r\n var resourceId;\r\n var rowObj;\r\n if (seg) {\r\n // draw helper\r\n for (resourceId in map) {\r\n resourceEventFootprints = map[resourceId];\r\n rowObj = this.getResourceRow(resourceId);\r\n rowObj.helperRenderer.renderEventDraggingFootprints(resourceEventFootprints, seg, isTouch);\r\n }\r\n return true; // signal helper rendered\r\n }\r\n else {\r\n // draw highlight\r\n for (resourceId in map) {\r\n resourceEventFootprints = map[resourceId];\r\n for (var _i = 0, resourceEventFootprints_2 = resourceEventFootprints; _i < resourceEventFootprints_2.length; _i++) {\r\n var eventFootprint = resourceEventFootprints_2[_i];\r\n rowObj = this.getResourceRow(resourceId);\r\n rowObj.renderHighlight(eventFootprint.componentFootprint);\r\n }\r\n }\r\n return false; // signal helper not rendered\r\n }\r\n };\r\n ResourceTimelineView.prototype.unrenderDrag = function () {\r\n for (var _i = 0, _a = this.getEventRows(); _i < _a.length; _i++) {\r\n var rowObj = _a[_i];\r\n rowObj.helperRenderer.unrender();\r\n rowObj.unrenderHighlight();\r\n }\r\n };\r\n return ResourceTimelineView;\r\n}(TimelineView_1.default));\r\nexports.default = ResourceTimelineView;\r\nResourceTimelineView.prototype.eventRendererClass = ResourceTimelineEventRenderer_1.default;\r\nResourceViewMixin_1.default.mixInto(ResourceTimelineView);\r\n// Utils\r\n// ------------------------------------------------------------------------------------------------------------------\r\nfunction groupEventFootprintsByResourceId(eventFootprints) {\r\n var map = {};\r\n for (var _i = 0, eventFootprints_1 = eventFootprints; _i < eventFootprints_1.length; _i++) {\r\n var eventFootprint = eventFootprints_1[_i];\r\n (map[eventFootprint.componentFootprint.resourceId] || (map[eventFootprint.componentFootprint.resourceId] = []))\r\n .push(eventFootprint);\r\n }\r\n return map;\r\n}\r\n/*\r\nif `current` is null, returns true\r\n*/\r\nfunction computeIsChildrenVisible(current) {\r\n while (current) {\r\n if (!current.isExpanded) {\r\n return false;\r\n }\r\n current = current.parent;\r\n }\r\n return true;\r\n}\r\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar RowGroup_1 = __webpack_require__(32);\r\n/*\r\nA row grouping that renders as a tall multi-cell vertical span in the \"spreadsheet\" area\r\n*/\r\nvar VRowGroup = /** @class */ (function (_super) {\r\n tslib_1.__extends(VRowGroup, _super);\r\n function VRowGroup(view, groupSpec, groupValue) {\r\n var _this = _super.call(this, view, groupSpec, groupValue) || this;\r\n _this.rowspan = 0;\r\n return _this;\r\n }\r\n /*\r\n Makes sure the groupTd has the correct rowspan / place in the DOM.\r\n PRECONDITION: in the case of multiple group nesting, a child's renderRowspan()\r\n will be called before the parent's renderRowspan().\r\n */\r\n VRowGroup.prototype.renderRowspan = function () {\r\n var leadingTr;\r\n var theme = this.view.calendar.theme;\r\n if (this.rowspan) { // takes up at least one row?\r\n // ensure the TD element\r\n if (!this.groupTd) {\r\n this.groupTd = $('')\r\n .append(this.renderGroupContentEl());\r\n }\r\n this.groupTd.attr('rowspan', this.rowspan);\r\n // (re)insert groupTd if it was never inserted, or the first TR is different\r\n leadingTr = this.getLeadingRow().getTr('spreadsheet');\r\n if (leadingTr !== this.leadingTr) {\r\n if (leadingTr) { // might not exist if child was unrendered before parent\r\n leadingTr.prepend(this.groupTd); // parents will later prepend their own\r\n }\r\n this.leadingTr = leadingTr;\r\n }\r\n }\r\n else { // takes up zero rows?\r\n // remove the TD element if it was rendered\r\n if (this.groupTd) {\r\n this.groupTd.remove();\r\n this.groupTd = null;\r\n }\r\n this.leadingTr = null;\r\n }\r\n };\r\n /*\r\n Called when a row somewhere within the grouping is shown\r\n */\r\n VRowGroup.prototype.descendantShown = function (row) {\r\n this.rowspan += 1;\r\n this.renderRowspan();\r\n _super.prototype.descendantShown.call(this, row); // will bubble to parent\r\n };\r\n /*\r\n Called when a row somewhere within the grouping is hidden\r\n */\r\n VRowGroup.prototype.descendantHidden = function (row) {\r\n this.rowspan -= 1;\r\n this.renderRowspan();\r\n _super.prototype.descendantHidden.call(this, row);\r\n };\r\n return VRowGroup;\r\n}(RowGroup_1.default));\r\nexports.default = VRowGroup;\r\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar RowParent_1 = __webpack_require__(18);\r\n/*\r\nAn abstract node in a row-hierarchy tree that contains other nodes.\r\nWill have some sort of rendered label indicating the grouping,\r\nup to the subclass for determining what to do with it.\r\n*/\r\nvar RowGroup = /** @class */ (function (_super) {\r\n tslib_1.__extends(RowGroup, _super);\r\n function RowGroup(view, groupSpec, groupValue) {\r\n var _this = _super.call(this, view) || this;\r\n _this.groupSpec = groupSpec;\r\n _this.groupValue = groupValue;\r\n return _this;\r\n }\r\n /*\r\n Called when this row (if it renders a row) or a subrow is removed\r\n */\r\n RowGroup.prototype.descendantRemoved = function (row) {\r\n _super.prototype.descendantRemoved.call(this, row); // bubble up to the view and let the node be fully removed\r\n // and there are no more children in the group, implictly remove this group as well\r\n if (!this.children.length) {\r\n this.removeFromParentAndDom();\r\n }\r\n };\r\n /*\r\n Renders the content wrapper element that will be inserted into this row's TD cell\r\n */\r\n RowGroup.prototype.renderGroupContentEl = function () {\r\n var contentEl = $('
')\r\n .append(this.renderGroupTextEl());\r\n var filter = this.groupSpec.render;\r\n if (typeof filter === 'function') {\r\n contentEl = filter(contentEl, this.groupValue) || contentEl;\r\n }\r\n return contentEl;\r\n };\r\n /*\r\n Renders the text span element that will be inserted into this row's TD cell.\r\n Goes within the content element.\r\n */\r\n RowGroup.prototype.renderGroupTextEl = function () {\r\n var text = this.groupValue || ''; // might be null/undefined if an ad-hoc grouping\r\n var filter = this.groupSpec.text;\r\n if (typeof filter === 'function') {\r\n text = filter(text) || text;\r\n }\r\n return $('').text(text);\r\n };\r\n return RowGroup;\r\n}(RowParent_1.default));\r\nexports.default = RowGroup;\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar RowParent_1 = __webpack_require__(18);\r\nvar TimelineFillRenderer_1 = __webpack_require__(28);\r\nvar TimelineEventRenderer_1 = __webpack_require__(17);\r\nvar TimelineHelperRenderer_1 = __webpack_require__(29);\r\nvar EventRow = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventRow, _super);\r\n function EventRow() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n EventRow.prototype.renderEventSkeleton = function (tr) {\r\n var theme = this.view.calendar.theme;\r\n tr.html(\"
\");\r\n this.segContainerEl = tr.find('.fc-event-container');\r\n this.innerEl = (this.bgSegContainerEl = tr.find('td > div'));\r\n };\r\n EventRow.prototype.rangeToCoords = function (range) {\r\n return this.view.rangeToCoords(range);\r\n };\r\n EventRow.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n return this.view.componentFootprintToSegs(componentFootprint);\r\n };\r\n return EventRow;\r\n}(RowParent_1.default));\r\nexports.default = EventRow;\r\nEventRow.prototype.fillRendererClass = TimelineFillRenderer_1.default;\r\nEventRow.prototype.eventRendererClass = TimelineEventRenderer_1.default;\r\nEventRow.prototype.helperRendererClass = TimelineHelperRenderer_1.default;\r\nEventRow.prototype.businessHourRendererClass = fullcalendar_1.BusinessHourRenderer;\r\nEventRow.prototype.hasOwnRow = true;\r\n\n\n/***/ }),\n/* 34 */,\n/* 35 */,\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(0);\r\n// imports solely for side-effects\r\n__webpack_require__(37);\r\n__webpack_require__(48);\r\n__webpack_require__(50);\r\n__webpack_require__(51);\r\n__webpack_require__(53);\r\n__webpack_require__(54);\r\n__webpack_require__(55);\r\n__webpack_require__(56);\r\n__webpack_require__(57);\r\n__webpack_require__(58);\r\n__webpack_require__(59);\r\n__webpack_require__(60);\r\n__webpack_require__(61);\r\n__webpack_require__(62);\r\n__webpack_require__(63);\r\n__webpack_require__(64);\r\n__webpack_require__(65);\r\n__webpack_require__(66);\r\n__webpack_require__(67);\r\n__webpack_require__(68);\r\nvar schedulerVersion = '1.10.4';\r\nexportHooks.schedulerVersion = schedulerVersion;\r\n/*\r\nWhen the required internal version is upped,\r\nalso update the .json files with a new minor version requirement.\r\nExample: bump ~2.7.2 to ~2.8.0\r\nUse a tilde to match future patch-level changes only!\r\n*/\r\nif (exportHooks.internalApiVersion !== 12) {\r\n throw new Error('v' + schedulerVersion + ' of FullCalendar Scheduler ' +\r\n 'is incompatible with v' + exportHooks.version + ' of the core.\\n' +\r\n 'Please see http://fullcalendar.io/support/ for more information.');\r\n}\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(0);\r\nvar ResourceAgendaView_1 = __webpack_require__(20);\r\nvar ResourceBasicView_1 = __webpack_require__(22);\r\nvar ResourceMonthView_1 = __webpack_require__(23);\r\nvar TimelineView_1 = __webpack_require__(14);\r\nvar ResourceTimelineView_1 = __webpack_require__(30);\r\n// TODO: find a better way\r\nexportHooks.ResourceAgendaView = ResourceAgendaView_1.default;\r\nexportHooks.ResourceBasicView = ResourceBasicView_1.default;\r\nexportHooks.ResourceMonthView = ResourceMonthView_1.default;\r\nexportHooks.TimelineView = TimelineView_1.default;\r\nexportHooks.ResourceTimelineView = ResourceTimelineView_1.default;\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceDayTableMixin_1 = __webpack_require__(21);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\nvar ResourceTimeGrid = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceTimeGrid, _super);\r\n function ResourceTimeGrid(view) {\r\n var _this = _super.call(this, view) || this;\r\n _this.isResourceFootprintsEnabled = true;\r\n return _this;\r\n }\r\n ResourceTimeGrid.prototype.renderDates = function (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n this.renderSlats();\r\n };\r\n ResourceTimeGrid.prototype.renderResources = function (resources) {\r\n this.registerResources(resources);\r\n this.renderColumns();\r\n if (this.headContainerEl) {\r\n this.processHeadResourceEls(this.headContainerEl);\r\n }\r\n };\r\n // TODO: make DRY with ResourceDayGrid\r\n ResourceTimeGrid.prototype.getHitFootprint = function (hit) {\r\n var plainFootprint = _super.prototype.getHitFootprint.call(this, hit);\r\n return new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, this.getColResource(hit.col).id);\r\n };\r\n ResourceTimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n var resourceCnt = this.resourceCnt;\r\n var genericSegs = this.sliceRangeByTimes(componentFootprint.unzonedRange); // no assigned resources\r\n var resourceSegs = [];\r\n for (var _i = 0, genericSegs_1 = genericSegs; _i < genericSegs_1.length; _i++) {\r\n var seg = genericSegs_1[_i];\r\n for (var resourceIndex = 0; resourceIndex < resourceCnt; resourceIndex++) {\r\n var resourceObj = this.flattenedResources[resourceIndex];\r\n if (!(componentFootprint instanceof ResourceComponentFootprint_1.default) ||\r\n (componentFootprint.resourceId === resourceObj.id)) {\r\n var copy = $.extend({}, seg);\r\n copy.resource = resourceObj;\r\n copy.col = this.indicesToCol(resourceIndex, seg.dayIndex);\r\n resourceSegs.push(copy);\r\n }\r\n }\r\n }\r\n return resourceSegs;\r\n };\r\n return ResourceTimeGrid;\r\n}(fullcalendar_1.TimeGrid));\r\nexports.default = ResourceTimeGrid;\r\nResourceDayTableMixin_1.default.mixInto(ResourceTimeGrid);\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar rtlScrollSystem = null;\r\n/*\r\nA Scroller with additional functionality:\r\n- optional ScrollerCanvas for content\r\n- fired events for scroll start/end\r\n- cross-browser normalization of horizontal scroll for RTL\r\n*/\r\nvar EnhancedScroller = /** @class */ (function (_super) {\r\n tslib_1.__extends(EnhancedScroller, _super);\r\n function EnhancedScroller(options) {\r\n var _this = _super.call(this, options) || this;\r\n _this.isScrolling = false;\r\n _this.isTouching = false;\r\n _this.isTouchedEver = false;\r\n _this.isMoving = false;\r\n _this.isTouchScrollEnabled = true;\r\n _this.requestMovingEnd = fullcalendar_1.debounce(_this.reportMovingEnd, 500);\r\n return _this;\r\n }\r\n EnhancedScroller.prototype.render = function () {\r\n _super.prototype.render.call(this);\r\n if (this.canvas) {\r\n this.canvas.render();\r\n this.canvas.el.appendTo(this.scrollEl);\r\n }\r\n this.bindHandlers();\r\n };\r\n EnhancedScroller.prototype.destroy = function () {\r\n _super.prototype.destroy.call(this);\r\n this.unbindHandlers();\r\n };\r\n // Touch scroll prevention\r\n // ----------------------------------------------------------------------------------------------\r\n EnhancedScroller.prototype.disableTouchScroll = function () {\r\n this.isTouchScrollEnabled = false;\r\n this.bindPreventTouchScroll(); // will be unbound in enableTouchScroll or reportTouchEnd\r\n };\r\n EnhancedScroller.prototype.enableTouchScroll = function () {\r\n this.isTouchScrollEnabled = true;\r\n // only immediately unbind if a touch event is NOT in progress.\r\n // otherwise, it will be handled by reportTouchEnd.\r\n if (!this.isTouching) {\r\n this.unbindPreventTouchScroll();\r\n }\r\n };\r\n EnhancedScroller.prototype.bindPreventTouchScroll = function () {\r\n if (!this.preventTouchScrollHandler) {\r\n this.scrollEl.on('touchmove', (this.preventTouchScrollHandler = fullcalendar_1.preventDefault));\r\n }\r\n };\r\n EnhancedScroller.prototype.unbindPreventTouchScroll = function () {\r\n if (this.preventTouchScrollHandler) {\r\n this.scrollEl.off('touchmove', this.preventTouchScrollHandler);\r\n this.preventTouchScrollHandler = null;\r\n }\r\n };\r\n // Handlers\r\n // ----------------------------------------------------------------------------------------------\r\n EnhancedScroller.prototype.bindHandlers = function () {\r\n return this.listenTo(this.scrollEl, {\r\n scroll: this.reportScroll,\r\n touchstart: this.reportTouchStart,\r\n touchend: this.reportTouchEnd\r\n });\r\n };\r\n EnhancedScroller.prototype.unbindHandlers = function () {\r\n return this.stopListeningTo(this.scrollEl);\r\n };\r\n // Scroll Events\r\n // ----------------------------------------------------------------------------------------------\r\n EnhancedScroller.prototype.reportScroll = function () {\r\n if (!this.isScrolling) {\r\n this.reportScrollStart();\r\n }\r\n this.trigger('scroll');\r\n this.isMoving = true;\r\n this.requestMovingEnd();\r\n };\r\n EnhancedScroller.prototype.reportScrollStart = function () {\r\n if (!this.isScrolling) {\r\n this.isScrolling = true;\r\n this.trigger('scrollStart', this.isTouching); // created in constructor\r\n }\r\n };\r\n EnhancedScroller.prototype.reportMovingEnd = function () {\r\n this.isMoving = false;\r\n // only end the scroll if not currently touching.\r\n // if touching, the scrolling will end later, on touchend.\r\n if (!this.isTouching) {\r\n this.reportScrollEnd();\r\n }\r\n };\r\n EnhancedScroller.prototype.reportScrollEnd = function () {\r\n if (this.isScrolling) {\r\n this.trigger('scrollEnd');\r\n this.isScrolling = false;\r\n }\r\n };\r\n // Touch Events\r\n // ----------------------------------------------------------------------------------------------\r\n // will fire *before* the scroll event is fired\r\n EnhancedScroller.prototype.reportTouchStart = function () {\r\n this.isTouching = true;\r\n this.isTouchedEver = true;\r\n };\r\n EnhancedScroller.prototype.reportTouchEnd = function () {\r\n if (this.isTouching) {\r\n this.isTouching = false;\r\n // if touch scrolling was re-enabled during a recent touch scroll\r\n // then unbind the handlers that are preventing it from happening.\r\n if (this.isTouchScrollEnabled) {\r\n this.unbindPreventTouchScroll(); // won't do anything if not bound\r\n }\r\n // if the user ended their touch, and the scroll area wasn't moving,\r\n // we consider this to be the end of the scroll.\r\n if (!this.isMoving) {\r\n this.reportScrollEnd(); // won't fire if already ended\r\n }\r\n }\r\n };\r\n // Horizontal Scroll Normalization\r\n // ----------------------------------------------------------------------------------------------\r\n // http://stackoverflow.com/questions/24276619/better-way-to-get-the-viewport-of-a-scrollable-div-in-rtl-mode/24394376#24394376\r\n /*\r\n If RTL, and scrolled to the left, returns NEGATIVE value (like Firefox)\r\n */\r\n EnhancedScroller.prototype.getScrollLeft = function () {\r\n var direction = this.scrollEl.css('direction');\r\n var node = this.scrollEl[0];\r\n var val = node.scrollLeft;\r\n if (direction === 'rtl') {\r\n switch (rtlScrollSystem) {\r\n case 'positive':\r\n val = (val + node.clientWidth) - node.scrollWidth;\r\n break;\r\n case 'reverse':\r\n val = -val;\r\n break;\r\n }\r\n }\r\n return val;\r\n };\r\n /*\r\n Accepts a NEGATIVE value for when scrolled in RTL\r\n */\r\n EnhancedScroller.prototype.setScrollLeft = function (val) {\r\n var direction = this.scrollEl.css('direction');\r\n var node = this.scrollEl[0];\r\n if (direction === 'rtl') {\r\n switch (rtlScrollSystem) {\r\n case 'positive':\r\n val = (val - node.clientWidth) + node.scrollWidth;\r\n break;\r\n case 'reverse':\r\n val = -val;\r\n break;\r\n }\r\n }\r\n node.scrollLeft = val;\r\n };\r\n /*\r\n Always returns the number of pixels scrolled from the leftmost position (even if RTL).\r\n Always positive.\r\n */\r\n EnhancedScroller.prototype.getScrollFromLeft = function () {\r\n var direction = this.scrollEl.css('direction');\r\n var node = this.scrollEl[0];\r\n var val = node.scrollLeft;\r\n if (direction === 'rtl') {\r\n switch (rtlScrollSystem) {\r\n case 'negative':\r\n val = (val - node.clientWidth) + node.scrollWidth;\r\n break;\r\n case 'reverse':\r\n val = (-val - node.clientWidth) + node.scrollWidth;\r\n break;\r\n }\r\n }\r\n return val;\r\n };\r\n EnhancedScroller.prototype.getNativeScrollLeft = function () {\r\n return this.scrollEl[0].scrollLeft;\r\n };\r\n EnhancedScroller.prototype.setNativeScrollLeft = function (val) {\r\n this.scrollEl[0].scrollLeft = val;\r\n };\r\n return EnhancedScroller;\r\n}(fullcalendar_1.Scroller));\r\nexports.default = EnhancedScroller;\r\nfullcalendar_1.EmitterMixin.mixInto(EnhancedScroller);\r\nfullcalendar_1.ListenerMixin.mixInto(EnhancedScroller);\r\n// Horizontal Scroll System Detection\r\n// ----------------------------------------------------------------------------------------------\r\nfunction detectRtlScrollSystem() {\r\n var el = $(\"
A
\").appendTo('body');\r\n var node = el[0];\r\n var system = (function () {\r\n if (node.scrollLeft > 0) {\r\n return 'positive';\r\n }\r\n else {\r\n node.scrollLeft = 1;\r\n if (node.scrollLeft > 0) {\r\n return 'reverse';\r\n }\r\n else {\r\n return 'negative';\r\n }\r\n }\r\n })();\r\n el.remove();\r\n return system;\r\n}\r\n$(function () {\r\n rtlScrollSystem = detectRtlScrollSystem();\r\n});\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n/*\r\nTODO: use pubsub instead?\r\n*/\r\nvar TimelineEventDragging = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimelineEventDragging, _super);\r\n function TimelineEventDragging() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n TimelineEventDragging.prototype.segDragStart = function (seg, ev) {\r\n _super.prototype.segDragStart.call(this, seg, ev);\r\n if (this.component.eventTitleFollower) {\r\n this.component.eventTitleFollower.forceRelative();\r\n }\r\n };\r\n TimelineEventDragging.prototype.segDragStop = function (seg, ev) {\r\n _super.prototype.segDragStop.call(this, seg, ev);\r\n if (this.component.eventTitleFollower) {\r\n this.component.eventTitleFollower.clearForce();\r\n }\r\n };\r\n return TimelineEventDragging;\r\n}(fullcalendar_1.EventDragging));\r\nexports.default = TimelineEventDragging;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n/*\r\nTODO: use pubsub instead?\r\n*/\r\nvar TimelineEventResizing = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimelineEventResizing, _super);\r\n function TimelineEventResizing() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n TimelineEventResizing.prototype.segResizeStart = function (seg, ev) {\r\n _super.prototype.segResizeStart.call(this, seg, ev);\r\n if (this.component.eventTitleFollower) {\r\n return this.component.eventTitleFollower.forceRelative();\r\n }\r\n };\r\n TimelineEventResizing.prototype.segResizeStop = function (seg, ev) {\r\n _super.prototype.segResizeStop.call(this, seg, ev);\r\n if (this.component.eventTitleFollower) {\r\n return this.component.eventTitleFollower.clearForce();\r\n }\r\n };\r\n return TimelineEventResizing;\r\n}(fullcalendar_1.EventResizing));\r\nexports.default = TimelineEventResizing;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar moment = __webpack_require__(15);\r\nvar core = __webpack_require__(0);\r\nvar MIN_AUTO_LABELS = 18; // more than `12` months but less that `24` hours\r\nvar MAX_AUTO_SLOTS_PER_LABEL = 6; // allows 6 10-min slots in an hour\r\nvar MAX_AUTO_CELLS = 200; // allows 4-days to have a :30 slot duration\r\ncore.MAX_TIMELINE_SLOTS = 1000;\r\n// potential nice values for slot-duration and interval-duration\r\nvar STOCK_SUB_DURATIONS = [\r\n { years: 1 },\r\n { months: 1 },\r\n { days: 1 },\r\n { hours: 1 },\r\n { minutes: 30 },\r\n { minutes: 15 },\r\n { minutes: 10 },\r\n { minutes: 5 },\r\n { minutes: 1 },\r\n { seconds: 30 },\r\n { seconds: 15 },\r\n { seconds: 10 },\r\n { seconds: 5 },\r\n { seconds: 1 },\r\n { milliseconds: 500 },\r\n { milliseconds: 100 },\r\n { milliseconds: 10 },\r\n { milliseconds: 1 }\r\n];\r\nfunction initScaleProps(timelineView) {\r\n timelineView.labelInterval = queryDurationOption(timelineView, 'slotLabelInterval');\r\n timelineView.slotDuration = queryDurationOption(timelineView, 'slotDuration');\r\n validateLabelAndSlot(timelineView); // validate after computed grid duration\r\n ensureLabelInterval(timelineView);\r\n ensureSlotDuration(timelineView);\r\n var input = timelineView.opt('slotLabelFormat');\r\n var type = $.type(input);\r\n timelineView.headerFormats =\r\n type === 'array' ?\r\n input\r\n : type === 'string' ?\r\n [input]\r\n :\r\n computeHeaderFormats(timelineView);\r\n timelineView.isTimeScale = core.durationHasTime(timelineView.slotDuration);\r\n var largeUnit = null;\r\n if (!timelineView.isTimeScale) {\r\n var slotUnit = core.computeGreatestUnit(timelineView.slotDuration);\r\n if (/year|month|week/.test(slotUnit)) {\r\n largeUnit = slotUnit;\r\n }\r\n }\r\n timelineView.largeUnit = largeUnit;\r\n timelineView.emphasizeWeeks = (timelineView.slotDuration.as('days') === 1) &&\r\n (timelineView.currentRangeAs('weeks') >= 2) &&\r\n !timelineView.opt('businessHours');\r\n /*\r\n console.log('label interval =', timelineView.labelInterval.humanize())\r\n console.log('slot duration =', timelineView.slotDuration.humanize())\r\n console.log('header formats =', timelineView.headerFormats)\r\n console.log('isTimeScale', timelineView.isTimeScale)\r\n console.log('largeUnit', timelineView.largeUnit)\r\n */\r\n var rawSnapDuration = timelineView.opt('snapDuration');\r\n timelineView.snapDuration =\r\n rawSnapDuration ?\r\n moment.duration(rawSnapDuration) :\r\n timelineView.slotDuration;\r\n timelineView.snapsPerSlot = core.divideDurationByDuration(timelineView.slotDuration, timelineView.snapDuration);\r\n}\r\nexports.initScaleProps = initScaleProps;\r\nfunction queryDurationOption(timelineView, name) {\r\n var input = timelineView.opt(name);\r\n if (input != null) {\r\n var dur = moment.duration(input);\r\n if (+dur) {\r\n return dur;\r\n }\r\n }\r\n}\r\nfunction validateLabelAndSlot(timelineView) {\r\n var currentUnzonedRange = timelineView.dateProfile.currentUnzonedRange;\r\n // make sure labelInterval doesn't exceed the max number of cells\r\n if (timelineView.labelInterval) {\r\n var labelCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), timelineView.labelInterval);\r\n if (labelCnt > core.MAX_TIMELINE_SLOTS) {\r\n core.warn('slotLabelInterval results in too many cells');\r\n timelineView.labelInterval = null;\r\n }\r\n }\r\n // make sure slotDuration doesn't exceed the maximum number of cells\r\n if (timelineView.slotDuration) {\r\n var slotCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), timelineView.slotDuration);\r\n if (slotCnt > core.MAX_TIMELINE_SLOTS) {\r\n core.warn('slotDuration results in too many cells');\r\n timelineView.slotDuration = null;\r\n }\r\n }\r\n // make sure labelInterval is a multiple of slotDuration\r\n if (timelineView.labelInterval && timelineView.slotDuration) {\r\n var slotsPerLabel = core.divideDurationByDuration(timelineView.labelInterval, timelineView.slotDuration);\r\n if (!core.isInt(slotsPerLabel) || (slotsPerLabel < 1)) {\r\n core.warn('slotLabelInterval must be a multiple of slotDuration');\r\n return timelineView.slotDuration = null;\r\n }\r\n }\r\n}\r\nfunction ensureLabelInterval(timelineView) {\r\n var currentUnzonedRange = timelineView.dateProfile.currentUnzonedRange;\r\n var labelInterval = timelineView.labelInterval;\r\n if (!labelInterval) {\r\n // compute based off the slot duration\r\n // find the largest label interval with an acceptable slots-per-label\r\n var input = void 0;\r\n if (timelineView.slotDuration) {\r\n for (var _i = 0, STOCK_SUB_DURATIONS_1 = STOCK_SUB_DURATIONS; _i < STOCK_SUB_DURATIONS_1.length; _i++) {\r\n input = STOCK_SUB_DURATIONS_1[_i];\r\n var tryLabelInterval = moment.duration(input);\r\n var slotsPerLabel = core.divideDurationByDuration(tryLabelInterval, timelineView.slotDuration);\r\n if (core.isInt(slotsPerLabel) && (slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL)) {\r\n labelInterval = tryLabelInterval;\r\n break;\r\n }\r\n }\r\n // use the slot duration as a last resort\r\n if (!labelInterval) {\r\n labelInterval = timelineView.slotDuration;\r\n }\r\n // compute based off the view's duration\r\n // find the largest label interval that yields the minimum number of labels\r\n }\r\n else {\r\n for (var _a = 0, STOCK_SUB_DURATIONS_2 = STOCK_SUB_DURATIONS; _a < STOCK_SUB_DURATIONS_2.length; _a++) {\r\n input = STOCK_SUB_DURATIONS_2[_a];\r\n labelInterval = moment.duration(input);\r\n var labelCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), labelInterval);\r\n if (labelCnt >= MIN_AUTO_LABELS) {\r\n break;\r\n }\r\n }\r\n }\r\n timelineView.labelInterval = labelInterval;\r\n }\r\n return labelInterval;\r\n}\r\nfunction ensureSlotDuration(timelineView) {\r\n var currentUnzonedRange = timelineView.dateProfile.currentUnzonedRange;\r\n var slotDuration = timelineView.slotDuration;\r\n if (!slotDuration) {\r\n var labelInterval = ensureLabelInterval(timelineView); // will compute if necessary\r\n // compute based off the label interval\r\n // find the largest slot duration that is different from labelInterval, but still acceptable\r\n for (var _i = 0, STOCK_SUB_DURATIONS_3 = STOCK_SUB_DURATIONS; _i < STOCK_SUB_DURATIONS_3.length; _i++) {\r\n var input = STOCK_SUB_DURATIONS_3[_i];\r\n var trySlotDuration = moment.duration(input);\r\n var slotsPerLabel = core.divideDurationByDuration(labelInterval, trySlotDuration);\r\n if (core.isInt(slotsPerLabel) && (slotsPerLabel > 1) && (slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL)) {\r\n slotDuration = trySlotDuration;\r\n break;\r\n }\r\n }\r\n // only allow the value if it won't exceed the view's # of slots limit\r\n if (slotDuration) {\r\n var slotCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), slotDuration);\r\n if (slotCnt > MAX_AUTO_CELLS) {\r\n slotDuration = null;\r\n }\r\n }\r\n // use the label interval as a last resort\r\n if (!slotDuration) {\r\n slotDuration = labelInterval;\r\n }\r\n timelineView.slotDuration = slotDuration;\r\n }\r\n return slotDuration;\r\n}\r\nfunction computeHeaderFormats(timelineView) {\r\n var format1;\r\n var format2;\r\n var labelInterval = timelineView.labelInterval;\r\n var unit = core.computeGreatestUnit(labelInterval);\r\n var weekNumbersVisible = timelineView.opt('weekNumbers');\r\n var format0 = (format1 = (format2 = null));\r\n // NOTE: weekNumber computation function wont work\r\n if ((unit === 'week') && !weekNumbersVisible) {\r\n unit = 'day';\r\n }\r\n switch (unit) {\r\n case 'year':\r\n format0 = 'YYYY'; // '2015'\r\n break;\r\n case 'month':\r\n if (timelineView.currentRangeAs('years') > 1) {\r\n format0 = 'YYYY'; // '2015'\r\n }\r\n format1 = 'MMM'; // 'Jan'\r\n break;\r\n case 'week':\r\n if (timelineView.currentRangeAs('years') > 1) {\r\n format0 = 'YYYY'; // '2015'\r\n }\r\n format1 = timelineView.opt('shortWeekFormat'); // 'Wk4'\r\n break;\r\n case 'day':\r\n if (timelineView.currentRangeAs('years') > 1) {\r\n format0 = timelineView.opt('monthYearFormat'); // 'January 2014'\r\n }\r\n else if (timelineView.currentRangeAs('months') > 1) {\r\n format0 = 'MMMM'; // 'January'\r\n }\r\n if (weekNumbersVisible) {\r\n format1 = timelineView.opt('weekFormat'); // 'Wk 4'\r\n }\r\n // TODO: would use smallDayDateFormat but the way timeline does RTL,\r\n // we don't want the text to be flipped\r\n format2 = 'dd D'; // @opt('smallDayDateFormat') # 'Su 9'\r\n break;\r\n case 'hour':\r\n if (weekNumbersVisible) {\r\n format0 = timelineView.opt('weekFormat'); // 'Wk 4'\r\n }\r\n if (timelineView.currentRangeAs('days') > 1) {\r\n format1 = timelineView.opt('dayOfMonthFormat'); // 'Fri 9/15'\r\n }\r\n format2 = timelineView.opt('smallTimeFormat'); // '6pm'\r\n break;\r\n case 'minute':\r\n // sufficiently large number of different minute cells?\r\n if ((labelInterval.asMinutes() / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\r\n format0 = timelineView.opt('hourFormat'); // '6pm'\r\n format1 = '[:]mm'; // ':30'\r\n }\r\n else {\r\n format0 = timelineView.opt('mediumTimeFormat'); // '6:30pm'\r\n }\r\n break;\r\n case 'second':\r\n // sufficiently large number of different second cells?\r\n if ((labelInterval.asSeconds() / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\r\n format0 = 'LT'; // '8:30 PM'\r\n format1 = '[:]ss'; // ':30'\r\n }\r\n else {\r\n format0 = 'LTS'; // '8:30:45 PM'\r\n }\r\n break;\r\n case 'millisecond':\r\n format0 = 'LTS'; // '8:30:45 PM'\r\n format1 = '[.]SSS'; // '750'\r\n break;\r\n }\r\n return [].concat(format0 || [], format1 || [], format2 || []);\r\n}\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ClippedScroller_1 = __webpack_require__(24);\r\nvar ScrollerCanvas_1 = __webpack_require__(25);\r\nvar ScrollJoiner_1 = __webpack_require__(16);\r\nvar ScrollFollower_1 = __webpack_require__(26);\r\nvar VRowGroup_1 = __webpack_require__(31);\r\nvar COL_MIN_WIDTH = 30;\r\nvar Spreadsheet = /** @class */ (function () {\r\n function Spreadsheet(view) {\r\n this.colGroupHtml = '';\r\n this.view = view;\r\n this.isRTL = this.view.opt('isRTL'); // doesn't descend from Grid, so needs to do this\r\n this.givenColWidths = this.colWidths =\r\n this.view.colSpecs.map(function (colSpec) { return colSpec.width; });\r\n }\r\n Spreadsheet.prototype.renderSkeleton = function () {\r\n var theme = this.view.calendar.theme;\r\n this.headScroller = new ClippedScroller_1.default({\r\n overflowX: 'clipped-scroll',\r\n overflowY: 'hidden'\r\n });\r\n this.headScroller.canvas = new ScrollerCanvas_1.default();\r\n this.headScroller.render();\r\n this.headScroller.canvas.contentEl.html(this.renderHeadHtml());\r\n this.headEl.append(this.headScroller.el);\r\n this.bodyScroller = new ClippedScroller_1.default({ overflowY: 'clipped-scroll' });\r\n this.bodyScroller.canvas = new ScrollerCanvas_1.default();\r\n this.bodyScroller.render();\r\n this.bodyScroller.canvas.contentEl.html(\"
\" + this.colGroupHtml + \"
\"); // colGroupHtml hack\r\n this.tbodyEl = this.bodyScroller.canvas.contentEl.find('tbody');\r\n this.el.append(this.bodyScroller.el);\r\n this.scrollJoiner = new ScrollJoiner_1.default('horizontal', [this.headScroller, this.bodyScroller]);\r\n this.headTable = this.headEl.find('table');\r\n this.headColEls = this.headEl.find('col');\r\n this.headCellEls = this.headScroller.canvas.contentEl.find('tr:last-child th');\r\n this.bodyColEls = this.el.find('col');\r\n this.bodyTable = this.el.find('table');\r\n this.colMinWidths = this.computeColMinWidths();\r\n this.applyColWidths();\r\n this.initColResizing();\r\n };\r\n Spreadsheet.prototype.renderHeadHtml = function () {\r\n var theme = this.view.calendar.theme;\r\n var colSpecs = this.view.colSpecs;\r\n var html = '';\r\n var colGroupHtml = '';\r\n for (var _i = 0, colSpecs_1 = colSpecs; _i < colSpecs_1.length; _i++) {\r\n var o = colSpecs_1[_i];\r\n if (o.isMain) {\r\n colGroupHtml += '';\r\n }\r\n else {\r\n colGroupHtml += '';\r\n }\r\n }\r\n colGroupHtml += '';\r\n this.colGroupHtml = colGroupHtml;\r\n html += colGroupHtml;\r\n html += '';\r\n if (this.view.superHeaderText) {\r\n html +=\r\n '' +\r\n '' +\r\n '';\r\n }\r\n html += '';\r\n for (var i = 0; i < colSpecs.length; i++) {\r\n var o = colSpecs[i];\r\n var isLast = i === (colSpecs.length - 1);\r\n html +=\r\n \"';\r\n }\r\n html += '';\r\n html += '
' +\r\n '
' +\r\n '' +\r\n fullcalendar_1.htmlEscape(this.view.superHeaderText) +\r\n '' +\r\n '
' +\r\n '
\" +\r\n '
' +\r\n '
' +\r\n (o.isMain ?\r\n '' +\r\n '' +\r\n '' :\r\n '') +\r\n '' +\r\n fullcalendar_1.htmlEscape(o.labelText || '') + // what about normalizing this value ahead of time?\r\n '' +\r\n '
' +\r\n (!isLast ? '
' : '') +\r\n '
' +\r\n '
';\r\n return html;\r\n };\r\n Spreadsheet.prototype.initColResizing = function () {\r\n var _this = this;\r\n this.headEl.find('th .fc-col-resizer').each(function (i, resizerEl) {\r\n resizerEl = $(resizerEl);\r\n resizerEl.on('mousedown', function (ev) {\r\n _this.colResizeMousedown(i, ev, resizerEl);\r\n });\r\n });\r\n };\r\n Spreadsheet.prototype.colResizeMousedown = function (i, ev, resizerEl) {\r\n var _this = this;\r\n var colWidths = (this.colWidths = this.queryColWidths());\r\n colWidths.pop();\r\n colWidths.push(null); // will result in 'auto' or ''\r\n var origColWidth = colWidths[i];\r\n var minWidth = Math.min(this.colMinWidths[i], COL_MIN_WIDTH); // if given width is smaller, allow it\r\n var dragListener = new fullcalendar_1.DragListener({\r\n dragStart: function () {\r\n resizerEl.addClass('fc-active');\r\n },\r\n drag: function (dx, dy) {\r\n var width = origColWidth + (_this.isRTL ? -dx : dx);\r\n width = Math.max(width, minWidth);\r\n colWidths[i] = width;\r\n _this.applyColWidths();\r\n },\r\n dragEnd: function () {\r\n resizerEl.removeClass('fc-active');\r\n }\r\n });\r\n dragListener.startInteraction(ev);\r\n };\r\n Spreadsheet.prototype.applyColWidths = function () {\r\n var cssWidth;\r\n var i;\r\n var colWidth;\r\n var colMinWidths = this.colMinWidths;\r\n var colWidths = this.colWidths;\r\n var allNumbers = true;\r\n var anyPercentages = false;\r\n var total = 0;\r\n for (var _i = 0, colWidths_1 = colWidths; _i < colWidths_1.length; _i++) {\r\n colWidth = colWidths_1[_i];\r\n if (typeof colWidth === 'number') {\r\n total += colWidth;\r\n }\r\n else {\r\n allNumbers = false;\r\n if (colWidth) {\r\n anyPercentages = true;\r\n }\r\n }\r\n }\r\n // percentage widths play better with 'auto' but h-grouped cells don't\r\n var defaultCssWidth = anyPercentages && !this.view.isHGrouping ?\r\n 'auto' :\r\n '';\r\n var cssWidths = colWidths.map(function (colWidth) { return (colWidth != null ? colWidth : defaultCssWidth); });\r\n // if allNumbers\r\n // cssWidths.pop()\r\n // cssWidths.push('auto')\r\n var tableMinWidth = 0;\r\n for (i = 0; i < cssWidths.length; i++) {\r\n cssWidth = cssWidths[i];\r\n tableMinWidth +=\r\n typeof cssWidth === 'number' ?\r\n cssWidth :\r\n colMinWidths[i];\r\n }\r\n for (i = 0; i < cssWidths.length; i++) {\r\n cssWidth = cssWidths[i];\r\n this.headColEls.eq(i).css('width', cssWidth);\r\n this.bodyColEls.eq(i).css('width', cssWidth);\r\n }\r\n this.headScroller.canvas.setMinWidth(tableMinWidth); // not really a table width anymore\r\n this.bodyScroller.canvas.setMinWidth(tableMinWidth);\r\n this.tableMinWidth = tableMinWidth;\r\n this.tableWidth = allNumbers ? total : undefined;\r\n };\r\n Spreadsheet.prototype.computeColMinWidths = function () {\r\n var _this = this;\r\n return this.givenColWidths.map(function (width, i) { return (typeof width === 'number' ?\r\n width :\r\n parseInt(_this.headColEls.eq(i).css('min-width'), 10) || COL_MIN_WIDTH); });\r\n };\r\n Spreadsheet.prototype.queryColWidths = function () {\r\n return this.headCellEls.map(function (i, node) { return ($(node).outerWidth()); }).get();\r\n };\r\n // Sizing\r\n // ---------------------------------------------------------------------------------\r\n Spreadsheet.prototype.updateSize = function () {\r\n this.headScroller.updateSize();\r\n this.bodyScroller.updateSize();\r\n this.scrollJoiner.update();\r\n this.updateCellFollower();\r\n };\r\n Spreadsheet.prototype.headHeight = function () {\r\n var table = this.headScroller.canvas.contentEl.find('table');\r\n return table.height.apply(table, arguments);\r\n };\r\n // completely reninitializes every time there's add/remove\r\n // TODO: optimize\r\n Spreadsheet.prototype.updateCellFollower = function () {\r\n if (this.cellFollower) {\r\n this.cellFollower.clearSprites(); // the closest thing to a destroy\r\n }\r\n this.cellFollower = new ScrollFollower_1.default(this.bodyScroller, true); // allowPointerEvents\r\n this.cellFollower.isHFollowing = false;\r\n this.cellFollower.isVFollowing = true;\r\n var nodes = [];\r\n for (var _i = 0, _a = this.view.rowHierarchy.getNodes(); _i < _a.length; _i++) {\r\n var row = _a[_i];\r\n if (row instanceof VRowGroup_1.default) {\r\n if (row.groupTd) {\r\n var cellContent = row.groupTd.find('.fc-cell-content');\r\n if (cellContent.length) {\r\n nodes.push(cellContent[0]);\r\n }\r\n }\r\n }\r\n }\r\n this.cellFollower.setSpriteEls($(nodes));\r\n this.cellFollower.update();\r\n };\r\n return Spreadsheet;\r\n}());\r\nexports.default = Spreadsheet;\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nGiven a jQuery set, returns the 's that do not have multi-line rowspans.\r\nWould use the [rowspan] selector, but never not defined in IE8.\r\n*/\r\nfunction getOwnCells(trs) {\r\n return trs.find('> td').filter(function (i, tdNode) { return (tdNode.rowSpan <= 1); });\r\n}\r\nexports.getOwnCells = getOwnCells;\r\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar TimelineEventRenderer_1 = __webpack_require__(17);\r\nvar ResourceTimelineEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceTimelineEventRenderer, _super);\r\n function ResourceTimelineEventRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // don't render any fg segs\r\n ResourceTimelineEventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n // subclasses can implement\r\n };\r\n ResourceTimelineEventRenderer.prototype.unrenderFgRanges = function () {\r\n // otherwise will try do manip DOM, js error\r\n };\r\n return ResourceTimelineEventRenderer;\r\n}(TimelineEventRenderer_1.default));\r\nexports.default = ResourceTimelineEventRenderer;\r\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar EventRow_1 = __webpack_require__(33);\r\n/*\r\nA row that renders information about a particular resource, as well as it events (handled by superclass)\r\n*/\r\nvar ResourceRow = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceRow, _super);\r\n function ResourceRow(view, resource) {\r\n var _this = _super.call(this, view) || this;\r\n _this.resource = resource;\r\n _this.eventRenderer.designatedResource = _this.resource;\r\n return _this;\r\n }\r\n ResourceRow.prototype.renderSkeleton = function () {\r\n _super.prototype.renderSkeleton.call(this);\r\n this.updateExpandingEnabled();\r\n if (this.eventsPayload) {\r\n EventRow_1.default.prototype.executeEventRender.call(this, this.eventsPayload);\r\n }\r\n if (this.businessHourGenerator &&\r\n this.view.dateProfile // hack\r\n ) {\r\n EventRow_1.default.prototype.renderBusinessHours.call(this, this.businessHourGenerator);\r\n }\r\n this.view.publiclyTrigger('resourceRender', {\r\n context: this.resource,\r\n args: [\r\n this.resource,\r\n this.getTr('spreadsheet').find('> td'),\r\n this.getTr('event').find('> td'),\r\n this.view\r\n ]\r\n });\r\n };\r\n ResourceRow.prototype.removeElement = function () {\r\n _super.prototype.removeElement.call(this);\r\n if (this.eventsPayload) {\r\n EventRow_1.default.prototype.executeEventUnrender.call(this, this.eventsPayload);\r\n }\r\n if (this.businessHourGenerator) {\r\n EventRow_1.default.prototype.unrenderBusinessHours.call(this, this.businessHourGenerator);\r\n }\r\n };\r\n ResourceRow.prototype.renderEventSkeleton = function (tr) {\r\n _super.prototype.renderEventSkeleton.call(this, tr);\r\n tr.attr('data-resource-id', this.resource.id);\r\n };\r\n ResourceRow.prototype.executeEventRender = function (eventsPayload) {\r\n this.eventsPayload = eventsPayload;\r\n if (this.get('isInDom')) {\r\n _super.prototype.executeEventRender.call(this, this.eventsPayload);\r\n }\r\n };\r\n ResourceRow.prototype.executeEventUnrender = function () {\r\n _super.prototype.executeEventUnrender.call(this);\r\n this.eventsPayload = null;\r\n };\r\n ResourceRow.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n this.businessHourGenerator = businessHourGenerator;\r\n if (this.get('isInDom')) {\r\n _super.prototype.renderBusinessHours.call(this, this.businessHourGenerator);\r\n }\r\n };\r\n ResourceRow.prototype.unrenderBusinessHours = function () {\r\n _super.prototype.unrenderBusinessHours.call(this);\r\n this.businessHourGenerator = null;\r\n };\r\n /*\r\n Populates the TR with cells containing data about the resource\r\n */\r\n ResourceRow.prototype.renderSpreadsheetSkeleton = function (tr) {\r\n var theme = this.view.calendar.theme;\r\n var resource = this.resource;\r\n for (var _i = 0, _a = this.view.colSpecs; _i < _a.length; _i++) {\r\n var colSpec = _a[_i];\r\n if (colSpec.group) { // not responsible for group-based rows. VRowGroup is\r\n continue;\r\n }\r\n var input = // the source text, and the main argument for the filter functions\r\n colSpec.field ?\r\n resource[colSpec.field] || null :\r\n resource;\r\n var text = typeof colSpec.text === 'function' ?\r\n colSpec.text(resource, input) : // the colspec provided a text filter function\r\n input;\r\n var contentEl = $('
' +\r\n (colSpec.isMain ? this.renderGutterHtml() : '') +\r\n '' +\r\n (text ? fullcalendar_1.htmlEscape(text) : ' ') +\r\n '' +\r\n '
');\r\n if (typeof colSpec.render === 'function') { // a filter function for the element\r\n contentEl = colSpec.render(resource, contentEl, input) || contentEl;\r\n }\r\n var td = $('')\r\n .append(contentEl);\r\n // the first cell of the row needs to have an inner div for setTrInnerHeight\r\n if (colSpec.isMain) {\r\n td.wrapInner('
');\r\n }\r\n tr.append(td);\r\n }\r\n tr.attr('data-resource-id', resource.id);\r\n };\r\n /*\r\n Renders the HTML responsible for the subrow expander area,\r\n as well as the space before it (used to align expanders of similar depths)\r\n */\r\n ResourceRow.prototype.renderGutterHtml = function () {\r\n var html = '';\r\n var depth = this.depth;\r\n for (var i = 0; i < depth; i++) {\r\n html += '';\r\n }\r\n html +=\r\n '' +\r\n '' +\r\n '';\r\n return html;\r\n };\r\n return ResourceRow;\r\n}(EventRow_1.default));\r\nexports.default = ResourceRow;\r\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar RowGroup_1 = __webpack_require__(32);\r\n/*\r\nA row grouping that renders as a single solid row that spans width-wise (like a horizontal rule)\r\n*/\r\nvar HRowGroup = /** @class */ (function (_super) {\r\n tslib_1.__extends(HRowGroup, _super);\r\n function HRowGroup() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n HRowGroup.prototype.renderSkeleton = function () {\r\n _super.prototype.renderSkeleton.call(this);\r\n this.updateExpandingEnabled();\r\n };\r\n /*\r\n Renders this row's TR for the \"spreadsheet\" quadrant, the area with info about each resource\r\n */\r\n HRowGroup.prototype.renderSpreadsheetSkeleton = function (tr) {\r\n var contentEl = this.renderGroupContentEl();\r\n // add an expander icon. binding handlers and updating are done by RowParent\r\n contentEl.prepend('' +\r\n '' +\r\n '');\r\n return $('')\r\n .attr('colspan', this.view.colSpecs.length) // span across all columns\r\n .append($('
').append(contentEl) // needed by setTrInnerHeight\r\n )\r\n .appendTo(tr);\r\n };\r\n /*\r\n Renders this row's TR for the quadrant that contains a resource's events\r\n */\r\n HRowGroup.prototype.renderEventSkeleton = function (tr) {\r\n // insert a single cell, with a single empty
(needed by setTrInnerHeight).\r\n // there will be no content\r\n return tr.append(\"
\");\r\n };\r\n return HRowGroup;\r\n}(RowGroup_1.default));\r\nexports.default = HRowGroup;\r\nHRowGroup.prototype.hasOwnRow = true; // actually renders its own row and takes up height\r\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar Resource_1 = __webpack_require__(19);\r\nvar ResourceManager_1 = __webpack_require__(49);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\n// NOTE: for public methods, always be sure of the return value. for chaining\r\nvar origMethods = {\r\n constructed: fullcalendar_1.Calendar.prototype.constructed,\r\n buildSelectFootprint: fullcalendar_1.Calendar.prototype.buildSelectFootprint\r\n};\r\n// option defaults\r\nfullcalendar_1.Calendar.defaults.refetchResourcesOnNavigate = false;\r\nfullcalendar_1.Calendar.defaults.filterResourcesWithEvents = false;\r\nfullcalendar_1.Calendar.prototype.resourceManager = null;\r\nfullcalendar_1.Calendar.prototype.constructed = function () {\r\n origMethods.constructed.apply(this, arguments);\r\n this.resourceManager = new ResourceManager_1.default(this);\r\n};\r\nfullcalendar_1.Calendar.prototype.instantiateView = function (viewType) {\r\n var spec = this.viewSpecManager.getViewSpec(viewType);\r\n var viewClass = spec['class'];\r\n if (this.opt('resources') && (spec.options.resources !== false)) {\r\n if (spec.queryResourceClass) {\r\n viewClass = spec.queryResourceClass(spec) || viewClass; // might return falsy\r\n }\r\n else if (spec.resourceClass) {\r\n viewClass = spec.resourceClass;\r\n }\r\n }\r\n return new viewClass(this, spec);\r\n};\r\n// for the API only\r\n// retrieves what is currently in memory. no fetching\r\nfullcalendar_1.Calendar.prototype.getResources = function () {\r\n return Array.prototype.slice.call(// make a copy\r\n this.resourceManager.topLevelResources);\r\n};\r\n// assumes all resources already loaded\r\nfullcalendar_1.Calendar.prototype.addResource = function (resourceInput, scroll) {\r\n var _this = this;\r\n if (scroll === void 0) { scroll = false; }\r\n this.resourceManager.addResource(resourceInput)\r\n .then(function (resource) {\r\n if (scroll && _this.view.scrollToResource) {\r\n return _this.view.scrollToResource(resource);\r\n }\r\n });\r\n};\r\n// assumes all resources already loaded\r\nfullcalendar_1.Calendar.prototype.removeResource = function (idOrResource) {\r\n return this.resourceManager.removeResource(idOrResource);\r\n};\r\nfullcalendar_1.Calendar.prototype.refetchResources = function () {\r\n this.resourceManager.clear();\r\n this.view.flash('initialResources');\r\n};\r\nfullcalendar_1.Calendar.prototype.rerenderResources = function () {\r\n this.resourceManager.resetCurrentResources();\r\n};\r\nfullcalendar_1.Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput, resourceId) {\r\n var plainFootprint = origMethods.buildSelectFootprint.apply(this, arguments);\r\n if (resourceId) {\r\n return new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, resourceId);\r\n }\r\n else {\r\n return plainFootprint;\r\n }\r\n};\r\nfullcalendar_1.Calendar.prototype.getResourceById = function (id) {\r\n return this.resourceManager.getResourceById(id);\r\n};\r\n// Resources + Events\r\n// ----------------------------------------------------------------------------------------\r\n// DEPRECATED. for external API backwards compatibility\r\nfullcalendar_1.Calendar.prototype.getEventResourceId = function (event) {\r\n return this.getEventResourceIds(event)[0];\r\n};\r\nfullcalendar_1.Calendar.prototype.getEventResourceIds = function (event) {\r\n var eventDef = this.eventManager.getEventDefByUid(event._id);\r\n if (eventDef) {\r\n return eventDef.getResourceIds();\r\n }\r\n else {\r\n return [];\r\n }\r\n};\r\n// DEPRECATED\r\nfullcalendar_1.Calendar.prototype.setEventResourceId = function (event, resourceId) {\r\n this.setEventResourceIds(event, resourceId ? [resourceId] : []);\r\n};\r\nfullcalendar_1.Calendar.prototype.setEventResourceIds = function (event, resourceIds) {\r\n var eventDef = this.eventManager.getEventDefByUid(event._id);\r\n if (eventDef) {\r\n eventDef.resourceIds = resourceIds.map(function (rawResourceId) {\r\n return Resource_1.default.normalizeId(rawResourceId);\r\n });\r\n }\r\n};\r\n// NOTE: views pair *segments* to resources. that's why there's no code reuse\r\nfullcalendar_1.Calendar.prototype.getResourceEvents = function (idOrResource) {\r\n var _this = this;\r\n var resource = typeof idOrResource === 'object' ?\r\n idOrResource :\r\n this.getResourceById(idOrResource);\r\n if (resource) {\r\n // return the event cache, filtered by events assigned to the resource\r\n // TODO: move away from using clientId\r\n return this.clientEvents(function (event) {\r\n return $.inArray(resource.id, _this.getEventResourceIds(event)) !== -1;\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n};\r\n// DEPRECATED. for external API backwards compatibility\r\nfullcalendar_1.Calendar.prototype.getEventResource = function (idOrEvent) {\r\n return this.getEventResources(idOrEvent)[0];\r\n};\r\nfullcalendar_1.Calendar.prototype.getEventResources = function (idOrEvent) {\r\n var event = typeof idOrEvent === 'object' ?\r\n idOrEvent :\r\n this.clientEvents(idOrEvent)[0];\r\n var resources = [];\r\n if (event) {\r\n for (var _i = 0, _a = this.getEventResourceIds(event); _i < _a.length; _i++) {\r\n var resourceId = _a[_i];\r\n var resource = this.getResourceById(resourceId);\r\n if (resource) {\r\n resources.push(resource);\r\n }\r\n }\r\n }\r\n return resources;\r\n};\r\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(1);\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceManager = /** @class */ (function (_super) {\r\n tslib_1.__extends(ResourceManager, _super);\r\n function ResourceManager(calendar) {\r\n var _this = _super.call(this) || this;\r\n _this.fetchId = 0;\r\n _this.calendar = calendar;\r\n _this.initializeCache();\r\n return _this;\r\n }\r\n // Resource Data Getting\r\n // ------------------------------------------------------------------------------------------------------------------\r\n /*\r\n Like fetchResources, but won't refetch if already fetched.\r\n */\r\n ResourceManager.prototype.getResources = function (start, end) {\r\n var isSameRange = (!start && !this.currentStart) || // both nonexistent ranges?\r\n (start && this.currentStart && start.isSame(this.currentStart) && end.isSame(this.currentEnd));\r\n if (!this.fetching || !isSameRange) { // first time? or is range different?\r\n return this.fetchResources(start, end);\r\n }\r\n else {\r\n return this.fetching;\r\n }\r\n };\r\n /*\r\n Will always fetch, even if done previously.\r\n Accepts optional chrono-related params to pass on to the raw resource sources.\r\n Returns a promise.\r\n */\r\n ResourceManager.prototype.fetchResources = function (start, end) {\r\n var _this = this;\r\n var currentFetchId = (this.fetchId += 1);\r\n return this.fetching =\r\n fullcalendar_1.Promise.construct(function (resolve, reject) {\r\n _this.fetchResourceInputs(function (resourceInputs) {\r\n if (currentFetchId === _this.fetchId) {\r\n _this.setResources(resourceInputs);\r\n return resolve(_this.topLevelResources);\r\n }\r\n else {\r\n return reject();\r\n }\r\n }, start, end);\r\n });\r\n };\r\n /*\r\n Accepts optional chrono-related params to pass on to the raw resource sources.\r\n Calls callback when done.\r\n */\r\n ResourceManager.prototype.fetchResourceInputs = function (callback, start, end) {\r\n var _this = this;\r\n var calendar = this.calendar;\r\n var source = calendar.opt('resources');\r\n var timezone = calendar.opt('timezone');\r\n if ($.type(source) === 'string') {\r\n source = { url: source };\r\n }\r\n switch ($.type(source)) {\r\n case 'function':\r\n this.calendar.pushLoading();\r\n source(function (resourceInputs) {\r\n _this.calendar.popLoading();\r\n callback(resourceInputs);\r\n }, start, end, calendar.opt('timezone'));\r\n break;\r\n case 'object':\r\n calendar.pushLoading();\r\n var requestParams = {};\r\n if (start && end) {\r\n requestParams[calendar.opt('startParam')] = start.format();\r\n requestParams[calendar.opt('endParam')] = end.format();\r\n // mimick what EventManager does\r\n // TODO: more DRY\r\n if (timezone && (timezone !== 'local')) {\r\n requestParams[calendar.opt('timezoneParam')] = timezone;\r\n }\r\n }\r\n $.ajax(// TODO: handle failure\r\n $.extend({ data: requestParams }, ResourceManager.ajaxDefaults, source)).then(function (resourceInputs) {\r\n calendar.popLoading();\r\n callback(resourceInputs);\r\n });\r\n break;\r\n case 'array':\r\n callback(source);\r\n break;\r\n default:\r\n callback([]);\r\n break;\r\n }\r\n };\r\n ResourceManager.prototype.getResourceById = function (id) {\r\n return this.resourcesById[id];\r\n };\r\n // assumes already completed fetch\r\n // does not guarantee order\r\n ResourceManager.prototype.getFlatResources = function () {\r\n var result = [];\r\n for (var id in this.resourcesById) {\r\n result.push(this.resourcesById[id]);\r\n }\r\n return result;\r\n };\r\n // Resource Adding\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceManager.prototype.initializeCache = function () {\r\n this.topLevelResources = [];\r\n this.resourcesById = {};\r\n };\r\n ResourceManager.prototype.setResources = function (resourceInputs) {\r\n var _this = this;\r\n var resource;\r\n var wasSet = Boolean(this.topLevelResources);\r\n this.initializeCache();\r\n var resources = resourceInputs.map(function (resourceInput) { return (_this.buildResource(resourceInput)); });\r\n var validResources = [];\r\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\r\n resource = resources_1[_i];\r\n if (this.addResourceToIndex(resource)) {\r\n validResources.push(resource);\r\n }\r\n }\r\n for (var _a = 0, validResources_1 = validResources; _a < validResources_1.length; _a++) {\r\n resource = validResources_1[_a];\r\n this.addResourceToTree(resource);\r\n }\r\n if (wasSet) {\r\n this.trigger('reset', this.topLevelResources);\r\n }\r\n else {\r\n this.trigger('set', this.topLevelResources);\r\n }\r\n this.calendar.publiclyTrigger('resourcesSet', [this.topLevelResources]);\r\n };\r\n ResourceManager.prototype.resetCurrentResources = function () {\r\n if (this.topLevelResources) {\r\n this.trigger('reset', this.topLevelResources);\r\n }\r\n };\r\n ResourceManager.prototype.clear = function () {\r\n this.topLevelResources = null;\r\n this.fetching = null;\r\n };\r\n ResourceManager.prototype.addResource = function (resourceInput) {\r\n var _this = this;\r\n if (this.fetching) {\r\n return this.fetching.then(function () {\r\n var resource = _this.buildResource(resourceInput);\r\n if (_this.addResourceToIndex(resource)) {\r\n _this.addResourceToTree(resource);\r\n _this.trigger('add', resource, _this.topLevelResources);\r\n return resource;\r\n }\r\n else {\r\n return false;\r\n }\r\n });\r\n }\r\n else {\r\n return fullcalendar_1.Promise.reject();\r\n }\r\n };\r\n ResourceManager.prototype.addResourceToIndex = function (resource) {\r\n if (this.resourcesById[resource.id]) {\r\n return false;\r\n }\r\n else {\r\n this.resourcesById[resource.id] = resource;\r\n for (var _i = 0, _a = resource.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n this.addResourceToIndex(child);\r\n }\r\n return true;\r\n }\r\n };\r\n ResourceManager.prototype.addResourceToTree = function (resource) {\r\n if (!resource.parent) {\r\n var siblings = void 0;\r\n var parentId = String(resource['parentId'] != null ? resource['parentId'] : '');\r\n if (parentId) {\r\n var parent_1 = this.resourcesById[parentId];\r\n if (parent_1) {\r\n resource.parent = parent_1;\r\n siblings = parent_1.children;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else {\r\n siblings = this.topLevelResources;\r\n }\r\n siblings.push(resource);\r\n }\r\n return true;\r\n };\r\n // Resource Removing\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceManager.prototype.removeResource = function (idOrResource) {\r\n var _this = this;\r\n var id = typeof idOrResource === 'object' ?\r\n idOrResource.id :\r\n idOrResource;\r\n if (this.fetching) {\r\n return this.fetching.then(function () {\r\n var resource = _this.removeResourceFromIndex(id);\r\n if (resource) {\r\n _this.removeResourceFromTree(resource);\r\n _this.trigger('remove', resource, _this.topLevelResources);\r\n }\r\n return resource;\r\n });\r\n }\r\n else {\r\n return fullcalendar_1.Promise.reject();\r\n }\r\n };\r\n ResourceManager.prototype.removeResourceFromIndex = function (resourceId) {\r\n var resource = this.resourcesById[resourceId];\r\n if (resource) {\r\n delete this.resourcesById[resourceId];\r\n for (var _i = 0, _a = resource.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n this.removeResourceFromIndex(child.id);\r\n }\r\n return resource;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n ResourceManager.prototype.removeResourceFromTree = function (resource, siblings) {\r\n if (siblings === void 0) { siblings = this.topLevelResources; }\r\n for (var i = 0; i < siblings.length; i++) {\r\n var sibling = siblings[i];\r\n if (sibling === resource) {\r\n resource.parent = null;\r\n siblings.splice(i, 1);\r\n return true;\r\n }\r\n if (this.removeResourceFromTree(resource, sibling.children)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n // Resource Data Utils\r\n // ------------------------------------------------------------------------------------------------------------------\r\n ResourceManager.prototype.buildResource = function (resourceInput) {\r\n var _this = this;\r\n var resource = $.extend({}, resourceInput);\r\n var rawClassName = resourceInput.eventClassName;\r\n resource.id = String(resourceInput.id != null ?\r\n resourceInput.id :\r\n '_fc' + (ResourceManager.resourceGuid++));\r\n // TODO: consolidate repeat logic\r\n resource.eventClassName = (function () {\r\n switch ($.type(rawClassName)) {\r\n case 'string':\r\n return rawClassName.split(/\\s+/);\r\n case 'array':\r\n return rawClassName;\r\n default:\r\n return [];\r\n }\r\n })();\r\n if (resourceInput.businessHours) {\r\n resource.businessHourGenerator = new fullcalendar_1.BusinessHourGenerator(resourceInput.businessHours, this.calendar);\r\n }\r\n resource.children = (resourceInput.children || []).map(function (childInput) {\r\n var child = _this.buildResource(childInput);\r\n child.parent = resource;\r\n return child;\r\n });\r\n return resource;\r\n };\r\n ResourceManager.resourceGuid = 1;\r\n ResourceManager.ajaxDefaults = {\r\n dataType: 'json',\r\n cache: false\r\n };\r\n return ResourceManager;\r\n}(fullcalendar_1.Class));\r\nexports.default = ResourceManager;\r\nfullcalendar_1.EmitterMixin.mixInto(ResourceManager);\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar Resource_1 = __webpack_require__(19);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\nvar origMethods = {\r\n getPeerEventInstances: fullcalendar_1.Constraints.prototype.getPeerEventInstances,\r\n isFootprintAllowed: fullcalendar_1.Constraints.prototype.isFootprintAllowed,\r\n buildCurrentBusinessFootprints: fullcalendar_1.Constraints.prototype.buildCurrentBusinessFootprints,\r\n footprintContainsFootprint: fullcalendar_1.Constraints.prototype.footprintContainsFootprint,\r\n footprintsIntersect: fullcalendar_1.Constraints.prototype.footprintsIntersect,\r\n eventRangeToEventFootprints: fullcalendar_1.Constraints.prototype.eventRangeToEventFootprints,\r\n parseFootprints: fullcalendar_1.Constraints.prototype.parseFootprints\r\n};\r\nfullcalendar_1.Constraints.prototype.getPeerEventInstances = function (subjectEventDef) {\r\n var subjectResourceIds = subjectEventDef.getResourceIds();\r\n var peerInstances = origMethods.getPeerEventInstances.apply(this, arguments);\r\n if (!subjectResourceIds.length) {\r\n return peerInstances;\r\n }\r\n else {\r\n return peerInstances.filter(function (peerInstance) {\r\n // always consider non-resource events to be peers\r\n if (!peerInstance.def.resourceIds.length) {\r\n return true;\r\n }\r\n // has same resource? consider it a peer\r\n for (var _i = 0, subjectResourceIds_1 = subjectResourceIds; _i < subjectResourceIds_1.length; _i++) {\r\n var resourceId = subjectResourceIds_1[_i];\r\n if (peerInstance.def.hasResourceId(resourceId)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n};\r\n// enforce resource ID constraint\r\nfullcalendar_1.Constraints.prototype.isFootprintAllowed = function (footprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance) {\r\n if (typeof constraintVal === 'object') {\r\n var constrainToResourceIds = Resource_1.default.extractIds(constraintVal, this);\r\n if (constrainToResourceIds.length && (!(footprint instanceof ResourceComponentFootprint_1.default) ||\r\n $.inArray(footprint.resourceId, constrainToResourceIds) === -1)) {\r\n return false;\r\n }\r\n }\r\n return origMethods.isFootprintAllowed.apply(this, arguments);\r\n};\r\nfullcalendar_1.Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n var flatResources = this._calendar.resourceManager.getFlatResources();\r\n var anyCustomBusinessHours = false;\r\n // any per-resource business hours? or will one global businessHours suffice?\r\n for (var _i = 0, flatResources_1 = flatResources; _i < flatResources_1.length; _i++) {\r\n var resource = flatResources_1[_i];\r\n if (resource.businessHourGenerator) {\r\n anyCustomBusinessHours = true;\r\n }\r\n }\r\n // if there are any custom business hours, all business hours must be sliced per-resources\r\n if (anyCustomBusinessHours) {\r\n var view = this._calendar.view;\r\n var generalBusinessHourGenerator = view.get('businessHourGenerator');\r\n var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n var componentFootprints = [];\r\n for (var _a = 0, flatResources_2 = flatResources; _a < flatResources_2.length; _a++) {\r\n var resource = flatResources_2[_a];\r\n var businessHourGenerator = resource.businessHourGenerator || generalBusinessHourGenerator;\r\n var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n if (eventInstanceGroup) {\r\n for (var _b = 0, _c = eventInstanceGroup.getAllEventRanges(); _b < _c.length; _b++) {\r\n var eventRange = _c[_b];\r\n componentFootprints.push(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, isAllDay, // isAllDay\r\n resource.id));\r\n }\r\n }\r\n }\r\n return componentFootprints;\r\n }\r\n else {\r\n return origMethods.buildCurrentBusinessFootprints.apply(this, arguments);\r\n }\r\n};\r\nfullcalendar_1.Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n if (outerFootprint instanceof ResourceComponentFootprint_1.default &&\r\n (!(innerFootprint instanceof ResourceComponentFootprint_1.default) ||\r\n (innerFootprint.resourceId !== outerFootprint.resourceId))) {\r\n return false;\r\n }\r\n return origMethods.footprintContainsFootprint.apply(this, arguments);\r\n};\r\nfullcalendar_1.Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n if (footprint0 instanceof ResourceComponentFootprint_1.default &&\r\n footprint1 instanceof ResourceComponentFootprint_1.default &&\r\n (footprint0.resourceId !== footprint1.resourceId)) {\r\n return false;\r\n }\r\n return origMethods.footprintsIntersect.apply(this, arguments);\r\n};\r\n/*\r\nTODO: somehow more DRY with DateComponent::eventRangeToEventFootprints monkeypatch\r\n*/\r\nfullcalendar_1.Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n var eventDef = eventRange.eventDef;\r\n var resourceIds = eventDef.getResourceIds();\r\n if (resourceIds.length) {\r\n return resourceIds.map(function (resourceId) { return (new fullcalendar_1.EventFootprint(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, eventDef.isAllDay(), resourceId), eventDef, eventRange.eventInstance // might not exist\r\n )); });\r\n }\r\n else {\r\n return origMethods.eventRangeToEventFootprints.apply(this, arguments);\r\n }\r\n};\r\nfullcalendar_1.Constraints.prototype.parseFootprints = function (input) {\r\n var plainFootprints = origMethods.parseFootprints.apply(this, arguments);\r\n var resourceIds = input.resourceIds || [];\r\n if (input.resourceId) {\r\n resourceIds = [input.resourceId].concat(resourceIds);\r\n }\r\n if (resourceIds.length) {\r\n var footprints = [];\r\n for (var _i = 0, resourceIds_1 = resourceIds; _i < resourceIds_1.length; _i++) {\r\n var resourceId = resourceIds_1[_i];\r\n for (var _a = 0, plainFootprints_1 = plainFootprints; _a < plainFootprints_1.length; _a++) {\r\n var plainFootprint = plainFootprints_1[_a];\r\n footprints.push(new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, resourceId));\r\n }\r\n }\r\n return footprints;\r\n }\r\n else {\r\n return plainFootprints;\r\n }\r\n};\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar license_1 = __webpack_require__(52);\r\n// pre-monkeypatch methods\r\nvar origMethods = {\r\n setElement: fullcalendar_1.View.prototype.setElement,\r\n removeElement: fullcalendar_1.View.prototype.removeElement,\r\n triggerViewRender: fullcalendar_1.View.prototype.triggerViewRender\r\n};\r\n// new properties\r\nfullcalendar_1.View.prototype.canHandleSpecificResources = false;\r\n// View Rendering\r\n// --------------------------------------------------------------------------------------------------\r\nfullcalendar_1.View.prototype.setElement = function () {\r\n origMethods.setElement.apply(this, arguments);\r\n this.watchResources(); // do after have the el, because might render, which assumes a render skeleton\r\n};\r\nfullcalendar_1.View.prototype.removeElement = function () {\r\n this.unwatchResources();\r\n origMethods.removeElement.apply(this, arguments);\r\n};\r\n// Show the warning even for non-resource views\r\n// inject license key before 'viewRender' which is called by super's afterBaseDisplay\r\nfullcalendar_1.View.prototype.triggerViewRender = function () {\r\n license_1.processLicenseKey(this.opt('schedulerLicenseKey'), this.el // container element\r\n );\r\n origMethods.triggerViewRender.apply(this, arguments);\r\n};\r\n// Resource Binding\r\n// --------------------------------------------------------------------------------------------------\r\nfullcalendar_1.View.prototype.watchResources = function () {\r\n var _this = this;\r\n var initialDepNames = [];\r\n var bindingDepNames = ['initialResources'];\r\n if (this.opt('refetchResourcesOnNavigate')) {\r\n initialDepNames.push('dateProfile');\r\n }\r\n if (this.opt('filterResourcesWithEvents')) {\r\n bindingDepNames.push('currentEvents');\r\n }\r\n this.watch('initialResources', initialDepNames, function (deps) {\r\n return _this.getInitialResources(deps.dateProfile); // promise\r\n });\r\n this.watch('bindingResources', bindingDepNames, function (deps) {\r\n _this.bindResourceChanges(deps.currentEvents);\r\n _this.setResources(deps.initialResources, deps.currentEvents);\r\n }, function () {\r\n _this.unbindResourceChanges();\r\n _this.unsetResources();\r\n });\r\n};\r\nfullcalendar_1.View.prototype.unwatchResources = function () {\r\n this.unwatch('initialResources');\r\n this.unwatch('bindingResources');\r\n};\r\n// dateProfile is optional\r\nfullcalendar_1.View.prototype.getInitialResources = function (dateProfile) {\r\n var calendar = this.calendar;\r\n if (dateProfile) {\r\n return calendar.resourceManager.getResources(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay));\r\n }\r\n else {\r\n return calendar.resourceManager.getResources();\r\n }\r\n};\r\n// eventsPayload is optional\r\nfullcalendar_1.View.prototype.bindResourceChanges = function (eventsPayload) {\r\n var _this = this;\r\n this.listenTo(this.calendar.resourceManager, {\r\n set: function (resources) {\r\n _this.setResources(resources, eventsPayload);\r\n },\r\n unset: function () {\r\n _this.unsetResources();\r\n },\r\n reset: function (resources) {\r\n _this.resetResources(resources, eventsPayload);\r\n },\r\n add: function (resource, allResources) {\r\n _this.addResource(resource, allResources, eventsPayload);\r\n },\r\n remove: function (resource, allResources) {\r\n _this.removeResource(resource, allResources, eventsPayload);\r\n }\r\n });\r\n};\r\nfullcalendar_1.View.prototype.unbindResourceChanges = function () {\r\n this.stopListeningTo(this.calendar.resourceManager);\r\n};\r\n// Event Rendering\r\n// --------------------------------------------------------------------------------------------------\r\nfullcalendar_1.View.watch('displayingEvents', ['displayingDates', 'hasEvents', 'currentResources'], function (deps) {\r\n this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n this.requestEventsUnrender();\r\n});\r\n// Resource Data\r\n// --------------------------------------------------------------------------------------------------\r\n// currentEvents is optional\r\nfullcalendar_1.View.prototype.setResources = function (resources, eventsPayload) {\r\n if (eventsPayload) {\r\n resources = this.filterResourcesWithEvents(resources, eventsPayload);\r\n }\r\n this.set('currentResources', resources);\r\n this.set('hasResources', true);\r\n};\r\nfullcalendar_1.View.prototype.unsetResources = function () {\r\n this.unset('currentResources');\r\n this.unset('hasResources');\r\n};\r\n// eventsPayload is optional\r\nfullcalendar_1.View.prototype.resetResources = function (resources, eventsPayload) {\r\n this.startBatchRender();\r\n this.unsetResources();\r\n this.setResources(resources, eventsPayload);\r\n this.stopBatchRender();\r\n};\r\n// eventsPayload is optional\r\nfullcalendar_1.View.prototype.addResource = function (resource, allResources, eventsPayload) {\r\n if (!this.canHandleSpecificResources) {\r\n this.resetResources(allResources, eventsPayload);\r\n return;\r\n }\r\n if (eventsPayload) {\r\n var a = this.filterResourcesWithEvents([resource], eventsPayload);\r\n if (!a.length) {\r\n resource = null;\r\n }\r\n }\r\n if (resource) {\r\n this.set('currentResources', allResources); // TODO: filter against eventsPayload?\r\n this.handleResourceAdd(resource);\r\n }\r\n};\r\nfullcalendar_1.View.prototype.removeResource = function (resource, allResources, eventsPayload) {\r\n if (!this.canHandleSpecificResources) {\r\n this.resetResources(allResources, eventsPayload);\r\n return;\r\n }\r\n this.set('currentResources', allResources); // TODO: filter against eventsPayload?\r\n this.handleResourceRemove(resource);\r\n};\r\n// Resource Change Handling\r\n// --------------------------------------------------------------------------------------------------\r\nfullcalendar_1.View.prototype.handleResourceAdd = function (resource) {\r\n // subclasses should implement\r\n};\r\nfullcalendar_1.View.prototype.handleResourceRemove = function (resource) {\r\n // subclasses should implement\r\n};\r\n// Resource Filtering\r\n// ------------------------------------------------------------------------------------------------------------------\r\nfullcalendar_1.View.prototype.filterResourcesWithEvents = function (resources, eventsPayload) {\r\n var eventRanges = this.eventsPayloadToRanges(eventsPayload);\r\n var resourceIdHits = {};\r\n for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {\r\n var eventRange = eventRanges_1[_i];\r\n for (var _a = 0, _b = eventRange.eventDef.getResourceIds(); _a < _b.length; _a++) {\r\n var resourceId = _b[_a];\r\n resourceIdHits[resourceId] = true;\r\n }\r\n }\r\n return _filterResourcesWithEvents(resources, resourceIdHits);\r\n};\r\nfullcalendar_1.View.prototype.eventsPayloadToRanges = function (eventsPayload) {\r\n var dateProfile = this._getDateProfile();\r\n var allEventRanges = [];\r\n for (var eventDefId in eventsPayload) {\r\n var instanceGroup = eventsPayload[eventDefId];\r\n var eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n allEventRanges.push.apply(allEventRanges, (eventRanges || []));\r\n }\r\n return allEventRanges;\r\n};\r\n// provides a new structure with masked objects\r\nfunction _filterResourcesWithEvents(sourceResources, resourceIdHits) {\r\n var filteredResources = [];\r\n for (var _i = 0, sourceResources_1 = sourceResources; _i < sourceResources_1.length; _i++) {\r\n var sourceResource = sourceResources_1[_i];\r\n if (sourceResource.children.length) {\r\n var filteredChildren = _filterResourcesWithEvents(sourceResource.children, resourceIdHits);\r\n if (filteredChildren.length || resourceIdHits[sourceResource.id]) {\r\n var filteredResource = Object.create(sourceResource); // mask\r\n filteredResource.children = filteredChildren;\r\n filteredResources.push(filteredResource);\r\n }\r\n }\r\n else { // no children, so no need to mask\r\n if (resourceIdHits[sourceResource.id]) {\r\n filteredResources.push(sourceResource);\r\n }\r\n }\r\n }\r\n return filteredResources;\r\n}\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar moment = __webpack_require__(15);\r\nvar exportHooks = __webpack_require__(0);\r\nvar RELEASE_DATE = '2021-11-02'; // for Scheduler\r\nvar UPGRADE_WINDOW = { years: 1, weeks: 1 }; // 1 week leeway, for tz shift reasons too\r\nvar LICENSE_INFO_URL = 'http://fullcalendar.io/scheduler/license/';\r\nvar PRESET_LICENSE_KEYS = [\r\n 'GPL-My-Project-Is-Open-Source',\r\n 'CC-Attribution-NonCommercial-NoDerivatives'\r\n];\r\nfunction processLicenseKey(key, containerEl) {\r\n if (!isImmuneUrl(window.location.href) && !isValidKey(key)) {\r\n if (!detectWarningInContainer(containerEl)) {\r\n return renderingWarningInContainer('Please use a valid license key. More Info', containerEl);\r\n }\r\n }\r\n}\r\nexports.processLicenseKey = processLicenseKey;\r\n/*\r\nThis decryption is not meant to be bulletproof. Just a way to remind about an upgrade.\r\n*/\r\nfunction isValidKey(key) {\r\n if ($.inArray(key, PRESET_LICENSE_KEYS) !== -1) {\r\n return true;\r\n }\r\n var parts = (key || '').match(/^(\\d+)\\-fcs\\-(\\d+)$/);\r\n if (parts && (parts[1].length === 10)) {\r\n var purchaseDate = moment.utc(parseInt(parts[2], 10) * 1000);\r\n var releaseDate = moment.utc(exportHooks.mockSchedulerReleaseDate || RELEASE_DATE);\r\n if (releaseDate.isValid()) { // token won't be replaced in dev mode\r\n var minPurchaseDate = releaseDate.clone().subtract(UPGRADE_WINDOW);\r\n if (purchaseDate.isAfter(minPurchaseDate)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nexports.isValidKey = isValidKey;\r\nfunction isImmuneUrl(url) {\r\n return /\\w+\\:\\/\\/fullcalendar\\.io\\/|\\/demos\\/[\\w-]+\\.html$/.test(url);\r\n}\r\nexports.isImmuneUrl = isImmuneUrl;\r\nfunction renderingWarningInContainer(messageHtml, containerEl) {\r\n return containerEl.append($('
').html(messageHtml));\r\n}\r\nexports.renderingWarningInContainer = renderingWarningInContainer;\r\n// returns boolean of whether a license message is already rendered\r\nfunction detectWarningInContainer(containerEl) {\r\n return containerEl.find('.fc-license-message').length >= 1;\r\n}\r\nexports.detectWarningInContainer = detectWarningInContainer;\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n eventRangeToEventFootprints: fullcalendar_1.DateComponent.prototype.eventRangeToEventFootprints\r\n};\r\n// configuration for subclasses\r\nfullcalendar_1.DateComponent.prototype.isResourceFootprintsEnabled = false;\r\nfullcalendar_1.DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n if (!this.isResourceFootprintsEnabled) {\r\n return origMethods.eventRangeToEventFootprints.apply(this, arguments);\r\n }\r\n else {\r\n var eventDef_1 = eventRange.eventDef;\r\n var resourceIds = eventDef_1.getResourceIds();\r\n if (resourceIds.length) {\r\n return resourceIds.map(function (resourceId) { return (new fullcalendar_1.EventFootprint(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, eventDef_1.isAllDay(), resourceId), eventDef_1, eventRange.eventInstance // might not exist\r\n )); });\r\n }\r\n else if (eventDef_1.hasBgRendering()) { // TODO: it's strange to be relying on this\r\n return origMethods.eventRangeToEventFootprints.apply(this, arguments);\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n};\r\n// Resource Low-level Rendering\r\n// ----------------------------------------------------------------------------------------------\r\n// ResourceViewMixin wires these up\r\nfullcalendar_1.DateComponent.prototype.renderResources = function (resources) {\r\n this.callChildren('renderResources', arguments);\r\n};\r\nfullcalendar_1.DateComponent.prototype.unrenderResources = function () {\r\n this.callChildren('unrenderResources', arguments);\r\n};\r\nfullcalendar_1.DateComponent.prototype.renderResource = function (resource) {\r\n this.callChildren('renderResource', arguments);\r\n};\r\nfullcalendar_1.DateComponent.prototype.unrenderResource = function (resource) {\r\n this.callChildren('unrenderResource', arguments);\r\n};\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n isEventDefDraggable: fullcalendar_1.InteractiveDateComponent.prototype.isEventDefDraggable\r\n};\r\n// configuration for subclasses\r\n// whether we should attempt to render selections or resizes that span across different resources\r\nfullcalendar_1.InteractiveDateComponent.prototype.allowCrossResource = true;\r\n// ^ is this worth the complexity?\r\n// if an event's dates are not draggable, but it's resource IS, still allow dragging\r\nfullcalendar_1.InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n return this.isEventDefResourceEditable(eventDef) ||\r\n origMethods.isEventDefDraggable.call(this, eventDef);\r\n};\r\nfullcalendar_1.InteractiveDateComponent.prototype.isEventDefResourceEditable = function (eventDef) {\r\n var bool = eventDef.resourceEditable;\r\n if (bool == null) {\r\n bool = (eventDef.source || {}).resourceEditable;\r\n if (bool == null) {\r\n bool = this.opt('eventResourceEditable');\r\n if (bool == null) {\r\n bool = this.isEventDefGenerallyEditable(eventDef);\r\n }\r\n }\r\n }\r\n return bool;\r\n};\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n getFallbackStylingObjs: fullcalendar_1.EventRenderer.prototype.getFallbackStylingObjs\r\n};\r\nfullcalendar_1.EventRenderer.prototype.designatedResource = null; // optionally set by caller. forces @currentResource\r\nfullcalendar_1.EventRenderer.prototype.currentResource = null; // when set, will affect future rendered segs\r\nfullcalendar_1.EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n var segResourceId = seg.footprint.componentFootprint.resourceId;\r\n if (this.designatedResource) {\r\n this.currentResource = this.designatedResource;\r\n }\r\n else if (segResourceId) {\r\n this.currentResource = queryResourceObject(this, segResourceId);\r\n }\r\n else {\r\n this.currentResource = null;\r\n }\r\n};\r\nfullcalendar_1.EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n var objs = origMethods.getFallbackStylingObjs.apply(this, arguments);\r\n if (this.currentResource) {\r\n objs.unshift(this.currentResource);\r\n }\r\n else {\r\n var resources = [];\r\n for (var _i = 0, _a = eventDef.getResourceIds(); _i < _a.length; _i++) {\r\n var id = _a[_i];\r\n var resource = queryResourceObject(this, id);\r\n if (resource) {\r\n resources.push(resource);\r\n }\r\n }\r\n objs = resources.concat(objs);\r\n }\r\n return objs;\r\n};\r\nfunction queryResourceObject(eventRenderer, id) {\r\n return eventRenderer.view.calendar.resourceManager.getResourceById(id);\r\n}\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceComponentFootprint_1 = __webpack_require__(6);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n computeSelectionFootprint: fullcalendar_1.DateSelecting.prototype.computeSelectionFootprint\r\n};\r\nfullcalendar_1.DateSelecting.prototype.computeSelectionFootprint = function (startFootprint, endFootprint) {\r\n if (startFootprint.resourceId && endFootprint.resourceId &&\r\n (startFootprint.resourceId !== endFootprint.resourceId) &&\r\n !this.component.allowCrossResource) {\r\n return null; // explicity disallow selection across two different resources\r\n }\r\n else {\r\n var footprint = origMethods.computeSelectionFootprint.apply(this, arguments);\r\n if (startFootprint.resourceId) {\r\n // create a new footprint with resourceId data\r\n footprint = new ResourceComponentFootprint_1.default(footprint.unzonedRange, footprint.isAllDay, startFootprint.resourceId);\r\n }\r\n return footprint;\r\n }\r\n};\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n computeEventDropMutation: fullcalendar_1.EventDragging.prototype.computeEventDropMutation\r\n};\r\n/*\r\nmonkeypatching can cause an event to seem draggable if the resource is editable but the\r\nstart/end dates are NOT. make sure to account for this.\r\n*/\r\nfullcalendar_1.EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n var isDatesDraggable = this.component.isEventDefStartEditable(eventDef);\r\n if (startFootprint.resourceId && endFootprint.resourceId &&\r\n (startFootprint.resourceId !== endFootprint.resourceId) &&\r\n this.component.isEventDefResourceEditable(eventDef)) {\r\n var mutation = new fullcalendar_1.EventDefMutation();\r\n mutation.oldResourceId = startFootprint.resourceId;\r\n mutation.newResourceId = endFootprint.resourceId;\r\n if (isDatesDraggable) {\r\n mutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n }\r\n return mutation;\r\n }\r\n else if (isDatesDraggable) {\r\n return origMethods.computeEventDropMutation.apply(this, arguments);\r\n }\r\n};\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n computeEventStartResizeMutation: fullcalendar_1.EventResizing.prototype.computeEventStartResizeMutation,\r\n computeEventEndResizeMutation: fullcalendar_1.EventResizing.prototype.computeEventEndResizeMutation\r\n};\r\nfullcalendar_1.EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n if (startFootprint.resourceId && endFootprint.resourceId &&\r\n (startFootprint.resourceId !== endFootprint.resourceId) &&\r\n !this.component.allowCrossResource) {\r\n return null; // explicity disallow resizing across two different resources\r\n }\r\n else {\r\n return origMethods.computeEventStartResizeMutation.apply(this, arguments);\r\n }\r\n};\r\nfullcalendar_1.EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n if (startFootprint.resourceId && endFootprint.resourceId &&\r\n (startFootprint.resourceId !== endFootprint.resourceId) &&\r\n !this.component.allowCrossResource) {\r\n return null; // explicity disallow resizing across two different resources\r\n }\r\n else {\r\n return origMethods.computeEventEndResizeMutation.apply(this, arguments);\r\n }\r\n};\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n// references to pre-monkeypatched methods\r\nvar origMethods = {\r\n computeExternalDrop: fullcalendar_1.ExternalDropping.prototype.computeExternalDrop\r\n};\r\nfullcalendar_1.ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n var eventDef = origMethods.computeExternalDrop.apply(this, arguments);\r\n if (componentFootprint.resourceId) {\r\n eventDef.addResourceId(componentFootprint.resourceId);\r\n }\r\n return eventDef;\r\n};\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\n// defineStandardProps won't work :(\r\n// TODO: find a better way\r\nfullcalendar_1.EventSource.prototype.standardPropMap.resourceEditable = true; // automatically transfer\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(2);\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar Resource_1 = __webpack_require__(19);\r\nvar origMethods = {\r\n applyMiscProps: fullcalendar_1.EventDef.prototype.applyMiscProps,\r\n clone: fullcalendar_1.EventDef.prototype.clone,\r\n toLegacy: fullcalendar_1.EventDef.prototype.toLegacy\r\n};\r\nfullcalendar_1.EventDef.defineStandardProps({\r\n resourceEditable: true // automatically transfer\r\n});\r\n/*\r\nnew class members\r\n*/\r\nfullcalendar_1.EventDef.prototype.resourceIds = null;\r\nfullcalendar_1.EventDef.prototype.resourceEditable = null; // `null` is unspecified state\r\n/*\r\nNOTE: we can use defineStandardProps/applyManualStandardProps (example below)\r\nonce we do away with the deprecated eventResourceField.\r\n*/\r\nfullcalendar_1.EventDef.prototype.applyMiscProps = function (rawProps) {\r\n rawProps = $.extend({}, rawProps); // clone, because of delete\r\n this.resourceIds = Resource_1.default.extractIds(rawProps, this.source.calendar);\r\n delete rawProps.resourceId;\r\n delete rawProps.resourceIds;\r\n origMethods.applyMiscProps.apply(this, arguments);\r\n};\r\n/*\r\nEventDef.defineStandardProps({\r\n resourceId: false # manually handle\r\n resourceIds: false # manually handle\r\n});\r\nEventDef.prototype.applyManualStandardProps = function(rawProps) {\r\n origApplyManualStandardProps.apply(this, arguments);\r\n this.resourceIds = Resource.extractIds(rawProps, this.source.calendar);\r\n};\r\n*/\r\n/*\r\nresourceId should already be normalized\r\n*/\r\nfullcalendar_1.EventDef.prototype.hasResourceId = function (resourceId) {\r\n return $.inArray(resourceId, this.resourceIds) !== -1;\r\n};\r\n/*\r\nresourceId should already be normalized\r\n*/\r\nfullcalendar_1.EventDef.prototype.removeResourceId = function (resourceId) {\r\n fullcalendar_1.removeExact(this.resourceIds, resourceId);\r\n};\r\n/*\r\nresourceId should already be normalized\r\n*/\r\nfullcalendar_1.EventDef.prototype.addResourceId = function (resourceId) {\r\n if (!this.hasResourceId(resourceId)) {\r\n this.resourceIds.push(resourceId);\r\n }\r\n};\r\nfullcalendar_1.EventDef.prototype.getResourceIds = function () {\r\n if (this.resourceIds) {\r\n return this.resourceIds.slice(); // clone\r\n }\r\n else {\r\n return [];\r\n }\r\n};\r\nfullcalendar_1.EventDef.prototype.clone = function () {\r\n var def = origMethods.clone.apply(this, arguments);\r\n def.resourceIds = this.getResourceIds();\r\n return def;\r\n};\r\nfullcalendar_1.EventDef.prototype.toLegacy = function () {\r\n var obj = origMethods.toLegacy.apply(this, arguments);\r\n var resourceIds = this.getResourceIds();\r\n obj.resourceId =\r\n resourceIds.length === 1 ?\r\n resourceIds[0] :\r\n null;\r\n obj.resourceIds =\r\n resourceIds.length > 1 ?\r\n resourceIds :\r\n null;\r\n if (this.resourceEditable != null) { // allows an unspecified state\r\n obj.resourceEditable = this.resourceEditable;\r\n }\r\n return obj;\r\n};\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar oldMutateSingle = fullcalendar_1.EventDefMutation.prototype.mutateSingle;\r\n// either both will be set, or neither will be set\r\nfullcalendar_1.EventDefMutation.prototype.oldResourceId = null;\r\nfullcalendar_1.EventDefMutation.prototype.newResourceId = null;\r\nfullcalendar_1.EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n var undo = oldMutateSingle.apply(this, arguments);\r\n var savedResourceIds = null;\r\n if (this.oldResourceId && eventDef.hasResourceId(this.oldResourceId)) {\r\n savedResourceIds = eventDef.getResourceIds();\r\n eventDef.removeResourceId(this.oldResourceId);\r\n eventDef.addResourceId(this.newResourceId);\r\n }\r\n return function () {\r\n undo();\r\n if (savedResourceIds) {\r\n eventDef.resourceIds = savedResourceIds;\r\n }\r\n };\r\n};\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar TimelineView_1 = __webpack_require__(14);\r\nfullcalendar_1.defineView('timeline', {\r\n class: TimelineView_1.default,\r\n defaults: {\r\n eventResizableFromStart: true\r\n }\r\n});\r\nfullcalendar_1.defineView('timelineDay', {\r\n type: 'timeline',\r\n duration: { days: 1 }\r\n});\r\nfullcalendar_1.defineView('timelineWeek', {\r\n type: 'timeline',\r\n duration: { weeks: 1 }\r\n});\r\nfullcalendar_1.defineView('timelineMonth', {\r\n type: 'timeline',\r\n duration: { months: 1 }\r\n});\r\nfullcalendar_1.defineView('timelineYear', {\r\n type: 'timeline',\r\n duration: { years: 1 }\r\n});\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceTimelineView_1 = __webpack_require__(30);\r\nfullcalendar_1.getViewConfig('timeline').resourceClass = ResourceTimelineView_1.default;\r\nfullcalendar_1.Calendar.defaults.resourcesInitiallyExpanded = true;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceBasicView_1 = __webpack_require__(22);\r\nvar ResourceMonthView_1 = __webpack_require__(23);\r\n// TODO: make more DRY (with agenda's config too)\r\nfullcalendar_1.getViewConfig('basic').queryResourceClass = function (viewSpec) {\r\n var explicitGrouping = viewSpec.options.groupByResource ||\r\n viewSpec.options.groupByDateAndResource;\r\n var showsResources = false;\r\n if (explicitGrouping != null) {\r\n showsResources = explicitGrouping;\r\n }\r\n else if (viewSpec.duration) {\r\n showsResources = viewSpec.duration.as('days') === 1;\r\n }\r\n if (showsResources) {\r\n return ResourceBasicView_1.default;\r\n }\r\n};\r\nfullcalendar_1.getViewConfig('month').queryResourceClass = function (viewSpec) {\r\n if (viewSpec.options.groupByResource ||\r\n viewSpec.options.groupByDateAndResource) {\r\n return ResourceMonthView_1.default;\r\n }\r\n};\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fullcalendar_1 = __webpack_require__(0);\r\nvar ResourceAgendaView_1 = __webpack_require__(20);\r\n/*\r\nTODO: make more DRY, with basic's config\r\n*/\r\nfullcalendar_1.getViewConfig('agenda').queryResourceClass = function (viewSpec) {\r\n var explicitGrouping = viewSpec.options.groupByResource ||\r\n viewSpec.options.groupByDateAndResource;\r\n var showsResources = false;\r\n if (explicitGrouping != null) {\r\n showsResources = explicitGrouping;\r\n }\r\n else if (viewSpec.duration) {\r\n showsResources = viewSpec.duration.as('days') === 1;\r\n }\r\n if (showsResources) {\r\n return ResourceAgendaView_1.default;\r\n }\r\n};\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n!function(a,b,c,d){\"use strict\";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),\"identifier\",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach(function(d){b[d]=c?a.CSS.supports(\"touch-action\",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?\"cancel\":a&qb?\"end\":a&pb?\"move\":a&ob?\"start\":\"\"}function $(a){return a==Ma?\"down\":a==La?\"up\":a==Ja?\"left\":a==Ka?\"right\":\"\"}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||\"\"}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent(\"Event\");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],na=b.createElement(\"div\"),oa=\"function\",pa=Math.round,qa=Math.abs,ra=Date.now;la=\"function\"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var b=Object(a),c=1;ch&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a=\"touchstart\",_a=\"touchstart touchmove touchend touchcancel\";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb=\"touchstart touchmove touchend touchcancel\";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,\"touchAction\"),fb=eb!==d,gb=\"compute\",hb=\"auto\",ib=\"manipulation\",jb=\"none\",kb=\"pan-x\",lb=\"pan-y\",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(\" \"))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,\"recognizeWith\",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,\"dropRecognizeWith\",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,\"requireFailure\",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,\"dropRequireFailure\",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;af?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?\"in\":\"out\";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+\"up\",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Cropper;\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n","\"use strict\";\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * This shim allows elements written in, or compiled to, ES5 to work on native\n * implementations of Custom Elements v1. It sets new.target to the value of\n * this.constructor so that the native HTMLElement constructor can access the\n * current under-construction element's definition.\n */\n(function () {\n if (\n // No Reflect, no classes, no need for shim because native custom elements\n // require ES2015 classes or Reflect.\n window.Reflect === undefined ||\n window.customElements === undefined ||\n // The webcomponentsjs custom elements polyfill doesn't require\n // ES2015-compatible construction (`super()` or `Reflect.construct`).\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n /**\n * With jscompiler's RECOMMENDED_FLAGS the function name will be optimized away.\n * However, if we declare the function as a property on an object literal, and\n * use quotes for the property name, then closure will leave that much intact,\n * which is enough for the JS VM to correctly set Function.prototype.name.\n */\n const wrapperForTheName = {\n 'HTMLElement': function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n },\n };\n window.HTMLElement = wrapperForTheName['HTMLElement'];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n//# sourceMappingURL=native-shim.js.map","/*!\n * Quill Editor v1.3.7\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 109);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar format_1 = __webpack_require__(18);\nvar leaf_1 = __webpack_require__(19);\nvar scroll_1 = __webpack_require__(45);\nvar inline_1 = __webpack_require__(46);\nvar block_1 = __webpack_require__(47);\nvar embed_1 = __webpack_require__(48);\nvar text_1 = __webpack_require__(49);\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar store_1 = __webpack_require__(31);\nvar Registry = __webpack_require__(1);\nvar Parchment = {\n Scope: Registry.Scope,\n create: Registry.create,\n find: Registry.find,\n query: Registry.query,\n register: Registry.register,\n Container: container_1.default,\n Format: format_1.default,\n Leaf: leaf_1.default,\n Embed: embed_1.default,\n Scroll: scroll_1.default,\n Block: block_1.default,\n Inline: inline_1.default,\n Text: text_1.default,\n Attributor: {\n Attribute: attributor_1.default,\n Class: class_1.default,\n Style: style_1.default,\n Store: store_1.default,\n },\n};\nexports.default = Parchment;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n __extends(ParchmentError, _super);\n function ParchmentError(message) {\n var _this = this;\n message = '[Parchment] ' + message;\n _this = _super.call(this, message) || this;\n _this.message = message;\n _this.name = _this.constructor.name;\n return _this;\n }\n return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n var match = query(input);\n if (match == null) {\n throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n }\n var BlotClass = match;\n var node = \n // @ts-ignore\n input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n if (bubble === void 0) { bubble = false; }\n if (node == null)\n return null;\n // @ts-ignore\n if (node[exports.DATA_KEY] != null)\n return node[exports.DATA_KEY].blot;\n if (bubble)\n return find(node.parentNode, bubble);\n return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n if (scope === void 0) { scope = Scope.ANY; }\n var match;\n if (typeof query === 'string') {\n match = types[query] || attributes[query];\n // @ts-ignore\n }\n else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n match = types['text'];\n }\n else if (typeof query === 'number') {\n if (query & Scope.LEVEL & Scope.BLOCK) {\n match = types['block'];\n }\n else if (query & Scope.LEVEL & Scope.INLINE) {\n match = types['inline'];\n }\n }\n else if (query instanceof HTMLElement) {\n var names = (query.getAttribute('class') || '').split(/\\s+/);\n for (var i in names) {\n match = classes[names[i]];\n if (match)\n break;\n }\n match = match || tags[query.tagName];\n }\n if (match == null)\n return null;\n // @ts-ignore\n if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n return match;\n return null;\n}\nexports.query = query;\nfunction register() {\n var Definitions = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n Definitions[_i] = arguments[_i];\n }\n if (Definitions.length > 1) {\n return Definitions.map(function (d) {\n return register(d);\n });\n }\n var Definition = Definitions[0];\n if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n throw new ParchmentError('Invalid definition');\n }\n else if (Definition.blotName === 'abstract') {\n throw new ParchmentError('Cannot register abstract class');\n }\n types[Definition.blotName || Definition.attrName] = Definition;\n if (typeof Definition.keyName === 'string') {\n attributes[Definition.keyName] = Definition;\n }\n else {\n if (Definition.className != null) {\n classes[Definition.className] = Definition;\n }\n if (Definition.tagName != null) {\n if (Array.isArray(Definition.tagName)) {\n Definition.tagName = Definition.tagName.map(function (tagName) {\n return tagName.toUpperCase();\n });\n }\n else {\n Definition.tagName = Definition.tagName.toUpperCase();\n }\n var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n tagNames.forEach(function (tag) {\n if (tags[tag] == null || Definition.className == null) {\n tags[tag] = Definition;\n }\n });\n }\n }\n return Definition;\n}\nexports.register = register;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar diff = __webpack_require__(51);\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\nvar op = __webpack_require__(20);\n\n\nvar NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n // Assume we are given a well formed ops\n if (Array.isArray(ops)) {\n this.ops = ops;\n } else if (ops != null && Array.isArray(ops.ops)) {\n this.ops = ops.ops;\n } else {\n this.ops = [];\n }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n var newOp = {};\n if (text.length === 0) return this;\n newOp.insert = text;\n if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n if (length <= 0) return this;\n return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n if (length <= 0) return this;\n var newOp = { retain: length };\n if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n var index = this.ops.length;\n var lastOp = this.ops[index - 1];\n newOp = extend(true, {}, newOp);\n if (typeof lastOp === 'object') {\n if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n return this;\n }\n // Since it does not matter if we insert before or after deleting at the same index,\n // always prefer to insert first\n if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n index -= 1;\n lastOp = this.ops[index - 1];\n if (typeof lastOp !== 'object') {\n this.ops.unshift(newOp);\n return this;\n }\n }\n if (equal(newOp.attributes, lastOp.attributes)) {\n if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n return this;\n } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n return this;\n }\n }\n }\n if (index === this.ops.length) {\n this.ops.push(newOp);\n } else {\n this.ops.splice(index, 0, newOp);\n }\n return this;\n};\n\nDelta.prototype.chop = function () {\n var lastOp = this.ops[this.ops.length - 1];\n if (lastOp && lastOp.retain && !lastOp.attributes) {\n this.ops.pop();\n }\n return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n var passed = [], failed = [];\n this.forEach(function(op) {\n var target = predicate(op) ? passed : failed;\n target.push(op);\n });\n return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n return this.reduce(function (length, elem) {\n if (elem.insert) {\n return length + op.length(elem);\n } else if (elem.delete) {\n return length - elem.delete;\n }\n return length;\n }, 0);\n};\n\nDelta.prototype.length = function () {\n return this.reduce(function (length, elem) {\n return length + op.length(elem);\n }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n start = start || 0;\n if (typeof end !== 'number') end = Infinity;\n var ops = [];\n var iter = op.iterator(this.ops);\n var index = 0;\n while (index < end && iter.hasNext()) {\n var nextOp;\n if (index < start) {\n nextOp = iter.next(start - index);\n } else {\n nextOp = iter.next(end - index);\n ops.push(nextOp);\n }\n index += op.length(nextOp);\n }\n return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n var thisIter = op.iterator(this.ops);\n var otherIter = op.iterator(other.ops);\n var ops = [];\n var firstOther = otherIter.peek();\n if (firstOther != null && typeof firstOther.retain === 'number' && firstOther.attributes == null) {\n var firstLeft = firstOther.retain;\n while (thisIter.peekType() === 'insert' && thisIter.peekLength() <= firstLeft) {\n firstLeft -= thisIter.peekLength();\n ops.push(thisIter.next());\n }\n if (firstOther.retain - firstLeft > 0) {\n otherIter.next(firstOther.retain - firstLeft);\n }\n }\n var delta = new Delta(ops);\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n } else if (thisIter.peekType() === 'delete') {\n delta.push(thisIter.next());\n } else {\n var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n var thisOp = thisIter.next(length);\n var otherOp = otherIter.next(length);\n if (typeof otherOp.retain === 'number') {\n var newOp = {};\n if (typeof thisOp.retain === 'number') {\n newOp.retain = length;\n } else {\n newOp.insert = thisOp.insert;\n }\n // Preserve null when composing with a retain, otherwise remove it for inserts\n var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n if (attributes) newOp.attributes = attributes;\n delta.push(newOp);\n\n // Optimization if rest of other is just retain\n if (!otherIter.hasNext() && equal(delta.ops[delta.ops.length - 1], newOp)) {\n var rest = new Delta(thisIter.rest());\n return delta.concat(rest).chop();\n }\n\n // Other op should be delete, we could be an insert or retain\n // Insert + delete cancels out\n } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n delta.push(otherOp);\n }\n }\n }\n return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n var delta = new Delta(this.ops.slice());\n if (other.ops.length > 0) {\n delta.push(other.ops[0]);\n delta.ops = delta.ops.concat(other.ops.slice(1));\n }\n return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n if (this.ops === other.ops) {\n return new Delta();\n }\n var strings = [this, other].map(function (delta) {\n return delta.map(function (op) {\n if (op.insert != null) {\n return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n }\n var prep = (delta === other) ? 'on' : 'with';\n throw new Error('diff() called ' + prep + ' non-document');\n }).join('');\n });\n var delta = new Delta();\n var diffResult = diff(strings[0], strings[1], index);\n var thisIter = op.iterator(this.ops);\n var otherIter = op.iterator(other.ops);\n diffResult.forEach(function (component) {\n var length = component[1].length;\n while (length > 0) {\n var opLength = 0;\n switch (component[0]) {\n case diff.INSERT:\n opLength = Math.min(otherIter.peekLength(), length);\n delta.push(otherIter.next(opLength));\n break;\n case diff.DELETE:\n opLength = Math.min(length, thisIter.peekLength());\n thisIter.next(opLength);\n delta['delete'](opLength);\n break;\n case diff.EQUAL:\n opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n var thisOp = thisIter.next(opLength);\n var otherOp = otherIter.next(opLength);\n if (equal(thisOp.insert, otherOp.insert)) {\n delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n } else {\n delta.push(otherOp)['delete'](opLength);\n }\n break;\n }\n length -= opLength;\n }\n });\n return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n newline = newline || '\\n';\n var iter = op.iterator(this.ops);\n var line = new Delta();\n var i = 0;\n while (iter.hasNext()) {\n if (iter.peekType() !== 'insert') return;\n var thisOp = iter.peek();\n var start = op.length(thisOp) - iter.peekLength();\n var index = typeof thisOp.insert === 'string' ?\n thisOp.insert.indexOf(newline, start) - start : -1;\n if (index < 0) {\n line.push(iter.next());\n } else if (index > 0) {\n line.push(iter.next(index));\n } else {\n if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n return;\n }\n i += 1;\n line = new Delta();\n }\n }\n if (line.length() > 0) {\n predicate(line, {}, i);\n }\n};\n\nDelta.prototype.transform = function (other, priority) {\n priority = !!priority;\n if (typeof other === 'number') {\n return this.transformPosition(other, priority);\n }\n var thisIter = op.iterator(this.ops);\n var otherIter = op.iterator(other.ops);\n var delta = new Delta();\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n delta.retain(op.length(thisIter.next()));\n } else if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n } else {\n var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n var thisOp = thisIter.next(length);\n var otherOp = otherIter.next(length);\n if (thisOp['delete']) {\n // Our delete either makes their delete redundant or removes their retain\n continue;\n } else if (otherOp['delete']) {\n delta.push(otherOp);\n } else {\n // We retain either their retain or insert\n delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n }\n }\n }\n return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n priority = !!priority;\n var thisIter = op.iterator(this.ops);\n var offset = 0;\n while (thisIter.hasNext() && offset <= index) {\n var length = thisIter.peekLength();\n var nextType = thisIter.peekType();\n thisIter.next();\n if (nextType === 'delete') {\n index -= Math.min(length, index - offset);\n continue;\n } else if (nextType === 'insert' && (offset < index || !priority)) {\n index += length;\n }\n offset += length;\n }\n return index;\n};\n\n\nmodule.exports = Delta;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWLINE_LENGTH = 1;\n\nvar BlockEmbed = function (_Parchment$Embed) {\n _inherits(BlockEmbed, _Parchment$Embed);\n\n function BlockEmbed() {\n _classCallCheck(this, BlockEmbed);\n\n return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));\n }\n\n _createClass(BlockEmbed, [{\n key: 'attach',\n value: function attach() {\n _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);\n this.attributes = new _parchment2.default.Attributor.Store(this.domNode);\n }\n }, {\n key: 'delta',\n value: function delta() {\n return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));\n }\n }, {\n key: 'format',\n value: function format(name, value) {\n var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);\n if (attribute != null) {\n this.attributes.attribute(attribute, value);\n }\n }\n }, {\n key: 'formatAt',\n value: function formatAt(index, length, name, value) {\n this.format(name, value);\n }\n }, {\n key: 'insertAt',\n value: function insertAt(index, value, def) {\n if (typeof value === 'string' && value.endsWith('\\n')) {\n var block = _parchment2.default.create(Block.blotName);\n this.parent.insertBefore(block, index === 0 ? this : this.next);\n block.insertAt(0, value.slice(0, -1));\n } else {\n _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);\n }\n }\n }]);\n\n return BlockEmbed;\n}(_parchment2.default.Embed);\n\nBlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nvar Block = function (_Parchment$Block) {\n _inherits(Block, _Parchment$Block);\n\n function Block(domNode) {\n _classCallCheck(this, Block);\n\n var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));\n\n _this2.cache = {};\n return _this2;\n }\n\n _createClass(Block, [{\n key: 'delta',\n value: function delta() {\n if (this.cache.delta == null) {\n this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {\n if (leaf.length() === 0) {\n return delta;\n } else {\n return delta.insert(leaf.value(), bubbleFormats(leaf));\n }\n }, new _quillDelta2.default()).insert('\\n', bubbleFormats(this));\n }\n return this.cache.delta;\n }\n }, {\n key: 'deleteAt',\n value: function deleteAt(index, length) {\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);\n this.cache = {};\n }\n }, {\n key: 'formatAt',\n value: function formatAt(index, length, name, value) {\n if (length <= 0) return;\n if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n if (index + length === this.length()) {\n this.format(name, value);\n }\n } else {\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);\n }\n this.cache = {};\n }\n }, {\n key: 'insertAt',\n value: function insertAt(index, value, def) {\n if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);\n if (value.length === 0) return;\n var lines = value.split('\\n');\n var text = lines.shift();\n if (text.length > 0) {\n if (index < this.length() - 1 || this.children.tail == null) {\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);\n } else {\n this.children.tail.insertAt(this.children.tail.length(), text);\n }\n this.cache = {};\n }\n var block = this;\n lines.reduce(function (index, line) {\n block = block.split(index, true);\n block.insertAt(0, line);\n return line.length;\n }, index + text.length);\n }\n }, {\n key: 'insertBefore',\n value: function insertBefore(blot, ref) {\n var head = this.children.head;\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);\n if (head instanceof _break2.default) {\n head.remove();\n }\n this.cache = {};\n }\n }, {\n key: 'length',\n value: function length() {\n if (this.cache.length == null) {\n this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;\n }\n return this.cache.length;\n }\n }, {\n key: 'moveChildren',\n value: function moveChildren(target, ref) {\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);\n this.cache = {};\n }\n }, {\n key: 'optimize',\n value: function optimize(context) {\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);\n this.cache = {};\n }\n }, {\n key: 'path',\n value: function path(index) {\n return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);\n }\n }, {\n key: 'removeChild',\n value: function removeChild(child) {\n _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);\n this.cache = {};\n }\n }, {\n key: 'split',\n value: function split(index) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n var clone = this.clone();\n if (index === 0) {\n this.parent.insertBefore(clone, this);\n return this;\n } else {\n this.parent.insertBefore(clone, this.next);\n return clone;\n }\n } else {\n var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);\n this.cache = {};\n return next;\n }\n }\n }]);\n\n return Block;\n}(_parchment2.default.Block);\n\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];\n\nfunction bubbleFormats(blot) {\n var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (blot == null) return formats;\n if (typeof blot.formats === 'function') {\n formats = (0, _extend2.default)(formats, blot.formats());\n }\n if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n return formats;\n }\n return bubbleFormats(blot.parent, formats);\n}\n\nexports.bubbleFormats = bubbleFormats;\nexports.BlockEmbed = BlockEmbed;\nexports.default = Block;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.overload = exports.expandConfig = undefined;\n\nvar _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\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n__webpack_require__(50);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _editor = __webpack_require__(14);\n\nvar _editor2 = _interopRequireDefault(_editor);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _selection = __webpack_require__(15);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill');\n\nvar Quill = function () {\n _createClass(Quill, null, [{\n key: 'debug',\n value: function debug(limit) {\n if (limit === true) {\n limit = 'log';\n }\n _logger2.default.level(limit);\n }\n }, {\n key: 'find',\n value: function find(node) {\n return node.__quill || _parchment2.default.find(node);\n }\n }, {\n key: 'import',\n value: function _import(name) {\n if (this.imports[name] == null) {\n debug.error('Cannot import ' + name + '. Are you sure it was registered?');\n }\n return this.imports[name];\n }\n }, {\n key: 'register',\n value: function register(path, target) {\n var _this = this;\n\n var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (typeof path !== 'string') {\n var name = path.attrName || path.blotName;\n if (typeof name === 'string') {\n // register(Blot | Attributor, overwrite)\n this.register('formats/' + name, path, target);\n } else {\n Object.keys(path).forEach(function (key) {\n _this.register(key, path[key], target);\n });\n }\n } else {\n if (this.imports[path] != null && !overwrite) {\n debug.warn('Overwriting ' + path + ' with', target);\n }\n this.imports[path] = target;\n if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {\n _parchment2.default.register(target);\n } else if (path.startsWith('modules') && typeof target.register === 'function') {\n target.register();\n }\n }\n }\n }]);\n\n function Quill(container) {\n var _this2 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Quill);\n\n this.options = expandConfig(container, options);\n this.container = this.options.container;\n if (this.container == null) {\n return debug.error('Invalid Quill container', container);\n }\n if (this.options.debug) {\n Quill.debug(this.options.debug);\n }\n var html = this.container.innerHTML.trim();\n this.container.classList.add('ql-container');\n this.container.innerHTML = '';\n this.container.__quill = this;\n this.root = this.addContainer('ql-editor');\n this.root.classList.add('ql-blank');\n this.root.setAttribute('data-gramm', false);\n this.scrollingContainer = this.options.scrollingContainer || this.root;\n this.emitter = new _emitter4.default();\n this.scroll = _parchment2.default.create(this.root, {\n emitter: this.emitter,\n whitelist: this.options.formats\n });\n this.editor = new _editor2.default(this.scroll);\n this.selection = new _selection2.default(this.scroll, this.emitter);\n this.theme = new this.options.theme(this, this.options);\n this.keyboard = this.theme.addModule('keyboard');\n this.clipboard = this.theme.addModule('clipboard');\n this.history = this.theme.addModule('history');\n this.theme.init();\n this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {\n if (type === _emitter4.default.events.TEXT_CHANGE) {\n _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());\n }\n });\n this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {\n var range = _this2.selection.lastRange;\n var index = range && range.length === 0 ? range.index : undefined;\n modify.call(_this2, function () {\n return _this2.editor.update(null, mutations, index);\n }, source);\n });\n var contents = this.clipboard.convert('
' + html + '


');\n this.setContents(contents);\n this.history.clear();\n if (this.options.placeholder) {\n this.root.setAttribute('data-placeholder', this.options.placeholder);\n }\n if (this.options.readOnly) {\n this.disable();\n }\n }\n\n _createClass(Quill, [{\n key: 'addContainer',\n value: function addContainer(container) {\n var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (typeof container === 'string') {\n var className = container;\n container = document.createElement('div');\n container.classList.add(className);\n }\n this.container.insertBefore(container, refNode);\n return container;\n }\n }, {\n key: 'blur',\n value: function blur() {\n this.selection.setRange(null);\n }\n }, {\n key: 'deleteText',\n value: function deleteText(index, length, source) {\n var _this3 = this;\n\n var _overload = overload(index, length, source);\n\n var _overload2 = _slicedToArray(_overload, 4);\n\n index = _overload2[0];\n length = _overload2[1];\n source = _overload2[3];\n\n return modify.call(this, function () {\n return _this3.editor.deleteText(index, length);\n }, source, index, -1 * length);\n }\n }, {\n key: 'disable',\n value: function disable() {\n this.enable(false);\n }\n }, {\n key: 'enable',\n value: function enable() {\n var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n this.scroll.enable(enabled);\n this.container.classList.toggle('ql-disabled', !enabled);\n }\n }, {\n key: 'focus',\n value: function focus() {\n var scrollTop = this.scrollingContainer.scrollTop;\n this.selection.focus();\n this.scrollingContainer.scrollTop = scrollTop;\n this.scrollIntoView();\n }\n }, {\n key: 'format',\n value: function format(name, value) {\n var _this4 = this;\n\n var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n return modify.call(this, function () {\n var range = _this4.getSelection(true);\n var change = new _quillDelta2.default();\n if (range == null) {\n return change;\n } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));\n } else if (range.length === 0) {\n _this4.selection.format(name, value);\n return change;\n } else {\n change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));\n }\n _this4.setSelection(range, _emitter4.default.sources.SILENT);\n return change;\n }, source);\n }\n }, {\n key: 'formatLine',\n value: function formatLine(index, length, name, value, source) {\n var _this5 = this;\n\n var formats = void 0;\n\n var _overload3 = overload(index, length, name, value, source);\n\n var _overload4 = _slicedToArray(_overload3, 4);\n\n index = _overload4[0];\n length = _overload4[1];\n formats = _overload4[2];\n source = _overload4[3];\n\n return modify.call(this, function () {\n return _this5.editor.formatLine(index, length, formats);\n }, source, index, 0);\n }\n }, {\n key: 'formatText',\n value: function formatText(index, length, name, value, source) {\n var _this6 = this;\n\n var formats = void 0;\n\n var _overload5 = overload(index, length, name, value, source);\n\n var _overload6 = _slicedToArray(_overload5, 4);\n\n index = _overload6[0];\n length = _overload6[1];\n formats = _overload6[2];\n source = _overload6[3];\n\n return modify.call(this, function () {\n return _this6.editor.formatText(index, length, formats);\n }, source, index, 0);\n }\n }, {\n key: 'getBounds',\n value: function getBounds(index) {\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var bounds = void 0;\n if (typeof index === 'number') {\n bounds = this.selection.getBounds(index, length);\n } else {\n bounds = this.selection.getBounds(index.index, index.length);\n }\n var containerBounds = this.container.getBoundingClientRect();\n return {\n bottom: bounds.bottom - containerBounds.top,\n height: bounds.height,\n left: bounds.left - containerBounds.left,\n right: bounds.right - containerBounds.left,\n top: bounds.top - containerBounds.top,\n width: bounds.width\n };\n }\n }, {\n key: 'getContents',\n value: function getContents() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n var _overload7 = overload(index, length);\n\n var _overload8 = _slicedToArray(_overload7, 2);\n\n index = _overload8[0];\n length = _overload8[1];\n\n return this.editor.getContents(index, length);\n }\n }, {\n key: 'getFormat',\n value: function getFormat() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (typeof index === 'number') {\n return this.editor.getFormat(index, length);\n } else {\n return this.editor.getFormat(index.index, index.length);\n }\n }\n }, {\n key: 'getIndex',\n value: function getIndex(blot) {\n return blot.offset(this.scroll);\n }\n }, {\n key: 'getLength',\n value: function getLength() {\n return this.scroll.length();\n }\n }, {\n key: 'getLeaf',\n value: function getLeaf(index) {\n return this.scroll.leaf(index);\n }\n }, {\n key: 'getLine',\n value: function getLine(index) {\n return this.scroll.line(index);\n }\n }, {\n key: 'getLines',\n value: function getLines() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n if (typeof index !== 'number') {\n return this.scroll.lines(index.index, index.length);\n } else {\n return this.scroll.lines(index, length);\n }\n }\n }, {\n key: 'getModule',\n value: function getModule(name) {\n return this.theme.modules[name];\n }\n }, {\n key: 'getSelection',\n value: function getSelection() {\n var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (focus) this.focus();\n this.update(); // Make sure we access getRange with editor in consistent state\n return this.selection.getRange()[0];\n }\n }, {\n key: 'getText',\n value: function getText() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n var _overload9 = overload(index, length);\n\n var _overload10 = _slicedToArray(_overload9, 2);\n\n index = _overload10[0];\n length = _overload10[1];\n\n return this.editor.getText(index, length);\n }\n }, {\n key: 'hasFocus',\n value: function hasFocus() {\n return this.selection.hasFocus();\n }\n }, {\n key: 'insertEmbed',\n value: function insertEmbed(index, embed, value) {\n var _this7 = this;\n\n var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n\n return modify.call(this, function () {\n return _this7.editor.insertEmbed(index, embed, value);\n }, source, index);\n }\n }, {\n key: 'insertText',\n value: function insertText(index, text, name, value, source) {\n var _this8 = this;\n\n var formats = void 0;\n\n var _overload11 = overload(index, 0, name, value, source);\n\n var _overload12 = _slicedToArray(_overload11, 4);\n\n index = _overload12[0];\n formats = _overload12[2];\n source = _overload12[3];\n\n return modify.call(this, function () {\n return _this8.editor.insertText(index, text, formats);\n }, source, index, text.length);\n }\n }, {\n key: 'isEnabled',\n value: function isEnabled() {\n return !this.container.classList.contains('ql-disabled');\n }\n }, {\n key: 'off',\n value: function off() {\n return this.emitter.off.apply(this.emitter, arguments);\n }\n }, {\n key: 'on',\n value: function on() {\n return this.emitter.on.apply(this.emitter, arguments);\n }\n }, {\n key: 'once',\n value: function once() {\n return this.emitter.once.apply(this.emitter, arguments);\n }\n }, {\n key: 'pasteHTML',\n value: function pasteHTML(index, html, source) {\n this.clipboard.dangerouslyPasteHTML(index, html, source);\n }\n }, {\n key: 'removeFormat',\n value: function removeFormat(index, length, source) {\n var _this9 = this;\n\n var _overload13 = overload(index, length, source);\n\n var _overload14 = _slicedToArray(_overload13, 4);\n\n index = _overload14[0];\n length = _overload14[1];\n source = _overload14[3];\n\n return modify.call(this, function () {\n return _this9.editor.removeFormat(index, length);\n }, source, index);\n }\n }, {\n key: 'scrollIntoView',\n value: function scrollIntoView() {\n this.selection.scrollIntoView(this.scrollingContainer);\n }\n }, {\n key: 'setContents',\n value: function setContents(delta) {\n var _this10 = this;\n\n var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n return modify.call(this, function () {\n delta = new _quillDelta2.default(delta);\n var length = _this10.getLength();\n var deleted = _this10.editor.deleteText(0, length);\n var applied = _this10.editor.applyDelta(delta);\n var lastOp = applied.ops[applied.ops.length - 1];\n if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\\n') {\n _this10.editor.deleteText(_this10.getLength() - 1, 1);\n applied.delete(1);\n }\n var ret = deleted.compose(applied);\n return ret;\n }, source);\n }\n }, {\n key: 'setSelection',\n value: function setSelection(index, length, source) {\n if (index == null) {\n this.selection.setRange(null, length || Quill.sources.API);\n } else {\n var _overload15 = overload(index, length, source);\n\n var _overload16 = _slicedToArray(_overload15, 4);\n\n index = _overload16[0];\n length = _overload16[1];\n source = _overload16[3];\n\n this.selection.setRange(new _selection.Range(index, length), source);\n if (source !== _emitter4.default.sources.SILENT) {\n this.selection.scrollIntoView(this.scrollingContainer);\n }\n }\n }\n }, {\n key: 'setText',\n value: function setText(text) {\n var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n var delta = new _quillDelta2.default().insert(text);\n return this.setContents(delta, source);\n }\n }, {\n key: 'update',\n value: function update() {\n var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n this.selection.update(source);\n return change;\n }\n }, {\n key: 'updateContents',\n value: function updateContents(delta) {\n var _this11 = this;\n\n var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n return modify.call(this, function () {\n delta = new _quillDelta2.default(delta);\n return _this11.editor.applyDelta(delta, source);\n }, source, true);\n }\n }]);\n\n return Quill;\n}();\n\nQuill.DEFAULTS = {\n bounds: null,\n formats: null,\n modules: {},\n placeholder: '',\n readOnly: false,\n scrollingContainer: null,\n strict: true,\n theme: 'default'\n};\nQuill.events = _emitter4.default.events;\nQuill.sources = _emitter4.default.sources;\n// eslint-disable-next-line no-undef\nQuill.version = false ? 'dev' : \"1.3.7\";\n\nQuill.imports = {\n 'delta': _quillDelta2.default,\n 'parchment': _parchment2.default,\n 'core/module': _module2.default,\n 'core/theme': _theme2.default\n};\n\nfunction expandConfig(container, userConfig) {\n userConfig = (0, _extend2.default)(true, {\n container: container,\n modules: {\n clipboard: true,\n keyboard: true,\n history: true\n }\n }, userConfig);\n if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n userConfig.theme = _theme2.default;\n } else {\n userConfig.theme = Quill.import('themes/' + userConfig.theme);\n if (userConfig.theme == null) {\n throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');\n }\n }\n var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);\n [themeConfig, userConfig].forEach(function (config) {\n config.modules = config.modules || {};\n Object.keys(config.modules).forEach(function (module) {\n if (config.modules[module] === true) {\n config.modules[module] = {};\n }\n });\n });\n var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n var moduleConfig = moduleNames.reduce(function (config, name) {\n var moduleClass = Quill.import('modules/' + name);\n if (moduleClass == null) {\n debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');\n } else {\n config[name] = moduleClass.DEFAULTS || {};\n }\n return config;\n }, {});\n // Special case toolbar shorthand\n if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {\n userConfig.modules.toolbar = {\n container: userConfig.modules.toolbar\n };\n }\n userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {\n if (typeof userConfig[key] === 'string') {\n userConfig[key] = document.querySelector(userConfig[key]);\n }\n });\n userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {\n if (userConfig.modules[name]) {\n config[name] = userConfig.modules[name];\n }\n return config;\n }, {});\n return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {\n return new _quillDelta2.default();\n }\n var range = index == null ? null : this.getSelection();\n var oldDelta = this.editor.delta;\n var change = modifier();\n if (range != null) {\n if (index === true) index = range.index;\n if (shift == null) {\n range = shiftRange(range, change, source);\n } else if (shift !== 0) {\n range = shiftRange(range, index, shift, source);\n }\n this.setSelection(range, _emitter4.default.sources.SILENT);\n }\n if (change.length() > 0) {\n var _emitter;\n\n var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];\n (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n if (source !== _emitter4.default.sources.SILENT) {\n var _emitter2;\n\n (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n }\n }\n return change;\n}\n\nfunction overload(index, length, name, value, source) {\n var formats = {};\n if (typeof index.index === 'number' && typeof index.length === 'number') {\n // Allow for throwaway end (used by insertText/insertEmbed)\n if (typeof length !== 'number') {\n source = value, value = name, name = length, length = index.length, index = index.index;\n } else {\n length = index.length, index = index.index;\n }\n } else if (typeof length !== 'number') {\n source = value, value = name, name = length, length = 0;\n }\n // Handle format being object, two format name/value strings or excluded\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n formats = name;\n source = value;\n } else if (typeof name === 'string') {\n if (value != null) {\n formats[name] = value;\n } else {\n source = name;\n }\n }\n // Handle optional source\n source = source || _emitter4.default.sources.API;\n return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n if (range == null) return null;\n var start = void 0,\n end = void 0;\n if (index instanceof _quillDelta2.default) {\n var _map = [range.index, range.index + range.length].map(function (pos) {\n return index.transformPosition(pos, source !== _emitter4.default.sources.USER);\n });\n\n var _map2 = _slicedToArray(_map, 2);\n\n start = _map2[0];\n end = _map2[1];\n } else {\n var _map3 = [range.index, range.index + range.length].map(function (pos) {\n if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;\n if (length >= 0) {\n return pos + length;\n } else {\n return Math.max(index, pos + length);\n }\n });\n\n var _map4 = _slicedToArray(_map3, 2);\n\n start = _map4[0];\n end = _map4[1];\n }\n return new _selection.Range(start, end - start);\n}\n\nexports.expandConfig = expandConfig;\nexports.overload = overload;\nexports.default = Quill;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Inline = function (_Parchment$Inline) {\n _inherits(Inline, _Parchment$Inline);\n\n function Inline() {\n _classCallCheck(this, Inline);\n\n return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));\n }\n\n _createClass(Inline, [{\n key: 'formatAt',\n value: function formatAt(index, length, name, value) {\n if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {\n var blot = this.isolate(index, length);\n if (value) {\n blot.wrap(name, value);\n }\n } else {\n _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);\n }\n }\n }, {\n key: 'optimize',\n value: function optimize(context) {\n _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);\n if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n var parent = this.parent.isolate(this.offset(), this.length());\n this.moveChildren(parent);\n parent.wrap(this);\n }\n }\n }], [{\n key: 'compare',\n value: function compare(self, other) {\n var selfIndex = Inline.order.indexOf(self);\n var otherIndex = Inline.order.indexOf(other);\n if (selfIndex >= 0 || otherIndex >= 0) {\n return selfIndex - otherIndex;\n } else if (self === other) {\n return 0;\n } else if (self < other) {\n return -1;\n } else {\n return 1;\n }\n }\n }]);\n\n return Inline;\n}(_parchment2.default.Inline);\n\nInline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = ['cursor', 'inline', // Must be lower\n'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher\n];\n\nexports.default = Inline;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TextBlot = function (_Parchment$Text) {\n _inherits(TextBlot, _Parchment$Text);\n\n function TextBlot() {\n _classCallCheck(this, TextBlot);\n\n return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));\n }\n\n return TextBlot;\n}(_parchment2.default.Text);\n\nexports.default = TextBlot;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _eventemitter = __webpack_require__(54);\n\nvar _eventemitter2 = _interopRequireDefault(_eventemitter);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:events');\n\nvar EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function (eventName) {\n document.addEventListener(eventName, function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {\n // TODO use WeakMap\n if (node.__quill && node.__quill.emitter) {\n var _node$__quill$emitter;\n\n (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);\n }\n });\n });\n});\n\nvar Emitter = function (_EventEmitter) {\n _inherits(Emitter, _EventEmitter);\n\n function Emitter() {\n _classCallCheck(this, Emitter);\n\n var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));\n\n _this.listeners = {};\n _this.on('error', debug.error);\n return _this;\n }\n\n _createClass(Emitter, [{\n key: 'emit',\n value: function emit() {\n debug.log.apply(debug, arguments);\n _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);\n }\n }, {\n key: 'handleDOM',\n value: function handleDOM(event) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n (this.listeners[event.type] || []).forEach(function (_ref) {\n var node = _ref.node,\n handler = _ref.handler;\n\n if (event.target === node || node.contains(event.target)) {\n handler.apply(undefined, [event].concat(args));\n }\n });\n }\n }, {\n key: 'listenDOM',\n value: function listenDOM(eventName, node, handler) {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName].push({ node: node, handler: handler });\n }\n }]);\n\n return Emitter;\n}(_eventemitter2.default);\n\nEmitter.events = {\n EDITOR_CHANGE: 'editor-change',\n SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n SCROLL_OPTIMIZE: 'scroll-optimize',\n SCROLL_UPDATE: 'scroll-update',\n SELECTION_CHANGE: 'selection-change',\n TEXT_CHANGE: 'text-change'\n};\nEmitter.sources = {\n API: 'api',\n SILENT: 'silent',\n USER: 'user'\n};\n\nexports.default = Emitter;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Module = function Module(quill) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Module);\n\n this.quill = quill;\n this.options = options;\n};\n\nModule.DEFAULTS = {};\n\nexports.default = Module;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar levels = ['error', 'warn', 'log', 'info'];\nvar level = 'warn';\n\nfunction debug(method) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n var _console;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n (_console = console)[method].apply(_console, args); // eslint-disable-line no-console\n }\n}\n\nfunction namespace(ns) {\n return levels.reduce(function (logger, method) {\n logger[method] = debug.bind(console, method, ns);\n return logger;\n }, {});\n}\n\ndebug.level = namespace.level = function (newLevel) {\n level = newLevel;\n};\n\nexports.default = namespace;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pSlice = Array.prototype.slice;\nvar objectKeys = __webpack_require__(52);\nvar isArguments = __webpack_require__(53);\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar Attributor = /** @class */ (function () {\n function Attributor(attrName, keyName, options) {\n if (options === void 0) { options = {}; }\n this.attrName = attrName;\n this.keyName = keyName;\n var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n if (options.scope != null) {\n // Ignore type bits, force attribute bit\n this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n }\n else {\n this.scope = Registry.Scope.ATTRIBUTE;\n }\n if (options.whitelist != null)\n this.whitelist = options.whitelist;\n }\n Attributor.keys = function (node) {\n return [].map.call(node.attributes, function (item) {\n return item.name;\n });\n };\n Attributor.prototype.add = function (node, value) {\n if (!this.canAdd(node, value))\n return false;\n node.setAttribute(this.keyName, value);\n return true;\n };\n Attributor.prototype.canAdd = function (node, value) {\n var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n if (match == null)\n return false;\n if (this.whitelist == null)\n return true;\n if (typeof value === 'string') {\n return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n }\n else {\n return this.whitelist.indexOf(value) > -1;\n }\n };\n Attributor.prototype.remove = function (node) {\n node.removeAttribute(this.keyName);\n };\n Attributor.prototype.value = function (node) {\n var value = node.getAttribute(this.keyName);\n if (this.canAdd(node, value) && value) {\n return value;\n }\n return '';\n };\n return Attributor;\n}());\nexports.default = Attributor;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.Code = undefined;\n\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Code = function (_Inline) {\n _inherits(Code, _Inline);\n\n function Code() {\n _classCallCheck(this, Code);\n\n return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));\n }\n\n return Code;\n}(_inline2.default);\n\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nvar CodeBlock = function (_Block) {\n _inherits(CodeBlock, _Block);\n\n function CodeBlock() {\n _classCallCheck(this, CodeBlock);\n\n return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));\n }\n\n _createClass(CodeBlock, [{\n key: 'delta',\n value: function delta() {\n var _this3 = this;\n\n var text = this.domNode.textContent;\n if (text.endsWith('\\n')) {\n // Should always be true\n text = text.slice(0, -1);\n }\n return text.split('\\n').reduce(function (delta, frag) {\n return delta.insert(frag).insert('\\n', _this3.formats());\n }, new _quillDelta2.default());\n }\n }, {\n key: 'format',\n value: function format(name, value) {\n if (name === this.statics.blotName && value) return;\n\n var _descendant = this.descendant(_text2.default, this.length() - 1),\n _descendant2 = _slicedToArray(_descendant, 1),\n text = _descendant2[0];\n\n if (text != null) {\n text.deleteAt(text.length() - 1, 1);\n }\n _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);\n }\n }, {\n key: 'formatAt',\n value: function formatAt(index, length, name, value) {\n if (length === 0) return;\n if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {\n return;\n }\n var nextNewline = this.newlineIndex(index);\n if (nextNewline < 0 || nextNewline >= index + length) return;\n var prevNewline = this.newlineIndex(index, true) + 1;\n var isolateLength = nextNewline - prevNewline + 1;\n var blot = this.isolate(prevNewline, isolateLength);\n var next = blot.next;\n blot.format(name, value);\n if (next instanceof CodeBlock) {\n next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n }\n }\n }, {\n key: 'insertAt',\n value: function insertAt(index, value, def) {\n if (def != null) return;\n\n var _descendant3 = this.descendant(_text2.default, index),\n _descendant4 = _slicedToArray(_descendant3, 2),\n text = _descendant4[0],\n offset = _descendant4[1];\n\n text.insertAt(offset, value);\n }\n }, {\n key: 'length',\n value: function length() {\n var length = this.domNode.textContent.length;\n if (!this.domNode.textContent.endsWith('\\n')) {\n return length + 1;\n }\n return length;\n }\n }, {\n key: 'newlineIndex',\n value: function newlineIndex(searchIndex) {\n var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!reverse) {\n var offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n return offset > -1 ? searchIndex + offset : -1;\n } else {\n return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n }\n }\n }, {\n key: 'optimize',\n value: function optimize(context) {\n if (!this.domNode.textContent.endsWith('\\n')) {\n this.appendChild(_parchment2.default.create('text', '\\n'));\n }\n _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);\n var next = this.next;\n if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n next.optimize(context);\n next.moveChildren(this);\n next.remove();\n }\n }\n }, {\n key: 'replace',\n value: function replace(target) {\n _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);\n [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {\n var blot = _parchment2.default.find(node);\n if (blot == null) {\n node.parentNode.removeChild(node);\n } else if (blot instanceof _parchment2.default.Embed) {\n blot.remove();\n } else {\n blot.unwrap();\n }\n });\n }\n }], [{\n key: 'create',\n value: function create(value) {\n var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);\n domNode.setAttribute('spellcheck', false);\n return domNode;\n }\n }, {\n key: 'formats',\n value: function formats() {\n return true;\n }\n }]);\n\n return CodeBlock;\n}(_block2.default);\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = ' ';\n\nexports.Code = Code;\nexports.default = CodeBlock;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _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\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ASCII = /^[ -~]*$/;\n\nvar Editor = function () {\n function Editor(scroll) {\n _classCallCheck(this, Editor);\n\n this.scroll = scroll;\n this.delta = this.getDelta();\n }\n\n _createClass(Editor, [{\n key: 'applyDelta',\n value: function applyDelta(delta) {\n var _this = this;\n\n var consumeNextNewline = false;\n this.scroll.update();\n var scrollLength = this.scroll.length();\n this.scroll.batchStart();\n delta = normalizeDelta(delta);\n delta.reduce(function (index, op) {\n var length = op.retain || op.delete || op.insert.length || 1;\n var attributes = op.attributes || {};\n if (op.insert != null) {\n if (typeof op.insert === 'string') {\n var text = op.insert;\n if (text.endsWith('\\n') && consumeNextNewline) {\n consumeNextNewline = false;\n text = text.slice(0, -1);\n }\n if (index >= scrollLength && !text.endsWith('\\n')) {\n consumeNextNewline = true;\n }\n _this.scroll.insertAt(index, text);\n\n var _scroll$line = _this.scroll.line(index),\n _scroll$line2 = _slicedToArray(_scroll$line, 2),\n line = _scroll$line2[0],\n offset = _scroll$line2[1];\n\n var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));\n if (line instanceof _block2.default) {\n var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),\n _line$descendant2 = _slicedToArray(_line$descendant, 1),\n leaf = _line$descendant2[0];\n\n formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));\n }\n attributes = _op2.default.attributes.diff(formats, attributes) || {};\n } else if (_typeof(op.insert) === 'object') {\n var key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n _this.scroll.insertAt(index, key, op.insert[key]);\n }\n scrollLength += length;\n }\n Object.keys(attributes).forEach(function (name) {\n _this.scroll.formatAt(index, length, name, attributes[name]);\n });\n return index + length;\n }, 0);\n delta.reduce(function (index, op) {\n if (typeof op.delete === 'number') {\n _this.scroll.deleteAt(index, op.delete);\n return index;\n }\n return index + (op.retain || op.insert.length || 1);\n }, 0);\n this.scroll.batchEnd();\n return this.update(delta);\n }\n }, {\n key: 'deleteText',\n value: function deleteText(index, length) {\n this.scroll.deleteAt(index, length);\n return this.update(new _quillDelta2.default().retain(index).delete(length));\n }\n }, {\n key: 'formatLine',\n value: function formatLine(index, length) {\n var _this2 = this;\n\n var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n this.scroll.update();\n Object.keys(formats).forEach(function (format) {\n if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;\n var lines = _this2.scroll.lines(index, Math.max(length, 1));\n var lengthRemaining = length;\n lines.forEach(function (line) {\n var lineLength = line.length();\n if (!(line instanceof _code2.default)) {\n line.format(format, formats[format]);\n } else {\n var codeIndex = index - line.offset(_this2.scroll);\n var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n line.formatAt(codeIndex, codeLength, format, formats[format]);\n }\n lengthRemaining -= lineLength;\n });\n });\n this.scroll.optimize();\n return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n }\n }, {\n key: 'formatText',\n value: function formatText(index, length) {\n var _this3 = this;\n\n var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n Object.keys(formats).forEach(function (format) {\n _this3.scroll.formatAt(index, length, format, formats[format]);\n });\n return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n }\n }, {\n key: 'getContents',\n value: function getContents(index, length) {\n return this.delta.slice(index, index + length);\n }\n }, {\n key: 'getDelta',\n value: function getDelta() {\n return this.scroll.lines().reduce(function (delta, line) {\n return delta.concat(line.delta());\n }, new _quillDelta2.default());\n }\n }, {\n key: 'getFormat',\n value: function getFormat(index) {\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var lines = [],\n leaves = [];\n if (length === 0) {\n this.scroll.path(index).forEach(function (path) {\n var _path = _slicedToArray(path, 1),\n blot = _path[0];\n\n if (blot instanceof _block2.default) {\n lines.push(blot);\n } else if (blot instanceof _parchment2.default.Leaf) {\n leaves.push(blot);\n }\n });\n } else {\n lines = this.scroll.lines(index, length);\n leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);\n }\n var formatsArr = [lines, leaves].map(function (blots) {\n if (blots.length === 0) return {};\n var formats = (0, _block.bubbleFormats)(blots.shift());\n while (Object.keys(formats).length > 0) {\n var blot = blots.shift();\n if (blot == null) return formats;\n formats = combineFormats((0, _block.bubbleFormats)(blot), formats);\n }\n return formats;\n });\n return _extend2.default.apply(_extend2.default, formatsArr);\n }\n }, {\n key: 'getText',\n value: function getText(index, length) {\n return this.getContents(index, length).filter(function (op) {\n return typeof op.insert === 'string';\n }).map(function (op) {\n return op.insert;\n }).join('');\n }\n }, {\n key: 'insertEmbed',\n value: function insertEmbed(index, embed, value) {\n this.scroll.insertAt(index, embed, value);\n return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));\n }\n }, {\n key: 'insertText',\n value: function insertText(index, text) {\n var _this4 = this;\n\n var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n this.scroll.insertAt(index, text);\n Object.keys(formats).forEach(function (format) {\n _this4.scroll.formatAt(index, text.length, format, formats[format]);\n });\n return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));\n }\n }, {\n key: 'isBlank',\n value: function isBlank() {\n if (this.scroll.children.length == 0) return true;\n if (this.scroll.children.length > 1) return false;\n var block = this.scroll.children.head;\n if (block.statics.blotName !== _block2.default.blotName) return false;\n if (block.children.length > 1) return false;\n return block.children.head instanceof _break2.default;\n }\n }, {\n key: 'removeFormat',\n value: function removeFormat(index, length) {\n var text = this.getText(index, length);\n\n var _scroll$line3 = this.scroll.line(index + length),\n _scroll$line4 = _slicedToArray(_scroll$line3, 2),\n line = _scroll$line4[0],\n offset = _scroll$line4[1];\n\n var suffixLength = 0,\n suffix = new _quillDelta2.default();\n if (line != null) {\n if (!(line instanceof _code2.default)) {\n suffixLength = line.length() - offset;\n } else {\n suffixLength = line.newlineIndex(offset) - offset + 1;\n }\n suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n }\n var contents = this.getContents(index, length + suffixLength);\n var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));\n var delta = new _quillDelta2.default().retain(index).concat(diff);\n return this.applyDelta(delta);\n }\n }, {\n key: 'update',\n value: function update(change) {\n var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n var oldDelta = this.delta;\n if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {\n // Optimization for character changes\n var textBlot = _parchment2.default.find(mutations[0].target);\n var formats = (0, _block.bubbleFormats)(textBlot);\n var index = textBlot.offset(this.scroll);\n var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');\n var oldText = new _quillDelta2.default().insert(oldValue);\n var newText = new _quillDelta2.default().insert(textBlot.value());\n var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));\n change = diffDelta.reduce(function (delta, op) {\n if (op.insert) {\n return delta.insert(op.insert, formats);\n } else {\n return delta.push(op);\n }\n }, new _quillDelta2.default());\n this.delta = oldDelta.compose(change);\n } else {\n this.delta = this.getDelta();\n if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {\n change = oldDelta.diff(this.delta, cursorIndex);\n }\n }\n return change;\n }\n }]);\n\n return Editor;\n}();\n\nfunction combineFormats(formats, combined) {\n return Object.keys(combined).reduce(function (merged, name) {\n if (formats[name] == null) return merged;\n if (combined[name] === formats[name]) {\n merged[name] = combined[name];\n } else if (Array.isArray(combined[name])) {\n if (combined[name].indexOf(formats[name]) < 0) {\n merged[name] = combined[name].concat([formats[name]]);\n }\n } else {\n merged[name] = [combined[name], formats[name]];\n }\n return merged;\n }, {});\n}\n\nfunction normalizeDelta(delta) {\n return delta.reduce(function (delta, op) {\n if (op.insert === 1) {\n var attributes = (0, _clone2.default)(op.attributes);\n delete attributes['image'];\n return delta.insert({ image: op.attributes.image }, attributes);\n }\n if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n op = (0, _clone2.default)(op);\n if (op.attributes.list) {\n op.attributes.list = 'ordered';\n } else {\n op.attributes.list = 'bullet';\n delete op.attributes.bullet;\n }\n }\n if (typeof op.insert === 'string') {\n var text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n return delta.insert(text, op.attributes);\n }\n return delta.push(op);\n }, new _quillDelta2.default());\n}\n\nexports.default = Editor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.Range = undefined;\n\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill:selection');\n\nvar Range = function Range(index) {\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n _classCallCheck(this, Range);\n\n this.index = index;\n this.length = length;\n};\n\nvar Selection = function () {\n function Selection(scroll, emitter) {\n var _this = this;\n\n _classCallCheck(this, Selection);\n\n this.emitter = emitter;\n this.scroll = scroll;\n this.composing = false;\n this.mouseDown = false;\n this.root = this.scroll.domNode;\n this.cursor = _parchment2.default.create('cursor', this);\n // savedRange is last non-null range\n this.lastRange = this.savedRange = new Range(0, 0);\n this.handleComposition();\n this.handleDragging();\n this.emitter.listenDOM('selectionchange', document, function () {\n if (!_this.mouseDown) {\n setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);\n }\n });\n this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {\n if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {\n _this.update(_emitter4.default.sources.SILENT);\n }\n });\n this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {\n if (!_this.hasFocus()) return;\n var native = _this.getNativeRange();\n if (native == null) return;\n if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle\n // TODO unclear if this has negative side effects\n _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {\n try {\n _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n } catch (ignored) {}\n });\n });\n this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {\n if (context.range) {\n var _context$range = context.range,\n startNode = _context$range.startNode,\n startOffset = _context$range.startOffset,\n endNode = _context$range.endNode,\n endOffset = _context$range.endOffset;\n\n _this.setNativeRange(startNode, startOffset, endNode, endOffset);\n }\n });\n this.update(_emitter4.default.sources.SILENT);\n }\n\n _createClass(Selection, [{\n key: 'handleComposition',\n value: function handleComposition() {\n var _this2 = this;\n\n this.root.addEventListener('compositionstart', function () {\n _this2.composing = true;\n });\n this.root.addEventListener('compositionend', function () {\n _this2.composing = false;\n if (_this2.cursor.parent) {\n var range = _this2.cursor.restore();\n if (!range) return;\n setTimeout(function () {\n _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n }, 1);\n }\n });\n }\n }, {\n key: 'handleDragging',\n value: function handleDragging() {\n var _this3 = this;\n\n this.emitter.listenDOM('mousedown', document.body, function () {\n _this3.mouseDown = true;\n });\n this.emitter.listenDOM('mouseup', document.body, function () {\n _this3.mouseDown = false;\n _this3.update(_emitter4.default.sources.USER);\n });\n }\n }, {\n key: 'focus',\n value: function focus() {\n if (this.hasFocus()) return;\n this.root.focus();\n this.setRange(this.savedRange);\n }\n }, {\n key: 'format',\n value: function format(_format, value) {\n if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;\n this.scroll.update();\n var nativeRange = this.getNativeRange();\n if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;\n if (nativeRange.start.node !== this.cursor.textNode) {\n var blot = _parchment2.default.find(nativeRange.start.node, false);\n if (blot == null) return;\n // TODO Give blot ability to not split\n if (blot instanceof _parchment2.default.Leaf) {\n var after = blot.split(nativeRange.start.offset);\n blot.parent.insertBefore(this.cursor, after);\n } else {\n blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n }\n this.cursor.attach();\n }\n this.cursor.format(_format, value);\n this.scroll.optimize();\n this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n this.update();\n }\n }, {\n key: 'getBounds',\n value: function getBounds(index) {\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var scrollLength = this.scroll.length();\n index = Math.min(index, scrollLength - 1);\n length = Math.min(index + length, scrollLength - 1) - index;\n var node = void 0,\n _scroll$leaf = this.scroll.leaf(index),\n _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),\n leaf = _scroll$leaf2[0],\n offset = _scroll$leaf2[1];\n if (leaf == null) return null;\n\n var _leaf$position = leaf.position(offset, true);\n\n var _leaf$position2 = _slicedToArray(_leaf$position, 2);\n\n node = _leaf$position2[0];\n offset = _leaf$position2[1];\n\n var range = document.createRange();\n if (length > 0) {\n range.setStart(node, offset);\n\n var _scroll$leaf3 = this.scroll.leaf(index + length);\n\n var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);\n\n leaf = _scroll$leaf4[0];\n offset = _scroll$leaf4[1];\n\n if (leaf == null) return null;\n\n var _leaf$position3 = leaf.position(offset, true);\n\n var _leaf$position4 = _slicedToArray(_leaf$position3, 2);\n\n node = _leaf$position4[0];\n offset = _leaf$position4[1];\n\n range.setEnd(node, offset);\n return range.getBoundingClientRect();\n } else {\n var side = 'left';\n var rect = void 0;\n if (node instanceof Text) {\n if (offset < node.data.length) {\n range.setStart(node, offset);\n range.setEnd(node, offset + 1);\n } else {\n range.setStart(node, offset - 1);\n range.setEnd(node, offset);\n side = 'right';\n }\n rect = range.getBoundingClientRect();\n } else {\n rect = leaf.domNode.getBoundingClientRect();\n if (offset > 0) side = 'right';\n }\n return {\n bottom: rect.top + rect.height,\n height: rect.height,\n left: rect[side],\n right: rect[side],\n top: rect.top,\n width: 0\n };\n }\n }\n }, {\n key: 'getNativeRange',\n value: function getNativeRange() {\n var selection = document.getSelection();\n if (selection == null || selection.rangeCount <= 0) return null;\n var nativeRange = selection.getRangeAt(0);\n if (nativeRange == null) return null;\n var range = this.normalizeNative(nativeRange);\n debug.info('getNativeRange', range);\n return range;\n }\n }, {\n key: 'getRange',\n value: function getRange() {\n var normalized = this.getNativeRange();\n if (normalized == null) return [null, null];\n var range = this.normalizedToRange(normalized);\n return [range, normalized];\n }\n }, {\n key: 'hasFocus',\n value: function hasFocus() {\n return document.activeElement === this.root;\n }\n }, {\n key: 'normalizedToRange',\n value: function normalizedToRange(range) {\n var _this4 = this;\n\n var positions = [[range.start.node, range.start.offset]];\n if (!range.native.collapsed) {\n positions.push([range.end.node, range.end.offset]);\n }\n var indexes = positions.map(function (position) {\n var _position = _slicedToArray(position, 2),\n node = _position[0],\n offset = _position[1];\n\n var blot = _parchment2.default.find(node, true);\n var index = blot.offset(_this4.scroll);\n if (offset === 0) {\n return index;\n } else if (blot instanceof _parchment2.default.Container) {\n return index + blot.length();\n } else {\n return index + blot.index(node, offset);\n }\n });\n var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);\n var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));\n return new Range(start, end - start);\n }\n }, {\n key: 'normalizeNative',\n value: function normalizeNative(nativeRange) {\n if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n return null;\n }\n var range = {\n start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n native: nativeRange\n };\n [range.start, range.end].forEach(function (position) {\n var node = position.node,\n offset = position.offset;\n while (!(node instanceof Text) && node.childNodes.length > 0) {\n if (node.childNodes.length > offset) {\n node = node.childNodes[offset];\n offset = 0;\n } else if (node.childNodes.length === offset) {\n node = node.lastChild;\n offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n } else {\n break;\n }\n }\n position.node = node, position.offset = offset;\n });\n return range;\n }\n }, {\n key: 'rangeToNative',\n value: function rangeToNative(range) {\n var _this5 = this;\n\n var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n var args = [];\n var scrollLength = this.scroll.length();\n indexes.forEach(function (index, i) {\n index = Math.min(scrollLength - 1, index);\n var node = void 0,\n _scroll$leaf5 = _this5.scroll.leaf(index),\n _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),\n leaf = _scroll$leaf6[0],\n offset = _scroll$leaf6[1];\n var _leaf$position5 = leaf.position(offset, i !== 0);\n\n var _leaf$position6 = _slicedToArray(_leaf$position5, 2);\n\n node = _leaf$position6[0];\n offset = _leaf$position6[1];\n\n args.push(node, offset);\n });\n if (args.length < 2) {\n args = args.concat(args);\n }\n return args;\n }\n }, {\n key: 'scrollIntoView',\n value: function scrollIntoView(scrollingContainer) {\n var range = this.lastRange;\n if (range == null) return;\n var bounds = this.getBounds(range.index, range.length);\n if (bounds == null) return;\n var limit = this.scroll.length() - 1;\n\n var _scroll$line = this.scroll.line(Math.min(range.index, limit)),\n _scroll$line2 = _slicedToArray(_scroll$line, 1),\n first = _scroll$line2[0];\n\n var last = first;\n if (range.length > 0) {\n var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));\n\n var _scroll$line4 = _slicedToArray(_scroll$line3, 1);\n\n last = _scroll$line4[0];\n }\n if (first == null || last == null) return;\n var scrollBounds = scrollingContainer.getBoundingClientRect();\n if (bounds.top < scrollBounds.top) {\n scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;\n } else if (bounds.bottom > scrollBounds.bottom) {\n scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;\n }\n }\n }, {\n key: 'setNativeRange',\n value: function setNativeRange(startNode, startOffset) {\n var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n return;\n }\n var selection = document.getSelection();\n if (selection == null) return;\n if (startNode != null) {\n if (!this.hasFocus()) this.root.focus();\n var native = (this.getNativeRange() || {}).native;\n if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n\n if (startNode.tagName == \"BR\") {\n startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n startNode = startNode.parentNode;\n }\n if (endNode.tagName == \"BR\") {\n endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n endNode = endNode.parentNode;\n }\n var range = document.createRange();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n } else {\n selection.removeAllRanges();\n this.root.blur();\n document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n }\n }\n }, {\n key: 'setRange',\n value: function setRange(range) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n if (typeof force === 'string') {\n source = force;\n force = false;\n }\n debug.info('setRange', range);\n if (range != null) {\n var args = this.rangeToNative(range);\n this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));\n } else {\n this.setNativeRange(null);\n }\n this.update(source);\n }\n }, {\n key: 'update',\n value: function update() {\n var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n var oldRange = this.lastRange;\n\n var _getRange = this.getRange(),\n _getRange2 = _slicedToArray(_getRange, 2),\n lastRange = _getRange2[0],\n nativeRange = _getRange2[1];\n\n this.lastRange = lastRange;\n if (this.lastRange != null) {\n this.savedRange = this.lastRange;\n }\n if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {\n var _emitter;\n\n if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n this.cursor.restore();\n }\n var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];\n (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n if (source !== _emitter4.default.sources.SILENT) {\n var _emitter2;\n\n (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n }\n }\n }\n }]);\n\n return Selection;\n}();\n\nfunction contains(parent, descendant) {\n try {\n // Firefox inserts inaccessible nodes around video elements\n descendant.parentNode;\n } catch (e) {\n return false;\n }\n // IE11 has bug with Text nodes\n // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n if (descendant instanceof Text) {\n descendant = descendant.parentNode;\n }\n return parent.contains(descendant);\n}\n\nexports.Range = Range;\nexports.default = Selection;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Break = function (_Parchment$Embed) {\n _inherits(Break, _Parchment$Embed);\n\n function Break() {\n _classCallCheck(this, Break);\n\n return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));\n }\n\n _createClass(Break, [{\n key: 'insertInto',\n value: function insertInto(parent, ref) {\n if (parent.children.length === 0) {\n _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);\n } else {\n this.remove();\n }\n }\n }, {\n key: 'length',\n value: function length() {\n return 0;\n }\n }, {\n key: 'value',\n value: function value() {\n return '';\n }\n }], [{\n key: 'value',\n value: function value() {\n return undefined;\n }\n }]);\n\n return Break;\n}(_parchment2.default.Embed);\n\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexports.default = Break;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = __webpack_require__(44);\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar ContainerBlot = /** @class */ (function (_super) {\n __extends(ContainerBlot, _super);\n function ContainerBlot(domNode) {\n var _this = _super.call(this, domNode) || this;\n _this.build();\n return _this;\n }\n ContainerBlot.prototype.appendChild = function (other) {\n this.insertBefore(other);\n };\n ContainerBlot.prototype.attach = function () {\n _super.prototype.attach.call(this);\n this.children.forEach(function (child) {\n child.attach();\n });\n };\n ContainerBlot.prototype.build = function () {\n var _this = this;\n this.children = new linked_list_1.default();\n // Need to be reversed for if DOM nodes already in order\n [].slice\n .call(this.domNode.childNodes)\n .reverse()\n .forEach(function (node) {\n try {\n var child = makeBlot(node);\n _this.insertBefore(child, _this.children.head || undefined);\n }\n catch (err) {\n if (err instanceof Registry.ParchmentError)\n return;\n else\n throw err;\n }\n });\n };\n ContainerBlot.prototype.deleteAt = function (index, length) {\n if (index === 0 && length === this.length()) {\n return this.remove();\n }\n this.children.forEachAt(index, length, function (child, offset, length) {\n child.deleteAt(offset, length);\n });\n };\n ContainerBlot.prototype.descendant = function (criteria, index) {\n var _a = this.children.find(index), child = _a[0], offset = _a[1];\n if ((criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)) {\n return [child, offset];\n }\n else if (child instanceof ContainerBlot) {\n return child.descendant(criteria, offset);\n }\n else {\n return [null, -1];\n }\n };\n ContainerBlot.prototype.descendants = function (criteria, index, length) {\n if (index === void 0) { index = 0; }\n if (length === void 0) { length = Number.MAX_VALUE; }\n var descendants = [];\n var lengthLeft = length;\n this.children.forEachAt(index, length, function (child, index, length) {\n if ((criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)) {\n descendants.push(child);\n }\n if (child instanceof ContainerBlot) {\n descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n }\n lengthLeft -= length;\n });\n return descendants;\n };\n ContainerBlot.prototype.detach = function () {\n this.children.forEach(function (child) {\n child.detach();\n });\n _super.prototype.detach.call(this);\n };\n ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n this.children.forEachAt(index, length, function (child, offset, length) {\n child.formatAt(offset, length, name, value);\n });\n };\n ContainerBlot.prototype.insertAt = function (index, value, def) {\n var _a = this.children.find(index), child = _a[0], offset = _a[1];\n if (child) {\n child.insertAt(offset, value, def);\n }\n else {\n var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n this.appendChild(blot);\n }\n };\n ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n if (this.statics.allowedChildren != null &&\n !this.statics.allowedChildren.some(function (child) {\n return childBlot instanceof child;\n })) {\n throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n }\n childBlot.insertInto(this, refBlot);\n };\n ContainerBlot.prototype.length = function () {\n return this.children.reduce(function (memo, child) {\n return memo + child.length();\n }, 0);\n };\n ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n this.children.forEach(function (child) {\n targetParent.insertBefore(child, refNode);\n });\n };\n ContainerBlot.prototype.optimize = function (context) {\n _super.prototype.optimize.call(this, context);\n if (this.children.length === 0) {\n if (this.statics.defaultChild != null) {\n var child = Registry.create(this.statics.defaultChild);\n this.appendChild(child);\n child.optimize(context);\n }\n else {\n this.remove();\n }\n }\n };\n ContainerBlot.prototype.path = function (index, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n var position = [[this, index]];\n if (child instanceof ContainerBlot) {\n return position.concat(child.path(offset, inclusive));\n }\n else if (child != null) {\n position.push([child, offset]);\n }\n return position;\n };\n ContainerBlot.prototype.removeChild = function (child) {\n this.children.remove(child);\n };\n ContainerBlot.prototype.replace = function (target) {\n if (target instanceof ContainerBlot) {\n target.moveChildren(this);\n }\n _super.prototype.replace.call(this, target);\n };\n ContainerBlot.prototype.split = function (index, force) {\n if (force === void 0) { force = false; }\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n var after = this.clone();\n this.parent.insertBefore(after, this.next);\n this.children.forEachAt(index, this.length(), function (child, offset, length) {\n child = child.split(offset, force);\n after.appendChild(child);\n });\n return after;\n };\n ContainerBlot.prototype.unwrap = function () {\n this.moveChildren(this.parent, this.next);\n this.remove();\n };\n ContainerBlot.prototype.update = function (mutations, context) {\n var _this = this;\n var addedNodes = [];\n var removedNodes = [];\n mutations.forEach(function (mutation) {\n if (mutation.target === _this.domNode && mutation.type === 'childList') {\n addedNodes.push.apply(addedNodes, mutation.addedNodes);\n removedNodes.push.apply(removedNodes, mutation.removedNodes);\n }\n });\n removedNodes.forEach(function (node) {\n // Check node has actually been removed\n // One exception is Chrome does not immediately remove IFRAMEs\n // from DOM but MutationRecord is correct in its reported removal\n if (node.parentNode != null &&\n // @ts-ignore\n node.tagName !== 'IFRAME' &&\n document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return;\n }\n var blot = Registry.find(node);\n if (blot == null)\n return;\n if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n blot.detach();\n }\n });\n addedNodes\n .filter(function (node) {\n return node.parentNode == _this.domNode;\n })\n .sort(function (a, b) {\n if (a === b)\n return 0;\n if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n return 1;\n }\n return -1;\n })\n .forEach(function (node) {\n var refBlot = null;\n if (node.nextSibling != null) {\n refBlot = Registry.find(node.nextSibling);\n }\n var blot = makeBlot(node);\n if (blot.next != refBlot || blot.next == null) {\n if (blot.parent != null) {\n blot.parent.removeChild(_this);\n }\n _this.insertBefore(blot, refBlot || undefined);\n }\n });\n };\n return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n var blot = Registry.find(node);\n if (blot == null) {\n try {\n blot = Registry.create(node);\n }\n catch (e) {\n blot = Registry.create(Registry.Scope.INLINE);\n [].slice.call(node.childNodes).forEach(function (child) {\n // @ts-ignore\n blot.domNode.appendChild(child);\n });\n if (node.parentNode) {\n node.parentNode.replaceChild(blot.domNode, node);\n }\n blot.attach();\n }\n }\n return blot;\n}\nexports.default = ContainerBlot;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar store_1 = __webpack_require__(31);\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar FormatBlot = /** @class */ (function (_super) {\n __extends(FormatBlot, _super);\n function FormatBlot(domNode) {\n var _this = _super.call(this, domNode) || this;\n _this.attributes = new store_1.default(_this.domNode);\n return _this;\n }\n FormatBlot.formats = function (domNode) {\n if (typeof this.tagName === 'string') {\n return true;\n }\n else if (Array.isArray(this.tagName)) {\n return domNode.tagName.toLowerCase();\n }\n return undefined;\n };\n FormatBlot.prototype.format = function (name, value) {\n var format = Registry.query(name);\n if (format instanceof attributor_1.default) {\n this.attributes.attribute(format, value);\n }\n else if (value) {\n if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n this.replaceWith(name, value);\n }\n }\n };\n FormatBlot.prototype.formats = function () {\n var formats = this.attributes.values();\n var format = this.statics.formats(this.domNode);\n if (format != null) {\n formats[this.statics.blotName] = format;\n }\n return formats;\n };\n FormatBlot.prototype.replaceWith = function (name, value) {\n var replacement = _super.prototype.replaceWith.call(this, name, value);\n this.attributes.copy(replacement);\n return replacement;\n };\n FormatBlot.prototype.update = function (mutations, context) {\n var _this = this;\n _super.prototype.update.call(this, mutations, context);\n if (mutations.some(function (mutation) {\n return mutation.target === _this.domNode && mutation.type === 'attributes';\n })) {\n this.attributes.build();\n }\n };\n FormatBlot.prototype.wrap = function (name, value) {\n var wrapper = _super.prototype.wrap.call(this, name, value);\n if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n this.attributes.move(wrapper);\n }\n return wrapper;\n };\n return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar LeafBlot = /** @class */ (function (_super) {\n __extends(LeafBlot, _super);\n function LeafBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n LeafBlot.value = function (domNode) {\n return true;\n };\n LeafBlot.prototype.index = function (node, offset) {\n if (this.domNode === node ||\n this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return Math.min(offset, 1);\n }\n return -1;\n };\n LeafBlot.prototype.position = function (index, inclusive) {\n var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n if (index > 0)\n offset += 1;\n return [this.parent.domNode, offset];\n };\n LeafBlot.prototype.value = function () {\n var _a;\n return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n };\n LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\n\n\nvar lib = {\n attributes: {\n compose: function (a, b, keepNull) {\n if (typeof a !== 'object') a = {};\n if (typeof b !== 'object') b = {};\n var attributes = extend(true, {}, b);\n if (!keepNull) {\n attributes = Object.keys(attributes).reduce(function (copy, key) {\n if (attributes[key] != null) {\n copy[key] = attributes[key];\n }\n return copy;\n }, {});\n }\n for (var key in a) {\n if (a[key] !== undefined && b[key] === undefined) {\n attributes[key] = a[key];\n }\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n },\n\n diff: function(a, b) {\n if (typeof a !== 'object') a = {};\n if (typeof b !== 'object') b = {};\n var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n if (!equal(a[key], b[key])) {\n attributes[key] = b[key] === undefined ? null : b[key];\n }\n return attributes;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n },\n\n transform: function (a, b, priority) {\n if (typeof a !== 'object') return b;\n if (typeof b !== 'object') return undefined;\n if (!priority) return b; // b simply overwrites us without priority\n var attributes = Object.keys(b).reduce(function (attributes, key) {\n if (a[key] === undefined) attributes[key] = b[key]; // null is a valid value\n return attributes;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n },\n\n iterator: function (ops) {\n return new Iterator(ops);\n },\n\n length: function (op) {\n if (typeof op['delete'] === 'number') {\n return op['delete'];\n } else if (typeof op.retain === 'number') {\n return op.retain;\n } else {\n return typeof op.insert === 'string' ? op.insert.length : 1;\n }\n }\n};\n\n\nfunction Iterator(ops) {\n this.ops = ops;\n this.index = 0;\n this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n if (!length) length = Infinity;\n var nextOp = this.ops[this.index];\n if (nextOp) {\n var offset = this.offset;\n var opLength = lib.length(nextOp)\n if (length >= opLength - offset) {\n length = opLength - offset;\n this.index += 1;\n this.offset = 0;\n } else {\n this.offset += length;\n }\n if (typeof nextOp['delete'] === 'number') {\n return { 'delete': length };\n } else {\n var retOp = {};\n if (nextOp.attributes) {\n retOp.attributes = nextOp.attributes;\n }\n if (typeof nextOp.retain === 'number') {\n retOp.retain = length;\n } else if (typeof nextOp.insert === 'string') {\n retOp.insert = nextOp.insert.substr(offset, length);\n } else {\n // offset should === 0, length should === 1\n retOp.insert = nextOp.insert;\n }\n return retOp;\n }\n } else {\n return { retain: Infinity };\n }\n};\n\nIterator.prototype.peek = function () {\n return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n if (this.ops[this.index]) {\n // Should never return 0 if our index is being managed correctly\n return lib.length(this.ops[this.index]) - this.offset;\n } else {\n return Infinity;\n }\n};\n\nIterator.prototype.peekType = function () {\n if (this.ops[this.index]) {\n if (typeof this.ops[this.index]['delete'] === 'number') {\n return 'delete';\n } else if (typeof this.ops[this.index].retain === 'number') {\n return 'retain';\n } else {\n return 'insert';\n }\n }\n return 'retain';\n};\n\nIterator.prototype.rest = function () {\n if (!this.hasNext()) {\n return [];\n } else if (this.offset === 0) {\n return this.ops.slice(this.index);\n } else {\n var offset = this.offset;\n var index = this.index;\n var next = this.next();\n var rest = this.ops.slice(this.index);\n this.offset = offset;\n this.index = index;\n return [next].concat(rest);\n }\n};\n\n\nmodule.exports = lib;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nvar clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction isLine(blot) {\n return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;\n}\n\nvar Scroll = function (_Parchment$Scroll) {\n _inherits(Scroll, _Parchment$Scroll);\n\n function Scroll(domNode, config) {\n _classCallCheck(this, Scroll);\n\n var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));\n\n _this.emitter = config.emitter;\n if (Array.isArray(config.whitelist)) {\n _this.whitelist = config.whitelist.reduce(function (whitelist, format) {\n whitelist[format] = true;\n return whitelist;\n }, {});\n }\n // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n _this.domNode.addEventListener('DOMNodeInserted', function () {});\n _this.optimize();\n _this.enable();\n return _this;\n }\n\n _createClass(Scroll, [{\n key: 'batchStart',\n value: function batchStart() {\n this.batch = true;\n }\n }, {\n key: 'batchEnd',\n value: function batchEnd() {\n this.batch = false;\n this.optimize();\n }\n }, {\n key: 'deleteAt',\n value: function deleteAt(index, length) {\n var _line = this.line(index),\n _line2 = _slicedToArray(_line, 2),\n first = _line2[0],\n offset = _line2[1];\n\n var _line3 = this.line(index + length),\n _line4 = _slicedToArray(_line3, 1),\n last = _line4[0];\n\n _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);\n if (last != null && first !== last && offset > 0) {\n if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {\n this.optimize();\n return;\n }\n if (first instanceof _code2.default) {\n var newlineIndex = first.newlineIndex(first.length(), true);\n if (newlineIndex > -1) {\n first = first.split(newlineIndex + 1);\n if (first === last) {\n this.optimize();\n return;\n }\n }\n } else if (last instanceof _code2.default) {\n var _newlineIndex = last.newlineIndex(0);\n if (_newlineIndex > -1) {\n last.split(_newlineIndex + 1);\n }\n }\n var ref = last.children.head instanceof _break2.default ? null : last.children.head;\n first.moveChildren(last, ref);\n first.remove();\n }\n this.optimize();\n }\n }, {\n key: 'enable',\n value: function enable() {\n var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n this.domNode.setAttribute('contenteditable', enabled);\n }\n }, {\n key: 'formatAt',\n value: function formatAt(index, length, format, value) {\n if (this.whitelist != null && !this.whitelist[format]) return;\n _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);\n this.optimize();\n }\n }, {\n key: 'insertAt',\n value: function insertAt(index, value, def) {\n if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n if (index >= this.length()) {\n if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {\n var blot = _parchment2.default.create(this.statics.defaultChild);\n this.appendChild(blot);\n if (def == null && value.endsWith('\\n')) {\n value = value.slice(0, -1);\n }\n blot.insertAt(0, value, def);\n } else {\n var embed = _parchment2.default.create(value, def);\n this.appendChild(embed);\n }\n } else {\n _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);\n }\n this.optimize();\n }\n }, {\n key: 'insertBefore',\n value: function insertBefore(blot, ref) {\n if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {\n var wrapper = _parchment2.default.create(this.statics.defaultChild);\n wrapper.appendChild(blot);\n blot = wrapper;\n }\n _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);\n }\n }, {\n key: 'leaf',\n value: function leaf(index) {\n return this.path(index).pop() || [null, -1];\n }\n }, {\n key: 'line',\n value: function line(index) {\n if (index === this.length()) {\n return this.line(index - 1);\n }\n return this.descendant(isLine, index);\n }\n }, {\n key: 'lines',\n value: function lines() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n var getLines = function getLines(blot, index, length) {\n var lines = [],\n lengthLeft = length;\n blot.children.forEachAt(index, length, function (child, index, length) {\n if (isLine(child)) {\n lines.push(child);\n } else if (child instanceof _parchment2.default.Container) {\n lines = lines.concat(getLines(child, index, lengthLeft));\n }\n lengthLeft -= length;\n });\n return lines;\n };\n return getLines(this, index, length);\n }\n }, {\n key: 'optimize',\n value: function optimize() {\n var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.batch === true) return;\n _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);\n if (mutations.length > 0) {\n this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);\n }\n }\n }, {\n key: 'path',\n value: function path(index) {\n return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self\n }\n }, {\n key: 'update',\n value: function update(mutations) {\n if (this.batch === true) return;\n var source = _emitter2.default.sources.USER;\n if (typeof mutations === 'string') {\n source = mutations;\n }\n if (!Array.isArray(mutations)) {\n mutations = this.observer.takeRecords();\n }\n if (mutations.length > 0) {\n this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);\n }\n _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy\n if (mutations.length > 0) {\n this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);\n }\n }\n }]);\n\n return Scroll;\n}(_parchment2.default.Scroll);\n\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];\n\nexports.default = Scroll;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SHORTKEY = exports.default = undefined;\n\nvar _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\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:keyboard');\n\nvar SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nvar Keyboard = function (_Module) {\n _inherits(Keyboard, _Module);\n\n _createClass(Keyboard, null, [{\n key: 'match',\n value: function match(evt, binding) {\n binding = normalize(binding);\n if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {\n return !!binding[key] !== evt[key] && binding[key] !== null;\n })) {\n return false;\n }\n return binding.key === (evt.which || evt.keyCode);\n }\n }]);\n\n function Keyboard(quill, options) {\n _classCallCheck(this, Keyboard);\n\n var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));\n\n _this.bindings = {};\n Object.keys(_this.options.bindings).forEach(function (name) {\n if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {\n return;\n }\n if (_this.options.bindings[name]) {\n _this.addBinding(_this.options.bindings[name]);\n }\n });\n _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});\n if (/Firefox/i.test(navigator.userAgent)) {\n // Need to handle delete and backspace for Firefox in the general case #1171\n _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n } else {\n _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n }\n _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);\n _this.listen();\n return _this;\n }\n\n _createClass(Keyboard, [{\n key: 'addBinding',\n value: function addBinding(key) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var binding = normalize(key);\n if (binding == null || binding.key == null) {\n return debug.warn('Attempted to add invalid keyboard binding', binding);\n }\n if (typeof context === 'function') {\n context = { handler: context };\n }\n if (typeof handler === 'function') {\n handler = { handler: handler };\n }\n binding = (0, _extend2.default)(binding, context, handler);\n this.bindings[binding.key] = this.bindings[binding.key] || [];\n this.bindings[binding.key].push(binding);\n }\n }, {\n key: 'listen',\n value: function listen() {\n var _this2 = this;\n\n this.quill.root.addEventListener('keydown', function (evt) {\n if (evt.defaultPrevented) return;\n var which = evt.which || evt.keyCode;\n var bindings = (_this2.bindings[which] || []).filter(function (binding) {\n return Keyboard.match(evt, binding);\n });\n if (bindings.length === 0) return;\n var range = _this2.quill.getSelection();\n if (range == null || !_this2.quill.hasFocus()) return;\n\n var _quill$getLine = _this2.quill.getLine(range.index),\n _quill$getLine2 = _slicedToArray(_quill$getLine, 2),\n line = _quill$getLine2[0],\n offset = _quill$getLine2[1];\n\n var _quill$getLeaf = _this2.quill.getLeaf(range.index),\n _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),\n leafStart = _quill$getLeaf2[0],\n offsetStart = _quill$getLeaf2[1];\n\n var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),\n _ref2 = _slicedToArray(_ref, 2),\n leafEnd = _ref2[0],\n offsetEnd = _ref2[1];\n\n var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';\n var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';\n var curContext = {\n collapsed: range.length === 0,\n empty: range.length === 0 && line.length() <= 1,\n format: _this2.quill.getFormat(range),\n offset: offset,\n prefix: prefixText,\n suffix: suffixText\n };\n var prevented = bindings.some(function (binding) {\n if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n if (binding.empty != null && binding.empty !== curContext.empty) return false;\n if (binding.offset != null && binding.offset !== curContext.offset) return false;\n if (Array.isArray(binding.format)) {\n // any format is present\n if (binding.format.every(function (name) {\n return curContext.format[name] == null;\n })) {\n return false;\n }\n } else if (_typeof(binding.format) === 'object') {\n // all formats must match\n if (!Object.keys(binding.format).every(function (name) {\n if (binding.format[name] === true) return curContext.format[name] != null;\n if (binding.format[name] === false) return curContext.format[name] == null;\n return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);\n })) {\n return false;\n }\n }\n if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n return binding.handler.call(_this2, range, curContext) !== true;\n });\n if (prevented) {\n evt.preventDefault();\n }\n });\n }\n }]);\n\n return Keyboard;\n}(_module2.default);\n\nKeyboard.keys = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESCAPE: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n bindings: {\n 'bold': makeFormatHandler('bold'),\n 'italic': makeFormatHandler('italic'),\n 'underline': makeFormatHandler('underline'),\n 'indent': {\n // highlight tab or tab at beginning of list, indent or blockquote\n key: Keyboard.keys.TAB,\n format: ['blockquote', 'indent', 'list'],\n handler: function handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '+1', _quill2.default.sources.USER);\n }\n },\n 'outdent': {\n key: Keyboard.keys.TAB,\n shiftKey: true,\n format: ['blockquote', 'indent', 'list'],\n // highlight tab or tab at beginning of list, indent or blockquote\n handler: function handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '-1', _quill2.default.sources.USER);\n }\n },\n 'outdent backspace': {\n key: Keyboard.keys.BACKSPACE,\n collapsed: true,\n shiftKey: null,\n metaKey: null,\n ctrlKey: null,\n altKey: null,\n format: ['indent', 'list'],\n offset: 0,\n handler: function handler(range, context) {\n if (context.format.indent != null) {\n this.quill.format('indent', '-1', _quill2.default.sources.USER);\n } else if (context.format.list != null) {\n this.quill.format('list', false, _quill2.default.sources.USER);\n }\n }\n },\n 'indent code-block': makeCodeBlockHandler(true),\n 'outdent code-block': makeCodeBlockHandler(false),\n 'remove tab': {\n key: Keyboard.keys.TAB,\n shiftKey: true,\n collapsed: true,\n prefix: /\\t$/,\n handler: function handler(range) {\n this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);\n }\n },\n 'tab': {\n key: Keyboard.keys.TAB,\n handler: function handler(range) {\n this.quill.history.cutoff();\n var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\\t');\n this.quill.updateContents(delta, _quill2.default.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n }\n },\n 'list empty enter': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: ['list'],\n empty: true,\n handler: function handler(range, context) {\n this.quill.format('list', false, _quill2.default.sources.USER);\n if (context.format.indent) {\n this.quill.format('indent', false, _quill2.default.sources.USER);\n }\n }\n },\n 'checklist enter': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: { list: 'checked' },\n handler: function handler(range) {\n var _quill$getLine3 = this.quill.getLine(range.index),\n _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),\n line = _quill$getLine4[0],\n offset = _quill$getLine4[1];\n\n var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });\n var delta = new _quillDelta2.default().retain(range.index).insert('\\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });\n this.quill.updateContents(delta, _quill2.default.sources.USER);\n this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n this.quill.scrollIntoView();\n }\n },\n 'header enter': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: ['header'],\n suffix: /^$/,\n handler: function handler(range, context) {\n var _quill$getLine5 = this.quill.getLine(range.index),\n _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),\n line = _quill$getLine6[0],\n offset = _quill$getLine6[1];\n\n var delta = new _quillDelta2.default().retain(range.index).insert('\\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });\n this.quill.updateContents(delta, _quill2.default.sources.USER);\n this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n this.quill.scrollIntoView();\n }\n },\n 'list autofill': {\n key: ' ',\n collapsed: true,\n format: { list: false },\n prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n handler: function handler(range, context) {\n var length = context.prefix.length;\n\n var _quill$getLine7 = this.quill.getLine(range.index),\n _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),\n line = _quill$getLine8[0],\n offset = _quill$getLine8[1];\n\n if (offset > length) return true;\n var value = void 0;\n switch (context.prefix.trim()) {\n case '[]':case '[ ]':\n value = 'unchecked';\n break;\n case '[x]':\n value = 'checked';\n break;\n case '-':case '*':\n value = 'bullet';\n break;\n default:\n value = 'ordered';\n }\n this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);\n this.quill.history.cutoff();\n var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });\n this.quill.updateContents(delta, _quill2.default.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);\n }\n },\n 'code exit': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: ['code-block'],\n prefix: /\\n\\n$/,\n suffix: /^\\s+$/,\n handler: function handler(range) {\n var _quill$getLine9 = this.quill.getLine(range.index),\n _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),\n line = _quill$getLine10[0],\n offset = _quill$getLine10[1];\n\n var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);\n this.quill.updateContents(delta, _quill2.default.sources.USER);\n }\n },\n 'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n 'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n 'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n 'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n var _ref3;\n\n var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n return _ref3 = {\n key: key,\n shiftKey: shiftKey,\n altKey: null\n }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {\n var index = range.index;\n if (key === Keyboard.keys.RIGHT) {\n index += range.length + 1;\n }\n\n var _quill$getLeaf3 = this.quill.getLeaf(index),\n _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),\n leaf = _quill$getLeaf4[0];\n\n if (!(leaf instanceof _parchment2.default.Embed)) return true;\n if (key === Keyboard.keys.LEFT) {\n if (shiftKey) {\n this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);\n } else {\n this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);\n }\n } else {\n if (shiftKey) {\n this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);\n } else {\n this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);\n }\n }\n return false;\n }), _ref3;\n}\n\nfunction handleBackspace(range, context) {\n if (range.index === 0 || this.quill.getLength() <= 1) return;\n\n var _quill$getLine11 = this.quill.getLine(range.index),\n _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),\n line = _quill$getLine12[0];\n\n var formats = {};\n if (context.offset === 0) {\n var _quill$getLine13 = this.quill.getLine(range.index - 1),\n _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),\n prev = _quill$getLine14[0];\n\n if (prev != null && prev.length() > 1) {\n var curFormats = line.formats();\n var prevFormats = this.quill.getFormat(range.index - 1, 1);\n formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};\n }\n }\n // Check for astral symbols\n var length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);\n }\n this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n // Check for astral symbols\n var length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n if (range.index >= this.quill.getLength() - length) return;\n var formats = {},\n nextLength = 0;\n\n var _quill$getLine15 = this.quill.getLine(range.index),\n _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),\n line = _quill$getLine16[0];\n\n if (context.offset >= line.length() - 1) {\n var _quill$getLine17 = this.quill.getLine(range.index + 1),\n _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),\n next = _quill$getLine18[0];\n\n if (next) {\n var curFormats = line.formats();\n var nextFormats = this.quill.getFormat(range.index, 1);\n formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};\n nextLength = next.length();\n }\n }\n this.quill.deleteText(range.index, length, _quill2.default.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);\n }\n}\n\nfunction handleDeleteRange(range) {\n var lines = this.quill.getLines(range);\n var formats = {};\n if (lines.length > 1) {\n var firstFormats = lines[0].formats();\n var lastFormats = lines[lines.length - 1].formats();\n formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};\n }\n this.quill.deleteText(range, _quill2.default.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);\n }\n this.quill.setSelection(range.index, _quill2.default.sources.SILENT);\n this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n var _this3 = this;\n\n if (range.length > 0) {\n this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n }\n var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {\n if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n lineFormats[format] = context.format[format];\n }\n return lineFormats;\n }, {});\n this.quill.insertText(range.index, '\\n', lineFormats, _quill2.default.sources.USER);\n // Earlier scroll.deleteAt might have messed up our selection,\n // so insertText's built in selection preservation is not reliable\n this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n this.quill.focus();\n Object.keys(context.format).forEach(function (name) {\n if (lineFormats[name] != null) return;\n if (Array.isArray(context.format[name])) return;\n if (name === 'link') return;\n _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);\n });\n}\n\nfunction makeCodeBlockHandler(indent) {\n return {\n key: Keyboard.keys.TAB,\n shiftKey: !indent,\n format: { 'code-block': true },\n handler: function handler(range) {\n var CodeBlock = _parchment2.default.query('code-block');\n var index = range.index,\n length = range.length;\n\n var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),\n _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n block = _quill$scroll$descend2[0],\n offset = _quill$scroll$descend2[1];\n\n if (block == null) return;\n var scrollIndex = this.quill.getIndex(block);\n var start = block.newlineIndex(offset, true) + 1;\n var end = block.newlineIndex(scrollIndex + offset + length);\n var lines = block.domNode.textContent.slice(start, end).split('\\n');\n offset = 0;\n lines.forEach(function (line, i) {\n if (indent) {\n block.insertAt(start + offset, CodeBlock.TAB);\n offset += CodeBlock.TAB.length;\n if (i === 0) {\n index += CodeBlock.TAB.length;\n } else {\n length += CodeBlock.TAB.length;\n }\n } else if (line.startsWith(CodeBlock.TAB)) {\n block.deleteAt(start + offset, CodeBlock.TAB.length);\n offset -= CodeBlock.TAB.length;\n if (i === 0) {\n index -= CodeBlock.TAB.length;\n } else {\n length -= CodeBlock.TAB.length;\n }\n }\n offset += line.length + 1;\n });\n this.quill.update(_quill2.default.sources.USER);\n this.quill.setSelection(index, length, _quill2.default.sources.SILENT);\n }\n };\n}\n\nfunction makeFormatHandler(format) {\n return {\n key: format[0].toUpperCase(),\n shortKey: true,\n handler: function handler(range, context) {\n this.quill.format(format, !context.format[format], _quill2.default.sources.USER);\n }\n };\n}\n\nfunction normalize(binding) {\n if (typeof binding === 'string' || typeof binding === 'number') {\n return normalize({ key: binding });\n }\n if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {\n binding = (0, _clone2.default)(binding, false);\n }\n if (typeof binding.key === 'string') {\n if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n binding.key = Keyboard.keys[binding.key.toUpperCase()];\n } else if (binding.key.length === 1) {\n binding.key = binding.key.toUpperCase().charCodeAt(0);\n } else {\n return null;\n }\n }\n if (binding.shortKey) {\n binding[SHORTKEY] = binding.shortKey;\n delete binding.shortKey;\n }\n return binding;\n}\n\nexports.default = Keyboard;\nexports.SHORTKEY = SHORTKEY;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _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\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Cursor = function (_Parchment$Embed) {\n _inherits(Cursor, _Parchment$Embed);\n\n _createClass(Cursor, null, [{\n key: 'value',\n value: function value() {\n return undefined;\n }\n }]);\n\n function Cursor(domNode, selection) {\n _classCallCheck(this, Cursor);\n\n var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));\n\n _this.selection = selection;\n _this.textNode = document.createTextNode(Cursor.CONTENTS);\n _this.domNode.appendChild(_this.textNode);\n _this._length = 0;\n return _this;\n }\n\n _createClass(Cursor, [{\n key: 'detach',\n value: function detach() {\n // super.detach() will also clear domNode.__blot\n if (this.parent != null) this.parent.removeChild(this);\n }\n }, {\n key: 'format',\n value: function format(name, value) {\n if (this._length !== 0) {\n return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);\n }\n var target = this,\n index = 0;\n while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {\n index += target.offset(target.parent);\n target = target.parent;\n }\n if (target != null) {\n this._length = Cursor.CONTENTS.length;\n target.optimize();\n target.formatAt(index, Cursor.CONTENTS.length, name, value);\n this._length = 0;\n }\n }\n }, {\n key: 'index',\n value: function index(node, offset) {\n if (node === this.textNode) return 0;\n return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);\n }\n }, {\n key: 'length',\n value: function length() {\n return this._length;\n }\n }, {\n key: 'position',\n value: function position() {\n return [this.textNode, this.textNode.data.length];\n }\n }, {\n key: 'remove',\n value: function remove() {\n _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);\n this.parent = null;\n }\n }, {\n key: 'restore',\n value: function restore() {\n if (this.selection.composing || this.parent == null) return;\n var textNode = this.textNode;\n var range = this.selection.getNativeRange();\n var restoreText = void 0,\n start = void 0,\n end = void 0;\n if (range != null && range.start.node === textNode && range.end.node === textNode) {\n var _ref = [textNode, range.start.offset, range.end.offset];\n restoreText = _ref[0];\n start = _ref[1];\n end = _ref[2];\n }\n // Link format will insert text outside of anchor tag\n while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n }\n if (this.textNode.data !== Cursor.CONTENTS) {\n var text = this.textNode.data.split(Cursor.CONTENTS).join('');\n if (this.next instanceof _text2.default) {\n restoreText = this.next.domNode;\n this.next.insertAt(0, text);\n this.textNode.data = Cursor.CONTENTS;\n } else {\n this.textNode.data = text;\n this.parent.insertBefore(_parchment2.default.create(this.textNode), this);\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n }\n }\n this.remove();\n if (start != null) {\n var _map = [start, end].map(function (offset) {\n return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n });\n\n var _map2 = _slicedToArray(_map, 2);\n\n start = _map2[0];\n end = _map2[1];\n\n return {\n startNode: restoreText,\n startOffset: start,\n endNode: restoreText,\n endOffset: end\n };\n }\n }\n }, {\n key: 'update',\n value: function update(mutations, context) {\n var _this2 = this;\n\n if (mutations.some(function (mutation) {\n return mutation.type === 'characterData' && mutation.target === _this2.textNode;\n })) {\n var range = this.restore();\n if (range) context.range = range;\n }\n }\n }, {\n key: 'value',\n value: function value() {\n return '';\n }\n }]);\n\n return Cursor;\n}(_parchment2.default.Embed);\n\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = '\\uFEFF'; // Zero width no break space\n\n\nexports.default = Cursor;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Container = function (_Parchment$Container) {\n _inherits(Container, _Parchment$Container);\n\n function Container() {\n _classCallCheck(this, Container);\n\n return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));\n }\n\n return Container;\n}(_parchment2.default.Container);\n\nContainer.allowedChildren = [_block2.default, _block.BlockEmbed, Container];\n\nexports.default = Container;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorAttributor = function (_Parchment$Attributor) {\n _inherits(ColorAttributor, _Parchment$Attributor);\n\n function ColorAttributor() {\n _classCallCheck(this, ColorAttributor);\n\n return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));\n }\n\n _createClass(ColorAttributor, [{\n key: 'value',\n value: function value(domNode) {\n var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);\n if (!value.startsWith('rgb(')) return value;\n value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n return '#' + value.split(',').map(function (component) {\n return ('00' + parseInt(component).toString(16)).slice(-2);\n }).join('');\n }\n }]);\n\n return ColorAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {\n scope: _parchment2.default.Scope.INLINE\n});\nvar ColorStyle = new ColorAttributor('color', 'color', {\n scope: _parchment2.default.Scope.INLINE\n});\n\nexports.ColorAttributor = ColorAttributor;\nexports.ColorClass = ColorClass;\nexports.ColorStyle = ColorStyle;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.sanitize = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Link = function (_Inline) {\n _inherits(Link, _Inline);\n\n function Link() {\n _classCallCheck(this, Link);\n\n return _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).apply(this, arguments));\n }\n\n _createClass(Link, [{\n key: 'format',\n value: function format(name, value) {\n if (name !== this.statics.blotName || !value) return _get(Link.prototype.__proto__ || Object.getPrototypeOf(Link.prototype), 'format', this).call(this, name, value);\n value = this.constructor.sanitize(value);\n this.domNode.setAttribute('href', value);\n }\n }], [{\n key: 'create',\n value: function create(value) {\n var node = _get(Link.__proto__ || Object.getPrototypeOf(Link), 'create', this).call(this, value);\n value = this.sanitize(value);\n node.setAttribute('href', value);\n node.setAttribute('rel', 'noopener noreferrer');\n node.setAttribute('target', '_blank');\n return node;\n }\n }, {\n key: 'formats',\n value: function formats(domNode) {\n return domNode.getAttribute('href');\n }\n }, {\n key: 'sanitize',\n value: function sanitize(url) {\n return _sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n }\n }]);\n\n return Link;\n}(_inline2.default);\n\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\nfunction _sanitize(url, protocols) {\n var anchor = document.createElement('a');\n anchor.href = url;\n var protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n return protocols.indexOf(protocol) > -1;\n}\n\nexports.default = Link;\nexports.sanitize = _sanitize;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _dropdown = __webpack_require__(107);\n\nvar _dropdown2 = _interopRequireDefault(_dropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));\n}\n\nvar Picker = function () {\n function Picker(select) {\n var _this = this;\n\n _classCallCheck(this, Picker);\n\n this.select = select;\n this.container = document.createElement('span');\n this.buildPicker();\n this.select.style.display = 'none';\n this.select.parentNode.insertBefore(this.container, this.select);\n\n this.label.addEventListener('mousedown', function () {\n _this.togglePicker();\n });\n this.label.addEventListener('keydown', function (event) {\n switch (event.keyCode) {\n // Allows the \"Enter\" key to open the picker\n case _keyboard2.default.keys.ENTER:\n _this.togglePicker();\n break;\n\n // Allows the \"Escape\" key to close the picker\n case _keyboard2.default.keys.ESCAPE:\n _this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n this.select.addEventListener('change', this.update.bind(this));\n }\n\n _createClass(Picker, [{\n key: 'togglePicker',\n value: function togglePicker() {\n this.container.classList.toggle('ql-expanded');\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded');\n toggleAriaAttribute(this.options, 'aria-hidden');\n }\n }, {\n key: 'buildItem',\n value: function buildItem(option) {\n var _this2 = this;\n\n var item = document.createElement('span');\n item.tabIndex = '0';\n item.setAttribute('role', 'button');\n\n item.classList.add('ql-picker-item');\n if (option.hasAttribute('value')) {\n item.setAttribute('data-value', option.getAttribute('value'));\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent);\n }\n item.addEventListener('click', function () {\n _this2.selectItem(item, true);\n });\n item.addEventListener('keydown', function (event) {\n switch (event.keyCode) {\n // Allows the \"Enter\" key to select an item\n case _keyboard2.default.keys.ENTER:\n _this2.selectItem(item, true);\n event.preventDefault();\n break;\n\n // Allows the \"Escape\" key to close the picker\n case _keyboard2.default.keys.ESCAPE:\n _this2.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n\n return item;\n }\n }, {\n key: 'buildLabel',\n value: function buildLabel() {\n var label = document.createElement('span');\n label.classList.add('ql-picker-label');\n label.innerHTML = _dropdown2.default;\n label.tabIndex = '0';\n label.setAttribute('role', 'button');\n label.setAttribute('aria-expanded', 'false');\n this.container.appendChild(label);\n return label;\n }\n }, {\n key: 'buildOptions',\n value: function buildOptions() {\n var _this3 = this;\n\n var options = document.createElement('span');\n options.classList.add('ql-picker-options');\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true');\n options.tabIndex = '-1';\n\n // Need a unique id for aria-controls\n options.id = 'ql-picker-options-' + optionsCounter;\n optionsCounter += 1;\n this.label.setAttribute('aria-controls', options.id);\n\n this.options = options;\n\n [].slice.call(this.select.options).forEach(function (option) {\n var item = _this3.buildItem(option);\n options.appendChild(item);\n if (option.selected === true) {\n _this3.selectItem(item);\n }\n });\n this.container.appendChild(options);\n }\n }, {\n key: 'buildPicker',\n value: function buildPicker() {\n var _this4 = this;\n\n [].slice.call(this.select.attributes).forEach(function (item) {\n _this4.container.setAttribute(item.name, item.value);\n });\n this.container.classList.add('ql-picker');\n this.label = this.buildLabel();\n this.buildOptions();\n }\n }, {\n key: 'escape',\n value: function escape() {\n var _this5 = this;\n\n // Close menu and return focus to trigger label\n this.close();\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(function () {\n return _this5.label.focus();\n }, 1);\n }\n }, {\n key: 'close',\n value: function close() {\n this.container.classList.remove('ql-expanded');\n this.label.setAttribute('aria-expanded', 'false');\n this.options.setAttribute('aria-hidden', 'true');\n }\n }, {\n key: 'selectItem',\n value: function selectItem(item) {\n var trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var selected = this.container.querySelector('.ql-selected');\n if (item === selected) return;\n if (selected != null) {\n selected.classList.remove('ql-selected');\n }\n if (item == null) return;\n item.classList.add('ql-selected');\n this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);\n if (item.hasAttribute('data-value')) {\n this.label.setAttribute('data-value', item.getAttribute('data-value'));\n } else {\n this.label.removeAttribute('data-value');\n }\n if (item.hasAttribute('data-label')) {\n this.label.setAttribute('data-label', item.getAttribute('data-label'));\n } else {\n this.label.removeAttribute('data-label');\n }\n if (trigger) {\n if (typeof Event === 'function') {\n this.select.dispatchEvent(new Event('change'));\n } else if ((typeof Event === 'undefined' ? 'undefined' : _typeof(Event)) === 'object') {\n // IE11\n var event = document.createEvent('Event');\n event.initEvent('change', true, true);\n this.select.dispatchEvent(event);\n }\n this.close();\n }\n }\n }, {\n key: 'update',\n value: function update() {\n var option = void 0;\n if (this.select.selectedIndex > -1) {\n var item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n option = this.select.options[this.select.selectedIndex];\n this.selectItem(item);\n } else {\n this.selectItem(null);\n }\n var isActive = option != null && option !== this.select.querySelector('option[selected]');\n this.label.classList.toggle('ql-active', isActive);\n }\n }]);\n\n return Picker;\n}();\n\nexports.default = Picker;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _scroll = __webpack_require__(22);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _clipboard = __webpack_require__(55);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _history = __webpack_require__(42);\n\nvar _history2 = _interopRequireDefault(_history);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_quill2.default.register({\n 'blots/block': _block2.default,\n 'blots/block/embed': _block.BlockEmbed,\n 'blots/break': _break2.default,\n 'blots/container': _container2.default,\n 'blots/cursor': _cursor2.default,\n 'blots/embed': _embed2.default,\n 'blots/inline': _inline2.default,\n 'blots/scroll': _scroll2.default,\n 'blots/text': _text2.default,\n\n 'modules/clipboard': _clipboard2.default,\n 'modules/history': _history2.default,\n 'modules/keyboard': _keyboard2.default\n});\n\n_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);\n\nexports.default = _quill2.default;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar ShadowBlot = /** @class */ (function () {\n function ShadowBlot(domNode) {\n this.domNode = domNode;\n // @ts-ignore\n this.domNode[Registry.DATA_KEY] = { blot: this };\n }\n Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n // Hack for accessing inherited static methods\n get: function () {\n return this.constructor;\n },\n enumerable: true,\n configurable: true\n });\n ShadowBlot.create = function (value) {\n if (this.tagName == null) {\n throw new Registry.ParchmentError('Blot definition missing tagName');\n }\n var node;\n if (Array.isArray(this.tagName)) {\n if (typeof value === 'string') {\n value = value.toUpperCase();\n if (parseInt(value).toString() === value) {\n value = parseInt(value);\n }\n }\n if (typeof value === 'number') {\n node = document.createElement(this.tagName[value - 1]);\n }\n else if (this.tagName.indexOf(value) > -1) {\n node = document.createElement(value);\n }\n else {\n node = document.createElement(this.tagName[0]);\n }\n }\n else {\n node = document.createElement(this.tagName);\n }\n if (this.className) {\n node.classList.add(this.className);\n }\n return node;\n };\n ShadowBlot.prototype.attach = function () {\n if (this.parent != null) {\n this.scroll = this.parent.scroll;\n }\n };\n ShadowBlot.prototype.clone = function () {\n var domNode = this.domNode.cloneNode(false);\n return Registry.create(domNode);\n };\n ShadowBlot.prototype.detach = function () {\n if (this.parent != null)\n this.parent.removeChild(this);\n // @ts-ignore\n delete this.domNode[Registry.DATA_KEY];\n };\n ShadowBlot.prototype.deleteAt = function (index, length) {\n var blot = this.isolate(index, length);\n blot.remove();\n };\n ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n var blot = this.isolate(index, length);\n if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n blot.wrap(name, value);\n }\n else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n var parent = Registry.create(this.statics.scope);\n blot.wrap(parent);\n parent.format(name, value);\n }\n };\n ShadowBlot.prototype.insertAt = function (index, value, def) {\n var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n var ref = this.split(index);\n this.parent.insertBefore(blot, ref);\n };\n ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n if (refBlot === void 0) { refBlot = null; }\n if (this.parent != null) {\n this.parent.children.remove(this);\n }\n var refDomNode = null;\n parentBlot.children.insertBefore(this, refBlot);\n if (refBlot != null) {\n refDomNode = refBlot.domNode;\n }\n if (this.domNode.parentNode != parentBlot.domNode ||\n this.domNode.nextSibling != refDomNode) {\n parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n }\n this.parent = parentBlot;\n this.attach();\n };\n ShadowBlot.prototype.isolate = function (index, length) {\n var target = this.split(index);\n target.split(length);\n return target;\n };\n ShadowBlot.prototype.length = function () {\n return 1;\n };\n ShadowBlot.prototype.offset = function (root) {\n if (root === void 0) { root = this.parent; }\n if (this.parent == null || this == root)\n return 0;\n return this.parent.children.offset(this) + this.parent.offset(root);\n };\n ShadowBlot.prototype.optimize = function (context) {\n // TODO clean up once we use WeakMap\n // @ts-ignore\n if (this.domNode[Registry.DATA_KEY] != null) {\n // @ts-ignore\n delete this.domNode[Registry.DATA_KEY].mutations;\n }\n };\n ShadowBlot.prototype.remove = function () {\n if (this.domNode.parentNode != null) {\n this.domNode.parentNode.removeChild(this.domNode);\n }\n this.detach();\n };\n ShadowBlot.prototype.replace = function (target) {\n if (target.parent == null)\n return;\n target.parent.insertBefore(this, target.next);\n target.remove();\n };\n ShadowBlot.prototype.replaceWith = function (name, value) {\n var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n replacement.replace(this);\n return replacement;\n };\n ShadowBlot.prototype.split = function (index, force) {\n return index === 0 ? this : this.next;\n };\n ShadowBlot.prototype.update = function (mutations, context) {\n // Nothing to do by default\n };\n ShadowBlot.prototype.wrap = function (name, value) {\n var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n if (this.parent != null) {\n this.parent.insertBefore(wrapper, this.next);\n }\n wrapper.appendChild(this);\n return wrapper;\n };\n ShadowBlot.blotName = 'abstract';\n return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar Registry = __webpack_require__(1);\nvar AttributorStore = /** @class */ (function () {\n function AttributorStore(domNode) {\n this.attributes = {};\n this.domNode = domNode;\n this.build();\n }\n AttributorStore.prototype.attribute = function (attribute, value) {\n // verb\n if (value) {\n if (attribute.add(this.domNode, value)) {\n if (attribute.value(this.domNode) != null) {\n this.attributes[attribute.attrName] = attribute;\n }\n else {\n delete this.attributes[attribute.attrName];\n }\n }\n }\n else {\n attribute.remove(this.domNode);\n delete this.attributes[attribute.attrName];\n }\n };\n AttributorStore.prototype.build = function () {\n var _this = this;\n this.attributes = {};\n var attributes = attributor_1.default.keys(this.domNode);\n var classes = class_1.default.keys(this.domNode);\n var styles = style_1.default.keys(this.domNode);\n attributes\n .concat(classes)\n .concat(styles)\n .forEach(function (name) {\n var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n if (attr instanceof attributor_1.default) {\n _this.attributes[attr.attrName] = attr;\n }\n });\n };\n AttributorStore.prototype.copy = function (target) {\n var _this = this;\n Object.keys(this.attributes).forEach(function (key) {\n var value = _this.attributes[key].value(_this.domNode);\n target.format(key, value);\n });\n };\n AttributorStore.prototype.move = function (target) {\n var _this = this;\n this.copy(target);\n Object.keys(this.attributes).forEach(function (key) {\n _this.attributes[key].remove(_this.domNode);\n });\n this.attributes = {};\n };\n AttributorStore.prototype.values = function () {\n var _this = this;\n return Object.keys(this.attributes).reduce(function (attributes, name) {\n attributes[name] = _this.attributes[name].value(_this.domNode);\n return attributes;\n }, {});\n };\n return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction match(node, prefix) {\n var className = node.getAttribute('class') || '';\n return className.split(/\\s+/).filter(function (name) {\n return name.indexOf(prefix + \"-\") === 0;\n });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n __extends(ClassAttributor, _super);\n function ClassAttributor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ClassAttributor.keys = function (node) {\n return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n return name\n .split('-')\n .slice(0, -1)\n .join('-');\n });\n };\n ClassAttributor.prototype.add = function (node, value) {\n if (!this.canAdd(node, value))\n return false;\n this.remove(node);\n node.classList.add(this.keyName + \"-\" + value);\n return true;\n };\n ClassAttributor.prototype.remove = function (node) {\n var matches = match(node, this.keyName);\n matches.forEach(function (name) {\n node.classList.remove(name);\n });\n if (node.classList.length === 0) {\n node.removeAttribute('class');\n }\n };\n ClassAttributor.prototype.value = function (node) {\n var result = match(node, this.keyName)[0] || '';\n var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n return this.canAdd(node, value) ? value : '';\n };\n return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction camelize(name) {\n var parts = name.split('-');\n var rest = parts\n .slice(1)\n .map(function (part) {\n return part[0].toUpperCase() + part.slice(1);\n })\n .join('');\n return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n __extends(StyleAttributor, _super);\n function StyleAttributor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n StyleAttributor.keys = function (node) {\n return (node.getAttribute('style') || '').split(';').map(function (value) {\n var arr = value.split(':');\n return arr[0].trim();\n });\n };\n StyleAttributor.prototype.add = function (node, value) {\n if (!this.canAdd(node, value))\n return false;\n // @ts-ignore\n node.style[camelize(this.keyName)] = value;\n return true;\n };\n StyleAttributor.prototype.remove = function (node) {\n // @ts-ignore\n node.style[camelize(this.keyName)] = '';\n if (!node.getAttribute('style')) {\n node.removeAttribute('style');\n }\n };\n StyleAttributor.prototype.value = function (node) {\n // @ts-ignore\n var value = node.style[camelize(this.keyName)];\n return this.canAdd(node, value) ? value : '';\n };\n return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Theme = function () {\n function Theme(quill, options) {\n _classCallCheck(this, Theme);\n\n this.quill = quill;\n this.options = options;\n this.modules = {};\n }\n\n _createClass(Theme, [{\n key: 'init',\n value: function init() {\n var _this = this;\n\n Object.keys(this.options.modules).forEach(function (name) {\n if (_this.modules[name] == null) {\n _this.addModule(name);\n }\n });\n }\n }, {\n key: 'addModule',\n value: function addModule(name) {\n var moduleClass = this.quill.constructor.import('modules/' + name);\n this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n return this.modules[name];\n }\n }]);\n\n return Theme;\n}();\n\nTheme.DEFAULTS = {\n modules: {}\n};\nTheme.themes = {\n 'default': Theme\n};\n\nexports.default = Theme;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar GUARD_TEXT = '\\uFEFF';\n\nvar Embed = function (_Parchment$Embed) {\n _inherits(Embed, _Parchment$Embed);\n\n function Embed(node) {\n _classCallCheck(this, Embed);\n\n var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));\n\n _this.contentNode = document.createElement('span');\n _this.contentNode.setAttribute('contenteditable', false);\n [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {\n _this.contentNode.appendChild(childNode);\n });\n _this.leftGuard = document.createTextNode(GUARD_TEXT);\n _this.rightGuard = document.createTextNode(GUARD_TEXT);\n _this.domNode.appendChild(_this.leftGuard);\n _this.domNode.appendChild(_this.contentNode);\n _this.domNode.appendChild(_this.rightGuard);\n return _this;\n }\n\n _createClass(Embed, [{\n key: 'index',\n value: function index(node, offset) {\n if (node === this.leftGuard) return 0;\n if (node === this.rightGuard) return 1;\n return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);\n }\n }, {\n key: 'restore',\n value: function restore(node) {\n var range = void 0,\n textNode = void 0;\n var text = node.data.split(GUARD_TEXT).join('');\n if (node === this.leftGuard) {\n if (this.prev instanceof _text2.default) {\n var prevLength = this.prev.length();\n this.prev.insertAt(prevLength, text);\n range = {\n startNode: this.prev.domNode,\n startOffset: prevLength + text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(_parchment2.default.create(textNode), this);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n } else if (node === this.rightGuard) {\n if (this.next instanceof _text2.default) {\n this.next.insertAt(0, text);\n range = {\n startNode: this.next.domNode,\n startOffset: text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(_parchment2.default.create(textNode), this.next);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n }\n node.data = GUARD_TEXT;\n return range;\n }\n }, {\n key: 'update',\n value: function update(mutations, context) {\n var _this2 = this;\n\n mutations.forEach(function (mutation) {\n if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {\n var range = _this2.restore(mutation.target);\n if (range) context.range = range;\n }\n });\n }\n }]);\n\n return Embed;\n}(_parchment2.default.Embed);\n\nexports.default = Embed;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n scope: _parchment2.default.Scope.BLOCK,\n whitelist: ['right', 'center', 'justify']\n};\n\nvar AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);\nvar AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);\nvar AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);\n\nexports.AlignAttribute = AlignAttribute;\nexports.AlignClass = AlignClass;\nexports.AlignStyle = AlignStyle;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BackgroundStyle = exports.BackgroundClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _color = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {\n scope: _parchment2.default.Scope.INLINE\n});\nvar BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {\n scope: _parchment2.default.Scope.INLINE\n});\n\nexports.BackgroundClass = BackgroundClass;\nexports.BackgroundStyle = BackgroundStyle;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n scope: _parchment2.default.Scope.BLOCK,\n whitelist: ['rtl']\n};\n\nvar DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);\nvar DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);\nvar DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);\n\nexports.DirectionAttribute = DirectionAttribute;\nexports.DirectionClass = DirectionClass;\nexports.DirectionStyle = DirectionStyle;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FontClass = exports.FontStyle = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar config = {\n scope: _parchment2.default.Scope.INLINE,\n whitelist: ['serif', 'monospace']\n};\n\nvar FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);\n\nvar FontStyleAttributor = function (_Parchment$Attributor) {\n _inherits(FontStyleAttributor, _Parchment$Attributor);\n\n function FontStyleAttributor() {\n _classCallCheck(this, FontStyleAttributor);\n\n return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));\n }\n\n _createClass(FontStyleAttributor, [{\n key: 'value',\n value: function value(node) {\n return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/[\"']/g, '');\n }\n }]);\n\n return FontStyleAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexports.FontStyle = FontStyle;\nexports.FontClass = FontClass;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SizeStyle = exports.SizeClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {\n scope: _parchment2.default.Scope.INLINE,\n whitelist: ['small', 'large', 'huge']\n});\nvar SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {\n scope: _parchment2.default.Scope.INLINE,\n whitelist: ['10px', '18px', '32px']\n});\n\nexports.SizeClass = SizeClass;\nexports.SizeStyle = SizeStyle;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n 'align': {\n '': __webpack_require__(76),\n 'center': __webpack_require__(77),\n 'right': __webpack_require__(78),\n 'justify': __webpack_require__(79)\n },\n 'background': __webpack_require__(80),\n 'blockquote': __webpack_require__(81),\n 'bold': __webpack_require__(82),\n 'clean': __webpack_require__(83),\n 'code': __webpack_require__(58),\n 'code-block': __webpack_require__(58),\n 'color': __webpack_require__(84),\n 'direction': {\n '': __webpack_require__(85),\n 'rtl': __webpack_require__(86)\n },\n 'float': {\n 'center': __webpack_require__(87),\n 'full': __webpack_require__(88),\n 'left': __webpack_require__(89),\n 'right': __webpack_require__(90)\n },\n 'formula': __webpack_require__(91),\n 'header': {\n '1': __webpack_require__(92),\n '2': __webpack_require__(93)\n },\n 'italic': __webpack_require__(94),\n 'image': __webpack_require__(95),\n 'indent': {\n '+1': __webpack_require__(96),\n '-1': __webpack_require__(97)\n },\n 'link': __webpack_require__(98),\n 'list': {\n 'ordered': __webpack_require__(99),\n 'bullet': __webpack_require__(100),\n 'check': __webpack_require__(101)\n },\n 'script': {\n 'sub': __webpack_require__(102),\n 'super': __webpack_require__(103)\n },\n 'strike': __webpack_require__(104),\n 'underline': __webpack_require__(105),\n 'video': __webpack_require__(106)\n};\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLastChangeIndex = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar History = function (_Module) {\n _inherits(History, _Module);\n\n function History(quill, options) {\n _classCallCheck(this, History);\n\n var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));\n\n _this.lastRecorded = 0;\n _this.ignoreChange = false;\n _this.clear();\n _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {\n if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;\n if (!_this.options.userOnly || source === _quill2.default.sources.USER) {\n _this.record(delta, oldDelta);\n } else {\n _this.transform(delta);\n }\n });\n _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));\n _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));\n if (/Win/i.test(navigator.platform)) {\n _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));\n }\n return _this;\n }\n\n _createClass(History, [{\n key: 'change',\n value: function change(source, dest) {\n if (this.stack[source].length === 0) return;\n var delta = this.stack[source].pop();\n this.stack[dest].push(delta);\n this.lastRecorded = 0;\n this.ignoreChange = true;\n this.quill.updateContents(delta[source], _quill2.default.sources.USER);\n this.ignoreChange = false;\n var index = getLastChangeIndex(delta[source]);\n this.quill.setSelection(index);\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.stack = { undo: [], redo: [] };\n }\n }, {\n key: 'cutoff',\n value: function cutoff() {\n this.lastRecorded = 0;\n }\n }, {\n key: 'record',\n value: function record(changeDelta, oldDelta) {\n if (changeDelta.ops.length === 0) return;\n this.stack.redo = [];\n var undoDelta = this.quill.getContents().diff(oldDelta);\n var timestamp = Date.now();\n if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n var delta = this.stack.undo.pop();\n undoDelta = undoDelta.compose(delta.undo);\n changeDelta = delta.redo.compose(changeDelta);\n } else {\n this.lastRecorded = timestamp;\n }\n this.stack.undo.push({\n redo: changeDelta,\n undo: undoDelta\n });\n if (this.stack.undo.length > this.options.maxStack) {\n this.stack.undo.shift();\n }\n }\n }, {\n key: 'redo',\n value: function redo() {\n this.change('redo', 'undo');\n }\n }, {\n key: 'transform',\n value: function transform(delta) {\n this.stack.undo.forEach(function (change) {\n change.undo = delta.transform(change.undo, true);\n change.redo = delta.transform(change.redo, true);\n });\n this.stack.redo.forEach(function (change) {\n change.undo = delta.transform(change.undo, true);\n change.redo = delta.transform(change.redo, true);\n });\n }\n }, {\n key: 'undo',\n value: function undo() {\n this.change('undo', 'redo');\n }\n }]);\n\n return History;\n}(_module2.default);\n\nHistory.DEFAULTS = {\n delay: 1000,\n maxStack: 100,\n userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n var lastOp = delta.ops[delta.ops.length - 1];\n if (lastOp == null) return false;\n if (lastOp.insert != null) {\n return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n }\n if (lastOp.attributes != null) {\n return Object.keys(lastOp.attributes).some(function (attr) {\n return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;\n });\n }\n return false;\n}\n\nfunction getLastChangeIndex(delta) {\n var deleteLength = delta.reduce(function (length, op) {\n length += op.delete || 0;\n return length;\n }, 0);\n var changeIndex = delta.length() - deleteLength;\n if (endsWithNewlineChange(delta)) {\n changeIndex -= 1;\n }\n return changeIndex;\n}\n\nexports.default = History;\nexports.getLastChangeIndex = getLastChangeIndex;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.BaseTooltip = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ALIGNS = [false, 'center', 'right', 'justify'];\n\nvar COLORS = [\"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\", \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\", \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\", \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"];\n\nvar FONTS = [false, 'serif', 'monospace'];\n\nvar HEADERS = ['1', '2', '3', false];\n\nvar SIZES = ['small', false, 'large', 'huge'];\n\nvar BaseTheme = function (_Theme) {\n _inherits(BaseTheme, _Theme);\n\n function BaseTheme(quill, options) {\n _classCallCheck(this, BaseTheme);\n\n var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));\n\n var listener = function listener(e) {\n if (!document.body.contains(quill.root)) {\n return document.body.removeEventListener('click', listener);\n }\n if (_this.tooltip != null && !_this.tooltip.root.contains(e.target) && document.activeElement !== _this.tooltip.textbox && !_this.quill.hasFocus()) {\n _this.tooltip.hide();\n }\n if (_this.pickers != null) {\n _this.pickers.forEach(function (picker) {\n if (!picker.container.contains(e.target)) {\n picker.close();\n }\n });\n }\n };\n quill.emitter.listenDOM('click', document.body, listener);\n return _this;\n }\n\n _createClass(BaseTheme, [{\n key: 'addModule',\n value: function addModule(name) {\n var module = _get(BaseTheme.prototype.__proto__ || Object.getPrototypeOf(BaseTheme.prototype), 'addModule', this).call(this, name);\n if (name === 'toolbar') {\n this.extendToolbar(module);\n }\n return module;\n }\n }, {\n key: 'buildButtons',\n value: function buildButtons(buttons, icons) {\n buttons.forEach(function (button) {\n var className = button.getAttribute('class') || '';\n className.split(/\\s+/).forEach(function (name) {\n if (!name.startsWith('ql-')) return;\n name = name.slice('ql-'.length);\n if (icons[name] == null) return;\n if (name === 'direction') {\n button.innerHTML = icons[name][''] + icons[name]['rtl'];\n } else if (typeof icons[name] === 'string') {\n button.innerHTML = icons[name];\n } else {\n var value = button.value || '';\n if (value != null && icons[name][value]) {\n button.innerHTML = icons[name][value];\n }\n }\n });\n });\n }\n }, {\n key: 'buildPickers',\n value: function buildPickers(selects, icons) {\n var _this2 = this;\n\n this.pickers = selects.map(function (select) {\n if (select.classList.contains('ql-align')) {\n if (select.querySelector('option') == null) {\n fillSelect(select, ALIGNS);\n }\n return new _iconPicker2.default(select, icons.align);\n } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n var format = select.classList.contains('ql-background') ? 'background' : 'color';\n if (select.querySelector('option') == null) {\n fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n }\n return new _colorPicker2.default(select, icons[format]);\n } else {\n if (select.querySelector('option') == null) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS);\n } else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS);\n } else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES);\n }\n }\n return new _picker2.default(select);\n }\n });\n var update = function update() {\n _this2.pickers.forEach(function (picker) {\n picker.update();\n });\n };\n this.quill.on(_emitter2.default.events.EDITOR_CHANGE, update);\n }\n }]);\n\n return BaseTheme;\n}(_theme2.default);\n\nBaseTheme.DEFAULTS = (0, _extend2.default)(true, {}, _theme2.default.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n formula: function formula() {\n this.quill.theme.tooltip.edit('formula');\n },\n image: function image() {\n var _this3 = this;\n\n var fileInput = this.container.querySelector('input.ql-image[type=file]');\n if (fileInput == null) {\n fileInput = document.createElement('input');\n fileInput.setAttribute('type', 'file');\n fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\n fileInput.classList.add('ql-image');\n fileInput.addEventListener('change', function () {\n if (fileInput.files != null && fileInput.files[0] != null) {\n var reader = new FileReader();\n reader.onload = function (e) {\n var range = _this3.quill.getSelection(true);\n _this3.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert({ image: e.target.result }), _emitter2.default.sources.USER);\n _this3.quill.setSelection(range.index + 1, _emitter2.default.sources.SILENT);\n fileInput.value = \"\";\n };\n reader.readAsDataURL(fileInput.files[0]);\n }\n });\n this.container.appendChild(fileInput);\n }\n fileInput.click();\n },\n video: function video() {\n this.quill.theme.tooltip.edit('video');\n }\n }\n }\n }\n});\n\nvar BaseTooltip = function (_Tooltip) {\n _inherits(BaseTooltip, _Tooltip);\n\n function BaseTooltip(quill, boundsContainer) {\n _classCallCheck(this, BaseTooltip);\n\n var _this4 = _possibleConstructorReturn(this, (BaseTooltip.__proto__ || Object.getPrototypeOf(BaseTooltip)).call(this, quill, boundsContainer));\n\n _this4.textbox = _this4.root.querySelector('input[type=\"text\"]');\n _this4.listen();\n return _this4;\n }\n\n _createClass(BaseTooltip, [{\n key: 'listen',\n value: function listen() {\n var _this5 = this;\n\n this.textbox.addEventListener('keydown', function (event) {\n if (_keyboard2.default.match(event, 'enter')) {\n _this5.save();\n event.preventDefault();\n } else if (_keyboard2.default.match(event, 'escape')) {\n _this5.cancel();\n event.preventDefault();\n }\n });\n }\n }, {\n key: 'cancel',\n value: function cancel() {\n this.hide();\n }\n }, {\n key: 'edit',\n value: function edit() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n var preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n this.root.classList.remove('ql-hidden');\n this.root.classList.add('ql-editing');\n if (preview != null) {\n this.textbox.value = preview;\n } else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = '';\n }\n this.position(this.quill.getBounds(this.quill.selection.savedRange));\n this.textbox.select();\n this.textbox.setAttribute('placeholder', this.textbox.getAttribute('data-' + mode) || '');\n this.root.setAttribute('data-mode', mode);\n }\n }, {\n key: 'restoreFocus',\n value: function restoreFocus() {\n var scrollTop = this.quill.scrollingContainer.scrollTop;\n this.quill.focus();\n this.quill.scrollingContainer.scrollTop = scrollTop;\n }\n }, {\n key: 'save',\n value: function save() {\n var value = this.textbox.value;\n switch (this.root.getAttribute('data-mode')) {\n case 'link':\n {\n var scrollTop = this.quill.root.scrollTop;\n if (this.linkRange) {\n this.quill.formatText(this.linkRange, 'link', value, _emitter2.default.sources.USER);\n delete this.linkRange;\n } else {\n this.restoreFocus();\n this.quill.format('link', value, _emitter2.default.sources.USER);\n }\n this.quill.root.scrollTop = scrollTop;\n break;\n }\n case 'video':\n {\n value = extractVideoUrl(value);\n } // eslint-disable-next-line no-fallthrough\n case 'formula':\n {\n if (!value) break;\n var range = this.quill.getSelection(true);\n if (range != null) {\n var index = range.index + range.length;\n this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, _emitter2.default.sources.USER);\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', _emitter2.default.sources.USER);\n }\n this.quill.setSelection(index + 2, _emitter2.default.sources.USER);\n }\n break;\n }\n default:\n }\n this.textbox.value = '';\n this.hide();\n }\n }]);\n\n return BaseTooltip;\n}(_tooltip2.default);\n\nfunction extractVideoUrl(url) {\n var match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n if (match) {\n return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';\n }\n if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n // eslint-disable-line no-cond-assign\n return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';\n }\n return url;\n}\n\nfunction fillSelect(select, values) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n values.forEach(function (value) {\n var option = document.createElement('option');\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected');\n } else {\n option.setAttribute('value', value);\n }\n select.appendChild(option);\n });\n}\n\nexports.BaseTooltip = BaseTooltip;\nexports.default = BaseTheme;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n function LinkedList() {\n this.head = this.tail = null;\n this.length = 0;\n }\n LinkedList.prototype.append = function () {\n var nodes = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n nodes[_i] = arguments[_i];\n }\n this.insertBefore(nodes[0], null);\n if (nodes.length > 1) {\n this.append.apply(this, nodes.slice(1));\n }\n };\n LinkedList.prototype.contains = function (node) {\n var cur, next = this.iterator();\n while ((cur = next())) {\n if (cur === node)\n return true;\n }\n return false;\n };\n LinkedList.prototype.insertBefore = function (node, refNode) {\n if (!node)\n return;\n node.next = refNode;\n if (refNode != null) {\n node.prev = refNode.prev;\n if (refNode.prev != null) {\n refNode.prev.next = node;\n }\n refNode.prev = node;\n if (refNode === this.head) {\n this.head = node;\n }\n }\n else if (this.tail != null) {\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n else {\n node.prev = null;\n this.head = this.tail = node;\n }\n this.length += 1;\n };\n LinkedList.prototype.offset = function (target) {\n var index = 0, cur = this.head;\n while (cur != null) {\n if (cur === target)\n return index;\n index += cur.length();\n cur = cur.next;\n }\n return -1;\n };\n LinkedList.prototype.remove = function (node) {\n if (!this.contains(node))\n return;\n if (node.prev != null)\n node.prev.next = node.next;\n if (node.next != null)\n node.next.prev = node.prev;\n if (node === this.head)\n this.head = node.next;\n if (node === this.tail)\n this.tail = node.prev;\n this.length -= 1;\n };\n LinkedList.prototype.iterator = function (curNode) {\n if (curNode === void 0) { curNode = this.head; }\n // TODO use yield when we can\n return function () {\n var ret = curNode;\n if (curNode != null)\n curNode = curNode.next;\n return ret;\n };\n };\n LinkedList.prototype.find = function (index, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n var cur, next = this.iterator();\n while ((cur = next())) {\n var length = cur.length();\n if (index < length ||\n (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {\n return [cur, index];\n }\n index -= length;\n }\n return [null, 0];\n };\n LinkedList.prototype.forEach = function (callback) {\n var cur, next = this.iterator();\n while ((cur = next())) {\n callback(cur);\n }\n };\n LinkedList.prototype.forEachAt = function (index, length, callback) {\n if (length <= 0)\n return;\n var _a = this.find(index), startNode = _a[0], offset = _a[1];\n var cur, curIndex = index - offset, next = this.iterator(startNode);\n while ((cur = next()) && curIndex < index + length) {\n var curLength = cur.length();\n if (index > curIndex) {\n callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n }\n else {\n callback(cur, 0, Math.min(curLength, index + length - curIndex));\n }\n curIndex += curLength;\n }\n };\n LinkedList.prototype.map = function (callback) {\n return this.reduce(function (memo, cur) {\n memo.push(callback(cur));\n return memo;\n }, []);\n };\n LinkedList.prototype.reduce = function (callback, memo) {\n var cur, next = this.iterator();\n while ((cur = next())) {\n memo = callback(memo, cur);\n }\n return memo;\n };\n return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar OBSERVER_CONFIG = {\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n __extends(ScrollBlot, _super);\n function ScrollBlot(node) {\n var _this = _super.call(this, node) || this;\n _this.scroll = _this;\n _this.observer = new MutationObserver(function (mutations) {\n _this.update(mutations);\n });\n _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n _this.attach();\n return _this;\n }\n ScrollBlot.prototype.detach = function () {\n _super.prototype.detach.call(this);\n this.observer.disconnect();\n };\n ScrollBlot.prototype.deleteAt = function (index, length) {\n this.update();\n if (index === 0 && length === this.length()) {\n this.children.forEach(function (child) {\n child.remove();\n });\n }\n else {\n _super.prototype.deleteAt.call(this, index, length);\n }\n };\n ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n this.update();\n _super.prototype.formatAt.call(this, index, length, name, value);\n };\n ScrollBlot.prototype.insertAt = function (index, value, def) {\n this.update();\n _super.prototype.insertAt.call(this, index, value, def);\n };\n ScrollBlot.prototype.optimize = function (mutations, context) {\n var _this = this;\n if (mutations === void 0) { mutations = []; }\n if (context === void 0) { context = {}; }\n _super.prototype.optimize.call(this, context);\n // We must modify mutations directly, cannot make copy and then modify\n var records = [].slice.call(this.observer.takeRecords());\n // Array.push currently seems to be implemented by a non-tail recursive function\n // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n while (records.length > 0)\n mutations.push(records.pop());\n // TODO use WeakMap\n var mark = function (blot, markParent) {\n if (markParent === void 0) { markParent = true; }\n if (blot == null || blot === _this)\n return;\n if (blot.domNode.parentNode == null)\n return;\n // @ts-ignore\n if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations = [];\n }\n if (markParent)\n mark(blot.parent);\n };\n var optimize = function (blot) {\n // Post-order traversal\n if (\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY] == null ||\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations == null) {\n return;\n }\n if (blot instanceof container_1.default) {\n blot.children.forEach(optimize);\n }\n blot.optimize(context);\n };\n var remaining = mutations;\n for (var i = 0; remaining.length > 0; i += 1) {\n if (i >= MAX_OPTIMIZE_ITERATIONS) {\n throw new Error('[Parchment] Maximum optimize iterations reached');\n }\n remaining.forEach(function (mutation) {\n var blot = Registry.find(mutation.target, true);\n if (blot == null)\n return;\n if (blot.domNode === mutation.target) {\n if (mutation.type === 'childList') {\n mark(Registry.find(mutation.previousSibling, false));\n [].forEach.call(mutation.addedNodes, function (node) {\n var child = Registry.find(node, false);\n mark(child, false);\n if (child instanceof container_1.default) {\n child.children.forEach(function (grandChild) {\n mark(grandChild, false);\n });\n }\n });\n }\n else if (mutation.type === 'attributes') {\n mark(blot.prev);\n }\n }\n mark(blot);\n });\n this.children.forEach(optimize);\n remaining = [].slice.call(this.observer.takeRecords());\n records = remaining.slice();\n while (records.length > 0)\n mutations.push(records.pop());\n }\n };\n ScrollBlot.prototype.update = function (mutations, context) {\n var _this = this;\n if (context === void 0) { context = {}; }\n mutations = mutations || this.observer.takeRecords();\n // TODO use WeakMap\n mutations\n .map(function (mutation) {\n var blot = Registry.find(mutation.target, true);\n if (blot == null)\n return null;\n // @ts-ignore\n if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n return blot;\n }\n else {\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n return null;\n }\n })\n .forEach(function (blot) {\n if (blot == null ||\n blot === _this ||\n //@ts-ignore\n blot.domNode[Registry.DATA_KEY] == null)\n return;\n // @ts-ignore\n blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n });\n // @ts-ignore\n if (this.domNode[Registry.DATA_KEY].mutations != null) {\n // @ts-ignore\n _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n }\n this.optimize(mutations, context);\n };\n ScrollBlot.blotName = 'scroll';\n ScrollBlot.defaultChild = 'block';\n ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n ScrollBlot.tagName = 'DIV';\n return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n if (Object.keys(obj1).length !== Object.keys(obj2).length)\n return false;\n // @ts-ignore\n for (var prop in obj1) {\n // @ts-ignore\n if (obj1[prop] !== obj2[prop])\n return false;\n }\n return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n __extends(InlineBlot, _super);\n function InlineBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n InlineBlot.formats = function (domNode) {\n if (domNode.tagName === InlineBlot.tagName)\n return undefined;\n return _super.formats.call(this, domNode);\n };\n InlineBlot.prototype.format = function (name, value) {\n var _this = this;\n if (name === this.statics.blotName && !value) {\n this.children.forEach(function (child) {\n if (!(child instanceof format_1.default)) {\n child = child.wrap(InlineBlot.blotName, true);\n }\n _this.attributes.copy(child);\n });\n this.unwrap();\n }\n else {\n _super.prototype.format.call(this, name, value);\n }\n };\n InlineBlot.prototype.formatAt = function (index, length, name, value) {\n if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n var blot = this.isolate(index, length);\n blot.format(name, value);\n }\n else {\n _super.prototype.formatAt.call(this, index, length, name, value);\n }\n };\n InlineBlot.prototype.optimize = function (context) {\n _super.prototype.optimize.call(this, context);\n var formats = this.formats();\n if (Object.keys(formats).length === 0) {\n return this.unwrap(); // unformatted span\n }\n var next = this.next;\n if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n next.moveChildren(this);\n next.remove();\n }\n };\n InlineBlot.blotName = 'inline';\n InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n InlineBlot.tagName = 'SPAN';\n return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\nvar BlockBlot = /** @class */ (function (_super) {\n __extends(BlockBlot, _super);\n function BlockBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BlockBlot.formats = function (domNode) {\n var tagName = Registry.query(BlockBlot.blotName).tagName;\n if (domNode.tagName === tagName)\n return undefined;\n return _super.formats.call(this, domNode);\n };\n BlockBlot.prototype.format = function (name, value) {\n if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n return;\n }\n else if (name === this.statics.blotName && !value) {\n this.replaceWith(BlockBlot.blotName);\n }\n else {\n _super.prototype.format.call(this, name, value);\n }\n };\n BlockBlot.prototype.formatAt = function (index, length, name, value) {\n if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n this.format(name, value);\n }\n else {\n _super.prototype.formatAt.call(this, index, length, name, value);\n }\n };\n BlockBlot.prototype.insertAt = function (index, value, def) {\n if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n // Insert text or inline\n _super.prototype.insertAt.call(this, index, value, def);\n }\n else {\n var after = this.split(index);\n var blot = Registry.create(value, def);\n after.parent.insertBefore(blot, after);\n }\n };\n BlockBlot.prototype.update = function (mutations, context) {\n if (navigator.userAgent.match(/Trident/)) {\n this.build();\n }\n else {\n _super.prototype.update.call(this, mutations, context);\n }\n };\n BlockBlot.blotName = 'block';\n BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n BlockBlot.tagName = 'P';\n return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar EmbedBlot = /** @class */ (function (_super) {\n __extends(EmbedBlot, _super);\n function EmbedBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n EmbedBlot.formats = function (domNode) {\n return undefined;\n };\n EmbedBlot.prototype.format = function (name, value) {\n // super.formatAt wraps, which is what we want in general,\n // but this allows subclasses to overwrite for formats\n // that just apply to particular embeds\n _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n };\n EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n if (index === 0 && length === this.length()) {\n this.format(name, value);\n }\n else {\n _super.prototype.formatAt.call(this, index, length, name, value);\n }\n };\n EmbedBlot.prototype.formats = function () {\n return this.statics.formats(this.domNode);\n };\n return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar Registry = __webpack_require__(1);\nvar TextBlot = /** @class */ (function (_super) {\n __extends(TextBlot, _super);\n function TextBlot(node) {\n var _this = _super.call(this, node) || this;\n _this.text = _this.statics.value(_this.domNode);\n return _this;\n }\n TextBlot.create = function (value) {\n return document.createTextNode(value);\n };\n TextBlot.value = function (domNode) {\n var text = domNode.data;\n // @ts-ignore\n if (text['normalize'])\n text = text['normalize']();\n return text;\n };\n TextBlot.prototype.deleteAt = function (index, length) {\n this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n };\n TextBlot.prototype.index = function (node, offset) {\n if (this.domNode === node) {\n return offset;\n }\n return -1;\n };\n TextBlot.prototype.insertAt = function (index, value, def) {\n if (def == null) {\n this.text = this.text.slice(0, index) + value + this.text.slice(index);\n this.domNode.data = this.text;\n }\n else {\n _super.prototype.insertAt.call(this, index, value, def);\n }\n };\n TextBlot.prototype.length = function () {\n return this.text.length;\n };\n TextBlot.prototype.optimize = function (context) {\n _super.prototype.optimize.call(this, context);\n this.text = this.statics.value(this.domNode);\n if (this.text.length === 0) {\n this.remove();\n }\n else if (this.next instanceof TextBlot && this.next.prev === this) {\n this.insertAt(this.length(), this.next.value());\n this.next.remove();\n }\n };\n TextBlot.prototype.position = function (index, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n return [this.domNode, index];\n };\n TextBlot.prototype.split = function (index, force) {\n if (force === void 0) { force = false; }\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n var after = Registry.create(this.domNode.splitText(index));\n this.parent.insertBefore(after, this.next);\n this.text = this.statics.value(this.domNode);\n return after;\n };\n TextBlot.prototype.update = function (mutations, context) {\n var _this = this;\n if (mutations.some(function (mutation) {\n return mutation.type === 'characterData' && mutation.target === _this.domNode;\n })) {\n this.text = this.statics.value(this.domNode);\n }\n };\n TextBlot.prototype.value = function () {\n return this.text;\n };\n TextBlot.blotName = 'text';\n TextBlot.scope = Registry.Scope.INLINE_BLOT;\n return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n var _toggle = DOMTokenList.prototype.toggle;\n DOMTokenList.prototype.toggle = function (token, force) {\n if (arguments.length > 1 && !this.contains(token) === !force) {\n return force;\n } else {\n return _toggle.call(this, token);\n }\n };\n}\n\nif (!String.prototype.startsWith) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.substr(position, searchString.length) === searchString;\n };\n}\n\nif (!String.prototype.endsWith) {\n String.prototype.endsWith = function (searchString, position) {\n var subjectString = this.toString();\n if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n}\n\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, \"find\", {\n value: function value(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value;\n }\n }\n return undefined;\n }\n });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Disable resizing in Firefox\n document.execCommand(\"enableObjectResizing\", false, false);\n // Disable automatic linkifying in IE11\n document.execCommand(\"autoUrlDetect\", false, false);\n});\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\n/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n // Check cursor_pos within bounds\n if (cursor_pos < 0 || text1.length < cursor_pos) {\n cursor_pos = null;\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs);\n if (cursor_pos != null) {\n diffs = fix_cursor(diffs, cursor_pos);\n }\n diffs = fix_emoji(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, [DIFF_EQUAL,\n text_insert.substring(0, commonlength)]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n if (count_delete === 0) {\n diffs.splice(pointer - count_insert,\n count_delete + count_insert, [DIFF_INSERT, text_insert]);\n } else if (count_insert === 0) {\n diffs.splice(pointer - count_delete,\n count_delete + count_insert, [DIFF_DELETE, text_delete]);\n } else {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]);\n }\n pointer = pointer - count_delete - count_insert +\n (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: ABAC -> ABAC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n * cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n * => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n * cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n * => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n if (cursor_pos === 0) {\n return [DIFF_EQUAL, diffs];\n }\n for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n var d = diffs[i];\n if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n var next_pos = current_pos + d[1].length;\n if (cursor_pos === next_pos) {\n return [i + 1, diffs];\n } else if (cursor_pos < next_pos) {\n // copy to prevent side effects\n diffs = diffs.slice();\n // split d into two diff changes\n var split_pos = cursor_pos - current_pos;\n var d_left = [d[0], d[1].slice(0, split_pos)];\n var d_right = [d[0], d[1].slice(split_pos)];\n diffs.splice(i, 1, d_left, d_right);\n return [i + 1, diffs];\n } else {\n current_pos = next_pos;\n }\n }\n }\n throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n * Check if a naive shift is possible:\n * [0, X], [ 1, Y] -> [ 1, Y], [0, X] (if X + Y === Y + X)\n * [0, X], [-1, Y] -> [-1, Y], [0, X] (if X + Y === Y + X) - holds same result\n * Case 2)\n * Check if the following shifts are possible:\n * [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n * [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n * ^ ^\n * d d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n var norm = cursor_normalize_diff(diffs, cursor_pos);\n var ndiffs = norm[1];\n var cursor_pointer = norm[0];\n var d = ndiffs[cursor_pointer];\n var d_next = ndiffs[cursor_pointer + 1];\n\n if (d == null) {\n // Text was deleted from end of original string,\n // cursor is now out of bounds in new string\n return diffs;\n } else if (d[0] !== DIFF_EQUAL) {\n // A modification happened at the cursor location.\n // This is the expected outcome, so we can return the original diff.\n return diffs;\n } else {\n if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n // Case 1)\n // It is possible to perform a naive shift\n ndiffs.splice(cursor_pointer, 2, d_next, d)\n return merge_tuples(ndiffs, cursor_pointer, 2)\n } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n // Case 2)\n // d[1] is a prefix of d_next[1]\n // We can assume that d_next[0] !== 0, since d[0] === 0\n // Shift edit locations..\n ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n var suffix = d_next[1].slice(d[1].length);\n if (suffix.length > 0) {\n ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n }\n return merge_tuples(ndiffs, cursor_pointer, 3)\n } else {\n // Not possible to perform any modification\n return diffs;\n }\n }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n * '\\uD83D\\uDC36' === '🐶', '\\uD83D\\uDC2F' === '🐯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n var compact = false;\n var starts_with_pair_end = function(str) {\n return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n }\n var ends_with_pair_start = function(str) {\n return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n }\n for (var i = 2; i < diffs.length; i += 1) {\n if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n compact = true;\n\n diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n }\n }\n if (!compact) {\n return diffs;\n }\n var fixed_diffs = [];\n for (var i = 0; i < diffs.length; i += 1) {\n if (diffs[i][1].length > 0) {\n fixed_diffs.push(diffs[i]);\n }\n }\n return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n // Check from (start-1) to (start+length).\n for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n if (i + 1 < diffs.length) {\n var left_d = diffs[i];\n var right_d = diffs[i+1];\n if (left_d[0] === right_d[1]) {\n diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n }\n }\n }\n return diffs;\n}\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nexports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nvar supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n var evt = prefix ? prefix + event : event\n , available = this._events[evt];\n\n if (exists) return !!available;\n if (!available) return [];\n if (available.fn) return [available.fn];\n\n for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n ee[i] = available[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n var listener = new EE(fn, context || this)\n , evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n else if (!this._events[evt].fn) this._events[evt].push(listener);\n else this._events[evt] = [this._events[evt], listener];\n\n return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n var listener = new EE(fn, context || this, true)\n , evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n else if (!this._events[evt].fn) this._events[evt].push(listener);\n else this._events[evt] = [this._events[evt], listener];\n\n return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn\n && (!once || listeners.once)\n && (!context || listeners.context === context)\n ) {\n if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn\n || (once && !listeners[i].once)\n || (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) {\n if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n }\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;\n\nvar _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\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend2 = __webpack_require__(3);\n\nvar _extend3 = _interopRequireDefault(_extend2);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _align = __webpack_require__(36);\n\nvar _background = __webpack_require__(37);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _color = __webpack_require__(26);\n\nvar _direction = __webpack_require__(38);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:clipboard');\n\nvar DOM_KEY = '__ql-matcher';\n\nvar CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];\n\nvar ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\n\nvar STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\n\nvar Clipboard = function (_Module) {\n _inherits(Clipboard, _Module);\n\n function Clipboard(quill, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));\n\n _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));\n _this.container = _this.quill.addContainer('ql-clipboard');\n _this.container.setAttribute('contenteditable', true);\n _this.container.setAttribute('tabindex', -1);\n _this.matchers = [];\n CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n selector = _ref2[0],\n matcher = _ref2[1];\n\n if (!options.matchVisual && matcher === matchSpacing) return;\n _this.addMatcher(selector, matcher);\n });\n return _this;\n }\n\n _createClass(Clipboard, [{\n key: 'addMatcher',\n value: function addMatcher(selector, matcher) {\n this.matchers.push([selector, matcher]);\n }\n }, {\n key: 'convert',\n value: function convert(html) {\n if (typeof html === 'string') {\n this.container.innerHTML = html.replace(/\\>\\r?\\n +\\<'); // Remove spaces between tags\n return this.convert();\n }\n var formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n if (formats[_code2.default.blotName]) {\n var text = this.container.innerText;\n this.container.innerHTML = '';\n return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));\n }\n\n var _prepareMatching = this.prepareMatching(),\n _prepareMatching2 = _slicedToArray(_prepareMatching, 2),\n elementMatchers = _prepareMatching2[0],\n textMatchers = _prepareMatching2[1];\n\n var delta = traverse(this.container, elementMatchers, textMatchers);\n // Remove trailing newline\n if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));\n }\n debug.log('convert', this.container.innerHTML, delta);\n this.container.innerHTML = '';\n return delta;\n }\n }, {\n key: 'dangerouslyPasteHTML',\n value: function dangerouslyPasteHTML(index, html) {\n var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;\n\n if (typeof index === 'string') {\n this.quill.setContents(this.convert(index), html);\n this.quill.setSelection(0, _quill2.default.sources.SILENT);\n } else {\n var paste = this.convert(html);\n this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);\n this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);\n }\n }\n }, {\n key: 'onPaste',\n value: function onPaste(e) {\n var _this2 = this;\n\n if (e.defaultPrevented || !this.quill.isEnabled()) return;\n var range = this.quill.getSelection();\n var delta = new _quillDelta2.default().retain(range.index);\n var scrollTop = this.quill.scrollingContainer.scrollTop;\n this.container.focus();\n this.quill.selection.update(_quill2.default.sources.SILENT);\n setTimeout(function () {\n delta = delta.concat(_this2.convert()).delete(range.length);\n _this2.quill.updateContents(delta, _quill2.default.sources.USER);\n // range.length contributes to delta.length()\n _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);\n _this2.quill.scrollingContainer.scrollTop = scrollTop;\n _this2.quill.focus();\n }, 1);\n }\n }, {\n key: 'prepareMatching',\n value: function prepareMatching() {\n var _this3 = this;\n\n var elementMatchers = [],\n textMatchers = [];\n this.matchers.forEach(function (pair) {\n var _pair = _slicedToArray(pair, 2),\n selector = _pair[0],\n matcher = _pair[1];\n\n switch (selector) {\n case Node.TEXT_NODE:\n textMatchers.push(matcher);\n break;\n case Node.ELEMENT_NODE:\n elementMatchers.push(matcher);\n break;\n default:\n [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {\n // TODO use weakmap\n node[DOM_KEY] = node[DOM_KEY] || [];\n node[DOM_KEY].push(matcher);\n });\n break;\n }\n });\n return [elementMatchers, textMatchers];\n }\n }]);\n\n return Clipboard;\n}(_module2.default);\n\nClipboard.DEFAULTS = {\n matchers: [],\n matchVisual: true\n};\n\nfunction applyFormat(delta, format, value) {\n if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {\n return Object.keys(format).reduce(function (delta, key) {\n return applyFormat(delta, key, format[key]);\n }, delta);\n } else {\n return delta.reduce(function (delta, op) {\n if (op.attributes && op.attributes[format]) {\n return delta.push(op);\n } else {\n return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));\n }\n }, new _quillDelta2.default());\n }\n}\n\nfunction computeStyle(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) return {};\n var DOM_KEY = '__ql-computed-style';\n return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n var endText = \"\";\n for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n var op = delta.ops[i];\n if (typeof op.insert !== 'string') break;\n endText = op.insert + endText;\n }\n return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node) {\n if (node.childNodes.length === 0) return false; // Exclude embed blocks\n var style = computeStyle(node);\n return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) {\n // Post-order\n if (node.nodeType === node.TEXT_NODE) {\n return textMatchers.reduce(function (delta, matcher) {\n return matcher(node, delta);\n }, new _quillDelta2.default());\n } else if (node.nodeType === node.ELEMENT_NODE) {\n return [].reduce.call(node.childNodes || [], function (delta, childNode) {\n var childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n if (childNode.nodeType === node.ELEMENT_NODE) {\n childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {\n return matcher(childNode, childrenDelta);\n }, childrenDelta);\n childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {\n return matcher(childNode, childrenDelta);\n }, childrenDelta);\n }\n return delta.concat(childrenDelta);\n }, new _quillDelta2.default());\n } else {\n return new _quillDelta2.default();\n }\n}\n\nfunction matchAlias(format, node, delta) {\n return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n var attributes = _parchment2.default.Attributor.Attribute.keys(node);\n var classes = _parchment2.default.Attributor.Class.keys(node);\n var styles = _parchment2.default.Attributor.Style.keys(node);\n var formats = {};\n attributes.concat(classes).concat(styles).forEach(function (name) {\n var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);\n if (attr != null) {\n formats[attr.attrName] = attr.value(node);\n if (formats[attr.attrName]) return;\n }\n attr = ATTRIBUTE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n attr = STYLE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n attr = STYLE_ATTRIBUTORS[name];\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n });\n if (Object.keys(formats).length > 0) {\n delta = applyFormat(delta, formats);\n }\n return delta;\n}\n\nfunction matchBlot(node, delta) {\n var match = _parchment2.default.query(node);\n if (match == null) return delta;\n if (match.prototype instanceof _parchment2.default.Embed) {\n var embed = {};\n var value = match.value(node);\n if (value != null) {\n embed[match.blotName] = value;\n delta = new _quillDelta2.default().insert(embed, match.formats(node));\n }\n } else if (typeof match.formats === 'function') {\n delta = applyFormat(delta, match.blotName, match.formats(node));\n }\n return delta;\n}\n\nfunction matchBreak(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n return delta;\n}\n\nfunction matchIgnore() {\n return new _quillDelta2.default();\n}\n\nfunction matchIndent(node, delta) {\n var match = _parchment2.default.query(node);\n if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n return delta;\n }\n var indent = -1,\n parent = node.parentNode;\n while (!parent.classList.contains('ql-clipboard')) {\n if ((_parchment2.default.query(parent) || {}).blotName === 'list') {\n indent += 1;\n }\n parent = parent.parentNode;\n }\n if (indent <= 0) return delta;\n return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));\n}\n\nfunction matchNewline(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {\n delta.insert('\\n');\n }\n }\n return delta;\n}\n\nfunction matchSpacing(node, delta) {\n if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {\n delta.insert('\\n');\n }\n }\n return delta;\n}\n\nfunction matchStyles(node, delta) {\n var formats = {};\n var style = node.style || {};\n if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n formats.italic = true;\n }\n if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {\n formats.bold = true;\n }\n if (Object.keys(formats).length > 0) {\n delta = applyFormat(delta, formats);\n }\n if (parseFloat(style.textIndent || 0) > 0) {\n // Could be 0.5in\n delta = new _quillDelta2.default().insert('\\t').concat(delta);\n }\n return delta;\n}\n\nfunction matchText(node, delta) {\n var text = node.data;\n // Word represents empty line with  \n if (node.parentNode.tagName === 'O:P') {\n return delta.insert(text.trim());\n }\n if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n return delta;\n }\n if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n // eslint-disable-next-line func-style\n var replacer = function replacer(collapse, match) {\n match = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n return match.length < 1 && collapse ? ' ' : match;\n };\n text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {\n text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n }\n if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {\n text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n }\n }\n return delta.insert(text);\n}\n\nexports.default = Clipboard;\nexports.matchAttributor = matchAttributor;\nexports.matchBlot = matchBlot;\nexports.matchNewline = matchNewline;\nexports.matchSpacing = matchSpacing;\nexports.matchText = matchText;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Bold = function (_Inline) {\n _inherits(Bold, _Inline);\n\n function Bold() {\n _classCallCheck(this, Bold);\n\n return _possibleConstructorReturn(this, (Bold.__proto__ || Object.getPrototypeOf(Bold)).apply(this, arguments));\n }\n\n _createClass(Bold, [{\n key: 'optimize',\n value: function optimize(context) {\n _get(Bold.prototype.__proto__ || Object.getPrototypeOf(Bold.prototype), 'optimize', this).call(this, context);\n if (this.domNode.tagName !== this.statics.tagName[0]) {\n this.replaceWith(this.statics.blotName);\n }\n }\n }], [{\n key: 'create',\n value: function create() {\n return _get(Bold.__proto__ || Object.getPrototypeOf(Bold), 'create', this).call(this);\n }\n }, {\n key: 'formats',\n value: function formats() {\n return true;\n }\n }]);\n\n return Bold;\n}(_inline2.default);\n\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexports.default = Bold;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addControls = exports.default = undefined;\n\nvar _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\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:toolbar');\n\nvar Toolbar = function (_Module) {\n _inherits(Toolbar, _Module);\n\n function Toolbar(quill, options) {\n _classCallCheck(this, Toolbar);\n\n var _this = _possibleConstructorReturn(this, (Toolbar.__proto__ || Object.getPrototypeOf(Toolbar)).call(this, quill, options));\n\n if (Array.isArray(_this.options.container)) {\n var container = document.createElement('div');\n addControls(container, _this.options.container);\n quill.container.parentNode.insertBefore(container, quill.container);\n _this.container = container;\n } else if (typeof _this.options.container === 'string') {\n _this.container = document.querySelector(_this.options.container);\n } else {\n _this.container = _this.options.container;\n }\n if (!(_this.container instanceof HTMLElement)) {\n var _ret;\n\n return _ret = debug.error('Container required for toolbar', _this.options), _possibleConstructorReturn(_this, _ret);\n }\n _this.container.classList.add('ql-toolbar');\n _this.controls = [];\n _this.handlers = {};\n Object.keys(_this.options.handlers).forEach(function (format) {\n _this.addHandler(format, _this.options.handlers[format]);\n });\n [].forEach.call(_this.container.querySelectorAll('button, select'), function (input) {\n _this.attach(input);\n });\n _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (type, range) {\n if (type === _quill2.default.events.SELECTION_CHANGE) {\n _this.update(range);\n }\n });\n _this.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n var _this$quill$selection = _this.quill.selection.getRange(),\n _this$quill$selection2 = _slicedToArray(_this$quill$selection, 1),\n range = _this$quill$selection2[0]; // quill.getSelection triggers update\n\n\n _this.update(range);\n });\n return _this;\n }\n\n _createClass(Toolbar, [{\n key: 'addHandler',\n value: function addHandler(format, handler) {\n this.handlers[format] = handler;\n }\n }, {\n key: 'attach',\n value: function attach(input) {\n var _this2 = this;\n\n var format = [].find.call(input.classList, function (className) {\n return className.indexOf('ql-') === 0;\n });\n if (!format) return;\n format = format.slice('ql-'.length);\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button');\n }\n if (this.handlers[format] == null) {\n if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n debug.warn('ignoring attaching to disabled format', format, input);\n return;\n }\n if (_parchment2.default.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input);\n return;\n }\n }\n var eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n input.addEventListener(eventName, function (e) {\n var value = void 0;\n if (input.tagName === 'SELECT') {\n if (input.selectedIndex < 0) return;\n var selected = input.options[input.selectedIndex];\n if (selected.hasAttribute('selected')) {\n value = false;\n } else {\n value = selected.value || false;\n }\n } else {\n if (input.classList.contains('ql-active')) {\n value = false;\n } else {\n value = input.value || !input.hasAttribute('value');\n }\n e.preventDefault();\n }\n _this2.quill.focus();\n\n var _quill$selection$getR = _this2.quill.selection.getRange(),\n _quill$selection$getR2 = _slicedToArray(_quill$selection$getR, 1),\n range = _quill$selection$getR2[0];\n\n if (_this2.handlers[format] != null) {\n _this2.handlers[format].call(_this2, value);\n } else if (_parchment2.default.query(format).prototype instanceof _parchment2.default.Embed) {\n value = prompt('Enter ' + format);\n if (!value) return;\n _this2.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert(_defineProperty({}, format, value)), _quill2.default.sources.USER);\n } else {\n _this2.quill.format(format, value, _quill2.default.sources.USER);\n }\n _this2.update(range);\n });\n // TODO use weakmap\n this.controls.push([format, input]);\n }\n }, {\n key: 'update',\n value: function update(range) {\n var formats = range == null ? {} : this.quill.getFormat(range);\n this.controls.forEach(function (pair) {\n var _pair = _slicedToArray(pair, 2),\n format = _pair[0],\n input = _pair[1];\n\n if (input.tagName === 'SELECT') {\n var option = void 0;\n if (range == null) {\n option = null;\n } else if (formats[format] == null) {\n option = input.querySelector('option[selected]');\n } else if (!Array.isArray(formats[format])) {\n var value = formats[format];\n if (typeof value === 'string') {\n value = value.replace(/\\\"/g, '\\\\\"');\n }\n option = input.querySelector('option[value=\"' + value + '\"]');\n }\n if (option == null) {\n input.value = ''; // TODO make configurable?\n input.selectedIndex = -1;\n } else {\n option.selected = true;\n }\n } else {\n if (range == null) {\n input.classList.remove('ql-active');\n } else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n var isActive = formats[format] === input.getAttribute('value') || formats[format] != null && formats[format].toString() === input.getAttribute('value') || formats[format] == null && !input.getAttribute('value');\n input.classList.toggle('ql-active', isActive);\n } else {\n input.classList.toggle('ql-active', formats[format] != null);\n }\n }\n });\n }\n }]);\n\n return Toolbar;\n}(_module2.default);\n\nToolbar.DEFAULTS = {};\n\nfunction addButton(container, format, value) {\n var input = document.createElement('button');\n input.setAttribute('type', 'button');\n input.classList.add('ql-' + format);\n if (value != null) {\n input.value = value;\n }\n container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n if (!Array.isArray(groups[0])) {\n groups = [groups];\n }\n groups.forEach(function (controls) {\n var group = document.createElement('span');\n group.classList.add('ql-formats');\n controls.forEach(function (control) {\n if (typeof control === 'string') {\n addButton(group, control);\n } else {\n var format = Object.keys(control)[0];\n var value = control[format];\n if (Array.isArray(value)) {\n addSelect(group, format, value);\n } else {\n addButton(group, format, value);\n }\n }\n });\n container.appendChild(group);\n });\n}\n\nfunction addSelect(container, format, values) {\n var input = document.createElement('select');\n input.classList.add('ql-' + format);\n values.forEach(function (value) {\n var option = document.createElement('option');\n if (value !== false) {\n option.setAttribute('value', value);\n } else {\n option.setAttribute('selected', 'selected');\n }\n input.appendChild(option);\n });\n container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n container: null,\n handlers: {\n clean: function clean() {\n var _this3 = this;\n\n var range = this.quill.getSelection();\n if (range == null) return;\n if (range.length == 0) {\n var formats = this.quill.getFormat();\n Object.keys(formats).forEach(function (name) {\n // Clean functionality in existing apps only clean inline formats\n if (_parchment2.default.query(name, _parchment2.default.Scope.INLINE) != null) {\n _this3.quill.format(name, false);\n }\n });\n } else {\n this.quill.removeFormat(range, _quill2.default.sources.USER);\n }\n },\n direction: function direction(value) {\n var align = this.quill.getFormat()['align'];\n if (value === 'rtl' && align == null) {\n this.quill.format('align', 'right', _quill2.default.sources.USER);\n } else if (!value && align === 'right') {\n this.quill.format('align', false, _quill2.default.sources.USER);\n }\n this.quill.format('direction', value, _quill2.default.sources.USER);\n },\n indent: function indent(value) {\n var range = this.quill.getSelection();\n var formats = this.quill.getFormat(range);\n var indent = parseInt(formats.indent || 0);\n if (value === '+1' || value === '-1') {\n var modifier = value === '+1' ? 1 : -1;\n if (formats.direction === 'rtl') modifier *= -1;\n this.quill.format('indent', indent + modifier, _quill2.default.sources.USER);\n }\n },\n link: function link(value) {\n if (value === true) {\n value = prompt('Enter link URL:');\n }\n this.quill.format('link', value, _quill2.default.sources.USER);\n },\n list: function list(value) {\n var range = this.quill.getSelection();\n var formats = this.quill.getFormat(range);\n if (value === 'check') {\n if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n this.quill.format('list', false, _quill2.default.sources.USER);\n } else {\n this.quill.format('list', 'unchecked', _quill2.default.sources.USER);\n }\n } else {\n this.quill.format('list', value, _quill2.default.sources.USER);\n }\n }\n }\n};\n\nexports.default = Toolbar;\nexports.addControls = addControls;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorPicker = function (_Picker) {\n _inherits(ColorPicker, _Picker);\n\n function ColorPicker(select, label) {\n _classCallCheck(this, ColorPicker);\n\n var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this, select));\n\n _this.label.innerHTML = label;\n _this.container.classList.add('ql-color-picker');\n [].slice.call(_this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function (item) {\n item.classList.add('ql-primary');\n });\n return _this;\n }\n\n _createClass(ColorPicker, [{\n key: 'buildItem',\n value: function buildItem(option) {\n var item = _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'buildItem', this).call(this, option);\n item.style.backgroundColor = option.getAttribute('value') || '';\n return item;\n }\n }, {\n key: 'selectItem',\n value: function selectItem(item, trigger) {\n _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'selectItem', this).call(this, item, trigger);\n var colorLabel = this.label.querySelector('.ql-color-label');\n var value = item ? item.getAttribute('data-value') || '' : '';\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value;\n } else {\n colorLabel.style.fill = value;\n }\n }\n }\n }]);\n\n return ColorPicker;\n}(_picker2.default);\n\nexports.default = ColorPicker;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IconPicker = function (_Picker) {\n _inherits(IconPicker, _Picker);\n\n function IconPicker(select, icons) {\n _classCallCheck(this, IconPicker);\n\n var _this = _possibleConstructorReturn(this, (IconPicker.__proto__ || Object.getPrototypeOf(IconPicker)).call(this, select));\n\n _this.container.classList.add('ql-icon-picker');\n [].forEach.call(_this.container.querySelectorAll('.ql-picker-item'), function (item) {\n item.innerHTML = icons[item.getAttribute('data-value') || ''];\n });\n _this.defaultItem = _this.container.querySelector('.ql-selected');\n _this.selectItem(_this.defaultItem);\n return _this;\n }\n\n _createClass(IconPicker, [{\n key: 'selectItem',\n value: function selectItem(item, trigger) {\n _get(IconPicker.prototype.__proto__ || Object.getPrototypeOf(IconPicker.prototype), 'selectItem', this).call(this, item, trigger);\n item = item || this.defaultItem;\n this.label.innerHTML = item.innerHTML;\n }\n }]);\n\n return IconPicker;\n}(_picker2.default);\n\nexports.default = IconPicker;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Tooltip = function () {\n function Tooltip(quill, boundsContainer) {\n var _this = this;\n\n _classCallCheck(this, Tooltip);\n\n this.quill = quill;\n this.boundsContainer = boundsContainer || document.body;\n this.root = quill.addContainer('ql-tooltip');\n this.root.innerHTML = this.constructor.TEMPLATE;\n if (this.quill.root === this.quill.scrollingContainer) {\n this.quill.root.addEventListener('scroll', function () {\n _this.root.style.marginTop = -1 * _this.quill.root.scrollTop + 'px';\n });\n }\n this.hide();\n }\n\n _createClass(Tooltip, [{\n key: 'hide',\n value: function hide() {\n this.root.classList.add('ql-hidden');\n }\n }, {\n key: 'position',\n value: function position(reference) {\n var left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n // root.scrollTop should be 0 if scrollContainer !== root\n var top = reference.bottom + this.quill.root.scrollTop;\n this.root.style.left = left + 'px';\n this.root.style.top = top + 'px';\n this.root.classList.remove('ql-flip');\n var containerBounds = this.boundsContainer.getBoundingClientRect();\n var rootBounds = this.root.getBoundingClientRect();\n var shift = 0;\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right;\n this.root.style.left = left + shift + 'px';\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left;\n this.root.style.left = left + shift + 'px';\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n var height = rootBounds.bottom - rootBounds.top;\n var verticalShift = reference.bottom - reference.top + height;\n this.root.style.top = top - verticalShift + 'px';\n this.root.classList.add('ql-flip');\n }\n return shift;\n }\n }, {\n key: 'show',\n value: function show() {\n this.root.classList.remove('ql-editing');\n this.root.classList.remove('ql-hidden');\n }\n }]);\n\n return Tooltip;\n}();\n\nexports.default = Tooltip;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _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\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [[{ header: ['1', '2', '3', false] }], ['bold', 'italic', 'underline', 'link'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];\n\nvar SnowTheme = function (_BaseTheme) {\n _inherits(SnowTheme, _BaseTheme);\n\n function SnowTheme(quill, options) {\n _classCallCheck(this, SnowTheme);\n\n if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n\n var _this = _possibleConstructorReturn(this, (SnowTheme.__proto__ || Object.getPrototypeOf(SnowTheme)).call(this, quill, options));\n\n _this.quill.container.classList.add('ql-snow');\n return _this;\n }\n\n _createClass(SnowTheme, [{\n key: 'extendToolbar',\n value: function extendToolbar(toolbar) {\n toolbar.container.classList.add('ql-snow');\n this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function (range, context) {\n toolbar.handlers['link'].call(toolbar, !context.format.link);\n });\n }\n }\n }]);\n\n return SnowTheme;\n}(_base2.default);\n\nSnowTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link: function link(value) {\n if (value) {\n var range = this.quill.getSelection();\n if (range == null || range.length == 0) return;\n var preview = this.quill.getText(range);\n if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n preview = 'mailto:' + preview;\n }\n var tooltip = this.quill.theme.tooltip;\n tooltip.edit('link', preview);\n } else {\n this.quill.format('link', false);\n }\n }\n }\n }\n }\n});\n\nvar SnowTooltip = function (_BaseTooltip) {\n _inherits(SnowTooltip, _BaseTooltip);\n\n function SnowTooltip(quill, bounds) {\n _classCallCheck(this, SnowTooltip);\n\n var _this2 = _possibleConstructorReturn(this, (SnowTooltip.__proto__ || Object.getPrototypeOf(SnowTooltip)).call(this, quill, bounds));\n\n _this2.preview = _this2.root.querySelector('a.ql-preview');\n return _this2;\n }\n\n _createClass(SnowTooltip, [{\n key: 'listen',\n value: function listen() {\n var _this3 = this;\n\n _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'listen', this).call(this);\n this.root.querySelector('a.ql-action').addEventListener('click', function (event) {\n if (_this3.root.classList.contains('ql-editing')) {\n _this3.save();\n } else {\n _this3.edit('link', _this3.preview.textContent);\n }\n event.preventDefault();\n });\n this.root.querySelector('a.ql-remove').addEventListener('click', function (event) {\n if (_this3.linkRange != null) {\n var range = _this3.linkRange;\n _this3.restoreFocus();\n _this3.quill.formatText(range, 'link', false, _emitter2.default.sources.USER);\n delete _this3.linkRange;\n }\n event.preventDefault();\n _this3.hide();\n });\n this.quill.on(_emitter2.default.events.SELECTION_CHANGE, function (range, oldRange, source) {\n if (range == null) return;\n if (range.length === 0 && source === _emitter2.default.sources.USER) {\n var _quill$scroll$descend = _this3.quill.scroll.descendant(_link2.default, range.index),\n _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n link = _quill$scroll$descend2[0],\n offset = _quill$scroll$descend2[1];\n\n if (link != null) {\n _this3.linkRange = new _selection.Range(range.index - offset, link.length());\n var preview = _link2.default.formats(link.domNode);\n _this3.preview.textContent = preview;\n _this3.preview.setAttribute('href', preview);\n _this3.show();\n _this3.position(_this3.quill.getBounds(_this3.linkRange));\n return;\n }\n } else {\n delete _this3.linkRange;\n }\n _this3.hide();\n });\n }\n }, {\n key: 'show',\n value: function show() {\n _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'show', this).call(this);\n this.root.removeAttribute('data-mode');\n }\n }]);\n\n return SnowTooltip;\n}(_base.BaseTooltip);\n\nSnowTooltip.TEMPLATE = ['', '', '', ''].join('');\n\nexports.default = SnowTheme;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _core = __webpack_require__(29);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _align = __webpack_require__(36);\n\nvar _direction = __webpack_require__(38);\n\nvar _indent = __webpack_require__(64);\n\nvar _blockquote = __webpack_require__(65);\n\nvar _blockquote2 = _interopRequireDefault(_blockquote);\n\nvar _header = __webpack_require__(66);\n\nvar _header2 = _interopRequireDefault(_header);\n\nvar _list = __webpack_require__(67);\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _background = __webpack_require__(37);\n\nvar _color = __webpack_require__(26);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nvar _italic = __webpack_require__(68);\n\nvar _italic2 = _interopRequireDefault(_italic);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _script = __webpack_require__(69);\n\nvar _script2 = _interopRequireDefault(_script);\n\nvar _strike = __webpack_require__(70);\n\nvar _strike2 = _interopRequireDefault(_strike);\n\nvar _underline = __webpack_require__(71);\n\nvar _underline2 = _interopRequireDefault(_underline);\n\nvar _image = __webpack_require__(72);\n\nvar _image2 = _interopRequireDefault(_image);\n\nvar _video = __webpack_require__(73);\n\nvar _video2 = _interopRequireDefault(_video);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _formula = __webpack_require__(74);\n\nvar _formula2 = _interopRequireDefault(_formula);\n\nvar _syntax = __webpack_require__(75);\n\nvar _syntax2 = _interopRequireDefault(_syntax);\n\nvar _toolbar = __webpack_require__(57);\n\nvar _toolbar2 = _interopRequireDefault(_toolbar);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nvar _bubble = __webpack_require__(108);\n\nvar _bubble2 = _interopRequireDefault(_bubble);\n\nvar _snow = __webpack_require__(62);\n\nvar _snow2 = _interopRequireDefault(_snow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_core2.default.register({\n 'attributors/attribute/direction': _direction.DirectionAttribute,\n\n 'attributors/class/align': _align.AlignClass,\n 'attributors/class/background': _background.BackgroundClass,\n 'attributors/class/color': _color.ColorClass,\n 'attributors/class/direction': _direction.DirectionClass,\n 'attributors/class/font': _font.FontClass,\n 'attributors/class/size': _size.SizeClass,\n\n 'attributors/style/align': _align.AlignStyle,\n 'attributors/style/background': _background.BackgroundStyle,\n 'attributors/style/color': _color.ColorStyle,\n 'attributors/style/direction': _direction.DirectionStyle,\n 'attributors/style/font': _font.FontStyle,\n 'attributors/style/size': _size.SizeStyle\n}, true);\n\n_core2.default.register({\n 'formats/align': _align.AlignClass,\n 'formats/direction': _direction.DirectionClass,\n 'formats/indent': _indent.IndentClass,\n\n 'formats/background': _background.BackgroundStyle,\n 'formats/color': _color.ColorStyle,\n 'formats/font': _font.FontClass,\n 'formats/size': _size.SizeClass,\n\n 'formats/blockquote': _blockquote2.default,\n 'formats/code-block': _code2.default,\n 'formats/header': _header2.default,\n 'formats/list': _list2.default,\n\n 'formats/bold': _bold2.default,\n 'formats/code': _code.Code,\n 'formats/italic': _italic2.default,\n 'formats/link': _link2.default,\n 'formats/script': _script2.default,\n 'formats/strike': _strike2.default,\n 'formats/underline': _underline2.default,\n\n 'formats/image': _image2.default,\n 'formats/video': _video2.default,\n\n 'formats/list/item': _list.ListItem,\n\n 'modules/formula': _formula2.default,\n 'modules/syntax': _syntax2.default,\n 'modules/toolbar': _toolbar2.default,\n\n 'themes/bubble': _bubble2.default,\n 'themes/snow': _snow2.default,\n\n 'ui/icons': _icons2.default,\n 'ui/picker': _picker2.default,\n 'ui/icon-picker': _iconPicker2.default,\n 'ui/color-picker': _colorPicker2.default,\n 'ui/tooltip': _tooltip2.default\n}, true);\n\nexports.default = _core2.default;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.IndentClass = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IdentAttributor = function (_Parchment$Attributor) {\n _inherits(IdentAttributor, _Parchment$Attributor);\n\n function IdentAttributor() {\n _classCallCheck(this, IdentAttributor);\n\n return _possibleConstructorReturn(this, (IdentAttributor.__proto__ || Object.getPrototypeOf(IdentAttributor)).apply(this, arguments));\n }\n\n _createClass(IdentAttributor, [{\n key: 'add',\n value: function add(node, value) {\n if (value === '+1' || value === '-1') {\n var indent = this.value(node) || 0;\n value = value === '+1' ? indent + 1 : indent - 1;\n }\n if (value === 0) {\n this.remove(node);\n return true;\n } else {\n return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'add', this).call(this, node, value);\n }\n }\n }, {\n key: 'canAdd',\n value: function canAdd(node, value) {\n return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, value) || _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, parseInt(value));\n }\n }, {\n key: 'value',\n value: function value(node) {\n return parseInt(_get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'value', this).call(this, node)) || undefined; // Don't return NaN\n }\n }]);\n\n return IdentAttributor;\n}(_parchment2.default.Attributor.Class);\n\nvar IndentClass = new IdentAttributor('indent', 'ql-indent', {\n scope: _parchment2.default.Scope.BLOCK,\n whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\n\nexports.IndentClass = IndentClass;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Blockquote = function (_Block) {\n _inherits(Blockquote, _Block);\n\n function Blockquote() {\n _classCallCheck(this, Blockquote);\n\n return _possibleConstructorReturn(this, (Blockquote.__proto__ || Object.getPrototypeOf(Blockquote)).apply(this, arguments));\n }\n\n return Blockquote;\n}(_block2.default);\n\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\nexports.default = Blockquote;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Header = function (_Block) {\n _inherits(Header, _Block);\n\n function Header() {\n _classCallCheck(this, Header);\n\n return _possibleConstructorReturn(this, (Header.__proto__ || Object.getPrototypeOf(Header)).apply(this, arguments));\n }\n\n _createClass(Header, null, [{\n key: 'formats',\n value: function formats(domNode) {\n return this.tagName.indexOf(domNode.tagName) + 1;\n }\n }]);\n\n return Header;\n}(_block2.default);\n\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\nexports.default = Header;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.ListItem = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ListItem = function (_Block) {\n _inherits(ListItem, _Block);\n\n function ListItem() {\n _classCallCheck(this, ListItem);\n\n return _possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).apply(this, arguments));\n }\n\n _createClass(ListItem, [{\n key: 'format',\n value: function format(name, value) {\n if (name === List.blotName && !value) {\n this.replaceWith(_parchment2.default.create(this.statics.scope));\n } else {\n _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'format', this).call(this, name, value);\n }\n }\n }, {\n key: 'remove',\n value: function remove() {\n if (this.prev == null && this.next == null) {\n this.parent.remove();\n } else {\n _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'remove', this).call(this);\n }\n }\n }, {\n key: 'replaceWith',\n value: function replaceWith(name, value) {\n this.parent.isolate(this.offset(this.parent), this.length());\n if (name === this.parent.statics.blotName) {\n this.parent.replaceWith(name, value);\n return this;\n } else {\n this.parent.unwrap();\n return _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'replaceWith', this).call(this, name, value);\n }\n }\n }], [{\n key: 'formats',\n value: function formats(domNode) {\n return domNode.tagName === this.tagName ? undefined : _get(ListItem.__proto__ || Object.getPrototypeOf(ListItem), 'formats', this).call(this, domNode);\n }\n }]);\n\n return ListItem;\n}(_block2.default);\n\nListItem.blotName = 'list-item';\nListItem.tagName = 'LI';\n\nvar List = function (_Container) {\n _inherits(List, _Container);\n\n _createClass(List, null, [{\n key: 'create',\n value: function create(value) {\n var tagName = value === 'ordered' ? 'OL' : 'UL';\n var node = _get(List.__proto__ || Object.getPrototypeOf(List), 'create', this).call(this, tagName);\n if (value === 'checked' || value === 'unchecked') {\n node.setAttribute('data-checked', value === 'checked');\n }\n return node;\n }\n }, {\n key: 'formats',\n value: function formats(domNode) {\n if (domNode.tagName === 'OL') return 'ordered';\n if (domNode.tagName === 'UL') {\n if (domNode.hasAttribute('data-checked')) {\n return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';\n } else {\n return 'bullet';\n }\n }\n return undefined;\n }\n }]);\n\n function List(domNode) {\n _classCallCheck(this, List);\n\n var _this2 = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, domNode));\n\n var listEventHandler = function listEventHandler(e) {\n if (e.target.parentNode !== domNode) return;\n var format = _this2.statics.formats(domNode);\n var blot = _parchment2.default.find(e.target);\n if (format === 'checked') {\n blot.format('list', 'unchecked');\n } else if (format === 'unchecked') {\n blot.format('list', 'checked');\n }\n };\n\n domNode.addEventListener('touchstart', listEventHandler);\n domNode.addEventListener('mousedown', listEventHandler);\n return _this2;\n }\n\n _createClass(List, [{\n key: 'format',\n value: function format(name, value) {\n if (this.children.length > 0) {\n this.children.tail.format(name, value);\n }\n }\n }, {\n key: 'formats',\n value: function formats() {\n // We don't inherit from FormatBlot\n return _defineProperty({}, this.statics.blotName, this.statics.formats(this.domNode));\n }\n }, {\n key: 'insertBefore',\n value: function insertBefore(blot, ref) {\n if (blot instanceof ListItem) {\n _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'insertBefore', this).call(this, blot, ref);\n } else {\n var index = ref == null ? this.length() : ref.offset(this);\n var after = this.split(index);\n after.parent.insertBefore(blot, after);\n }\n }\n }, {\n key: 'optimize',\n value: function optimize(context) {\n _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'optimize', this).call(this, context);\n var next = this.next;\n if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {\n next.moveChildren(this);\n next.remove();\n }\n }\n }, {\n key: 'replace',\n value: function replace(target) {\n if (target.statics.blotName !== this.statics.blotName) {\n var item = _parchment2.default.create(this.statics.defaultChild);\n target.moveChildren(item);\n this.appendChild(item);\n }\n _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'replace', this).call(this, target);\n }\n }]);\n\n return List;\n}(_container2.default);\n\nList.blotName = 'list';\nList.scope = _parchment2.default.Scope.BLOCK_BLOT;\nList.tagName = ['OL', 'UL'];\nList.defaultChild = 'list-item';\nList.allowedChildren = [ListItem];\n\nexports.ListItem = ListItem;\nexports.default = List;\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Italic = function (_Bold) {\n _inherits(Italic, _Bold);\n\n function Italic() {\n _classCallCheck(this, Italic);\n\n return _possibleConstructorReturn(this, (Italic.__proto__ || Object.getPrototypeOf(Italic)).apply(this, arguments));\n }\n\n return Italic;\n}(_bold2.default);\n\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexports.default = Italic;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Script = function (_Inline) {\n _inherits(Script, _Inline);\n\n function Script() {\n _classCallCheck(this, Script);\n\n return _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).apply(this, arguments));\n }\n\n _createClass(Script, null, [{\n key: 'create',\n value: function create(value) {\n if (value === 'super') {\n return document.createElement('sup');\n } else if (value === 'sub') {\n return document.createElement('sub');\n } else {\n return _get(Script.__proto__ || Object.getPrototypeOf(Script), 'create', this).call(this, value);\n }\n }\n }, {\n key: 'formats',\n value: function formats(domNode) {\n if (domNode.tagName === 'SUB') return 'sub';\n if (domNode.tagName === 'SUP') return 'super';\n return undefined;\n }\n }]);\n\n return Script;\n}(_inline2.default);\n\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexports.default = Script;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Strike = function (_Inline) {\n _inherits(Strike, _Inline);\n\n function Strike() {\n _classCallCheck(this, Strike);\n\n return _possibleConstructorReturn(this, (Strike.__proto__ || Object.getPrototypeOf(Strike)).apply(this, arguments));\n }\n\n return Strike;\n}(_inline2.default);\n\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexports.default = Strike;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Underline = function (_Inline) {\n _inherits(Underline, _Inline);\n\n function Underline() {\n _classCallCheck(this, Underline);\n\n return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).apply(this, arguments));\n }\n\n return Underline;\n}(_inline2.default);\n\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexports.default = Underline;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _link = __webpack_require__(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['alt', 'height', 'width'];\n\nvar Image = function (_Parchment$Embed) {\n _inherits(Image, _Parchment$Embed);\n\n function Image() {\n _classCallCheck(this, Image);\n\n return _possibleConstructorReturn(this, (Image.__proto__ || Object.getPrototypeOf(Image)).apply(this, arguments));\n }\n\n _createClass(Image, [{\n key: 'format',\n value: function format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n _get(Image.prototype.__proto__ || Object.getPrototypeOf(Image.prototype), 'format', this).call(this, name, value);\n }\n }\n }], [{\n key: 'create',\n value: function create(value) {\n var node = _get(Image.__proto__ || Object.getPrototypeOf(Image), 'create', this).call(this, value);\n if (typeof value === 'string') {\n node.setAttribute('src', this.sanitize(value));\n }\n return node;\n }\n }, {\n key: 'formats',\n value: function formats(domNode) {\n return ATTRIBUTES.reduce(function (formats, attribute) {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n }, {\n key: 'match',\n value: function match(url) {\n return (/\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n );\n }\n }, {\n key: 'sanitize',\n value: function sanitize(url) {\n return (0, _link.sanitize)(url, ['http', 'https', 'data']) ? url : '//:0';\n }\n }, {\n key: 'value',\n value: function value(domNode) {\n return domNode.getAttribute('src');\n }\n }]);\n\n return Image;\n}(_parchment2.default.Embed);\n\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\nexports.default = Image;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _block = __webpack_require__(4);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['height', 'width'];\n\nvar Video = function (_BlockEmbed) {\n _inherits(Video, _BlockEmbed);\n\n function Video() {\n _classCallCheck(this, Video);\n\n return _possibleConstructorReturn(this, (Video.__proto__ || Object.getPrototypeOf(Video)).apply(this, arguments));\n }\n\n _createClass(Video, [{\n key: 'format',\n value: function format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n _get(Video.prototype.__proto__ || Object.getPrototypeOf(Video.prototype), 'format', this).call(this, name, value);\n }\n }\n }], [{\n key: 'create',\n value: function create(value) {\n var node = _get(Video.__proto__ || Object.getPrototypeOf(Video), 'create', this).call(this, value);\n node.setAttribute('frameborder', '0');\n node.setAttribute('allowfullscreen', true);\n node.setAttribute('src', this.sanitize(value));\n return node;\n }\n }, {\n key: 'formats',\n value: function formats(domNode) {\n return ATTRIBUTES.reduce(function (formats, attribute) {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n }, {\n key: 'sanitize',\n value: function sanitize(url) {\n return _link2.default.sanitize(url);\n }\n }, {\n key: 'value',\n value: function value(domNode) {\n return domNode.getAttribute('src');\n }\n }]);\n\n return Video;\n}(_block.BlockEmbed);\n\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\nexports.default = Video;\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.FormulaBlot = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FormulaBlot = function (_Embed) {\n _inherits(FormulaBlot, _Embed);\n\n function FormulaBlot() {\n _classCallCheck(this, FormulaBlot);\n\n return _possibleConstructorReturn(this, (FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot)).apply(this, arguments));\n }\n\n _createClass(FormulaBlot, null, [{\n key: 'create',\n value: function create(value) {\n var node = _get(FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot), 'create', this).call(this, value);\n if (typeof value === 'string') {\n window.katex.render(value, node, {\n throwOnError: false,\n errorColor: '#f00'\n });\n node.setAttribute('data-value', value);\n }\n return node;\n }\n }, {\n key: 'value',\n value: function value(domNode) {\n return domNode.getAttribute('data-value');\n }\n }]);\n\n return FormulaBlot;\n}(_embed2.default);\n\nFormulaBlot.blotName = 'formula';\nFormulaBlot.className = 'ql-formula';\nFormulaBlot.tagName = 'SPAN';\n\nvar Formula = function (_Module) {\n _inherits(Formula, _Module);\n\n _createClass(Formula, null, [{\n key: 'register',\n value: function register() {\n _quill2.default.register(FormulaBlot, true);\n }\n }]);\n\n function Formula() {\n _classCallCheck(this, Formula);\n\n var _this2 = _possibleConstructorReturn(this, (Formula.__proto__ || Object.getPrototypeOf(Formula)).call(this));\n\n if (window.katex == null) {\n throw new Error('Formula module requires KaTeX.');\n }\n return _this2;\n }\n\n return Formula;\n}(_module2.default);\n\nexports.FormulaBlot = FormulaBlot;\nexports.default = Formula;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.CodeToken = exports.CodeBlock = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SyntaxCodeBlock = function (_CodeBlock) {\n _inherits(SyntaxCodeBlock, _CodeBlock);\n\n function SyntaxCodeBlock() {\n _classCallCheck(this, SyntaxCodeBlock);\n\n return _possibleConstructorReturn(this, (SyntaxCodeBlock.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock)).apply(this, arguments));\n }\n\n _createClass(SyntaxCodeBlock, [{\n key: 'replaceWith',\n value: function replaceWith(block) {\n this.domNode.textContent = this.domNode.textContent;\n this.attach();\n _get(SyntaxCodeBlock.prototype.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock.prototype), 'replaceWith', this).call(this, block);\n }\n }, {\n key: 'highlight',\n value: function highlight(_highlight) {\n var text = this.domNode.textContent;\n if (this.cachedText !== text) {\n if (text.trim().length > 0 || this.cachedText == null) {\n this.domNode.innerHTML = _highlight(text);\n this.domNode.normalize();\n this.attach();\n }\n this.cachedText = text;\n }\n }\n }]);\n\n return SyntaxCodeBlock;\n}(_code2.default);\n\nSyntaxCodeBlock.className = 'ql-syntax';\n\nvar CodeToken = new _parchment2.default.Attributor.Class('token', 'hljs', {\n scope: _parchment2.default.Scope.INLINE\n});\n\nvar Syntax = function (_Module) {\n _inherits(Syntax, _Module);\n\n _createClass(Syntax, null, [{\n key: 'register',\n value: function register() {\n _quill2.default.register(CodeToken, true);\n _quill2.default.register(SyntaxCodeBlock, true);\n }\n }]);\n\n function Syntax(quill, options) {\n _classCallCheck(this, Syntax);\n\n var _this2 = _possibleConstructorReturn(this, (Syntax.__proto__ || Object.getPrototypeOf(Syntax)).call(this, quill, options));\n\n if (typeof _this2.options.highlight !== 'function') {\n throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n }\n var timer = null;\n _this2.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n clearTimeout(timer);\n timer = setTimeout(function () {\n _this2.highlight();\n timer = null;\n }, _this2.options.interval);\n });\n _this2.highlight();\n return _this2;\n }\n\n _createClass(Syntax, [{\n key: 'highlight',\n value: function highlight() {\n var _this3 = this;\n\n if (this.quill.selection.composing) return;\n this.quill.update(_quill2.default.sources.USER);\n var range = this.quill.getSelection();\n this.quill.scroll.descendants(SyntaxCodeBlock).forEach(function (code) {\n code.highlight(_this3.options.highlight);\n });\n this.quill.update(_quill2.default.sources.SILENT);\n if (range != null) {\n this.quill.setSelection(range, _quill2.default.sources.SILENT);\n }\n }\n }]);\n\n return Syntax;\n}(_module2.default);\n\nSyntax.DEFAULTS = {\n highlight: function () {\n if (window.hljs == null) return null;\n return function (text) {\n var result = window.hljs.highlightAuto(text);\n return result.value;\n };\n }(),\n interval: 1000\n};\n\nexports.CodeBlock = SyntaxCodeBlock;\nexports.CodeToken = CodeToken;\nexports.default = Syntax;\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports) {\n\nmodule.exports = \" \";\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.BubbleTooltip = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{ header: 1 }, { header: 2 }, 'blockquote']];\n\nvar BubbleTheme = function (_BaseTheme) {\n _inherits(BubbleTheme, _BaseTheme);\n\n function BubbleTheme(quill, options) {\n _classCallCheck(this, BubbleTheme);\n\n if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n\n var _this = _possibleConstructorReturn(this, (BubbleTheme.__proto__ || Object.getPrototypeOf(BubbleTheme)).call(this, quill, options));\n\n _this.quill.container.classList.add('ql-bubble');\n return _this;\n }\n\n _createClass(BubbleTheme, [{\n key: 'extendToolbar',\n value: function extendToolbar(toolbar) {\n this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n this.tooltip.root.appendChild(toolbar.container);\n this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n }\n }]);\n\n return BubbleTheme;\n}(_base2.default);\n\nBubbleTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link: function link(value) {\n if (!value) {\n this.quill.format('link', false);\n } else {\n this.quill.theme.tooltip.edit();\n }\n }\n }\n }\n }\n});\n\nvar BubbleTooltip = function (_BaseTooltip) {\n _inherits(BubbleTooltip, _BaseTooltip);\n\n function BubbleTooltip(quill, bounds) {\n _classCallCheck(this, BubbleTooltip);\n\n var _this2 = _possibleConstructorReturn(this, (BubbleTooltip.__proto__ || Object.getPrototypeOf(BubbleTooltip)).call(this, quill, bounds));\n\n _this2.quill.on(_emitter2.default.events.EDITOR_CHANGE, function (type, range, oldRange, source) {\n if (type !== _emitter2.default.events.SELECTION_CHANGE) return;\n if (range != null && range.length > 0 && source === _emitter2.default.sources.USER) {\n _this2.show();\n // Lock our width so we will expand beyond our offsetParent boundaries\n _this2.root.style.left = '0px';\n _this2.root.style.width = '';\n _this2.root.style.width = _this2.root.offsetWidth + 'px';\n var lines = _this2.quill.getLines(range.index, range.length);\n if (lines.length === 1) {\n _this2.position(_this2.quill.getBounds(range));\n } else {\n var lastLine = lines[lines.length - 1];\n var index = _this2.quill.getIndex(lastLine);\n var length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n var _bounds = _this2.quill.getBounds(new _selection.Range(index, length));\n _this2.position(_bounds);\n }\n } else if (document.activeElement !== _this2.textbox && _this2.quill.hasFocus()) {\n _this2.hide();\n }\n });\n return _this2;\n }\n\n _createClass(BubbleTooltip, [{\n key: 'listen',\n value: function listen() {\n var _this3 = this;\n\n _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'listen', this).call(this);\n this.root.querySelector('.ql-close').addEventListener('click', function () {\n _this3.root.classList.remove('ql-editing');\n });\n this.quill.on(_emitter2.default.events.SCROLL_OPTIMIZE, function () {\n // Let selection be restored by toolbar handlers before repositioning\n setTimeout(function () {\n if (_this3.root.classList.contains('ql-hidden')) return;\n var range = _this3.quill.getSelection();\n if (range != null) {\n _this3.position(_this3.quill.getBounds(range));\n }\n }, 1);\n });\n }\n }, {\n key: 'cancel',\n value: function cancel() {\n this.show();\n }\n }, {\n key: 'position',\n value: function position(reference) {\n var shift = _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'position', this).call(this, reference);\n var arrow = this.root.querySelector('.ql-tooltip-arrow');\n arrow.style.marginLeft = '';\n if (shift === 0) return shift;\n arrow.style.marginLeft = -1 * shift - arrow.offsetWidth / 2 + 'px';\n }\n }]);\n\n return BubbleTooltip;\n}(_base.BaseTooltip);\n\nBubbleTooltip.TEMPLATE = ['', '
', '', '', '
'].join('');\n\nexports.BubbleTooltip = BubbleTooltip;\nexports.default = BubbleTheme;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(63);\n\n\n/***/ })\n/******/ ])[\"default\"];\n});"],"names":["ot","j","y","u","n","o","r","type","x","c","jquery","get","pushStack","each","map","slice","first","last","even","odd","eq","end","push","ft","z","expando","noop","isPlainObject","isEmptyObject","globalEval","l","nonce","I","text","makeArray","inArray","isXMLDoc","f","merge","grep","V","guid","v","Qn","P","ID","W","$t","hr","le","dir","Rt","rt","apply","B","call","Re","re","we","ye","_e","fe","Mt","mt","Bt","ie","t","Ht","w","ne","st","Z","Gt","cacheLength","find","relative","preFilter","ATTR","CHILD","PSEUDO","filter","TAG","CLASS","Rn","Qe","ke","rr","pseudos","not","has","contains","lang","target","root","focus","enabled","selected","empty","parent","header","input","button","lt","gt","radio","submit","value","ir","replace","An","Wn","ze","Pr","L","$","is","prototype","children","closest","index","add","addBack","parents","parentsUntil","next","prev","nextAll","prevAll","nextUntil","prevUntil","siblings","firstChild","contents","match","Et","At","arguments","remove","oe","this","disable","disabled","lock","locked","fireWith","fire","fired","Deferred","state","always","catch","pipe","promise","then","qt","sn","when","isReady","Ot","ce","cache","kt","set","access","hasData","Ge","_t","data","removeData","_data","_removeData","jt","ee","queue","dequeue","_queueHooks","clearQueue","Xe","composed","tn","show","hide","toggle","Ne","vt","thead","De","Ft","We","St","namespace","delegateType","global","dispatch","handle","handlers","elem","addProp","Object","enumerable","fix","special","load","noBubble","click","setup","trigger","_default","beforeunload","postDispatch","constructor","stopPropagation","stopImmediatePropagation","altKey","teardown","mouseenter","on","one","off","htmlPrefilter","clone","Ve","cleanData","detach","append","prepend","before","after","html","nodeType","replaceWith","appendTo","_n","Nn","boxSizingReliable","pixelBoxStyles","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","position","tr","letterSpacing","cssHooks","opacity","cssNumber","animationIterationCount","cssProps","style","css","marginLeft","margin","expand","cur","run","init","scrollTop","linear","swing","$n","Bn","height","specialEasing","easing","stop","tweeners","tweener","prefilters","he","display","prefilter","complete","fadeTo","animate","finish","slideDown","fadeOut","fadeToggle","slow","hn","attr","removeAttr","attrHooks","Y","ht","prop","removeProp","propHooks","tabIndex","propFix","for","addClass","removeClass","toggleClass","hasClass","val","valHooks","option","select","Yt","join","simulate","triggerHandler","serialize","serializeArray","name","Un","Tn","bn","active","etag","ajaxSettings","url","accepts","xml","responseFields","converters","flatOptions","ajaxSetup","ajaxPrefilter","ln","readyState","Ye","getAllResponseHeaders","setRequestHeader","overrideMimeType","statusCode","abort","Ie","Te","fr","Ae","Ee","mr","Nt","br","getJSON","getScript","dataFilter","wrapAll","wrapInner","wrap","unwrap","Zn","send","binary","script","charset","jsonp","done","length","setOffset","offset","top","pageYOffset","offsetParent","scrollLeft","Height","padding","bind","unbind","delegate","undelegate","hover","et","h","N","M","C","a","J","_","tt","ct","isFinite","nr","Wt","un","te","xe","Ct","ue","A","Xt","Lt","m","parseInt","year","week","Le","Zt","Yn","calendar","sameDay","longDateFormat","LTS","invalidDate","relativeTime","future","months","dow","weekdays","Ue","Fn","qn","Dn","pr","ae","e","UT","me","U","vn","Ce","nullInput","H","It","parseFloat","Kt","ms","k","milliseconds","isNaN","Vt","Hn","Kn","Gn","er","Tt","to","locale","from","unit","b","years","Math","source","eras","since","dayOfMonthOrdinalParse","ordinal","zt","ss","Pe","DATETIME_LOCAL","module","define","exports","i","p","configurable","__proto__","Array","g","E","at","Ut","xt","left","border","overflow","direction","T","Qt","en","be","right","bottom","dt","String","field","func","days","test","hasOwnProperty","startMs","isStart","id","className","color","backgroundColor","borderColor","textColor","editable","startEditable","durationEditable","rendering","overlap","constraint","allDayDefault","eventDataTransform","start","date","allDay","s","S","d","D","hours","minutes","seconds","args","context","default","dateProfile","construct","resolve","reject","touchstart","touchcancel","touchend","mousedown","mousemove","mouseup","selectstart","contextmenu","window","passive","setTimeout","buttonText","today","monthYearFormat","dayOfMonthFormat","mediumTimeFormat","smallTimeFormat","extraSmallTimeFormat","hourFormat","noMeridiemTimeFormat","smallDayDateFormat","weekFormat","smallWeekFormat","titleRangeSeparator","defaultTimedEventDuration","defaultAllDayEventDuration","forceEventDuration","nextDayThreshold","columnHeader","defaultView","aspectRatio","center","weekends","weekNumbers","weekNumberTitle","weekNumberCalculation","scrollTime","minTime","maxTime","showNonCurrentDates","lazyFetching","startParam","endParam","timezoneParam","timezone","isRTL","prevYear","nextYear","month","day","allDayText","agendaEventMinHeight","theme","dragOpacity","dragRevertDuration","dragScroll","unselectAuto","dropAccept","eventOrder","eventLimit","eventLimitText","eventLimitClick","dayPopoverFormat","handleWindowResize","windowResizeDelay","longPressDelay","buttonIcons","themeButtonIcons","parse","_id","title","sourceClasses","registerClass","eventDefId","subtract","clearEnd","overflowX","forEach","event","isDateInit","clearTimeout","clearInterval","mutateEventsWithId","sliceRenderRanges","getClasses","getCss","filterEl","concat","O","Q","bt","wt","Dt","F","fakeFormatString","sameUnits","K","maybe","token","split","charAt","R","flash","startOf","intersect","validUnzonedRange","currentUnzonedRange","currentRangeUnit","isRangeAllDay","activeUnzonedRange","renderUnzonedRange","isValid","dateIncrement","duration","events","drag","dragstop","touchmove","scroll","row","firstRowDayIndex","lastRowDayIndex","isEnd","els","isVertical","isHorizontal","unshift","class","col","component","leftCol","dayEl","moreEl","segs","hiddenSegs","content","parentEl","autoHide","viewportConstrain","footprint","overflowY","weekNumberStyleAttr","def","getOverlap","buildEventInstanceGroup","explicitEventDef","status","eventInstances","widget","widgetHeader","widgetContent","buttonGroup","cornerLeft","cornerRight","stateDefault","stateActive","stateDisabled","stateHover","stateDown","popoverHeader","popoverContent","headerRow","dayRow","listView","close","success","error","dataType","visibility","width","zIndex","view","format","visibleRange","extraClasses","layout","hasTime","dragstart","sortstart","eventProps","stick","interactionStart","hitOver","hitOut","hitDone","interactionEnd","Boolean","startDrag","startInteraction","distance","subjectEl","dragStart","setStartDelta","setDateMutation","setEndDelta","delay","subjectCenter","additionalClass","revertDuration","getEventDef","renderHeadIntroHtml","renderBgIntroHtml","renderIntroHtml","axisStyleAttr","endMs","dayIndex","getClass","el","snap","forwardSegs","tbodyEl","cellMatrix","segMatrix","segLevels","valueOf","tableGrid","tableList","tableListHeading","popover","weeks","defaults","fixedWeekCount","allDaySlot","slotDuration","slotEventOverlap","buttonTextKey","listDayFormat","noEventsMessage","listDayAltFormat","ComponentFootprint","isSame","weekStart","Jt","se","headHtml","forceOff","componentFootprint","enableTouchScroll","canvas","getRows","getNodes","renderSkeleton","sort","paddingLeft","paddingRight","paddingTop","paddingBottom","minWidth","FillRenderer","HelperRenderer","labelText","render","spreadsheet","dragEnd","resourceId","resource","groupValue","setTrInnerHeight","helperRenderer","renderHighlight","EventDragging","EventResizing","isMain","constructed","buildSelectFootprint","getPeerEventInstances","isFootprintAllowed","buildCurrentBusinessFootprints","footprintContainsFootprint","footprintsIntersect","eventRangeToEventFootprints","parseFootprints","businessHourGenerator","setElement","removeElement","triggerViewRender","unset","reset","eventDef","isEventDefDraggable","resourceEditable","getFallbackStylingObjs","computeSelectionFootprint","computeEventDropMutation","computeEventStartResizeMutation","computeEventEndResizeMutation","computeExternalDrop","EventSource","applyMiscProps","toLegacy","eventResizableFromStart","nt","G","X","pt","clientX","timeStamp","Se","recognizers","handler","destroy","Jn","pointers","pointerdown","Ln","update","compute","pe","preventDefaults","preventSrc","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","emit","tryEmit","canEmit","Xn","recognize","process","getTouchAction","attrTest","directionTest","failTimeout","domEvents","enable","userSelect","ve","INPUT_START","DIRECTION_NONE","Hammer","document","checkStyleString","shouldHammer","touchHandler","dropHammer","touchStart","styleWatcher","styleUpdater","setAttribute","hasParent","installStartEvents","installEndEvents","installObserver","subtree","attributes","attributeOldValue","attributeFilter","install","q","it","writable","viewMode","dragMode","initialAspectRatio","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","Fe","Be","qe","nn","yt","Pt","detail","bubbles","cancelable","initCustomEvent","sr","ut","WebkitTransform","msTransform","transform","endX","endY","startX","startY","de","ge","Me","He","Ke","Mn","yn","Oe","Je","mn","Pn","zn","an","On","dr","ur","cr","vr","initContainer","initCanvas","naturalWidth","naturalHeight","limitCanvas","renderCanvas","degree","translateX","translateY","renderImage","initCropBox","limitCropBox","renderCropBox","dn","output","cn","initPreview","resetPreview","Vn","capture","$e","Cn","resize","dblclick","En","wheel","cropStart","wn","originalEvent","action","cropMove","cropEnd","jn","change","or","clear","move","moveTo","zoomTo","ratio","oldRatio","pageX","pageY","kn","rotate","rotateTo","scaleX","scaleY","scale","getData","setData","getContainerData","getImageData","getCanvasData","setCanvasData","getCropBoxData","setCropBoxData","getCroppedCanvas","setAspectRatio","setDragMode","key","gn","rn","once","HTMLElement","Scope","create","query","register","Container","Format","Leaf","Embed","Scroll","Block","Inline","Text","Attributor","Attribute","Class","Style","Store","message","Error","delete","retain","insert","insertAt","emitter","whitelist","classList","container","modules","clipboard","keyboard","history","reduce","bounds","formats","placeholder","readOnly","scrollingContainer","strict","delta","parchment","node","EDITOR_CHANGE","SCROLL_BEFORE_UPDATE","SCROLL_OPTIMIZE","SCROLL_UPDATE","SELECTION_CHANGE","TEXT_CHANGE","API","SILENT","USER","image","diff","native","reverse","compose","iterator","Buffer","collapsed","prefix","suffix","shiftKey","shortKey","BACKSPACE","TAB","ENTER","ESCAPE","LEFT","UP","RIGHT","DOWN","DELETE","bindings","bold","italic","underline","indent","outdent","metaKey","ctrlKey","tab","list","startNode","startOffset","endNode","endOffset","scope","blot","align","justify","blockquote","clean","code","rtl","float","full","formula","link","ordered","bullet","check","sub","super","strike","video","undo","redo","maxStack","userOnly","toolbar","characterData","characterDataOldValue","childList","navigator","DOMTokenList","shim","supported","blotName","Node","attrName","matchers","matchVisual","innerHTML","edit","throwOnError","errorColor","interval"],"mappings":"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C,gDACArT,kBACAA,cACAA,gCAGA6Q,uCACAwC,uCAGArT,kBACAA,6BACAA,+BAIA6Q,mCACA,0BACAtV,yBACA9D,yBAEAuI,8BAEA6Q,EAxHA,CAPAyC,MAgICsD,SAID,gBACA,iBAGAvD,QACAA,2BACA/E,QACAA,MAEA,CAGA,gBACA,eACA,mDACA+E,YACA,SAIA,SAvBAM,WAuBA,EAMA,gBAEAhQ,sCAA+C5F,WAC/C4V,mBAIAA,wBACA,WACAA,sBACAA,sBACAA,gBACAA,0BACAA,sBACAA,gBACAA,gDACAA,8BACAA,gCACAA,kCACAA,0CACAA,kCACAA,oCACAA,4CACAA,0CACAA,oCACAA,4CACAA,gDACAA,sDACAA,sCACAA,oCACAA,YACAA,cACAA,4BACAA,kCACAA,kCACAA,0BACAA,kCACAA,sCACAA,4DACAA,kCACAA,8BACAA,0BACAA,oBACAA,4BACAA,0BACAA,gCACAA,sCACAA,8BACAA,8BACAA,8BACAA,kBACAA,kBACAA,gCACAA,oCACAA,0BACAA,gCACAA,8BACAA,8CACAA,8BACAA,oCACAA,0BACAA,sCACAA,kCACAA,wCACAA,gDACAA,0CACAA,0CACAA,kBACAA,wBACA,YACAA,0BACAA,4BACAA,4DACA,YACAA,sCACAA,kBACAA,4CACAA,wEACA,YACAA,wDACAA,0EACAA,wDACAA,4DACAA,0DACA,YACAA,mBACA,YACAA,yBACA,WACAA,0BACA,YACAA,kBACA,aACAA,wBACA,YACAA,iCACA,WACAA,yBACA,YACAA,+BACA,aACAA,kCACA,aACAA,wBACA,aACAA,yBACA,YACAA,qBACA,YACAA,6BACA,YACAA,2BACA,YACAA,0BACA,YACAA,uBACA,YACAA,8BACA,WACAA,2BACA,YACAA,iCACA,YACAA,6BACA,YACAA,8BACA,WACAA,wBACA,YACAA,wCACAA,4CACA,YACAA,+BACA,YACAA,6BACA,aACAA,4BACA,aACAA,gCACA,YACAA,2BACA,aACAA,mBACA,aACAA,mBACA,aACAA,wBACA,aACAA,qBACA,aACAA,0BACA,aACAA,6BACA,cACAA,2BACA,aACAA,gCACA,cACAA,qBACA,aACAA,qBACA,cACAA,uBACA,cACAA,yBACA,aACAA,sBACA,aACAA,mBACA,cACAA,uBACA,cACAA,2BACA,aACAA,sCACA,cACAA,sBACA,aACAA,kBACA,aACAA,2BACAA,iCACA,aACAA,2BACA,aACAA,kCACA,aACAA,2BACA,aACAA,0BACA,aACAA,4BACA,cACAA,8BACA,cACAA,2BACA,aACAA,2BACA,cACAA,2BACA,cACAA,2BACA,cACAA,0BACA,aACAA,yBACA,aACAA,uCACA,cACAA,wBACA,cACAA,sBACA,cACAA,mCACA,cACAA,kCACA,cACAA,oCACA,aACAA,qBACA,cACAA,kCACA,cACAA,iCACA,cACAA,mCACA,aACAA,uBACA,aACAA,2CACA,cACAA,uBACA,cACAA,2CACA,cACAA,sBACA,cACAA,+BACA,cACAA,gCAKA,gBAEAhQ,sCAA+C5F,WAC/C,YACAxG,QACA+X,QAUAqE,4BATA,gBACA,IACAhc,EADAD,KAEA,QAAgBC,WAAsBA,IACtCD,eACA6D,wBAEA,UAMAoY,4BAHA,cACA,0DAOAA,6BAJA,cACA,sGAOAA,8BAHA,cACA,mCAMAA,qCAHA,cACA,4BAEA,EAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,QACA+X,QAKAvV,aACA,cACAiG,0BAEA,iDACA,SACAA,gCAGAA,sDAGAxI,0CACA,wBACAwI,iCAGAA,iCAGAxI,gDACA,IACAqZ,EACAtV,EACA9D,EAHA4b,sBAIA3b,KACA,QAAoBmZ,WAA2BA,KAE/CpZ,GADA8D,QACAsb,wCAEAnf,iCAGA,UAEAF,iDACA,6DACAqZ,qBACA,sCACA1Y,gBACA,6BAGAX,iCACA,iDAEAA,mCACA,0DAEAA,EAjDA,GAmDAmc,aAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,GACAuf,sBACA,mBACAzD,cACA,4BACA7b,cACA8W,aACAgB,QACa,WACbhB,WACAvU,OAGAsZ,GAEA0D,oBACA,IACA1D,EADAK,wBACA7S,UACA,cACAwS,GAEA2D,kBACA,IACA1I,EADAoF,sBACA7S,UACA,YACAyN,IAIA,gBACA9W,mBACA,2BACAD,gBAEAC,GAGA,cACAA,qBACA,4BACA6b,IAEA7b,GAdAmc,WAcA,EAOA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,aACA,cACAyI,sBACAA,2BAEA,kDACAA,yBACAA,wEAGAsP,wCACA,MACAhB,EACA,uBAEA,SADA9W,cAAyCwI,kBACzCjG,EACAvC,wCAEAwI,wBAEA,QACAA,sBAGAsP,gDACA,8BACA,6BACAvV,OAEAA,GAEAuV,iCACA,4BAEAA,qCACA,0BACA,SACAtP,yBAEA,IAEAsP,iDACA,MACA,6CACA9X,0CAEAwI,uDAGA,IAEAsP,EAnDA,GAqDAqE,YACApc,uBACAA,2BACAA,6BACAA,mCAKA,gBAEAoM,sCAA+C5F,WAC/C,WACAxG,QACA+X,QACAvV,OACAxC,2BACA,WACA+W,IAUA+E,aACA,aACArT,mBACAA,wBAGA,wBACA,WACAxI,SACAoW,OAEApW,GAGAqZ,oBACAA,QACAvC,KAGAuC,wBACAvC,IAEA9W,WACAA,SAGAqZ,4BACA,WACA7Q,2BACAiX,iCACAC,mCACAC,6BACAC,+BACAC,+BACAC,2BACArT,uBACAsT,mCACAC,qCAKAC,0EACAlc,+BACS,CAAImc,aAKbD,oEACAlc,6BACS,IAGTsV,8BACA7Q,kCACAyX,kEAA6EC,aAE7ED,gEAKA5G,yCAGA7Q,qBACAA,mBACAA,8BAEA6Q,wCACA7Q,iBACAA,6BAGA6Q,0CACA7Q,kBACAA,8BAGAA,oBAGA6Q,uCACA7Q,mBAIA6Q,wCACA7Q,0BACAA,6BAGA6Q,wCACA7Q,0BACAA,6BAGA6Q,sCACA7Q,0BACAA,2BAGA6Q,oCACA7Q,0BACAA,yBAKA6Q,0CACA7Q,+BAEA6Q,0CACA7Q,+BAEA6Q,qCACA7Q,0BAIA6Q,yCACA,QAA0CpZ,MAC1CuI,kBACAA,mBACAA,2BACAvI,GACAuI,+BAIA6Q,6CACA,WACApZ,yBACAA,IACAuI,wBACA2X,sBACApc,sBACa9D,KAGboZ,yCACA,wDAEAA,EAhJA,GAkJA8C,YACA5Z,qBACAuV,sBAKA,gBAEA3L,sCAA+C5F,WAC/C,YACA4V,cACAD,mBAIAC,aAHA,gBACAA,iBAMAA,gBAHA,cACA,qBAEA,EAIA,CACA,CACA,CACA,CACA,CACA,CACA,CAEA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,OACA+X,QACAvV,QACAvC,OACAmc,sBACArE,6BAGA,OACAsI,uBACA,OAEA1Y,qCACAD,qCACA4Y,2CAIAC,4BACA,4BACA,8BACA,gCAGAzE,GAEA0E,+BACA,4BAEA,kDACA5e,QACAkd,UAGAA,WAEAA,GAGA2B,6BACA,8BACA/Z,uBAGAga,4BACA,8BACAha,uBACAA,0BACAA,uBAGAia,iCACA,8BACAja,uBACAA,0BACAA,uBAGAka,uBACA,8BACAla,kBACAA,sBACAA,uBAGAma,iCACA,8BACAna,uBAMA4S,GAEAwH,+BACA,eACA,OACA,QAGAC,uBACA,eACA,4BACA,6BAGAC,4BACA,eACA,2BACA,6BA0CA,gBACA,MACAjC,EAEAD,oDAEAld,IACAkd,+CAKAC,OACA5C,uBACA,aACA2C,eAIAtc,0BAIA,cACA,2CAvDA4Z,oCAPA,cACAD,uBACA,aACAyC,cAiCAxC,mBA1BA,kBAEA,wDAEA2C,gBACAA,+BAEA5C,uBACA4C,YAEA,mBAEAlI,IAKAA,cACAA,cACAiI,EAEAjI,6BAEAA,mBA0BAuF,WAKAA,wBAGAjc,2BAKA,gBAEAiM,sCAA+C5F,WAC/C,WACA4V,kBACA6E,+BACAV,4BACAW,qCACAC,4BAAkC7D,QAClC8D,sBACAC,4BAEAC,gBACAC,oBACAC,iBACAvb,QACAuW,aACAiF,UACAzE,yBAEA0E,YACAC,eACAC,oBACAC,8BAGAC,sBACAC,mBACAC,mBACAC,uBAEAC,gBACAC,mBACAC,eACAC,yBACAC,YAGA1H,YACA2H,SACAlC,YACA1Y,YACAD,YACA8a,qBACAC,qBACAxK,YACAqI,cACAoC,cACAxK,YACAyK,WAGAC,qBAEAC,uBAEAC,SAGAC,gBACAC,uBACAC,cAEAC,gBAEAC,eACAC,mBAEAC,cACAC,sBACAC,0BACAC,sBACAC,sBACAC,sBACAC,oBAEAvH,mBACAoH,iCAEApH,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CACA,oBACA0e,wCACA,iHAEA1e,wCACAqI,6DAEArI,0CACAqI,mDAEArI,kCACAqI,4BACAA,0BAEArI,mCACAqI,4BACAA,yBAEArI,oCACAqI,wBACAA,mBACAA,kBACAA,wBAIArI,0CACA,WACAqI,8BACA7G,wBACS,gBAETxB,2CACA,WACAqI,8BACAmW,yBACS,mBAGTxe,0CACAD,2CACAsI,aACAA,cAEAA,8BACAA,gBAAyBgc,gBACzBhc,0BAEArI,2CACAqI,gBACAA,wBACAA,uCACAA,cACAA,eAEAtI,4CAIAC,8CACA,WACAqI,mCACAmW,yCAEAnW,4CACAmW,0BAGAxe,yCACAqI,mCACA2W,aACAD,uBAGA/e,0CACAqI,oCACA2W,aACAD,uBAKA/e,4CACA,WACAqI,8BACA7G,wBACAA,iDACS,iBAETxB,6CACA,WACAqI,8BACAmW,iCACAA,0BACS,oBAITxe,mDACA,WACAqI,8BACA7G,0BACS,yBAETxB,oDACA,WACAqI,8BACAmW,2BACS,4BAKTxe,0CACAD,0CACAsI,+BACAiX,gCACAG,0CAIAzf,4CACAD,4CACAsI,uCAOArI,yCACA,IACAwB,EACAkd,EACAC,EAHAH,OAIAnW,2BACA7G,gCAEAkd,qCACArW,2CACAA,8CAEAsW,0FACAtW,iDACAmW,6BACAE,IACAC,mBACAA,kBACAH,2CACiBG,KAOjB3e,0CACAqI,sBACAA,sBAEAA,4BACAA,wGAEAA,iCAKArI,wCACAqI,8BACAA,6BACAic,yCACAjc,iCAEAA,8BACAkc,2CACAlc,kCAEAA,4BACAA,iCAKArI,uCACAqI,eACAA,oBAGAtI,wCAEAsI,2BAIArI,kCACA,gDACAJ,eAEAI,iCACAqI,yBACAA,wBAEArI,yCACAqI,mBACAA,qCAGArI,mCACA,SACA,6BACAJ,mCAEA4e,GAEAxe,oCACAwe,oCACA5e,4CAEAyI,sBACAA,yBAGArI,gDACA,UAEAA,uCACA,UAEAA,0CAKAA,8CACA,IACAG,EADAkI,2BACAmc,+BACAhI,iBAEAA,IACAgC,kEAEAnW,wBAEAmU,qCAGAxc,iDACAqI,kCACA2W,aACAD,MACAP,aACAhd,EACAkd,EACAjI,EACA,GACApO,SASArI,qDACAwB,GACA6G,4CAEAA,qCAGArI,oDAEAqI,6BACA2W,aACAD,MACAP,4BACAG,EACAlI,EACApO,QAGA7G,GAEA6G,qCACA2W,aACAD,MACAP,6BACAnW,SAQArI,gDACA,IACAG,EADAkI,2BACAmc,+BAEAhG,8EAEAnW,0BADA7G,mDACArB,QAGAH,mDACAqI,oCACA2W,aACAD,MACAP,aACAhd,EACAkd,EACAjI,EACA,GACApO,SAQArI,iCACAqI,iBACAA,iCACAA,2BAEArI,iDACAqI,qBACAA,gDAGAtI,mDAIAC,0CACAqI,mBACAA,yBAGArI,wCACA,8CACAqI,+BACA2W,aACAD,MACAL,QACAA,MACAld,EACA6G,SAMArI,iCACAqI,kBACAA,mBACAA,uBACAA,wBAEAA,yBACAA,iCACA2W,aACAD,kBAMA/e,8CACAqI,4BACAA,kCACAA,6BACAA,wCACA7G,+BACAA,MAEAA,+BAGA6G,+BAGArI,6CACAqI,6BACAA,wCACAmW,MACAA,kCAGAnW,kCAGArI,2CAGA,6EAMAA,gDACAoC,2BACAiG,yBAGArI,wCACAqI,6BACAA,8BAEArI,6CACA,MAEAqI,8CAEA7G,gCACA5B,gCACAyI,kBAIArI,6CACAqI,6BACAzI,4CACAyI,+BAMArI,2CACAqI,mCACA2W,aACAD,uBAGA/e,6CACAqI,oCACA2W,aACAD,uBAKA/e,4CACA,8CACAqI,iCACA2W,UACAD,yBAMA/e,6CACA,UAKAA,8CACA,kBAIA,GAHA,uBACAwB,yDAEAA,EACA,2CAMAxB,sCACA,IAGA2e,EAHAH,6BACAhd,KACAkd,IAKA,KAHA,0BACAF,YAEAG,IAAoBA,IAAOA,KAC3Bnd,2BACAkd,IAGA,MACA,sCAEArW,wBAIArI,uCACA,mBACA0e,aAOA,OANAld,IACAA,0BAEAkd,IACAA,gCAEA,wBACA,mBAEA,MAIA1e,oCACA,uBACAwe,WAEAnW,yBAOArI,gDACA,QAA8BwB,UAC9B,QAAsCkd,MAEtC,QADAC,YACAtW,6CACAsW,gBAEA,UAEA3e,EA9o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aAEzBxmB,GACAH,8BAEA,EAEA+D,wCACAyE,oBACAA,uCAEAzE,kCACA,IACApC,EADAgd,iBAEA,+BACAnW,yBACA,QAAwB7G,WAAsBA,IAC9Cgd,0BACAA,cAIA,8BACApc,sBAEAwB,oCACAyE,wBAKAzE,4CACA,mDACA,mBAGAA,0CACAyE,mBAEAzE,oCACA,0BAEAA,iDACA,wDACA,sCACA7D,GAEA6D,EA7DA,CA8DC/D,WACDmc,YACAN,uBACA8K,aAMA,gBAEAxa,sCAA+C5F,WAC/C,aACAxG,SACA+X,KAIAqE,oBAHA,gBACArE,QAcAqE,sBAXA,cACA,UAGA,MACApc,UAGA+X,KANAoE,UASA,EAKA,gBAEA/P,sCAA+C5F,WAC/C,WACAxG,OAUA+X,aACA,cACAtP,qBACAA,mBACAA,kBACAA,iCACAA,6BACAA,gEAIA,oCACA,iCACAxI,uBACAA,iCAEAwI,cACAxI,WACA,KACAwI,2CACAA,mBACAA,0BAEAA,iBACAA,yBAIAjG,6BACAiG,iBACAA,uBACAA,gBACAA,iBACAA,eACAA,mBAGAjG,mCACAiG,aACAA,cAIAjG,0CACA,SACAuU,KACAtO,4BACA,WACAvI,kBACAC,iBACAF,UACA8W,cAEAtO,aACAA,eAGAjG,wCACA,SACAuU,KACAtO,4BACA,WACAvI,iBACAC,kBACAF,UACA8W,cAEAtO,YACAA,gBAIAjG,2CACAiG,mBACA,IAGAzE,EAHA+S,aACA+E,cACAxC,WAEA,QAAoBtV,IAASA,IAC7B,mBACA,UAMAxB,yCACAiG,mBACA,IAGAzE,EAHA+S,YACA+E,eACAxC,WAEA,QAAoBtV,IAASA,IAC7B,mBACA,UAKAxB,sCACA,0BACAiG,eAGAjG,wCACA,0BACAiG,gCAIAjG,uCACA,0BACAiG,gBAIAjG,yCACA,0BACAiG,iCAGAjG,iCACA,0BACAiG,8BAGAjG,qCACA,0BACAiG,cAGAjG,uCACA,0BACAiG,8BAIAjG,wCACA,0BACAiG,iBAIAjG,0CACA,0BACAiG,iCAGAjG,kCACA,0BACAiG,8BAOAjG,yCACA,MACA,4BACAvC,qCACAgH,eACAhH,kBAEAD,mB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,2BACAtO,oBACAA,yCAGAsO,EA/DA,CADAgF,MAiECsD,SACDjD,aAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,QACA+X,SACAvV,SACAvC,QACA8W,SACA+E,SACAxC,SACAtV,cAEA,aACA,+CAEA,OAJAmY,iBAIAhc,EALA,CAMCH,WACDoc,YACApY,wCACAA,yCACAA,yCACAA,yCACAA,yCACAA,6CAKA,gBAEAoI,sCAA+C5F,WAC/C,WACAxG,OACA+X,OACAvV,QACAvC,SACA8W,OACA+E,QACAxC,QACAtV,QACA9D,QACAC,QACAC,QACAwe,SACAhd,SACAkd,SAGAC,cAEA,cACA,2BACA,mCACAF,uBAGAA,aACAA,4BACAA,EAGA,OAZA1C,iBAYA5b,iDACA,IACAwa,EACAgL,EAFAlH,uCAGA,QAAoB9D,WAAiBA,IACrCgL,OACAtd,YACAsd,8CACAA,kDAGAA,6BACAA,8BAGA,UAIAxlB,oCACAkI,mBACAA,sBACAA,mBAEAlI,qCACAkI,yBAGAlI,kCACA,IAIA2kB,EACAxiB,EALAka,YACAiC,cACA9D,cACAgL,KAMA,IAHAtd,sBACAA,iDAEAyc,IAAsBA,IAAcA,IACpCa,yCAcA,IAZAtd,gBACAA,oCACAA,uDACAA,kCACA4e,gBACAC,gBAEA7e,kCACA4e,sCACAE,kBAGArC,IAAsBA,IAAcA,IACpC,QAA0BxiB,IAAcA,IACxC+F,kCACA2W,UACAD,MACA1W,sBACAA,oBACAmU,MAQArc,2CACA,+BACAwlB,4CACA,UACAA,mBAEA,eACAA,kDAEAhL,6BACAtS,uBACA,0DAIAA,2BACA,UACAA,2BACA,WACA,IACA,wBAIAlI,2CACA,mEAEAA,8CACA,sBAIAA,2CACA,cAEAkI,6CACAA,+BACAA,6CACA,SAEAlI,8CACA,+BAEAA,8CACA,IACAwa,EACAgL,EAFAlH,KAGA,QAAsB9D,cAAmBA,IACzCgL,wBACAlH,qCAEA,mBAIAte,6CACA,IAIAmC,EACA6iB,EALA1G,YACA9D,KACAgL,sDACAb,mCAGA,wCAIAxiB,yBACA8kB,sBACA/e,8BAOA8c,EADA,yCACA,EAGA3I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AxC,cAEA,gBACA,6BACA,wCACA1X,mCACAA,uBACAA,gCACAA,oCACAA,qCAGAA,oCACAA,qCAGAA,sBACAA,0BACA0iB,mBACAgE,mBAEA1mB,EAGA,OAvBAua,iBAuBAhc,0CAGA,MA2IA,cACA,mBAEA,aACA,8CACA,kCACAye,EAGA,OAPAzC,iBAOA/b,2CACA,gBACA,kCACA,6BACAwe,iFAEA7G,0CACA,eAGA,IAGA3X,8CACA,gBACA0e,wBACA,kCACA,8BACAld,4BACAA,sBACA,CAAsB8c,6CAA4DI,eAElF,QAEA,IAGA1e,yCACA,gBACA,kCACA,6EACAwe,iCAEA,IAIAxe,uCAEA,kCACA,8BAFAqI,UAEA8f,+BAEA,IAEAnoB,2CACA,kGAEAA,EAvDA,CAwDKF,GApML8D,oBACA,oBAEA7D,0CACAsI,qEACAvI,4CAEAC,sCACA,MACAye,EACAnW,kEACAA,uBACArI,qDACAwe,6CACAnW,6CACAA,gEACAA,4BAEAtI,wCACAsI,6BACAA,yBAIAtI,0CACA,0BACA,uBACAC,8BACAqI,yBACA,2DAEArI,wDAGA,IACA,yCAEAA,4DAMAD,2CACA,kCACA,2CAEA,IAGAA,oCACA,6BACA,8BAKAA,uCACA,IAEA0W,EACAtW,EAHAue,yBACAC,+CAKAtW,qBAOAvI,wCACAuI,qCAGAA,yEAGAA,sBACAsP,wBACAtP,gCAEAqW,uBACArW,0BAIAoO,gCACApO,wBAEAqW,uBACArW,0BAEAmW,IACAnW,6BACAlI,sCACAic,iBACAzE,wBAEAlB,gCACApO,4BAGAA,gCAtCAmW,IACA/H,gCACApO,2BAoCA,EAIAtI,8CACA,SACA4X,mDAGA5X,wCACAye,EACA7G,0CAGAA,8CAKA5X,gDACA,OAAiB4V,QAEjB5V,uCACA,OAAiB4V,mCAEjB5V,6CACA,WACAsI,mCAGAtI,EAhKA,CAiKCF,WACDmc,YACA9C,gDACAA,kCA2DK,EAML,gBAEAlN,sCAA+C5F,WAC/C,WACAxG,OAEAwC,cAEA,aACA,+CAGA,OALA2Z,iBAKApF,6CACA,oDACA5W,kCACAC,gCAEA,iCACAD,kBAEAC,aACAA,iCAGA,oBAEA2W,EApBA,CADAgF,MAsBCsD,SACDjD,aAIA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,QACA+X,QACAvV,OACAvC,QACA8W,aACA,gBACAtO,oBACAA,iBAEA,mCACA,8BAMAzE,oDACA,IAEA4a,EAFAze,kBACAC,2DAGA0e,EADArW,8BACA7H,iCACAme,uCACAlI,oBACAtW,iBACAqc,yBACA,QAAoBgC,WAA4BA,IAChD,8EACA,SAGA,KACA,QAAwBA,WAA4BA,IACpD,kFACA,SAIA,UAEA5a,8CACA,2DAEAA,oDACA,IAGApC,EAFAxB,EADAqI,sCACA7H,iCACAge,uCAEA,+FACAhd,6BAEA,kCAMA,EAEAoC,mDAEA,MACA+a,EACA,aACAD,gDACArW,wCACA,SAIA,GADAsW,2CACA,OACA,YACA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AChDgd,kBAEA,0BACA,uCAIAxe,0CACAqI,mBACAA,oBACAA,wBACAA,kDAEArI,2CACAqI,mDACAA,sBACAA,qBACAA,yBAGArI,sCAIAA,uCAOAA,6CAIAA,2CACAqI,mDAGArI,4CACAqI,qDAIArI,4CACAqI,2BACAA,oCAEAA,oDAGArI,6CACAqI,qDACAA,2BACAA,sCAKArI,2CACAqI,oBACAA,kCACAA,8BAEAA,mBACAA,wBAEAA,mDAEArI,4CACAqI,oDACAA,mBACAA,8BAEAA,oBACAA,sBAGArI,2CACA,oCACA,qCACAwe,0CAEAA,GAEAxe,8CACA,iCACAqI,oCAEA,IAEArI,oCACA,6BACA,qCACAwe,mCAEAA,GAEAxe,uCACA,0BACAqI,6BAEA,IAIArI,kDACAqI,wDACAA,4CACA2W,aACAD,eAGA/e,sDACA,WAEAqI,4CACAmW,sBACA,MACAE,OACAC,+BACAnd,sCACAwd,UACAD,sBAMA/e,oDACAqI,2DAEArI,wDACA,WACAqI,wCACAmW,sBACA,MACAE,OACAC,+BACAnd,kCACAwd,UACAD,sBAUA/e,yCACAqI,wCACA7G,6BACAA,MAEAA,4BAGA6G,iDAIArI,yCACAqI,wCACA7G,6BACAA,MAEAA,kCAGA6G,iDAOArI,uCACA,SACA,qCACAyW,sBACAkI,QAGAA,GAGA3e,oCACAqI,6CAKArI,8CACAqI,kDAGArI,2CACAqI,oDAMArI,iDACAqI,wBACAA,yDAGArI,yCACAqI,yBACAA,kDAKArI,wCACAqI,mBACAA,iDACAqc,sBACA,0BAIArc,gDAGArI,yCACAqI,mBACAA,wCAEAA,kDAMArI,kCACAqI,wBACAA,mBAEAA,2CAEArI,qCACAqI,+CACAA,mBAEAA,8CAEArI,qCAGAA,qCAOAA,mCACA,IACA2e,EACAlI,EAFAiI,qBAGA,WAEA,GADAjI,qBAEA,MAGA,UAEAzW,4CACA,8BACA,yEAGAwB,EAFA,MAIAxB,0CAKAA,mCAKAA,qDACA,IACA0e,EADAld,KAEA,QAAoBkd,WAAwBA,IAC5Cld,aACAA,0CAEA,UAEAxB,oDACA,yCAIAA,8CACA,IACA0e,EADAld,KAEA,QAAoBkd,WAA4BA,IAChDld,gDAEA,UAKAxB,6CACA,IACA0e,EACAC,EACAlI,EAHAjV,oCAKA,IADAkd,sDACAC,IAAoBA,WAAiBA,IACrClI,OACAjV,YACAiV,cAEAjV,UACAiV,YAEAA,cAGA,UAEAzW,iDACA,UAIAA,uCACAqI,8BACAqW,mBAGA1e,qCACA,IACA0e,EADAld,qBAEA,WACAgd,SAGAxe,oCAEA,OADAqI,KACA6P,UADA7P,KACA4hB,eAEAjqB,gCACA,kBAEAA,uCACA,2CAQAA,gDACA,MACAyW,EACAtW,EACAqc,EAoBA,OAnBA5c,oBACA+e,SACAlI,SACAtW,cAGAwe,IAGAnC,GACA8B,MAFAK,gBAEAuL,qBACAjqB,eAEA,qBACAye,IACAld,QAEAA,2BACAkd,SACAve,wBACA,OACA,oDACAue,EACA,OAGA,cACAA,EACA,WAGA1e,qCACA,qEAGAA,wCACA,IAEAyW,EAFAiI,kBACAC,KAEA,4DAIAA,gCACAD,0CACAC,yBAEAlI,sBACA+H,mBACAG,oBACA,OACAA,4CAIAA,OADAH,IACA,UAGA,cAlBAG,0BAqBAA,GAKA3e,0CACA,YACA,WACAyW,yBAEAE,yCAIA3W,uCACA,yDAIAA,wCACA,0BACA0e,gCACAC,2BACAlI,YACAtW,wBAIA,oCACAA,gBAGAA,OACAA,2BAEA,CAAiBke,gBAGjBre,wCACA,8BACA,qCAEAA,SACAA,EA/hBA,CAgiBC0b,WAGD,cACA,MACA8C,EAEAE,EADAld,KAEA,WAEA,IADAgd,sBACAE,IAAoBA,WAA2BA,IAC/Cld,wBAGA,SAbAwa,WAaA,EAMA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,OACA+X,OACAvV,QACAvC,SACA8W,QACA+E,QACAxC,OACAtV,SACA9D,SACAC,SACAC,SACAwe,QACAhd,QACAkd,OACAC,QACAlI,QACAtW,SACAqc,SACAiC,QACA9D,QACAgL,OACAb,QACAxiB,OACA6iB,QACAG,aACA,gBACAjd,oBACAA,4BACAA,gCAGAsO,mBACAtO,UACAA,oBACAA,0CACAA,6DACAA,2BACAA,uBACAA,wBACAA,uDACAA,mBAEA,4CAGAwO,+BACA,kBAEAA,0CACA,IACAjQ,EACAkQ,GAFAnQ,cAiBA,GAdAoV,oBACAnV,YACAkQ,WAEAiF,eACAjF,MAEA,UACAlQ,cAEAkQ,KACAA,OAEAzO,yBACA1B,EACA,sBAGAkQ,0CACA,4BACAxO,aAKAwO,iCACA,MACA,uBACA,cACA,mCAGAlQ,MACA3D,KACAqF,+BAGA,oBACAA,4BAIAwO,4BACA,mCAKAA,wCACA,0CACA,MACA,kDAEA,4BAGAA,wCACA,qDAEAA,qCACAW,IACAA,eACAnP,qCACA8hB,iBAIA9hB,6CAGAA,oBAIAwO,iCACA,MAEAlQ,mCADA6Q,aAEAnP,wCACAA,2BACAA,gCAIAwO,uCACA,8BAGAxO,iBADA,QACAA,2BAGAA,eAGAwO,4BACA,gBACAW,yDACAA,YACAnP,wBACAA,oBAGAwO,4BACA,gBACAW,yDACAA,YACAnP,wBACAA,oBAGAwO,gCACAxO,iCACAA,mBAEAwO,gCACAxO,gCACAA,mBAEAwO,6BACAxO,+BACAA,mBAEAwO,iCACAxO,4CACAA,mBAEAwO,sCACAxO,oCACAA,mBAGAwO,+BACA,6CAKAA,mCACAxO,qBACAA,gDAIAwO,oCACAxO,mBACAA,gDAKAwO,8BACAxO,eAGAA,wBAEAA,gBACAA,uBALAA,sBAQAwO,qCACA,WACAW,UACAA,iBAEAA,2CACA,IACAV,GADAiF,mBACA9R,aACAjE,qBACA8W,WAEAiI,4DACA,qBACAA,SAGA,qBACAjI,MAEA9Z,mBAIAqF,+EACA,IACAyO,OADAqO,8CACA,mBACAnf,yBACAhD,WACAgD,IACAwR,gBAES,WACT,iCACAxU,aACA2D,GACA6Q,mBAGAnP,wFACArF,yDACAA,QACAA,6DAES,WACTA,+BAIAqF,gFACAmP,iCACAA,kCAEAnP,iEACAA,oBACAA,oBACAA,oBACAA,yCACAA,gCACA0T,mDACA1T,8DAGAwO,+BACAxO,WACAA,iBAEAA,gDACAA,wBACAA,wCAEAA,4CACAA,4DACAA,mBACAA,yBACA0T,kDACA1T,6BAEAsO,sBAEAE,sCACA,+BAIAA,yCACA,WACA7T,iDACAA,YACAwU,8BAGAxU,6DACAA,aACAwU,iCACAA,0CAIAX,2CACA7T,8BACAA,qCAOA6T,mCACA,IACAlQ,EADA6Q,YAEAnP,2BACAmP,kBACAnP,kBAGAA,eACA1B,YACA0B,sBACAA,6CACAA,yBACA1B,qBACAA,gFACA0B,oDAEAA,YAEAA,qEACAA,kEAEAA,oCACA1B,GACAA,qBAGA0B,0BAIAwO,iCACA,gBACAxO,0DACAA,2BACArF,kBACAA,cACAqF,gBAKAwO,kCACA,gBACAW,kBACAnP,2BACAA,iBACAA,gBACAA,wBACAA,yBACAA,0BAIAwO,8CACA,uCACAxO,gBAEAA,0BAEAwO,oCACA,uEAEAA,4CACA,QAAmC7T,MACnC,IACA2D,EADA6Q,YAEA,iCACA,WACAnP,gBACA1B,mBAEA0B,4BACAmP,kEACAnP,4BACArF,GACAwU,kBAEA,GAGAX,gCACAxO,uBACAA,kBAGAwO,iCACA,gCACAW,qBAEAnP,yBADA,mBACArF,EAEA,qBACAA,IAEA,mBACAwU,6BAEA,qBACAA,+BAEA,aACAnP,qDAGAwS,kCACAA,uCAGAhE,qCAIA7T,mBACAqF,WACAA,2BACAA,yBACAA,kDAMAwO,2CACAxO,iCACAA,iCAGAwO,gDACAxO,oBACA0hB,aACAha,+BACAuM,qBAGAzF,yCACAxO,gCAEAA,oBACA0hB,SACAha,UACAuM,cAGAjU,+BACAA,iCAKAwO,oCACAxO,4DACAA,4DACAA,+DAEAwO,4CACA,OACAuT,iCACAC,4BAGAxT,4CACA,OACAuT,iCACAC,4BAIAxT,oCACA,kBACA7T,iDACAA,WACAA,MACAqF,uBAIAwO,oCACA,kBACA7T,iDACAA,WACAA,MACAqF,sBAGAwO,yCACAxO,iDAEAwO,6CACA,oBACAlQ,YACAC,kCACAkQ,0DACA9Q,0DACAqC,iFACA,eACA,yBACAA,0CACA,eACA,wBACAA,0CACA,eACA,yBAEAwO,2CACA,uDAEA,UADAW,4BACA,EACS,IAKTX,iCACAxO,mEAEAwO,gCACAxO,WACAA,sBAIAwO,+CACA,IACAjQ,EADAD,6BAEA,OACAC,EADA4Q,E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ApM,yBACAA,4CACA/G,kBAEAoT,2BACApQ,GACA6D,qBAEAmH,GAEAjH,6BAEAF,sBAGA,EAGA1e,yCACAuI,mBACAA,mDACA2W,gBACAD,MACAhf,6BACAC,EACA,GACAqI,cAKAvI,wCACAuI,mBACAA,kDACA2W,gBACAD,MACAhf,6BACAC,EACA,GACAqI,cAKAvI,4DACA,IAEA6e,EACAlI,EAHAjV,oCACAkd,gFAGA,yCACAC,iBACA2M,kBACA7U,iBACA8U,mBACA9U,EAEA,EAGA3W,0DACA,IAEA6e,EACAlI,EAHAjV,oCACAkd,4EAGA,yCACAC,iBACA6M,gBACA/U,iBACA8U,mBACA9U,EAEA,EAEA3W,EA/KA,CADA6b,MAiLCsD,SACDjD,aAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,OACA+X,QACAvV,QACAvC,QACA8W,QACA+E,SAEA9X,cAUA,gBACA,2BACA,uBACApC,kBACAA,EAEA,OAfAua,iBAeAhc,2BACAsI,mBACAA,oCAGAtI,yCACA,sCACA,iBACAC,8BAEAA,GAEAD,iCACA,qBACAye,oEACAA,uEAEAze,2CACAsI,oCACAA,kCACAA,8CAA+D8iB,cAG/DprB,2CACA,qBACA2e,GACA+M,yDACA,4BAEAjqB,oBACA6G,gDAEA7G,0BACA6G,mDAMAtI,4CACA,WACAyB,YACAkd,uBACAC,4BACA,qBACA,yBAEA,uCACA0M,sBACA5U,YACAjV,yBACAmd,GAEAnd,0BAGAupB,2BACAvM,uBAGA,UAKAze,0CACA,IAQA4a,EACAgL,EACAb,EAVAtG,OACAhd,iBACAkd,YACAC,aACAlI,iBACAtW,OACAqc,uBACAiC,4BAIA,qBACA,yBAIA,yCACAmI,8BACAwE,YACAM,iBACAf,6BACA3qB,cACA2a,MACAgL,sBACAgG,8BACA7D,cACAhZ,4CACA8c,2CACA5B,YAEAjf,OACA4a,YAEA0F,sBACA/oB,YACAoc,yBACAD,GAEAC,yBAEA/D,KAEA6D,oCACAA,oBACAE,6CAEAkM,wBACA,IACA5nB,EACAwU,EACA7Q,EAHAkQ,KAKA7W,QACA4W,SAGA5T,qCACAwU,qCACAxU,OACA8hB,sCAEAne,2CACAkQ,oCAOAA,KAEAA,IACAiO,OACAllB,mBAGAklB,GACApG,aACAld,qGACAmkB,SAGAA,SAEAL,IAEAR,SAGA+F,kBACAnM,kBACAiH,SACAb,QAEAgG,mBACAlrB,kBAEAmrB,kCACA/qB,YAEA2lB,qBACAhL,IACA+D,kBACAF,oBAEAE,4CACAoG,GAEApG,6BAGAF,uBAGA,UAGAze,uCACAsI,mBACAA,iDACA2W,gBACAD,MACA/e,6BACAwe,EACA,GACAnW,cAKAtI,sCACAsI,mBACAA,gDACA2W,gBACAD,MACA/e,6BACAwe,EACA,GACAnW,cAKAtI,qDACA,oBACA,6DACA2e,GAEA3e,mDACA,IAKAyc,EACAiC,EANAjd,4BACAkd,4BACAC,KACAlI,KACAtW,KAGA,iCACAwe,KACAH,YACAre,KACAqB,eAGAiV,MAGA+F,iCACAiC,iBACAwF,WACAxF,eACAA,gBACAA,kBACAA,GAEA1e,EAhQA,CADA4b,MAkQCsD,SACDjD,aAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,OACA+X,QACAvV,QACAvC,OAEA6b,cASA,cACA,2BACA,4CACA3b,EAEA,OAbAgc,iBAaAnY,2BACAyE,oCAEAzE,gCACA,uCACA,iBACA9D,8BAEAA,GAEA8D,iCACA,WACA5D,iBACAwe,oBACAxe,gDACAD,6CACAye,sBACA2M,wCAIAnrB,iDACAD,6CACAye,sBACAiN,uBAIA7rB,uBAGAgE,yCACA,IAEA5D,EAFAF,OACAC,iBA4CA,OA1CA,iBACA6mB,8BACA+D,4BACA3qB,QAEAqrB,sBACAvrB,oBAEA8qB,wBACA,MACAzqB,EACAwe,IACAlI,2BACAtW,4BAEAH,EADAyW,KACA3W,wBAGA,MAGAC,+BAEA,OACAH,oBAIAirB,kBACA7qB,OACAD,uBAEA+qB,mBACAlrB,kBAEAmrB,8BACArM,MAEA5e,8BAIA,EAMA8D,2CACA,0CACA,kDAGA5D,GAKA4D,oDACA,OACA9D,uBACAA,qBACAC,uBACAA,sBAEA,gCACA,oDAEA6D,oDACA,mFACAyE,+DAEAzE,EAzHA,CADA+X,M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,iBAEAtS,oBACAA,4BACAsS,gCACAtS,qBACAsP,cACAtP,8BAGAlI,6CACA,MACAwa,EACAgL,EAEA,iBAAwDlH,KAAQA,IAGhE,GAFA9D,mBACAgL,kCACAvjB,gBACA,SAGA,sBAIAjC,oCACAkI,mBACAA,sBACAA,mBACAA,sBAEAlI,qCAEAkI,wBAEAlI,sCAEAkI,2FADAA,yBAGA+jB,yDACA/jB,sCAEAlI,mCACA,+BACAkI,iDACAyF,KACA,8CACAzF,yBACA,YACAA,6CACAA,mCACA4e,iBACAC,iBAIA/mB,yCAaA,QAJAyW,EACAC,EACA7T,EAVAwZ,YACAiC,aACA9D,UACAgL,aACAb,mBACAxiB,KACA6iB,yBACAG,gBAKAH,aACAvO,wDACAC,4DACA7T,EACA,sFACA6T,EACA,SACAzU,yCACA,UACA,IACA,QACAE,GACA,4CACAuU,0BACA,KACA8O,QACA,qDACAA,QACA,QACAR,yBACAG,yBAEA,UAEAnlB,qCACA,uBACAse,2BACApW,6CACA,0EAEAA,sBACAA,iDAEAA,4EACAA,uBACA,YACAA,sDACAA,kCACA4e,gBACAE,kBAEA9e,8BAEAlI,uCACAkI,gCAKAlI,6CACA,IACAse,EACA9D,EAFA6B,KAGA,QAAoBiC,cAAiBA,IACrCjC,GACA,yQAUA7B,0EAEA6B,yBAGAnU,+CACAA,uDACAA,4EACAA,oDACAA,6DACAA,2DACAA,gCACAA,mBAEAlI,+CACAkI,yBACAA,gCACAA,4BACAA,0BACAA,6BACAA,yBACAA,yBACAA,gCACAA,iCAIAlI,uCACA,IACAwa,EADA8D,KAEA,QAAoB9D,cAAiBA,IACrC8D,WAEA,QAAoB9D,WAAiBA,IACrC8D,uBAEA,UAIAte,0CACA,MACAwlB,EACAb,EACA,QAAsBnK,cAAmBA,IAEzC,IADAgL,OACAb,IAAwBA,WAAiBA,IACzCrG,yBAMAte,2CACA,gBAEAA,2CAEA,wBAKA,KAKA2kB,EALArG,8EACA,IAEA9D,2BACAgL,KAGA,QAAoBb,WAAiBA,IACrCa,uEACAxW,aACAlB,gDAGAwQ,YACAkH,wEACAxW,aACAlB,mDAEA5F,4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1b,wBAAqCD,GACrCC,sBACAA,YACAA,EAEA,OATA+b,iBASAnY,4BACA,IACA5D,EADAD,IAGA,SADAsI,wBACAvI,EACAC,IAIA,SACA,yDAEA,YADAsI,kCAGA,qBACA,OAEA,uBACA,OAEA,wDACA,OAEA,kBAEA,YADAA,0CACA,CAIAA,8BACAA,8BAGAA,8BACAA,6BAIAzE,+BACA,MACA7D,EACAC,EACAwe,EACAhd,EACA1B,iBACAuI,qDACAtI,2BAGAA,qBADAD,4BACA,IAEAE,iBACAqI,iFAEAA,iBADAmW,qBAEAnW,sBACA7G,kBACAY,iBACAoc,EACAze,EACAsI,eACAA,wBAEAxI,uCACAwI,eAGAzE,wCACA,MACA,WACAyE,8BAEAA,4CACAA,gBAEAzE,EArFA,CADA+X,MAuFCsD,SACDjD,aAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAxG,OACA+X,QACAvV,OACAvC,QACA8W,QACA+E,aACA,gBACArT,sBACAA,iBACAA,kBAEA,yCACAA,uBAGA6Q,oCACA,yBACA,2CAIAA,wCACA,MACAnZ,EACAC,EACA,iCAMA,IAJAF,8CACAF,8BACAE,YAEAC,IAAwBA,WAAsBA,IAE9C,IADAC,2BAEAA,iBACA,UAOAkZ,sCAYA,QANAwF,EACAC,EACAlI,EACAtW,EACAqc,EATA1c,0CACAC,KACAC,KACAwe,KACAhd,IAOAA,GACAkd,gBACAC,OACAnd,OACA,uBACAkd,GAAyB2I,UAEzB3I,IACA3e,aACAC,0BACAyW,gBACAjV,aAEAmd,IACAH,aACA/H,gBACAjV,aAKA,OAFAkd,mBACAze,SACAye,WAIAjI,KACApO,+CACAA,0CAEAlI,iBACAysB,YACApQ,qCACAkC,aACAA,iBAGA,cACAA,eACAF,sBAIAE,6BACAA,8BACArW,6BACAA,kCACAqW,EAxBA,EA2BAxF,6CACA,0BACAtV,0BACA/D,iBACA+D,WACA9D,cACAA,iBACAA,YACA8D,YACA9D,qBAEA6W,gDAGAuC,kDACA,0BAGA,cACA,uBACA,cAEAtV,2CAEAA,mCAGAA,qBACA5D,uBACAA,gBACA4D,uBAEAA,oBACA5D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A,QAGA7Q,4CACAzE,IACAA,KACAyE,8BAMAqT,mCACA,yDACA,iCACA/D,uCAEAuB,GAEAwC,oCACAtZ,mDACAiG,0BACAA,6BAGAqT,2CACA,UAEAA,6CAKAA,wCACA,sCAEAA,2CACA,yBACA,6BAGA,+BACA,6BACAxC,cAA6C,uBAE7C7Q,wBACA6Q,GAKAwC,0CACArT,+BAEAqT,6CACArT,iCAIAqT,+CACA,WACArT,8BACAzE,6BACS,oBAET8X,gDACA,WACArT,8BACA6Q,8BACS,uBAETwC,8CACA,WACArT,8BACAzE,4BACS,mBAET8X,gDACA,WACArT,8BACAzE,8BACS,sBAIT8X,+CACArT,wBACAA,4BACAA,mCAEAqT,gDACArT,2CACAA,yBACAA,6BAEAqT,8CACArT,wBAEAqT,gDACArT,0BAOAqT,4CACA,8CACArT,iCACA2W,UACAD,MACAhf,QACAD,EACAuI,KACA6Q,aACA7Q,4DACA,SAOAqT,wCACA,8CACArT,+BACA2W,aACAD,MACAjf,QACAA,MACA8D,EACAyE,KACA6Q,aACA7Q,4DACA,SAMAqT,oDAEArT,6BACA2W,aACAD,MACA7F,4BACAnZ,EACAC,EACAkZ,sBACA7Q,QAGAzE,GAEAyE,qCACA2W,aACAD,MACA7F,6BACA7Q,SAKAqT,EA5OA,CA6OCtZ,SACDuZ,YACA9b,oCAIA,CACA,CACA,CAEA,gBAEAmM,sCAA+C5F,WAC/C,WACAuR,OACAvV,OACAvC,QACA8W,OACA+E,cAEA,cACA,2BACA,wCACA3b,EAEA,OANAH,iBAMAgE,oCACAyE,oBAEAzE,wCACAyE,0BACAA,kBACAA,sBACAA,mDAIAzE,wCACA,+CACA,+EAEAA,iDAOA,QANA7D,mBAKAye,KACAhd,MAJA6G,yBACAA,qCACAA,qCAEsD7G,WAA2BA,IAEjF,QADAmd,OACAlI,IAAwCA,IAA6BA,KACrE,iCACA,8BACA3W,qBACA,kBAA0C6e,GAC1CnC,aACAnU,YACAmU,iDACAA,qDAGAA,kDACAA,mDAEAgC,WAIA,UAEA5a,EAnDA,CAoDCxB,WACDuZ,YACA9b,sBAKA,gBAEAmM,sCAA+C5F,WAC/C,WACAuR,OACAvV,QACAvC,OACA8W,QACA+E,QACAxC,QACAtV,QACA9D,QACAC,QACAC,QACAwe,QACAhd,QACAkd,QACAC,cAEA,gBACA,6BACA,2BACAhE,wBACAA,+BACAA,EAQA,OAdA/a,iBAcAO,oDACA,MACAwa,EACAgL,iBACA,oBACAhL,uCACA8D,yCAEA,CACA,8BACApW,gBACAsS,6CACA8D,yCAGAmP,+BACAnP,2BAIA9D,UACA8D,SAGA,4EAGAte,iDACA,gCACAwa,0BACAgL,sCACAb,KAEA,oEAEA,4DACA,MACA,mBACAQ,aACAR,QACAzG,QACAtd,MACAuc,uCACA0J,0DAMA,UAUA7mB,0CACA,gBACA,uCACAkI,iBACAoW,aACAA,WAIAA,wBACApW,gBACAoW,2BAGAA,GAEAte,oCACA,uBACA,SAEA,qBAEA,wCACA,gCACAkI,kBAGA,UAGAlI,uCAMA,QALAqc,KACAiC,IACA9D,KACAgL,KACAb,sCACAA,6BACAzc,qBACAmU,IACA7B,UACAgL,WAGAhL,aAEAmK,yBACArG,IAEApW,uBACAA,uBACAA,iBACAA,6CAIAlI,sCACAkI,iCACA,8BACAA,kCAEAA,wCACAA,oDACAA,oDACAA,qCACA6b,2BACAgE,qBAEA7f,2CACAA,+BACAA,mDACAA,oCACAA,2CACAA,+BACAA,mDACAA,2BACAA,0EACAA,6FACAA,2GACAA,wDACAA,0CACA4e,oCACAE,gBACAD,gBAEA7e,gGAEAA,8DAEAA,6DACAA,qCAEAA,WACAA,iDAGAA,gDAEAoO,uCAEAtW,0CACA,0BACA,mRAEAA,wCACAkI,+BACAoO,yCAIAtW,oCACAue,uBACArW,sCAEAA,oFACAA,gFAIAA,mBACAA,2CACAA,4DAEAA,sGACA,SACAsS,sCAEA,IADAtS,gCACAsS,6BACAtS,qBACAoW,kBAEA9D,yBAEAtS,iBACAA,uBACA,4BACAA,wDACAA,uEACAA,sCACAA,iDACAA,6CACAA,sCACA4e,iBACAE,kBAIA9e,2CACA4e,+BACAE,gBAGAtR,+CAEA,YAAwBiP,wBAA2BA,IAEnDzc,kCACA2W,aACAD,MAHApE,oBAGAtS,2BAGAA,uBACAA,+FAGAlI,qCACAkI,uBACAA,qCAEAA,+CACAA,6BAGAA,0CACAA,2CAEAlI,sCAcA,QAbAqc,EACAiC,EACA9D,EACAgL,EACAb,sBACAxiB,qBACA6iB,qBACAG,qBAAuD,WACvD1O,OACAC,OACA7T,iBACAwU,KACA7Q,qBAAuD,2CACvDC,SAAkDA,YAAyBA,KAI3E,QAFAZ,IADAyY,SACA3G,OACAgF,yCACAiI,IAA8BA,WAAsBA,KACpDY,OAEA/O,GADA+D,QACAA,YACA,IACAqK,QACA,GAFAG,yBAEA,CACA,mBACAvO,eAIAA,aAHAoO,kCAGA,MAIApO,sEACAqO,eACAD,oCAGApO,aAGAoO,KACAA,gBACArK,YAGAnD,QAA6BqW,eAC7BhX,KAEA,2BACAa,oCACAoW,iDACAA,iBACA,kBAAkDC,aAAyBA,KAC3EtP,SACAqP,YAEAA,kBACAA,cACA,aAAwBxT,YAAqBA,MAG7CwT,eADAxT,gBACA,6BACA,gBAHAK,QAGoDrQ,aAAwBA,MAC5EkS,SACA,oCACAA,aACA9C,sBAEAhC,KACAgC,6CAGAoU,IACA,2CACAtR,qBACAA,2CACA,iCAEAA,WACA,cAGAsR,YAEAA,uBACA,qDACA3S,iBACA,kBAAkDjE,aAAyBA,KAC3EsF,SACArB,YAIA,IAFAA,kBACAA,kBACAb,KAAwBA,YAAsBA,KAG9Ca,sBADAsD,SADAjC,SAEAqR,WAEA,MACA,CAAiBG,qBADjB7S,4BACiB,EAEjBhb,4CASA,OARAqc,YAQA,CAAiB7a,gBAPjB0G,0BACAiW,OACAre,OACAguB,aACS,CACT5G,sBACSxnB,iBACQye,mBAEjBne,uCACA,MACAwlB,sBACA,yBACAhL,MACA3Z,wFACA,WACA,aAGA2Z,yBACA3Z,eAEA2Z,uCACA8D,GACA9D,qBAEA,0CACA6B,iCAKArc,4CACA,mBACA,qDAKAA,2CAEA,oBACA,iDAIAA,2CACA,SAEA,GADAqc,4BACAnU,6CACA,0BACAsd,aACA,CAAkB/I,UAClB,CAAkBR,QAClBqC,wEACAtP,OACAlB,8CACAwQ,uEACAtP,OACAlB,8CAEA5F,2BAGAlI,4CACAkI,uBACAA,8BACAA,4BAKAlI,uCACA,MACA2kB,EACAxiB,EACA6iB,EAEAQ,EADAlH,EACA,OAGAjC,2CAEAnU,mCAKA,0BACA,MACA,2EACA/F,0BACAwiB,KACAK,IACA,6CACAtO,MACAiO,IACAxiB,KACA6iB,4CAIA7iB,KACAwiB,KAEAzc,yCACAA,4CACAA,yCACAA,4CACAid,GACAjd,iEACA8G,eAEA9G,mCACAA,mCACAA,+BACAid,IACAjd,mBAEAA,0BAKAA,2BAEAA,uBACAA,+BAEAA,yBACAA,kCAGAlI,uCACA,6BACAkI,uCACAA,wCAEAlI,wCACA,QACAkI,uDACA9H,mBACA,wBACA,yBAEA,UACAolB,mEACAb,iBACAxiB,6CACA,WACAA,oBAEAwiB,iBAGAA,GAIA3kB,mCACAkI,gCACAA,4BACAA,kCAGAlI,gDACA,+EACA,OACA,SAEA,kCACA,oBAGA,oBACAwlB,0BACA,kBACAA,OAKAA,eAEAA,GAKAxlB,oCACA,IACAwa,EADAtS,gCACAA,kBACAsd,gBAEAb,KADAa,8BAEArjB,2BACA,kBACAA,sBACAA,oDAGAA,qBACAA,iBAGAnC,sCACA,kBACA,CAAqByc,8DAGrB,CAAqBR,+DAIrBjc,kCAEA,QADAqc,KACAiC,IAAyBA,mBAAuBA,IAChDjC,kBAEA,2DACA,4BAGArc,0CAEA,cADA,0DACwCse,WAAoBA,KAC5D,WACAqG,wBACAa,UACAvJ,mBACAQ,6BAMAzc,+CACAqc,EACAnU,0BACAA,2BACAA,iCAIAA,0BACAA,2BACAA,qCAIAlI,gDACA,iDACAse,IACA,qBACA,6BACA9D,IACAA,gBACA8D,0CAGA,OAAiBrC,SAEjBjc,uCACA,OAAiBic,6CAEjBjc,wCACA,eAKAkI,4CACAA,8CAKAlI,mCACAkI,oBAIAlI,mCACA,wBACAwlB,sBACAb,0BAEA,2BACA,8BACA,YACA,aACAQ,SACA1O,SACAC,SACA7T,SACAwU,gBACA,eACA,0BACA8N,UAEA1O,OADAuO,mBAGAtO,GADA7T,YACAmiB,aAEA,CACA,yBACAG,UAEA1O,OADAuO,m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CAtV,mBAEA,0BACAwY,OACAQ,2BACAjH,MACAkH,+BAGAlG,qCACAtO,wBACAA,yBACAA,6BACA,gBACA,8BAKAsO,kCACAtO,uCACAA,yBACAA,6BAAiD,8BAGjDsO,8BACAtO,uBACAA,wBAEAsO,uCACAtO,6BAA6C,6BAG7CsO,uCACA,+CAGAA,wCACA,6CAEAA,oCACA,8BAEA+E,EADArT,oBACA6Q,IAGAvC,EAlHA,GAoHAgF,aAKA,gBAEA3P,sCAA+C5F,WAC/C,WACAuR,aAIA,cACAtP,kBACAA,qBACAA,qBACAA,mBACAA,mBACAA,mBACAA,gBACAA,UACAA,wBACAA,8CACA,sCACAA,mCAGA,sCACAA,iBACAA,kBACAA,qBACAA,sBAGAmW,8BACAnW,iBACAA,kBACAA,wBAGAmW,6BACAnW,eACAA,mBACAA,sBAEAmW,uCACA,SACAE,KACAC,KACAtW,kCACAA,qBACA,oBACAlI,8CACAqc,mBACAnU,qCACA,yBAwMA,gBACA,OACA+T,6BACAQ,gCACAjH,0BACAkH,oCA7MA7c,wBACA2a,cACAlE,yBACAgI,eAEAhI,0BACAgI,iBAEAhI,gBACA5W,eACA8e,uCACAnd,MAGAiV,gBACAE,eACA+H,MAGArW,oBACAA,oBACAA,mBAEAmW,sCACAnW,uBACAA,uBAEAmW,qCACAnW,aACAsN,OACAyG,WAGAoC,uCACA,iCACAE,kBACAC,qBACAlI,wBACAtW,OACAqc,KACA,MACArc,EA0GA,cACA,OACAic,YACAQ,cACAjH,UACAkH,iBA/GAza,mBACA,4BAEA,6BACAqc,YAEA,GADAjC,KACAnU,mBACA,oBACA,WACAlI,8BACAA,sBAGAL,SACA0c,MAGA1c,SACA0c,MAGAnU,oBACAtI,SACAyc,MAEAzc,SACAyc,OAGAd,SACAc,OAIAnU,YACAA,mBAEAmW,sCACA,kBACA,aACA,GAEAnW,iDACAA,kBACAA,qBACAsN,mFACAyG,uFACA2N,8CAGA,CACA,yCACArL,uCACArW,oBACAA,kDACA8G,KACAwG,MACAyG,cAjBA/T,mBAiBA,EAKAmW,kCACAnW,kBACAA,kBACAA,wCAEAA,oDACAA,mCACAA,qBAGAmW,oCACAnW,kBACAA,yBACAA,6BACAA,qBAGAmW,uCACA,+CACA,cACA9P,oBACA,cACA,yCACA,qCACA,yCACA,iDACA+O,2BACA,yCACA,+CACA,2CACA,+CAEApV,kCACA7G,+BAEAA,GAEAgd,QACAA,EA5LA,GA0MA,cACA,sBAEA,cACA,sBAEA,gBACA,OAEA,gBACA,wCAHAtF,OAKA,gBACA,wCANAtV,MAQA,gBACA,sBACA4a,oBACAA,eACA,GAEAA,kBACAA,oBACAA,iBACA,EAGA,CAGA,gBACA,oBACAA,oBACAA,aACA,GAEAA,oBACAA,oBACAA,mBACA,EAGA,CAtDA7C,WA8DA,EAOA,gBAEA3P,sCAA+C5F,WAC/C,WACAuR,OAEA9X,cAEA,aACA,+CAKA,OAPAD,iBAOA8b,uCACA,aACA,MAEA5b,EADA,oBACA,UAGAoZ,gBAMA,QAFAnZ,wCACAkO,0CACAjO,QAA4CA,WAAoBA,KAChE,WACA0e,kCACAld,UACA4a,mBACAQ,2BAEApb,iBAEA,WAGAka,EAjCA,CADAK,KAmCC+S,cACDnT,aAKA,gBAEA3P,sCAA+C5F,WAC/C,WACAuR,OAEA9X,cAEA,aACA,+CAKA,OAPAD,iBAOA8b,qCAEA,QADA5b,KACAC,QAAwCA,WAAoBA,KAC5D,IAEAyB,+BAFAgd,QAGAA,UACApC,mBACAQ,2BAKA4B,eADA5a,oFACAA,gBAGA,GAGA,gEACAqK,iCACAnO,aACA,gBAAwC6e,WAAoBA,KAC5D,MACAD,UADAF,QACA6N,IAEA,aAEA3Q,EApCA,CADAK,KAsCCgT,gBACDpT,aAKA,gBAEA3P,sCAA+C5F,WAC/C,WACAuR,OACAvV,OACAvC,QACA8W,OACA+E,OACAxC,QACAtV,QACA9D,QACAC,QACAC,QACAwe,QACAhd,QACAkd,QACAC,cAEA,gBACA,6BACA,uCACAmG,iCACAA,eACAA,eACAA,uBACAA,0BACAA,qBACAA,2BACAA,+BACAA,gCACAA,6BACAA,qBACAA,EAIA,OAnBAllB,iBAmBA6e,8CACA,sCACAkH,gCAEArjB,OACAqY,SAOArY,IANAqY,QACAqU,aAJA,YAKArtB,kCAWA,QALAwjB,KACAG,KACA1O,KACAC,KACA7T,KACAwU,QAAsDA,WAA2BA,KACjF,WACA5Q,QACA0e,UAGAH,UAIA,GADAA,eACAG,SACA1O,IACAC,SAEA,CACA,sCACAC,KACA9T,KACA4T,QACAoG,SACArb,mCACAstB,0CAMA,QADAnS,MACAiI,OAFA3iB,6CAE0D2iB,YAA6BA,KAGvF,QAFAC,SACAC,MACAC,UAAwDA,aAA0BA,MAClF,cACA,wBACA4I,kBACA7I,MACA,OAGAA,IACAnI,YAGAzU,uBACAA,mBACAA,mBACAA,kBACAA,0BACAA,oBAIAoW,sCACAjC,sCACA,0BACAnU,4DACAA,gEACAA,kCAIAA,6BACAA,yBACA,8JACAA,qCACAA,gBACA6mB,qCACA9K,4BAEA/b,oDACAA,8BACAA,wBAEAA,0BAEAoW,0CACA,0BACA,8iBAIAA,yCACA,WACAkH,gCACAtd,4CAEAA,wDACA,yBACAA,wCAEAA,2CACAsS,yBAGA8D,yCACA,WACAqG,oBAEAK,qBACAG,gCACA,oBACA+F,qBACA1F,oCAEAc,mBACA,MAEAjP,EADAsN,EACAQ,IAGAA,IAEA9N,aAfA,IAgBAA,gBACAmO,iBACAA,qBACAA,6BAEAwJ,mBACAxJ,yCAGAuF,qBAEAzM,8CACA,kDAEAA,wCACApW,kDAIAoW,uCACA,MACApW,4BACAA,gDACAA,iCAGAA,sBAEA,6BAEA/F,EADAqjB,EACA,OAGAhL,2BAEAtS,mCACAA,2CACAA,8BAEAmU,wCAEAnU,oCAEAoW,uCACA,6BACA5D,gGACAA,iGAEA4D,uCACApW,oCACAA,wBACA,gEACA,sCACAA,mBACAsS,GAKA8D,2CAGA,QAFA9D,KACAgL,8CACAb,4BAAqDA,WAAgBA,KACrE,WACA,eACA,uBACAlO,iCACA,QACA+D,2BACAA,aACA,QAKA,UAEA8D,4CACA,iBACA,wCACA,MACA,uBACA,MACA,mDAEA6G,EADAR,+BACAnK,WACAtS,sCACAA,kDAKAoW,yCACA,gCACA,MACA,uBACA,MACA,mDACA0G,mBACA9c,sCACAA,iDAMAoW,mCACA,SACAjC,mCACAnU,mCACAA,mCACAyc,kBACAnK,YAGA,wBAA0D,6BAC1DtS,sBACAA,qCACA4e,MACAC,gBAEA7e,4BAEAoW,mCACAjC,mCACAnU,oBACAA,yBACAA,4BAEAoW,mCACA,0CACA,MACA,6CACA,WACA,OACA2Q,8CACA9C,YACA/E,eACAnL,YACAQ,cACAjH,uCACAkH,gDAKA4B,wCACA,+CACA,8DAEAA,iCACA,+BAIAA,wCACA,gBAAkDkH,WAAyBA,IAE3Etd,oBADAyc,KACA,EAGArG,yCAGA,aAFApW,kCACAA,mCACAA,qBACAA,0CAEAA,yBAEAoW,uCACApW,wBAEAoW,yCACApW,wBAIAoW,2CACA,IAEAnc,EAFAqjB,KACAb,KAEA,gBACA,WACAlO,kBACAC,qBACA,YACA,gBAA8D7T,WAA2BA,KAEzF2iB,EADArjB,UACAqjB,UACAR,UAIAvO,qBACAkO,QAIA,SADAzc,6BACAsd,GACA,WACA7O,0BACAA,IACAA,2BAMA2H,4CAIA,GAHApW,kBACAA,0BACAA,6BACAA,iBACAA,0BACA,kCAAuDsd,WAAgBA,KACvE,WACArjB,wDACAqY,SAIAtS,6BACAA,qCAGAoW,sCACApW,6CACAA,2CACAA,6BACAA,4CAQAoW,yCACA,SACAnc,wBACAqjB,IACAhL,SACAgL,mCAEAhL,aACAgL,oCAGAA,EACAtd,2BAGAA,kBAEAA,iBACAA,6BACAsS,0BACAtS,kBAEAA,yBACA/F,iDAEA+F,sBAEA,yBAAiD8c,WAAgBA,IAEjE9c,oBADAid,KACAhjB,GAEA,UA4QA,cACA,SACA,iBACA,SAEAka,WAEA,SAnRArc,YACAmC,mBAEAA,GAGAmc,uCACA,iCACA,kBACApW,2BACAA,oBACAsd,2BACAhL,0BACAtS,kBACAA,uBAGAsd,GAKAlH,sCAGA,QAFA,QAAiCkH,0BACjC,QAAqCb,mBACrCA,UACA,yCACAxiB,uBACA+F,2BAGAA,oCAIAA,4BAIAoW,2CACA,+DAIAA,kDACA,0BACA,YAA4BqG,oBAA4BA,IAGxD,GADAzc,sBADAsd,cACA0J,aAAsE1U,gBACtE,EACA,SAIA,aAGA8D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ACA7B,SACA,UACA,QACA+D,8BACA/D,UAEAgE,QACA,UACA,OACAD,8BACA/D,UAEAgE,2BACA,UACA,MACAD,4BACA/D,2BAEA+D,+BACA/D,UAEA8D,IACAE,uBAIAlI,SACA,UACA,OACAgI,IACA9D,uBAEA+D,6BACAC,6BAEAlI,2BACA,UACA,SAEAtW,kBA/NA,GAgOAwa,sBACAgE,WAGAhE,4BAEA,UACA,SAEAxa,kBAzOA,GA0OAwa,OACAgE,WAGAhE,QAEA,UACA,cACAA,QACAgE,WAGA,mCAhNAnd,IACAkd,gDACA,WACA,mBACA,4CACA,4BACAve,KAGAue,cACAA,gDACAA,+BACAA,uBAQA,4BACAA,eACAD,EACA9G,cACA+G,eACAA,yEAuLA,EAMA,gBAEA1S,sCAA+C5F,WAC/C,WACAuR,OACAvV,QACAvC,QACA8W,QACA+E,QACAxC,QAEApZ,aACA,cACAuI,qBACAA,YACAA,kCACAA,mCACAA,mCAAwD,iBAExD,6CACA,+BACAA,iCACA6b,2BACAgE,qBAEA7f,uCACAA,2BACAA,+DACAA,yCACAA,iCAA4D6f,6BAC5D7f,uCACAA,2BACAA,iKACAA,8DACAA,qCACAA,oFACAA,yCACAA,wCACAA,6EACAA,oCACAA,qCACAA,6CACAA,sBACAA,wBAEAtI,sCAKA,QAJAC,2BACAwe,qBACAhd,gDACAkd,eACAC,QAAgDA,WAAwBA,IAGxED,IAFAve,QACAyvB,OACA,4BAGA,QAIAvnB,kBADAqW,iBAEAld,KACAA,aACA6G,4BACA7G,GACA,mCACAxB,+GAGA2X,wCACA,2BAKAnW,UACA,YAAwBgb,WAAqBA,KAC7C,WACAiC,iBACAjd,GACA,iFAGArB,SACA,uEAGA,IACA,8BACAwX,8BACA,iBAEA8G,2CACA,cAGA,mBACA,kBACA,EAEA1e,uCACA,WACAsI,2DACA7G,QACA0L,2BACAlN,iCAIAD,+CACA,WACA4e,uCACAA,QACAA,aACA,WACAxe,gCAzGA,IA0GA,oBACAkrB,qBACA7pB,yBAEAilB,mBACA,uBACAd,gBACAhH,OACAD,oBAEAyQ,mBACA3tB,8BAGA0pB,qB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5gB,cACA4gB,iCAEA5gB,cACA4gB,iCAEA,qCACA,OACAQ,mBACAC,eACAC,cAoCA,kBACA,eACArnB,WACAC,IACAqnB,OACAC,QAEA,eACAC,SACAC,UACKxnB,IAiCL,gBACA,qBACA+jB,YACAhkB,WACAC,oEACAinB,SACAP,SACA,WACA,WACA,yCACA3C,MAEAhkB,WAEMknB,GACNlD,MACM2C,KACN3mB,OAEA,OACA0Y,QACAha,UA0CA,sBACA,qBACAwoB,kBACAP,mBACAC,YACAne,mBACA4X,WACAC,iBACAF,YACAG,oBACAvf,iBACAuH,kBACAmf,mBACAC,eACAC,gCACAC,2BACAC,mBACAC,2BACAC,wBACApf,cACAqf,sBACAC,eACAC,sBACAC,cACAC,oBACA9mB,eACAC,oBACAC,oCACA6mB,uBACAvf,OACAgH,eACA2I,SACAha,YAEA6pB,OACAxY,eACA2I,SACAha,WACK,SACL8pB,4CACA5kB,8CAIA6kB,OACA1Y,eACA2I,SACAha,YAEAgqB,OACA3Y,eACA2I,SACAha,WACK,SACLsK,4CACA2f,8CACA7f,uBACA,uBACArH,iBACA6mB,gBACAA,uBACAA,UACAA,wBACAA,yBACAA,eACAA,4BACAA,4BACAA,wDACA,+BAEAA,aACA7mB,GAEA,2BAiBAnE,eAiKA,QACAsgB,kBACA5mB,qBACAA,kBACAA,mBACAA,oBACAA,cACAA,sBAGA4xB,yBACA,mBACA5E,eACAhkB,iBACAC,gBACAinB,+BACAP,gCACAH,SACAlb,QACA,QACAoN,sCAh9BA,KAi9BAha,wCAh9BA,MAk9BA1H,sBACAiD,OACAye,eACAha,mBAEA8nB,QACAlb,UAGAud,sBACA,yBACA7E,iBACAhkB,wBACAC,8BACAinB,qCACAP,qCACAC,SACAne,UACA4X,WACArY,oBACA,MACAS,cAEA4X,aAEQ,MACRA,aAEA5X,cAEA,OACAsH,eACA+Y,gBACAC,iBACArQ,QACAha,UAEA1H,kBACAA,0BACAA,wBACAspB,0DACAA,8DACAA,2BACAA,4BACAA,iBACAA,eACAtpB,6BAAwCspB,IAExC0I,0BACA,mBACA/oB,sBACAinB,mBACAP,oBACAC,cACAne,iBACA4X,mBACA,MACA,kCACAD,gCACAwG,MACAtG,uBACAF,0BACA,SACAA,OACAE,OAEAF,SAGUwG,OACVtG,EACAA,2BACYF,GACZA,8BACYC,KAEZD,cACA3X,GAFA6X,YAGAA,OAEAF,SAIA,WACArQ,cACA2I,QACAha,YAGA0hB,aACA8G,YAFA5G,WAGA4G,gBACAA,gBACAA,iBAEA,KACA,eACA,yBACA3e,uBACA2e,0BACAA,yBACAA,0BACAA,yBACA7G,kBACA6G,yDACAA,wDACAA,mBACAA,iBACA,SACAA,qBACAA,0BACAA,2BAEAA,uBACAA,yBACAA,iCAKAA,qBACAA,qBACAA,oBACAA,qBAIA+B,2BACA,sBACAhpB,kBACA,MACA,OAvbA,gBACA,eACA+jB,YACAhkB,YAEA,QADAA,mBAEA,OACA0Y,QACAha,UAGA,wBACAwoB,gBACAP,gBACAC,aACAne,YACA,aACAiQ,QACAha,WACM,CACNga,SACAha,UAkaA6I,EACAmR,6CACAha,+CACAwqB,sBAEAvC,YACAC,aACAne,8BACA4X,gCACArgB,sBACAA,sBACAA,UACAA,WACAA,oBACAA,kBACAA,mBACAhJ,yBAEAgJ,0CACAA,mBAEAA,8CACAA,gBAEAA,0DACAA,8DACAhJ,wBACAgJ,sDACAA,kDACAA,iBACAA,eACA/F,mBACAye,cACAha,iBACO5B,IACPqsB,kBACAC,qBAEApyB,oBACAA,4BACAA,0BAGAqyB,wBACA,sBACArpB,iBACAC,2CACAinB,8CACAtf,MACA8Q,SACAha,UACAqM,oBACAzG,sBAEArK,kBACAye,cACAha,iBACO5B,OACPqsB,kBACAC,kBACOppB,MACPgI,GACAhR,eAGAsyB,uBACA,mBACAtF,kBACAhkB,sCACAC,8BACAinB,IACAxO,cACAha,iBAEAsB,IACAgkB,mBACAkD,qBAEAA,sBAGAlwB,oBACAA,yBAGAkwB,8DACAA,kEAGAA,2CACAA,8CACAA,oCACAA,oCACAA,mBACAA,iBACAlwB,8BAAyCkwB,KAEzCqC,2BACA,mBACAtpB,sBACAinB,mBACAP,oBACAC,gBACAne,gBACA,MACA,mCACA6X,gCACAF,6EACAG,gFAGAF,uBACAC,wBACA7X,IACA4X,KACAC,MACAA,MAEAD,MAEYA,EACZC,MACYA,IACZD,OAEAE,QACAA,QAEAH,SAKAuG,2BACAA,4BACAA,eACAA,gBAEA3C,IACA4C,IACAD,+BACAA,6BACAA,wDACAA,2DAEAA,aACAA,YACAA,6BACAA,iCAIA6C,yBACA,mBACAxF,qBACAhkB,oBACAA,0CACAA,mBAEAA,8CACAA,gBAEAA,0DACAA,8DACAhJ,yBACAgJ,sDACAA,kDACAA,iBACAA,eACAgI,6BAEAyhB,0DAEAxvB,oBACAye,cACAha,iBACO5B,IACPqsB,kBACAC,qBAEApyB,4BACAA,wBAEAA,eACAA,eAGA0yB,kBACA1yB,eACA2yB,qCAIAnrB,IACAorB,uBACA,mBACA5F,mBACAhkB,uBACAC,kCACAinB,iCACAP,iCAQA,GAPA3C,IACA2C,kBAEAA,UACAA,UACA3vB,6BACAA,qBACAgJ,EAGA,UACA,mBACA4mB,uCACQ5mB,kBACR4mB,QAEA5vB,iBACAoU,kBACA,oCAGAqe,SACA/Q,oBACAha,sBACAjC,mBAEAunB,IACA3D,iBAEAA,SACAA,SAQAA,0LACA5X,eACAA,qBAGAohB,wBACAze,6BACA,eACAnR,MACAye,cACAha,kBAEAsJ,mBAt+BA,kBACA,aACA,WACAic,KAEA,CAFA,MACQD,GACRC,qBAEMA,WAEN,WACAA,aAEA,CAFA,MACQD,GACRC,0BAGAA,0CAw9BA6F,UAGAxF,mBACA,qBACAN,kBACAhkB,mBACAC,WACAinB,YACAP,WACAC,YACAne,uBACA4X,qBACArpB,8BAGAiD,yBACAye,SACAha,WACO5B,OACPqsB,cACAC,eACOphB,MACPoD,6BACA,gBACAmV,YACAvf,aACAuH,MACAmf,MACAC,KACA1nB,KAEAynB,OADAC,WAGAT,YAEA3e,OADAof,UAEAD,OAEAztB,MACAye,SACAha,YAEAzE,wCACAye,YACAha,cACS5B,OACTqsB,iBACAC,kBACSphB,WAKTpI,IACAgF,gBACA,mBACAof,eACAhkB,eACAnG,iBACAqC,qBAEArC,gBACAqC,oBAEArC,eACAqC,mBAEArC,YACAqC,gBAEArC,YACAqC,gBAEAA,oDACA8nB,2BACA9nB,KA76CA,QA66CAlF,oCACA0X,WACAqb,aAGA/F,4BACA9nB,kDAEAA,gEACAA,8DACA8nB,cACA9nB,UAz7CA,SAy7CAlF,uCAGA6N,kBACA,mBACAmf,eACAhkB,eACAnG,iBACAmwB,qBAEAnwB,gBACAmwB,oBAEAnwB,eACAmwB,mBAEAnwB,YACAmwB,gBAEAnwB,YACAmwB,gBAEAA,0BACAhG,2BACAgG,KAh9CA,QAg9CAhzB,cACA0X,WACAqb,aAGA/F,4BACAgG,yBAEAA,uCACAA,sCACAhG,cACAgG,UA59CA,SA49CAhzB,iBAKAizB,IACAC,kBACA,kBAGA,KASAtD,GACAne,EAVAT,eACAgc,iBACAhkB,qBACAC,yBACAinB,2BACAP,uCAGA,SAGA3e,YACA4e,wBACAne,yBAEAzR,cACAgR,YACAhR,uCACA4vB,cAEA5vB,uCACAyR,iBAKA0hB,oBACAnzB,eAhhDA,SAghDAA,uBAGAA,iBAxwCA,kBACA,wEAuwCAozB,wBAEAC,kBACA,WACArqB,0CACAC,KACAjJ,gBAGAgR,oBAGAhR,gBAGAA,iBACA2X,sBACAqV,eACO,IACPhc,SACA/H,mBACQ+H,aACR/H,qBACQ+H,WACR/H,oBAEAjJ,sBAEAszB,sBACA,gBACAtqB,WACA,qBAGA,yEAEA+F,4BAGAiC,YAGA,KAEA2e,GAFA1mB,gBACAinB,iBAEAlf,iBAEAoD,iCACA8b,2BAIAA,yBAGAP,GADAhsB,sDACAyK,EAEAmlB,gBAEAvxB,cAMO,IAHP2wB,oBACAa,gBACAC,cAMAziB,mBACAhR,eACAA,iBACA2vB,SACA3vB,iBACAwvB,uBAGAkE,qBACA,kBACA,qBAGA,qBACA1iB,oBAIO,IAHP2hB,oBACAa,gBACAC,aAIAziB,iBACAoD,iCAEAxD,wBAAiDqZ,aAGjDrZ,yBAAmDqZ,UAEnDjqB,kBAEA2zB,oBACA,kBAGA,mBACA3qB,gBACAgI,iBACAoD,wCACApL,0BAGAA,kBAEAgkB,IAGAhc,mBACArN,wBACA3D,gBAEAA,gBACAA,iBACAyvB,qDAEAkD,oBACAa,gBACAC,eAKAG,IACAC,mBACA,IAkBA9C,GAjBA/nB,kBACAC,sBACAinB,oBACAP,iBACAC,eACAne,EANAzR,aAMA+Y,YACAsQ,UACAC,SACAF,YACAG,aACAvf,QACAuH,QACAmf,KACAC,KACAC,YACAC,aACAC,OAIArf,gBACAA,kBAEAzR,eAEA2wB,aACAC,IAFAF,eAEAle,0CACAqe,mDAEA,8BACAjf,IACA/Z,oBACAN,qBAEA05B,gBACA,gBACAn5B,EACAkS,aACA4H,YAEA,WACAuC,EACAkV,YACAzX,WAEA,WACAU,EACAgX,YACA1X,WAEA,WACAwE,EACA7E,aACAK,YAEA,EAGA,gBAEAzY,EACAkwB,QACAC,QACA,WAGAxxB,EACA,0CACAg5B,MACA,MAEAG,OACA7H,UACA,IACAwG,KAEAvG,GADAD,QAGA3X,IAEA6X,eADAC,UACA,GAEA,WACAjX,EACA,yCACAwe,MACA,MAEAG,MAEA3H,SADAC,UAEA,IACAqG,KAEAtG,GADAC,QAGA9X,IAEA4X,cADAD,UACA,GAEA,WACAjV,EACA,yCACA2c,MACA,MAEAG,MAEA5H,SADAD,UAEA,IACAwG,KAEAvG,GADAD,QAGA3X,IAEA6X,eADAC,UACA,GAEA,WACAnT,EACA,0CACA0a,MACA,MAEAG,OACA1H,UACA,IACAqG,KAEAtG,GADAC,QAGA9X,IAEA4X,cADAD,UACA,GAEA,WACA9L,EACA,MACA,6BACAwT,MACA,MAEAG,MAEA3H,QACAF,IAFAG,UAEA9X,OAEAwf,MACAA,MACArf,QACA5H,MACAof,SACgBxX,iBAChBkf,OAGA1H,SAEAxX,QACA0X,OACAC,SACAD,UAGAC,SACAD,SAGAF,YACAwG,KAGAtG,GAFAC,OAGAF,GAFAD,QAGYA,MACZwG,KAEAvG,GADAD,QAEYG,OACZqG,KAEAtG,GADAC,QAGA,WACA9M,EACA,MACA,4BACAqU,MACA,MAEAG,MAEA3H,QAEAD,aADAD,IAFAG,UAEA9X,EACA,MAEAwf,MACAA,MACArf,QACAyX,MACAD,SACAC,SACgBzX,iBAChBkf,QAGA1H,SACAC,SAEAzX,QACA0X,OACAC,SACAD,UAGAC,SACAD,SAGAF,YACAwG,KAGAtG,GAFAC,OAGAF,GAFAD,QAGYA,MACZwG,KAEAvG,GADAD,QAEYG,OACZqG,KAEAtG,GADAC,QAGA,WACAzM,EACA,MACA,6BACAgU,MACA,MAEAG,MAEA5H,QACAE,IAFAH,UAEA3X,OAEAwf,MACAA,MACArf,QACAyX,MACAD,SACAC,SACgBzX,kBAChBkf,QAGA1H,SACAC,SAEAzX,QACAL,QACAgY,UAGAA,SAGAH,YACAwG,KAGAtG,GAFAC,OAGAF,GAFAD,QAGYA,MACZwG,KAEAvG,GADAD,QAEYG,OACZqG,KAEAtG,GADAC,QAGA,WACAtvB,EACA,MACA,8BACA62B,MACA,MAEAG,MAEA1H,IADAH,UACA3X,OAEAwf,MACAA,MACArf,QACA5H,MACAof,SACgBxX,kBAChBkf,OAGA1H,SAEAxX,QACAL,QACAgY,UAGAA,SAGAH,YACAwG,KAGAtG,GAFAC,OAGAF,GAFAD,QAGYA,MACZwG,KAEAvG,GADAD,QAEYG,OACZqG,KAEAtG,GADAC,QAGA,WAGAjT,EACAtW,qBACA8wB,MACA,WAGA1iB,EACApO,UAj5CA,gBACA,WAAqCitB,IACrCD,IACA,mCACAhc,MACAoD,kBACA,oCACAwb,gCACAne,2BACA4X,2BACAC,yBAEAC,IADA/W,mBACA8W,KACA9W,2BACAwa,UAIAA,EA+3CApd,QACAkhB,MACA,WAGAza,EACA,iBACAya,MACA,MAEAC,oBACA1H,oBACAC,mBACAF,eACAG,gBACA3X,OACAge,cACYhe,SACZyX,MACAuG,eAEAhe,SACA0X,OAIAtpB,eACAsU,mBACAtU,gBACAA,cACAA,0BAKA8wB,KACAZ,YACAA,aACAA,UACAA,SACAlwB,eACAA,sBAIAoU,mBACA8c,kBACAA,sBAKA4C,IAEAzE,gBACA,mDACArvB,gBACAA,yBACAA,oBACAwvB,mBAEAlb,mBACAtU,8CAEAA,MAGAsoB,iBACA,oCACAtoB,qBAAkCA,uBAClCA,sBAAmCA,wBACnCA,uBAAoCA,yBACpCA,oBACAA,cACAA,sBAGAA,MAGA+zB,iBACA,sCACAnjB,qBACAmD,OACAzG,MACAoU,QACAha,WAEA1H,gBACAA,qBACAA,wBAGAA,oBACAsU,mBACAkb,oBAEAxvB,MAQA/B,oBACA,8DACA,0BACA+B,aACAA,oBAEAgtB,GACAhtB,WACAA,iBACAA,aACAA,wBACAoU,6BACApL,4CAIAhJ,aACAA,kBAEAA,uBACAA,gBACAA,eAGAA,MAGAwrB,kBACA,mCACAxrB,iBACAsU,oBAEAtU,MAGAC,mBACA,oCACAD,iBACAwvB,oBAEAxvB,MAMA6pB,mBACA,mBACA,aAGA7Y,YACAhR,4BACAgR,wBAEAhR,gBACAA,MAPAA,MAeAg0B,iBACA,+DACAhrB,kBACAC,UACAinB,SACA,+DAQA+D,mBACA,+DACAjrB,kBACAC,MACA,mBACA+jB,YACAhtB,mDACA+O,QACA/F,SACAC,OAEA8F,QACA/F,QACAC,OAEAA,IACAjJ,uBAGAA,MAQAsvB,mBACA,sBACA,mBAMAtvB,qBAJAgR,EADAA,IACA,QAEA,KAEAhI,wBASAkrB,uBACA,oBACAhE,mBACAP,YACAC,aACAne,kBACA4X,mBAEA,IADArY,cACA,4CACA,UACAoY,OACA,IAIS,IAJTuJ,oBACAwB,QACAC,cACAZ,kBAEA,YAEA,MACA,qBACAxpB,oBACAuH,8BA3lDA,gBACA,QACAyb,IACAhkB,IACA,0BAGAgI,GAFA/H,UAGA+jB,GAFA/jB,UAGAD,OAIA,CACAqrB,MAHArjB,KAIAsjB,MAHAtH,KAGA,CA4kDAuH,MACAF,cACAC,eAIApE,8CACAA,iDACUtc,yBACVsc,iCACAA,kCAGAA,kBACAA,mBAEAA,WACAA,aACAlwB,sBAEA,aAOAw0B,mBACA,4DAOAC,qBACA,OACA1lB,GADAiC,cACAhR,qDACAA,4BACAA,0BAEAA,MAOA00B,mBACA,4BACA,gCAOAC,mBACA,4BACA,gCAQAC,kBACA,+DACA5rB,iBACAC,MACA,mBACA+jB,YACAhtB,oDACA+O,QACA/F,WACAC,OAEA8F,QACA/F,WACAC,OAEAA,IACAjJ,0BAGAA,MAOA60B,mBACA,IAKAlF,GALA3e,0DACAgc,eACAhkB,iBACAC,mBACAinB,oBAEA,6BAOA,8BAIA,GAHA9b,GAPAub,IACA93B,kBACAN,gBACAmqB,eACAha,kBAGA,eACAioB,cAEA3e,GAGA,iCACAqY,4BACAsG,sBACAA,sBACAA,gBACAA,uBAGAA,IACA93B,IACAN,IACAmqB,QACAha,UAGA,qBACAioB,uBAEA3C,aACA2C,sBACAA,uBAEAA,IAOAmF,oBACA,mBACA9rB,iBACAC,mBACAinB,MACA,sCACA,UACAlD,aACAje,oCACA/F,kBACA2mB,OAGA3C,aACAje,oCACA/F,kBACA2mB,OAEA5gB,oCACA/F,kBACA2mB,QAGAA,IACA3vB,yBAEA,8BACA+O,UACAmhB,wBAEAnhB,UACAmhB,sBAEAnhB,cACAmhB,qBAEAnhB,eACAmhB,uBAEAlwB,wBAEA,aAMA+0B,4BACA,wBAAmC/0B,wBAMnCg1B,wBACA,wBAAmCh1B,oBAMnCi1B,yBACA,sBACAjI,KACA,mBACA5Y,8EACA4Y,YAGAA,GAOAkI,0BACA,sBACAlsB,gBACA,2CACA+F,aACAie,eAEAje,YACAie,aAEAje,aACAie,gBACAA,oBACUje,eACVie,kBACAA,oBAEAhtB,uBAEAA,MAMAm1B,0BACA,IACAnI,EADAhc,mBAEA,kCACAgc,GACAjZ,YACAzG,UACAoU,cACAha,kBAGAslB,OAOAoI,2BACA,IAEAnsB,GACAinB,GAHAlD,mBACAhkB,2BAGA,yDACA+F,aACAie,eAEAje,YACAie,aAEAje,iCACA9F,MACA+jB,iBAEAje,oCACAmhB,MACAlD,mBAEAhkB,IACAC,GACA+jB,mBACYkD,KACZlD,qBAGAhtB,sBAEAA,MAOAq1B,4BACA,gEACA,0CACA,YAEA,sBACArsB,oCAGA,iBACA,SAEA,sBACAknB,QACAP,QACAC,YACAne,YACA4X,qCACA,QACA6G,MACAP,MACAC,MACAne,MAEA,WACA2X,OACArQ,cACA2I,sBACAha,0BAEA6hB,OACAxQ,cACA2I,oBACAha,uBACO,SACPsC,OACA+O,cACA2I,kCACAha,sCAEA6J,YACAmf,aACAnf,4CACAmf,8CACA,wCACAE,uBACAD,gBACAA,iBACAC,wCACAA,uBACA,+BACAE,mBACAC,2BACAH,4BACAG,KACAH,6BAIA,IAMAO,GACAC,GAGAC,GACA9mB,GACAC,GACAC,GAbAumB,WACApf,YAGAqf,MACAC,MASAD,gBACAA,KACAE,KACAE,KACA7mB,MACQymB,OACRI,OACAJ,KAEAzmB,GADA2mB,uBAEQF,SACRI,KAEA7mB,GADA2mB,uBAGAA,sBACAD,KACAE,KACA7mB,KACAE,MACQymB,OACR3mB,OACA2mB,KAEAzmB,GADA2mB,sBAEQF,SACR3mB,KAEAE,GADA2mB,sBAGA,qBAGA,eACA,aACAE,iCAKA,8DACA,+BAEAX,IAOA2E,2BACA,mBACA,+BAEAtI,iCACAhtB,aACAA,mBACAA,cACAA,uBAIAA,MAOAu1B,wBACA,mBACAvsB,eACAC,aACA,+BACA,cACA0mB,oBAEA3C,WADAhc,WAjqFA,OAmqFAyhB,WACAhD,WACAA,WACAzC,mBAEAyF,YACAhD,YACAA,aAGA,cAIAzE,aACAnmB,cAMA,eACA,gEAEA,GADA8O,YACA3C,uBACA,4FAEAhR,eACAA,mBAA8BgP,aAC9BhP,gBACAA,iBACAA,iBACAA,cACAA,kBACAA,iBACAA,cACAA,eACAA,YAEA,OA7xFA,mBACAgR,qBACAgc,WACArpB,sCACAupB,aAEA,CAuxFAxZ,MACA8hB,WACAz3B,iBACA,IAEAkL,GAFA+jB,eACAhkB,0BAEA,SAIA,IADAgkB,UACA,WAQA,GAPAhtB,cAGAiJ,6BACAjJ,qBAGAiJ,GACA,OAIAA,aACU,yCACVA,kBAEAjJ,iBAEK,CACLw1B,WACAz3B,kBACA,WACA,KAGA,YACAiC,kBACA,oBACAkwB,gBAMA,IALAA,6BACAA,yBAIAA,yCAEA,YADAlwB,aAKA,cASA,YAPAoP,WACApP,UAh8DA,gBACA,wBACAgtB,UACAhkB,4BACAC,qBACA,6BACAA,0BAEAD,EAw7DA0H,KAIA1Q,cAOA,0BACA4vB,yBACA5vB,kBACAA,YAMA2vB,cACAA,cACAA,gBACAA,yBAEAA,2CACAA,YAGAA,qBACA3mB,qBAEA2mB,wBACA3mB,eACAA,YAIAknB,6CACAlD,SAIA2C,oBACAA,8BACAA,sDACAA,aAEK,CACL6F,WACAz3B,kBACA,mBACAkL,kBAIAinB,GAn9DA,gBACA,IACAlD,EADAhc,mBAIA,IACA,MACA/H,GACAinB,GAGA,4CAGA,QAFAP,gBACAC,KACAA,UACA,iDACA3mB,MACA,MAEA2mB,MAGA,OACA,IACAvG,QACA,YA7EA,oBACA,SACA2D,KACA,aAAwB/jB,KAAYA,MACpCD,uBAEA,SAuEA2H,GAFA1H,KAEA,IACA,qBAEA,KADAD,cACA,YACA,yBACA,0BACAogB,QACA8G,WAMA,OACA,IACAlmB,GACAuH,GAFAgY,qBAGA,SAAoBhY,MAAaA,MAEjC,qBADAvH,cACAhB,IAKAgkB,cAHAhjB,MAGAhB,GAGAgI,oBACA,OAKA,CALA,MAIM0f,IACN1D,IAEA,SAu5DAyI,IACA9F,KACAC,KACAne,IACA,SAEAzR,SA7+DA,kBAMA,QALAgtB,KAIA/jB,sBACAA,aAGA+jB,sCALA,SAMA/jB,eANA,MAQA,mCAAsCuT,yBAi+DtC/L,OACA,MAt5DA,gBACA,QACAuc,IACAhkB,IACA,gBAEA,EACAgkB,KACA,WAGA,EACAhc,OACA,WAGA,EACAhI,KACA,WAGA,EACAgI,KACAhI,KACA,WAGA,EACAgI,KACA,WAGA,EACAA,KACAgc,KACA,WAGA,EACAhc,MAGA,OACAwjB,SACAE,SACAC,UAy2DAe,KACA/F,YACAC,YACAne,WAEAzI,cACAC,cAEAD,aACAC,aACAA,aAEAjJ,eAEK,CACLw1B,YACAz3B,iBACA,mBACAiL,WACAC,iBACAinB,KACAlwB,uCACAiJ,KACAA,gBAIAinB,UAEAlwB,oBACAA,uBACA,qCACAiJ,KACA0mB,mBAEAA,aACAA,kCACA3vB,cACA2vB,gCACAA,gCACAH,SACAxC,8CAEK,CACLwI,YACAz3B,iBACA,WACAiL,aACAA,cACAA,eACAhJ,eAIA,sFACAkwB,iBACAtf,gBACAkhB,eACAC,gBACAhZ,kBAEAiU,yBAA6CA,aAC7CA,YACAA,WACAA,WAIA,wBAIA,qCACA4C,2CACA5vB,oBACA2vB,qBACAO,uBACAjnB,IACA2mB,oBAGAD,aAIA1mB,KACA0mB,wKACAC,mBAjBA,MADAM,kCAkBA,GAGK,CACLsF,WACAz3B,iBACA,iBACAivB,cACAA,eACAA,4BACAhtB,kBAEK,CACLw1B,YACAz3B,iBACA,2BAGA,oBACAiL,eACAC,cAGAinB,gBACAP,iCACAA,aAn0FA,orCAo0FA,oDACAle,4CACA4X,8CACAC,8CACAF,0CACAppB,kBACAA,gBACAA,cACAA,eACAA,eACAA,yDACAA,aACAyR,kBAGA+d,QAGAU,kCAGA5b,SACAtU,mBACAA,YACAgJ,2DACAA,6CACAA,6DACAwmB,QACAxmB,UACAwmB,uDAEAxmB,UACAwmB,uDAEAxmB,cACAwmB,0BAEAxmB,aACAwmB,SAEAxmB,mBACAwmB,SACAiD,aAEAzpB,qBACAwmB,qDACAA,uDAEAxvB,cACAA,cACAA,6BACAgJ,YACAhJ,YAEAA,qBACA6C,aACAqC,KA19FA,QA09FA8D,SACA2sB,UAGAhD,KA99FA,QA89FA,IAEK,CACL6C,cACAz3B,iBACA,cAGA,eACAiC,cACAA,oBACA,8BACAgtB,GACAA,4BAEA1Y,sBAEK,CACLkhB,eACAz3B,iBACAiC,YACAA,eACAA,cACAA,iBACUA,aACVA,6BACAA,eACAA,eACUA,gBACVA,sBACAA,kBACUA,YACVA,eAQK,EACLw1B,iBACAz3B,iBACA,yBACAkvB,KAOK,CACLuI,kBACAz3B,kBACA6S,oBAGAqc,GAnXA,GAqXA,0CAEApoB,KCvrGA,WAiBA,QAGA,yBACA,2BAGA4S,gDACA,OAEA,qBAYAA,mBAJA,WACA,kDAIAme,mCACAA,8CACAjyB,sCA1CA,GCDA,SAMArM,KACA,kDACA4b,mBACA,sCACAC,aACA,yBACAC,kBAEA9b,YAdA,CAeC,8CACD,oBAEA,SAGA,cAGA,QACA,oBAGA,YACA+b,IACAla,KACAia,YAIA,2CAGAE,OAGAA,UAKA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YACA/0B,aAJAgY,kCAKG,kCACH,gBACAA,mBACA+I,iBAGA,8BAIA,QAHAnS,QACA,aAEA6C,kBACAuG,gBACAhO,GACA1O,uEAEAA,2DAGA0O,GACA1O,qEAEAA,qEAGA,GAdA,GAeG2c,GAGH,iBACA,6CAEA,oCAEAE,GADAvJ,QACA,GAEAjE,MACA,kBACA,qCAEA+a,GADA9W,QACA,GAEA,4BACA,oBACAoW,qCACAra,yCAIA,6DACArP,4DACA2D,0BACA3D,+DAEAA,oBAGA,iBAEA,6DACA,yCACA,WACA6c,KAEAxN,+BAEAqW,GADApS,QACA,GAEA,6BACA,qCAEAoW,GADApW,QACA,GAEA,OACA,oBACAnS,mCACAyb,wCACAC,gBAGA7c,yDACA2D,0BACA3D,kEAIA,cACA,8BACA2c,MACA,gBACA,uBACAE,6BACAF,wCAEA3c,gDACA2D,0BACA3D,2DAEAA,0DACAA,mBAGA,iBACA,YAEA0c,YACA1c,6CAEA,qDACA,kFACA6c,sBAEAA,IACG,IACH7c,8DAGAA,4DACAA,mBACA2D,4CACA,eACA8P,8BACA,aACAkJ,4DAIA,eACA,OACA6Y,eACAiE,YACA5X,QAAc,iBACd+H,qBACA,qCACA/M,YACAxN,aAEAoW,uCACAC,WACA0E,SACAnY,SAEA,YACA,gCACAhQ,4BACAd,6BACAkQ,mDACAY,KACAZ,2BACAqL,GACA0N,0BACAnY,kBACA,OACA4K,kBAEAxN,mBAEUyD,wBACVsX,iCACAnY,kBACA,OACA4K,kBAEAxN,mBAGA4C,kBAEAjS,0CACAA,2DAKA,eACA,OACAw1B,uBACAkE,YACA9P,wBACA5pB,4DAKA,eACA,0CACA,WAAuBw1B,QAKvB,GAHA,2CACA9Y,uBAEA,uBACA,qCACAA,0CACM,iBAGN,YAFAA,uCAEA,CAGA,oBACAA,uBACAA,YAEAA,EAtYAnO,QACAorB,YACAC,MACAC,SACAC,UACAC,QACAC,MACAC,SACAC,QACAC,WAGA5rB,YACA6rB,UACAC,gBACAC,oBACAC,0BACAC,QAEAhF,eACA3T,sCACA+H,wBACA,wCACA5pB,0DAGAy6B,SACAjF,eACAiE,YAC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","debug_id":"b20ecaac-7a4e-5792-8931-255188d271c0"}