{"version":3,"file":"scripts.25a1abf4f0769888.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.1 | (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.1\",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))},M=function(){V()},R=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)&&U(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 z(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&&R(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function X(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 U(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,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener(\"unload\",M),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 Re(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 M(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 M(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.on(\"mouseenter\",e).on(\"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;sWe(e)?(r=e+1,t-We(e)):(r=e,t);return{year:r,dayOfYear:n}}function Be(e,t,n){var s,i,r=qe(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+N(i=e.year()-1,t,n):r>N(e.year(),t,n)?(s=r-N(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function N(e,t,n){var s=qe(e,t,n),t=qe(e+1,t,n);return(We(e)-s+t)/7}s(\"w\",[\"ww\",2],\"wo\",\"week\"),s(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),h(\"w\",n,u),h(\"ww\",n,t),h(\"W\",n,u),h(\"WW\",n,t),Oe([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=M(e)});function Je(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\"),h(\"d\",n),h(\"e\",n),h(\"E\",n),h(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),h(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),h(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),Oe([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:p(n).invalidWeekday=e}),Oe([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=M(e)});var Qe=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Xe=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Ke=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),et=i,tt=i,nt=i;function st(){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=f(this.weekdaysMin(s,\"\")),n=f(this.weekdaysShort(s,\"\")),s=f(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 it(){return this.hours()%12||12}function rt(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function at(e,t){return t._meridiemParse}s(\"H\",[\"HH\",2],0,\"hour\"),s(\"h\",[\"hh\",2],0,it),s(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),s(\"hmm\",0,0,function(){return\"\"+it.apply(this)+r(this.minutes(),2)}),s(\"hmmss\",0,0,function(){return\"\"+it.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)}),rt(\"a\",!0),rt(\"A\",!1),h(\"a\",at),h(\"A\",at),h(\"H\",n,d),h(\"h\",n,u),h(\"k\",n,u),h(\"HH\",n,t),h(\"hh\",n,t),h(\"kk\",n,t),h(\"hmm\",me),h(\"hmmss\",_e),h(\"Hmm\",me),h(\"Hmmss\",_e),v([\"H\",\"HH\"],O),v([\"k\",\"kk\"],function(e,t,n){e=M(e);t[O]=24===e?0:e}),v([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),v([\"h\",\"hh\"],function(e,t,n){t[O]=M(e),p(n).bigHour=!0}),v(\"hmm\",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s)),p(n).bigHour=!0}),v(\"hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i)),p(n).bigHour=!0}),v(\"Hmm\",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s))}),v(\"Hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i))});i=Re(\"Hours\",!0);var ot,ut={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:Fe,monthsShort:Le,week:{dow:0,doy:6},weekdays:Qe,weekdaysMin:Ke,weekdaysShort:Xe,meridiemParse:/[ap]\\.?m?\\.?/i},W={},lt={};function dt(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 ot}function ct(t){var e,n;if(void 0===W[t]&&\"undefined\"!=typeof module&&module&&module.exports&&(n=t)&&n.match(\"^[^/\\\\\\\\]*$\"))try{e=ot._abbr,require(\"./locale/\"+t),ft(e)}catch(e){W[t]=null}return W[t]}function ft(e,t){return e&&((t=g(t)?P(e):mt(e,t))?ot=t:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),ot._abbr}function mt(e,t){if(null===t)return delete W[e],null;var n,s=ut;if(t.abbr=e,null!=W[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=W[e]._config;else if(null!=t.parentLocale)if(null!=W[t.parentLocale])s=W[t.parentLocale]._config;else{if(null==(n=ct(t.parentLocale)))return lt[t.parentLocale]||(lt[t.parentLocale]=[]),lt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return W[e]=new K(X(s,t)),lt[e]&<[e].forEach(function(e){mt(e.name,e.config)}),ft(e),W[e]}function P(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return ot;if(!y(e)){if(t=ct(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===p(e).overflow&&(t=t[Y]<0||11He(t[D],t[Y])?S:t[O]<0||24N(r,u,l)?p(s)._overflowWeeks=!0:null!=d?p(s)._overflowWeekday=!0:(h=$e(r,a,o,u,l),s._a[D]=h.year,s._dayOfYear=h.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[D],n[D]),(e._dayOfYear>We(i)||0===e._dayOfYear)&&(p(e)._overflowDayOfYear=!0),d=ze(i,0,e._dayOfYear),e._a[Y]=d.getUTCMonth(),e._a[S]=d.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[O]&&0===e._a[b]&&0===e._a[T]&&0===e._a[Te]&&(e._nextDay=!0,e._a[O]=0),e._d=(e._useUTC?ze:Ze).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[O]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(p(e).weekdayMismatch=!0)}}function xt(e){if(e._f===_.ISO_8601)Yt(e);else if(e._f===_.RFC_2822)Ot(e);else{e._a=[],p(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)||[],d=l.length,h=0;he.valueOf():e.valueOf()\"}),u.toJSON=function(){return this.isValid()?this.toISOString():null},u.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},u.unix=function(){return Math.floor(this.valueOf()/1e3)},u.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},u.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},u.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()},u.isLocal=function(){return!!this.isValid()&&!this._isUTC},u.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},u.isUtc=At,u.isUTC=At,u.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},u.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},u.dates=e(\"dates accessor is deprecated. Use date instead.\",ge),u.months=e(\"months accessor is deprecated. Use month instead\",Ie),u.years=e(\"years accessor is deprecated. Use year instead\",Pe),u.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()}),u.isDSTShifted=e(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){var e,t;return g(this._isDSTShifted)&&(q(e={},this),(e=Nt(e))._a?(t=(e._isUTC?l:R)(e._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(options.rounded),\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 return _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 }();\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","ht","U","expando","noop","isPlainObject","isEmptyObject","globalEval","l","nonce","A","text","makeArray","inArray","isXMLDoc","d","merge","grep","V","guid","v","cn","I","ID","nt","le","hr","ie","dir","Mt","rt","apply","B","call","we","Qt","Ee","ve","en","ue","xt","gt","jt","Jt","t","Ht","w","Zt","lt","Z","qt","cacheLength","find","relative","preFilter","ATTR","CHILD","PSEUDO","filter","TAG","CLASS","Pn","qe","Le","rr","pseudos","not","has","contains","lang","target","root","focus","enabled","selected","empty","parent","header","input","button","radio","submit","value","ir","replace","jn","qn","Fe","Pr","k","$","is","prototype","children","closest","index","add","addBack","parents","parentsUntil","next","prev","nextAll","prevAll","nextUntil","prevUntil","siblings","firstChild","contents","match","bt","Nt","arguments","remove","ne","this","disable","disabled","lock","locked","fireWith","fire","fired","Deferred","state","always","catch","pipe","promise","then","Yt","un","when","isReady","Ot","Xt","cache","Lt","set","access","hasData","fe","_t","data","removeData","_data","_removeData","It","ge","queue","dequeue","_queueHooks","clearQueue","on","composed","ze","show","hide","toggle","te","wt","thead","se","Ft","Ue","Rt","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","one","off","htmlPrefilter","clone","pn","cleanData","detach","append","prepend","before","after","html","nodeType","replaceWith","appendTo","ar","sr","boxSizingReliable","pixelBoxStyles","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","position","Zn","letterSpacing","cssHooks","opacity","cssNumber","animationIterationCount","cssProps","style","css","marginLeft","margin","expand","cur","run","init","scrollTop","linear","swing","Qn","Gn","height","specialEasing","easing","stop","tweeners","tweener","prefilters","pe","display","prefilter","complete","fadeTo","animate","finish","slideDown","fadeOut","fadeToggle","slow","yn","attr","removeAttr","attrHooks","z","q","prop","removeProp","propHooks","tabIndex","propFix","for","addClass","removeClass","toggleClass","hasClass","val","valHooks","option","select","mt","join","simulate","triggerHandler","serialize","serializeArray","name","An","Hn","Fn","active","etag","ajaxSettings","url","accepts","xml","responseFields","converters","flatOptions","ajaxSetup","ajaxPrefilter","Sn","readyState","We","getAllResponseHeaders","setRequestHeader","overrideMimeType","statusCode","abort","Me","Pe","nr","Ne","De","mr","zt","Er","getJSON","getScript","dataFilter","wrapAll","wrapInner","wrap","unwrap","Vn","send","binary","script","charset","jsonp","done","length","setOffset","offset","top","pageYOffset","offsetParent","scrollLeft","Height","padding","bind","unbind","delegate","undelegate","hover","h","G","H","Bt","Dt","M","C","a","K","tt","Ut","D","date","dt","tr","Tt","ce","ut","isFinite","je","Pt","N","parseInt","Ct","St","m","year","week","Se","zn","calendar","sameDay","longDateFormat","LTS","invalidDate","relativeTime","future","months","dow","weekdays","Be","sn","Kn","Cn","pr","e","vn","UT","nn","On","an","ke","nullInput","L","Wt","$t","parseFloat","At","ms","P","milliseconds","isNaN","_e","re","Je","Yn","xn","er","to","locale","from","unit","b","years","Math","source","eras","since","dayOfMonthOrdinalParse","ordinal","ss","Oe","DATETIME_LOCAL","module","define","exports","i","p","configurable","__proto__","Array","g","E","st","kt","left","border","overflow","direction","T","ee","Te","Ie","Ce","right","bottom","pt","String","field","func","days","test","hasOwnProperty","startMs","isStart","id","className","color","backgroundColor","borderColor","textColor","editable","startEditable","durationEditable","rendering","overlap","constraint","allDayDefault","eventDataTransform","start","allDay","s","S","f","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","Y","W","_","ft","Q","yt","Et","F","fakeFormatString","sameUnits","X","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","Kt","ae","Gt","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","it","J","ct","clientX","timeStamp","xe","recognizers","me","handler","destroy","$n","pointers","pointerdown","kn","update","compute","preventDefaults","preventSrc","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","emit","tryEmit","canEmit","recognize","process","getTouchAction","attrTest","directionTest","failTimeout","domEvents","enable","userSelect","he","INPUT_START","Hammer","document","checkStyleString","shouldHammer","touchHandler","dropHammer","touchStart","styleWatcher","styleUpdater","setAttribute","hasParent","installStartEvents","installEndEvents","installObserver","subtree","attributes","attributeOldValue","attributeFilter","install","et","writable","fn","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","vt","Tn","Re","Ge","detail","bubbles","cancelable","initCustomEvent","at","WebkitTransform","msTransform","transform","endX","endY","startX","startY","oe","de","be","ye","Xe","Ze","Ke","tn","Vt","Ae","Qe","mn","Bn","Ye","_n","ur","cr","vr","initContainer","rn","initCanvas","naturalWidth","naturalHeight","limitCanvas","renderCanvas","dr","degree","translateX","translateY","renderImage","initCropBox","limitCropBox","renderCropBox","output","En","In","initPreview","resetPreview","dn","Wn","capture","$e","lr","resize","dblclick","wheel","cropStart","Ln","originalEvent","action","cropMove","Xn","cropEnd","Jn","change","Un","clear","move","moveTo","zoomTo","ratio","oldRatio","pageX","pageY","rotate","rotateTo","scaleX","scaleY","scale","getData","setData","getContainerData","getImageData","getCanvasData","setCanvasData","getCropBoxData","setCropBoxData","getCroppedCanvas","setAspectRatio","setDragMode","Mn","key","wn","ln","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":";;CAAA,SACAA,MAAe,aAAa,yGAAuG,2EAA2E,aAAYC,OAD1N,CACgO,sDAAuD,aAAa,gEAAoE,uBAAuB,YAAa,6BAA6BC,0BAA6BC,mEAAsEC,cAAe,oFAAmFC,cAAe,8BAA6BC,iBAAkBC,qCAAqC,kBAAkB,2CAA2C,0FAA0FC,gDAAgD,cAAc,6FAA6F,yCAA0C,2BAA4B,cAAc,yCAAyC,4EAA4E,gBAAiB,8DAA8DC,kBAAoBC,mDAAoD,qBAAqBC,gBAAiB,6DAA6DC,sBAAuB,oCAAqC,4BAA2BC,iBAAkB,uBAAuBC,gBAAiB,+CAAgD,yBAAwBC,iBAAkB,gDAAgDC,iBAAkB,mBAAkBC,gBAAiB,oBAAmBC,gBAAiB,gDAAiD,kBAAiBC,eAAgB,gDAAiD,eAAcC,eAAgB,iCAAiC,+CAA8CC,eAAgB,4CAA2CC,oCAAsCb,gCAAmC,mCAAkCc,+BAA6B,mDAAgDA,uCAAqCA,uBAAsBA,MAAIA,0LAAwLC,kDAAmD,UAASf,UAAYgB,kFAAkF,oBAAmBC,kBAAkBC,0BAA2B,QAAQ,qIAAsIC,0BAA2B,MAAM,oBAAoB,UAASC,2BAA4BC,KAAKC,kBAAiBvB,IAAIK,mBAAoB,UAAU,QAAS,eAAemB,MAAI,kCAAsC,6CAAkD,UAASC,iBAAkB,4BAA4B,kCAAmC,mGAAkGC,wBAAyB,YAAY,kFAAkFC,wBAAyB,iCAAiCC,qBAAsB,8CAAkE,cAAlEC,mBAAkE7B,wBAAwC8B,oBAAqB,mCAAmCN,IAAIA,gBAAgB,qBAAoBO,qBAAsB,iCAAiCf,IAAIA,iCAAiC,UAASV,oBAAqB,iBAAiB,uBAAuB0B,IAAIA,0CAAqC,4CAAiD,aAAYC,mBAAmB,6KAAkLC,sCAAsC,qHAA+HjC,yBAA0B,sBAAsB,6HAA6H,qDAAqD,gBAAgB,+FAA+FA,6BAA8B,2BAA2B,cAAc,WAAY,0GAA0F,0BAAuBkC,6JAA0JC,ocAAucC,8cAA8cC,0IAAoIF,iDAAiD,8BAA4B,iGAA2FG,cAAcC,MAAIC,mBAAiB,0CAAwC,CAAEC,iCAAiC,IAAIC,+CAA4J,CAA5J,MAAmFC,IAASD,IAAGE,sBAAoBC,wBAAuBC,kBAAkBD,kCAAmC,yBAAoB,qEAAwD,yEAAiE,8BAAwB,0CAAoC,WAAU,yCAAqC,+CAAiCE,4FAAmF,CAAK,4DAAsD,8FAAsF,mCAA8B,kDAAuL,KAA7IA,4JAA6IC,iDAA8CC,gBAAc,IAAI,8CAAmE,CAAnE,MAA0CC,IAASC,kBAAgBC,oCAAiC,uCAAoC,cAAa,UAAS,0BAAuB,2EAAoE,gBAAc,oBAAiB,gBAAc,mCAAkC,IAAI,cAAuC,CAAvC,MAAaC,IAAS,iBAAiBC,sDAAkD,gBAAc,oBAAmB,oCAAkC,gBAAc,oBAAmB,qDAAmD,gBAAc,oBAAmB,0OAAqN,gBAAc,uBAAqB,iCAAgE,QAApCC,uCAAoCC,mDAA6C,gBAAc,gDAAwD,gBAAc,qCAAgC,kRAAuQ,qGAAoGC,oCAAqC,yBAAqBA,sBAAwB,sCAAoCA,uBAAyB,IAAI,4CAAsD,CAAtD,MAA6CC,IAAS,YAAUD,oCAAsC,yBAAqB,oBAAmB,oCAAiCE,0BAAyB,mCAA4C,6BAA0B,sBAAiBA,yBAA2B,yBAAqB,oBAAmB,+DAAuE,2BAAuBA,0BAAyB,mCAA4C,sCAAgC,OAAM,4DAAoF,IAA7BP,iCAA6BQ,yEAAsE,YAAUD,2BAA2B,6FAAiGA,6BAA4B,gFAAsFE,sBAAoB,OAAMC,6xBAAswBL,oFAAgF,yBAAuB,+DAA4D,2SAAsR1B,EAAI,oCAAiC,4BAAwBgC,mCAAiC,mDAA2C,sBAAkB,4EAAmF,CAAnF,MAA0EL,IAASP,UAAQ,oCAAgCY,4BAA0B,2DAAqDA,yBAAsBpB,iCAA8B,wGAAgG,2CAAsCoB,sBAAqB,+DAA6D/D,0BAA2B,uBAAmB,kEAAmE,gDAAuC,+BAA4B,kBAAgBA,2BAA6B,qDAAqD2D,UAAaK,qDAAmDC,QAAQC,UAAW,KAAKzB,2BAA0B,KAAMA,kBAAiB,KAAMA,gCAA+B,KAAMA,wBAAuB0B,WAAYC,kBAAiB,oIAAqHC,mBAAmB,oNAA+LC,oBAAoB,wBAAoB,2MAAoLC,QAASC,iBAAgB,uCAAmC,0BAAyB,UAAS,aAAa,kBAAgBC,mBAAmB,kBAAe,2EAAuE,uHAA4HL,wBAAsB,oBAAmB,sBAAkB,mSAAiQC,+BAA2B,wEAAkE,mCAAgC,uBAAqB,mBAAiB,kIAAiH,OAAM,OAAM,UAAa,IAAJnB,MAAIA,mDAAkDwB,sCAAkC,SAAS,8CAAqH,IAA7EC,oCAAyBhC,yDAAoDO,6EAAsE0B,kBAAa,eAAOC,wCAAoClC,yJAAiIA,yBAA0B,2CAAmC2B,uBAAsB,6FAAuF,oHAAiI,QAA1Bd,6BAA0BI,kDAA4C,aAAc,qBAAgBF,KAAKoB,SAAUC,oBAAkB,0CAAuC,uCAAkE,QAAlCnB,qCAAkCX,2CAAqC,mBAAkB,0DAAgD+B,oBAAoB,oBAAmB,6BAAwBC,yBAAyB,yCAAoC,qDAAiDC,qBAAqB,yGAAiG,OAAM,MAAG7B,mIAAqHC,oCAAwC,YAAU6B,oBAAqB,qCAAoC,gCAA4BC,kBAAkB,eAAaC,mBAAmB,uBAAsB,IAAI,sBAAuB,CAAvB,MAAuB/B,MAAjD,IAA4DvB,kDAAkDuD,oDAAkD,mEAAgEC,sBAAsB,wBAAgEC,mBAAmB,qBAAmB7C,GAAEA,4CAAyC,UAAS8C,oBAAoB,4BAA0BC,oBAAoB,6BAA0BC,mBAAmB,6BAA0BC,oBAAoB,0DAAwDpE,kBAAkB,OAAM,yGAAoGjB,oBAAoB,YAAUC,wBAAuB,eAAYG,yBAAuB,wBAAkBF,wBAAuB,aAAY4C,MAAIA,kBAAe,YAAS3C,uBAAsB,aAAY2C,MAAIA,kBAAe,YAASQ,yBAAuB,OAAM,8BAAsB,SAAOlB,YAAW,YAASW,yBAAuB,2BAAoBI,OAAMf,YAAW,eAAYmC,0BAA4Be,mDAAkDlC,mBAAmB,SAASmC,oBAAmBnC,mBAAmB,eAAc,mBAAgB,uCAA6B,8BAAkD,IAAvBH,2BAAuBA,KAAS,sIAAmHuC,qCAAkCvC,yGAA4FuC,8BAAyBvC,wBAAuB,aAAY,uDAA+C,gBAAc,gCAA4BF,MAAIA,sBAAkB,UAAS,sBAAkB,oEAAwD,mCAA+B,2DAAkD,UAAS,mBAAiB,qBAAgB,OAAM,qEAAuD,iEAA0DC,+BAAuB,CAAK,0DAAiD,wCAAiC,UAAU,gBAAc,sCAAiD,QAAfA,aAAeA,oCAAmC,UAASZ,MAAM,4BAAsB,+CAAwCS,MAAIA,qEAAuD,UAAS,+BAAyB,qFAAqE,mEAAsD,0BAAuB4C,MAAIA,sBAAgB,UAAjG,CAA0G1C,sEAAwD,wDAA0E,IAAhCL,0CAAgCF,iDAA2C,OAAM,WAAS,OAAsB,IAAhBE,mBAAgBF,sCAAmCQ,qBAA4B,IAAXR,aAAWA,gFAAkEG,iFAAsE,gBAAe,4GAA8F,gBAAaM,0BAAuB,wBAAsBA,8BAA0B,sEAAwD,oBAAkBJ,MAAIA,0DAA6C,CAAK,8DAAwD,YAAUM,QAAIC,8BAAmC,yDAAkDoC,oCAA+BE,wFAA6EhD,YAAU,cAAY,mBAAiB,gDAAqC,QAA8B,IAAvBK,6BAAuBD,mDAA8CJ,+EAAgE,6HAA2G,0BAAsB0B,2BAAsBA,MAAK,WAAgD,IAAvCuB,8CAAuCC,iCAA+BzD,eAAY,MAAMgC,YAAS1B,yCAAiC,uBAAsB,IAAJkD,KAAIC,6BAA0B,OAAM,uDAA+CH,UAAOtD,uEAA+D,4BAAsBM,4BAAwB,UAAS,yBAAqB,+EAAiE,4BAAyB,4GAAoG,uEAAiEoD,4DAA0F,IAApC7C,uCAAoCA,OAAWI,iCAAqC,sGAA0F,qEAA2D,OAAQ,+EAAiE0C,0IAAoI,mEAAgErG,4PAA3kf,GAA00f,sBAA4C,QAAtBuB,mBAAsBK,4CAAkD,uBAAwBL,UAAU,UAAS+E,gBAAiB,aAAa1E,EAAEA,iDAAiD,UAAS2E,gGAAkG,mBAAkB,mCAAoC,4BAA0B5C,gCAAmC,mBAAiB,wCAA2C,2BAA0B3D,gBAAmBA,yBAA0B,WAAW,kIAAqI,0BAAyBA,aAAeiE,iBAAiB,6BAA6B,mEAAoE,QAAQN,IAAIA,yCAA0C,6BAA6BA,IAAIA,qBAAsB,8BAA8BY,mBAAoB,0CAAwCQ,gBAAiB,0CAAwCyB,eAAgB,uEAAuE,gDAA8CxG,0BAA4B,QAAQ,kBAAkB,+BAA8B,qJAAqJ,SAAS,wLAA4L,YAAY,iEAAiE,6GAA6GyG,uBAA0B,4CAA0CC,yCAAyC,iBAAgB,gCAAgC,SAAS1G,aAAcgF,gBAAgB,2BAA4B,8BAA8B,YAAYzD,IAAIA,yCAAyCoF,sBAAuB,wDAAyD,mBAAmBpF,IAAIA,kBAAkBxB,SAASA,gGAAiGgC,UAAU,MAAM,qDAAqD6E,kBAAmB,4IAA8IC,kBAAmB,iEAAmEC,oBAAqB,sEAAoE9G,QAAWyF,mBAAmB,mBAAmB,kCAAiCsB,oBAAqB,0BAAyBC,6BAA8B,4BAA2BC,iBAAkB,4BAA0BC,iBAAkB,gCAA8BC,oBAAqB,2BAA0BC,oBAAqB,+BAA8BC,0BAA2B,6BAA4BC,0BAA2B,iCAAgCC,qBAAsB,4BAA0BC,eAAgBd,qBAAsB,wBAAuBe,qBAAsB,sIAAuI,cAAezH,sBAAuB,sBAAuB,iKAAiK,2BAA0B,eAAc,SAAS,eAAc,QAAQ,qBAAoB,MAAM,IAAI4B,qGAA+G,CAA/G,MAAsGG,GAAShC,qBAAqBC,wBAAyB,MAAQ4B,2BAA8B5B,OAA9B4B,EAA8B8F,8BAAsC3H,WAAQA,eAAiB6B,GAAI,4CAAwC,uBAAuBiC,UAAS8D,MAAkB,IAAZ5G,eAAY4G,+EAAgF/F,uCAAqCgG,IAAIf,eAAe,+DAAyD7G,0BAAwBL,kFAAjF,CAAyJkI,8BAA6BC,kBAAmB,wCAA6C,QAANC,IAAM,2DAAuDC,MAAOhD,iBAAiB,2CAAuCQ,iBAAkB,yBAAsByC,mBAAoB,6BAA0BC,oBAAqB,WAASC,gBAAiB,qCAAkCC,kBAAmB,WAAUC,yBAAwB,8EAAoEC,gBAAiB,yCAAuCC,iBAAkB,YAAY,WAASvI,UAAYwI,qBAAqB,sQAA4QC,iBAAiB,UAASC,kBAAmB,+CAA8CC,kBAAqB,uBAAsBC,gBAAiB,gBAAgB,8BAA+B5I,yBAAwB,6BAA0Be,oBAAmB,oCAAiC2B,6HAAqHX,SAAS8G,WAAYC,sBAAsB,SAAQ,yBAAoB,kBAAkB,uCAAoC,UAAQ,aAAW,uFAAkFnJ,0PAA8MwD,oBAAkB,IAAI4F,IAAa,CAAb,MAAIC,IAAShJ,gIAAsH0C,sJAAqJ,+BAA+BiB,kHAAoGkF,WAAYA,oBAAqB,iCAAiC9H,KAAM,8BAA+B,oBAAkBQ,qCAAkCxB,MAAI4D,oGAAoG,4DAA2D5C,6BAA2BQ,+BAAgC0H,iBAAkB,wFAAyF,oBAAmB1H,mFAAiF,4GAA2G,iCAAgC,sBAAsB,gEAA+DvB,uCAAwCT,qHAAmHS,6BAA+BT,yBAAyB,WAAW,oBAAoB,cAAaM,yFAAwFG,uBAAwB,oCAAsCA,sBAAqBgI,MAAOhI,UAAYkJ,2CAAyC,8FAAkGlJ,wMAAyM,+BAA8B,gCAA6B,yEAAwD,iFAAyF,4BAAuB2D,QAAW7C,MAAIA,gDAA2C,wCAAqCqI,0BAAyB,iBAAgB,uBAAuB,eAAc,0CAAuC,mBAAkB,qDAAqD,cAAanB,gCAAgCoB,uBAAqBC,kBAAkB,sBAAsB,gBAAeC,2EAA2EvD,4BAAwBpC,GAAM4F,oBAAqB,sBAAsB,sCAAgC,yBAA6B,UAASrJ,kBAAmB,yEAAuEsJ,uBAAwB,qGAAoG1B,qBAAsB,wBAAwB,eAAe,cAAsF,KAAvE/H,2EAAuEA,0BAAyB,yFAA+F0J,oBAAqB,sBAAsB,yCAA0C,2DAAsCC,YAA2B,mBAAkB,QAAQ,oHAAmH,IAAI3J,wFAAwF,CAAxF,MAAwFgC,IAAU4H,mBAAa5J,SAAc,SAASC,UAAWyJ,oBAAoB,qCAAkCG,qBAAsB,yBAAuBC,yBAA0BF,gBAAcG,sBAAuB,yBAAuBC,0BAA2BC,kBAAehK,aAAgB4J,mBAAmB,sCAAsC,eAAe,yEAAkF,IAAX7J,WAAWA,+EAAkFiK,4BAA2B,SAAS,8CAA8CL,iBAAcM,qBAAqB,OAAM,oFAA+EjC,qBAAqB2B,qBAAkB,oCAAoCE,uBAAwB,4BAA4BF,uBAAoB3J,UAAakK,sBAAsB,MAAM,uHAAuHC,sBAAiC,gBAAVxG,WAAUpC,4CAAiE,4GAA4GvB,gBAAgB+B,2BAA2BqI,0BAA2B,qBAAqB,mCAAiC5E,gDAAiDwE,kCAA+BhK,aAAgBkK,oBAAoB,QAAQ,sHAAuH,wBAAyBlK,0EAA2EmK,oBAAqB,4BAA4BnK,qBAAqBqK,uBAAwB,+BAA8BxB,sBAAuB,8DAA4DtH,yBAAwE,IAA7C,6CAA6CuC,qEAAwE,4BAA2B,gLAA0K,sCAAsCwG,IAAIC,aAAaC,gCAA8B,4EAA4E,qBAAqB,iGAAiG,qBAAqB,6BAA4B,gBAAe,WAAY,sBAAsB3G,kHAA+G,mBAAuC,IAAvB8D,4BAAuB7D,kEAAmE9D,gCAA+B,6FAAuF,UAAU,iBAAiB,+CAA0C0C,MAAIA,kZAAgY,SAAQA,MAAIA,gDAA0C,SAAS1C,aAAcyK,gBAAgB,oBAAmBC,gBAAiB,iBAAgBC,mBAAoB,yEAAyEC,4CAA8C,iHAAiHC,yaAA4a,QAAQC,oMAAoM,iBAAiB,MAAM,yKAAiM,iBAAiB,uBAAuB/K,IAAIA,4DAA0DgL,+IAAgJ,mBAAmB,uBAAuB,6EAAqEC,MAAIA,iFAAuEC,YAA8K,IAA1JnH,gKAA0JpB,oBAAwB1C,+DAAyDkL,6BAAsD,IAArBtD,uBAAqB7F,yDAAqD4F,sDAA+D,IAAJjF,KAAIX,0CAA8C,UAAS,6BAA6B,cAAc,SAAS,cAAc,SAAS,yBAAyB,SAAQ,uBAAuB,sEAAmE,SAAS,0HAAiHhB,WAAoB,mCAAkC,6CAA2CiB,kDAAqDhC,4BAA6B,mBAAmBD,mCAAmCoL,iCAAiC,uBAAsB,2BAA2B,8BAA6BC,0CAAoCrJ,sJAAuJA,0HAAuH,qCAA6C/B,SAAUqL,UAASxE,wBAAyB,gDAAqC,SAA+U,IAAtU9G,gMAA0L,4FAAsG4H,sCAAsCA,wGAAmGC,+DAA6DlF,aAAc5C,sIAAmIiC,qRAAkQ+F,2BAA4B,+DAAmD,uBAAwD,IAApCH,sCAAoCA,+EAA+N,IAAnJC,2BAAyBsD,mIAA0HnJ,oNAAyM+B,sHAAyG,+CAAiD9D,oDAAkDsL,qBAAsB,8JAAyJ,iBAAe3H,mBAAmBA,uBAAsB,8EAAiH,IAAvCG,yCAAuC/C,uCAAwE,IAA3B8C,6BAA2B9B,0MAA0MwJ,sGAAoG,kEAA6DC,uBAAwB,mDAAgD,0DAAwD7D,UAASA,iFAA6E,cAAa5H,IAAKA,KAAIA,sIAAsIgC,mBAAkB0J,qBAAoB,qCAAkCA,+BAA2B3K,IAAI4K,sBAAuBC,2CAA4CC,kDAAkD,oDAAmD,WAAY,oDAAmDrC,gBAAiBoC,8BAA8BC,wDAAuDC,gBAAiB,sCAAuCC,SAAUC,MAAMC,aAAYC,OAAQC,kBAAkB,cAAc,oEAAoEC,oBAAqB,cAAc,iEAAiEC,qBAAsB,eAAe,6EAA6EC,cAAeC,8BAAyB,0EAA8EtM,8BAAgC4B,mDAAkD5B,sBAAwB,sDAAwD4B,iYAAkY5B,mBAAqBuM,4IAA6I,yBAAyBvE,qEAAoEwE,2BAA4B,yBAAyBxE,wEAAuEyE,oCAAqC,yBAAyBzE,kHAAiHhI,QAAU0M,6VAA8V1M,yBAA4BqF,iCAAgC,cAAe,cAAc,mBAAmB,6CAA6CtD,qGAAgG/B,4CAAmDA,oBAAqBkM,iBAAiB,MAAM,2CAA0C3K,uEAAqE4K,mBAAoB,sBAAqBQ,oBAAqB,MAAM,6BAA4BpL,wFAAqF6K,qBAAsB,2BAAyBhB,gBAAgBpL,oBAAsBkM,iBAAiB,oFAAmFnK,gGAA8F4K,oBAAqB,sFAAqF5K,gHAA4G/B,QAAW4M,mGAAkG,cAAe5M,oBAAqBoL,6CAA6C,sCAAsC,+GAA8GpL,aAAgBsK,qBAAqB,yBAAwBuC,sBAAuB,2BAA0BC,oBAAqB,QAAQ,8JAA+J,uBAAuB,8BAA8B,YAAY,uFAAuF9M,gCAAiC,sGAAsG,iBAAiB,0FAA6F,eAAe,2DAA2D,eAAe,2FAA2F,iBAAiB,iBAAgB,mBAAmB,wGAAkGD,IAAIA,8BAA8B4J,6CAA2C5H,iBAAiB,qBAAqB4B,OAAO,6DAAmD,wFAAoF,gBAAcoE,qDAAgD,+FAA8F,2CAA2CrF,MAAIA,6FAAoF,0DAAwDA,MAAIA,gLAAwKpB,0CAAuCqG,4CAAyC,SAAS,mBAAmB,kCAAmC,eAAe5F,mHAAmH,SAAS/B,UAAW+M,0BAA0B,UAASC,sBAAuB,iDAA2C,2GAA4GzL,IAAIA,qKAAkK,oDAAmDA,IAAIA,uBAAkB0L,SAAa,mEAA+DC,sBAAuB,yCAAqC,aAAkBnL,cAAa,oBAAmB,mFAAqFhC,qBAAoBA,0CAAsCC,aAAgBmN,mBAAmB,sBAAqBrF,mBAAoB,mBAAkBtG,iBAAkB,2BAA0B,4DAA6D,kFAAiF,0BAA0B4L,kBAAmB,qCAAqC,uFAAsFC,mBAAoB,qCAAqC,6DAA6D,iBAAiB1J,mCAAkC2J,kBAAmB,qCAAqCtF,yDAAwDuF,iBAAkB,qCAAqCvF,qEAAoExC,iBAAkB,cAAc,kBAAkB7B,6DAA8D,aAAYqJ,oBAAqB,sDAAsD,4BAA4BQ,iBAAkB,2BAA0B,kBAAiBjM,kBAAmB,iDAAiD,iFAAiFoC,qBAAsB,IAAI,KAAKpC,IAAIA,wBAAsBkM,gDAAmD1N,GAAI,CAAJ,MAAIgC,KAAWhC,2BAA0B,0BAA0B2N,uBAAwB,SAAS,qCAAqC,sBAAsB1N,wEAAyE4B,MAAK5B,QAAW2N,0GAAyG,cAAe3N,oBAAqB,wCAAwCc,MAAKA,oEAAkE,4BAA4B,yEAAwE,kCAAkC,kDAAiD8M,mBAAoB,aAAa,2CAA2C,uCAAuC,UAASC,gCAAgC,mBAAmB,qCAAmC,qTAA6S,iBAAiB,OAAO3N,eAAe,wDAAiD8H,YAAkB,WAAY,aAAa,OAAMnE,gGAAqF8D,6IAA8I6C,mCAAwC,+BAA6BzK,wLAA6K,eAAc,kCAAiC,qEAAkE4H,gKAA+JmG,6BAA6B,cAAaC,0BAA2B,cAAaC,yBAA0B,cAAaC,8BAA+B,eAAaC,yBAA0B,cAAaC,gCAAiC,gBAAY,4KAA8IvG,2DAAkEA,yRAA7sC,GAA4+C,mEAAmE,eAA2C,OAA5B5H,uBAA4B4B,4BAAuF,QAAhDL,4CAAgDR,kCAAvF,CAA8Ha,OAAQ,uCAAuCwM,yDAAwDC,IAAKC,oCAAoC,mBAAmB,iBAAgB,gDAAgD,yBAAyB,qCAAkC,uCAAuC,KAAKxK,IAAIA,mSAA6R,2GAAsG,mBAAmB,8IAA+I,eAAe,eAAeA,SAAS,0SAA6S,uBAAuB,wCAAwC9D,UAAWuO,UAAUC,SAAStO,kBAAkB,MAAM,sBAAsB,uBAAsBuO,WAAYC,kYAAiYC,YAAYC,wBAAyB,+CAA+C,4CAAwC,qHAAmH,wSAAmSC,sBAAuB,mBAAiB,qNAAmN7O,wCAA2CA,eAAgBE,oBAAoB,iIAAkI,oBAAmBqJ,oBAAqB,wIAAqI,wMAAiMvJ,4DAAgE,iFAAiF8O,cAAa,WAAY,yCAAsC,OAAQ9O,QAAW+O,qCAAoC,cAAe/O,iBAAkBgP,mBAAmB,iBAAgBjN,sCAAuCR,IAAIA,oCAAmC,WAAU,yCAAyCvB,aAAgB6O,kBAAkB,+BAA8B,cAAYhL,KAAK,qBAAqB,uBAAuBA,KAAIA,mCAAgC,UAAS,6CAA8CjC,6BAA0B5B,uBAA4BuM,0CAA0CvE,yJAA0JiH,eAAgB,8BAA8B,6DAA4DC,gBAAiB,gCAAgC,iSAA2SC,2CAA6C/C,UAAUlM,gBAAgB,MAAM,yIAAyIqJ,gBAAiBvJ,6KAA+KoP,mCAAqC7F,gBAAgB3H,6DAA4D5B,UAAYqP,mBAAmB,UAASC,kBAAmB,gCAA+BlD,kBAAkBpM,oCAAuC,6DAA6D,cAAcuP,uHAAyH,cAAc,gCAAgCC,YAAUA,cAAgB,iBAAiB,aAAaC,UAAU,YAAYlO,IAAIA,8CAA6C,kCAAkC,mBAAmB,yEAAyEQ,IAAIA,mCAAmC,mBAAmB,4EAAqE8B,UAAcA,cAAe,cAAc,iHAAsGkE,MAAIA,2BAAuB,0GAA6FJ,eAAc8D,yBAAyB9H,qBAAuB+L,iBAAgBC,0BAA2B5P,uHAAsH,0EAAoE,8BAA0B6P,kBAAkB,kCAA8B,iBAAiB,SAAS1E,MAAIA,0BAAuB,iGAAsFxI,YAAY,oBAAmB,mBAAc,oPAAqMwI,UAAtO,CAAkPxI,0BAAyBX,IAAIA,+HAA2H,sMAA6L0J,sCAAiC9D,GAAK3H,yBAA2B6P,UAAU,mBAAmB,4BAA4B,sCAAoCC,sBAAuBnQ,iCAAgC,yBAAyB4B,IAAIA,yDAAuEwO,4BAA6B,mEAA2DhI,sDAAmD,mHAAmHjE,mBAAgBA,kCAAmCoH,qBAAoBpH,yDAAuDH,sBAA2B,yDAAwD,4CAA0CqM,MAAKhF,8BAA4B,0YAAwXjD,gBAAY,kIAA4HA,mFAA6ElE,wEAAkEoM,aAAUlO,qDAAmD,oEAA8D8B,oFAA0EqM,wBAA0BvM,oDAAkD3D,wBAA2B,wCAAwC4B,IAAKuO,gEAAgE,iOAAgPxQ,6DAA6D4B,GAAGvB,aAAeoQ,yBAAyB,8DAA8D5B,WAAU5M,QAAQyO,0BAA2B,uDAAyD,2BAA0BzO,OAAOb,wCAAuC,sEAAqE6O,qBAAsB,kBAAkB,oBAAa7O,aAAoB,4FAA4F,8DAA6D,sCAA8B,oDAAqD,eAAegB,KAAI+B,mFAAmF/C,2BAA4BuP,mBAAoB,+CAA+C,kFAAkF,8EAA+E3M,KAAI5B,qEAAsE,QAAQ4B,IAAIA,qDAA8C5D,cAAmBC,8CAAiD,cAAeA,wBAAyB,4FAA0FA,QAAWuQ,yEAAyE/B,gBAAegC,SAAUhC,gBAAeiC,YAAajC,mBAAkB,cAAexO,wBAAyB,gCAA8BA,iCAAqC,qBAAsB,kBAAkB2D,WAAWA,0CAA0C5D,iCAAiCC,uBAAyBA,+BAAgCA,uCAA0CuP,kBAAiBvP,qBAAuBuP,SAAQvP,aAAe0Q,gCAA+B1Q,yBAA2B,oEAAwE,yBAAyBuB,kBAAkBhC,uBAAsBoR,yPAA6P,0BAA6B3Q,aAAc4Q,mBAAmB,+CAA8CC,uBAAwB,4BAA4B7Q,0BAAyBA,UAAa4Q,qBAAqB,qBAAqB,8VAA8WE,WAAYhR,MAAMyJ,kBAAkB,6CAA+C,cAAc,qDAAoDsH,yBAA0B,2BAA0B,4DAA0DE,GAAMxH,oBAAoB,uDAAuDvJ,4DAA+D,wBAA0BgR,qBAAsB,4BAA0B,oEAAiE,+DAAgE,eAAe,kCAAiC,cAAe,mDAAmD,cAAe,8DAA6DhR,aAAciR,mBAAmB,+CAA8CC,uBAAwB,mCAA4BlJ,2BAAiChI,UAAaiR,qBAAqB,qBAAqB,+LAAmME,WAAYC,UAAUlR,gBAAgB,gCAAiC,gFAAgFmR,SAAUC,mCAAqC7N,sCAA0CvD,gBAAmC,aAAwDqJ,gBAAoC,IAA+DvJ,+IAAkJA,qCAAoCA,aAAgBuR,qBAAqB,gBAAgB,mCAAkCvR,6CAA2C2D,oCAAwC,iDAAkD,QAAQ5B,WAAWA,8CAA8C+B,+CAA6CkE,MAAOwJ,wBAAyB,gBAAgB,mCAAkCxR,+CAA8C6H,sDAAyD,iDAAkD,QAAQ9F,WAAWA,IAAY,IAAPhB,QAAO,mDAAyD+C,+CAA6CkE,4BAA6ByJ,0BAA2B,yDAAwD,mCAAkCzR,mDAAkD,4FAA8F,wBAAwBe,WAAWA,gEAAwD,oKAA4K2Q,qBAAsB,YAAwB,IAAZ/N,YAAY5D,0EAAgF,YAAY,YAAaC,aAAc2R,gBAAgB,oBAAoB,sDAAsD,MAAM,uIAAwI,6BAAuBhO,iIAAoI5C,8KAAkLf,UAAa4R,UAAUC,QAAQ3R,gBAAgB,6BAA8B,iCAAiC4R,QAAS5R,gBAAgB,+FAA6F,mBAAkBqB,KAAIA,uGAAwG,2BAA4BT,WAAU,WAASyI,kBAAoE,QAAjDxJ,4CAAiD+D,0EAAiF,sCAAoC9D,uCAA0CA,kBAAmBuJ,kBAAkB,kEAAmE9F,6CAAgD,uDAAuD,uBAAuBzB,iBAAgB+P,QAAS/R,uBAAwB,QAAQ,sCAAsC,IAAI2D,kDAAmD,CAAnD,MAAmDpC,IAAU,sHAAwH,uBAAqByQ,kBAAoB,wDAAwDpQ,qBAAqB5B,kBAAoBmM,0BAA0B,mHAA6G,0cAA+b5K,6CAA4C,4BAA2B,2DAAuDQ,EAAEA,8BAA6B+B,qEAAwE,IAAJ/C,KAAIgB,gQAAuP,+UAAgUkQ,yBAA0B,8BAAgCnS,wBAAwBE,6BAA4BA,aAAgBmM,sBAAsB,4BAA4BnM,6BAA6BkS,6BAA8B,cAAc,yCAA0C,8GAA8G,qBAAqB,MAAM,2CAA4CnS,sFAA8EA,+BAAkC,oCAAyCC,sBAAuB,2BAA2B,kBAAiBuB,0EAAwE,oBAAoB,uEAAyER,+BAA0B,0BAA+B,oBAAmBf,aAAemS,qBAAqB,uCAAuCC,0BAA2B,2BAA2B,8BAA+B,+BAA8B7N,kBAAoB,gBAAgB,+GAA8GlE,kBAAoB,oBAAqB,yDAA0D,OAAOgS,0CAAwC,CAAGA,0CAAwCnS,SAAW,gHAA+GoS,MAAMC,4CAA6C,eAAe,qBAAqB,gCAAgC,0CAAyC,0GAA0G,qBAAqB,SAAQxQ,SAAU,eAAc,OAAM,iDAA8C,iBAAe,2FAAmF8B,GAAI,0CAA0C,iBAAiB,yCAA0C,8CAA2C9D,SAAY,6BAA8ByS,0BAA2BC,yBAAwBC,QAAQC,cAAeC,8MAA+LC,SAAwB,oHAAmHpL,UAAWqL,6CAA4CC,gBAAiBD,2DAA0DE,YAAa,6EAA6EC,aAAcL,oBAAmBM,wBAAyB,0DAA2DC,6DAA8D,mCAA2C,+CAA3CxP,SAAoFqH,2IAAsIhC,MAAK9G,MAAKkR,kBAAiBC,4CAA2C,OAAM,OAAM,MAAY,IAALtR,KAAKuR,yFAA0FA,2BAAyB,oCAAiCC,iCAAkC,kBAAgBC,iCAAgC,oFAAyEC,8BAA8B,wCAAoCC,wBAAwB,OAAM,0CAAgC,oCAAiC,aAAYC,mBAAmB,cAAW,sCAAmC,iNAAsM7S,wBAAuB,IAAIA,gGAAmG,CAAnG,MAA0F8S,IAAS1I,mBAAkB,4HAAmH,46BAAk4B,uEAAyE,4EAAqE,0FAAiF,mEAA4DA,oDAAkD2I,qBAAmB3I,aAAa,IAAIrH,mBAAuC,CAAvC,MAAiB+P,IAAS,eAAaE,gBAASA,sBAA0B,wBAAoB,sBAAkBjQ,gIAA2J,QAAvCvB,2CAAuC,4FAA2F,+CAAuCyR,eAAa,MAAM,2BAAmB,CAAK,cAAY,wCAAoChQ,MAAI,MAAMiQ,YAASjQ,UAAO,+CAAlZ,CAA0bmH,kIAA6H7I,yBAAsB,yBAAkB4R,wBAAuB,wEAA6E,IAAZlQ,cAAYA,sKAA8I,mBAAwB,wHAAsG,2DAAkD,MAAM,2CAAmC,IAASmQ,SAAuB,CAAvB,MAAOC,IAAS,OAAO1L,qEAAiE,OAAOA,yBAA3lB,CAAmnByC,8kBAA8hB,WAASkJ,wBAAyB,4BAA4BC,wBAAyB,qCAAoCrU,oCAAuCA,uBAAwB,oDAAsD4S,0CAAyC5S,2BAA2BA,4BAA+B,MAAM,wFAAsFA,2BAA8B,eAAgB4S,2EAA2E,4BAA2B0B,uBAAwBtU,wBAAwBA,aAAeuU,oBAAoB,MAAM,qJAAiK,QAAXxU,OAAWA,2CAAgD,WAASqN,oBAAqBoH,sBAAuB,kCAAkCxU,oCAAmCgI,qBAAuB,6BAA8BjI,qCAAoC0U,iBAAkB,WAAW,6BAA6BzU,uCAAuC0U,mBAAoB,kDAAkD1U,uCAAsCgI,QAAQhI,kCAAqC,kCAAkCA,mCAAqC,oEAAmEA,8BAAgC,IAAI,4BAA6B,CAA7B,MAA6B4B,MAAY,QAAQ,gBAAe+S,wBAA0BlR,+EAAkF,QAAQ,qCAAsCmR,mBAAmB,gBAAgB,2GAA2G,oLAAoLjR,eAAc,kBAAkBA,yRAAuRkR,mBAAkB,CAAErT,qBAAoBsC,8BAA8BA,+GAAgH,2CAA2CH,UAASA,aAAc,IAAIG,kCAA4C,CAA5C,MAAmChD,IAAS,gBAAc6S,iBAAkBhQ,WAAS3D,4BAA+B4B,wCAAsC5B,aAAgB6S,SAASiC,oGAAmGrN,UAAWqN,kCAAiC9B,YAAa,0BAA0B,6BAA4BhT,0CAAwC,0DAA6DA,qCAAwC,QAAQ,uCAAuC4U,mBAAmBjR,wCAAuCsN,MAAQ8D,oCAAkCzK,8BAAgC3G,0DAAwD9D,0BAA2B8T,iBAAkB5T,WAAW,oCAAoCC,aAAcgV,0CAA0C,wCAAyC,uBAAqBhV,6CAAgD,wKAAwK,iPAAiP,6CAA6C4B,+CAAgDG,aAAYhC,yBAAqB,mHAAuH,WAAW0D,qKAAyK,kUAAqU,WAAUzD,0BAA4B,mCAAkC,2HAAyH4S,6CAA2CqC,kBAAmBlT,sEAAoE2G,0BAA0B5E,kBAAkB/D,6CAAwCiI,MAAOhI,oCAAsC,mCAAqC,oBAAkBkV,QAASlV,UAAYmV,0BAA0B,uDAAoD,uQAAgQrU,gIAAwHd,aAAeoV,mBAAmB,iEAAiEpV,+BAAgC,kBAAkB,oCAA+FqV,KAA/F1R,6BAA+F0R,KAA/FtV,+BAA+FuV,uCAAkD,CAAGD,mBAAa,GAAQjH,oBAAqB,YAAY,uBAAuBiH,cAAc,iEAA8D,CAA2E,IAAtE1R,sEAAsE/B,uFAA6FA,sHAAyH,OAAOyT,uFAAwFE,wBAAyB,2BAAmD,QAAxB3T,oBAAwBA,oDAA0D,kBAAe5B,QAAWwV,kDAAiD,cAAe,wBAAwBxV,oBAAqB,+BAA8B,OAAM,gFAA4Ec,8DAAyDc,yBAAwB5B,oCAAuCA,+CAAiD,+DAA8DA,QAAWyV,+BAA8B,cAAezV,QAAS0V,0CAAyC,cAAe1V,sBAAuB,0FAAyF,kCAA8B,OAAM,mRAAiQ2D,qBAAoB3D,kGAAqGA,oBAAqB,uBAAqBA,aAAgB2V,qBAAqB,4BAA2BC,qBAAsB,2BAA0BC,2BAA4B,yBAAwBC,2BAA4B,oEAAmEC,oBAAqB,wDAAsD/V,wNAA2NA,sBAAuB,iEAAiE,6DAA6DA,sBAAuB,UAAU,wFAAyF,sDAAqDgC,gCAAkChC,wBAA0B4B,6BAA8B5B,uJAAiK,gBAAiB,6DAA4DA,mBAAqB,2CAA0C,qEAAsE,WAAY,yBAAyB,gCAAiC,oEAAiE,8BCDl2qF,eAAe,sIAAf,CAAoJgI,gBAAiB,aAAa,OAAM,aAAa,gCAA+B,cAAc,gFAAgF,cAAc,sEAAsE,gBAAgB,iDAAiD,cAAc,8EAA8E,gCAAgC,SAAS,cAAc,kBAAkB,cAAc,gFAAgF,cAAc,8EAA8E,gBAAgB,6BAA4B3F,OAAIA,uBAAsB,SAAS,gBAAgB,mCAAmC,wFAAwF,oBAAoB,4BAA4B,cAAc,4BAA4BmD,wOAAsOwQ,MAAQ,cAAc,uCAAuC,0DAAyD,kBAAeC,8UAAgV,cAAc,aAAa,mDAAmD,wCAAwC,0CAA0CA,IAAIA,8CAA8C,UAASpW,6BAA8B,gBAAgB,uBAAqB,6UAA4UqW,KAAIA,+BAA6B,SAAS,cAAc7U,2IAA2I,cAAc,yDAAyD,eAAc,sHAAuH,gBAAgB,SAAS,oBAAoB,+DAA+D,4CAAwC8U,MAAIA,MAAK,wCAAuC,+FAA0FF,qBAAgBA,gBAAoBG,WAAUC,yFAAwF,gCAA+BC,GAAI,SAAS,gBAAgB,2EAA2E,cAAc,mHAAmH,gBAAgB,aAAYN,GAAI,8CAA6CO,6DAA8D,gDAA+CN,OAAQ,SAAS,cAAc,qBAAqBzW,2DAA2D,+BAAgC,WAAW,6BAA6B,UAAU,kBAAkB,qBAAqB,qFAAqF,+MAA8LgX,+CAA8DC,MAAS5T,KAAO,oBAAoB,qCAAoC,kBAAiBoT,EAAGD,oCAAqC,+CAA4CE,oBAAuB,+DAA8D,gBAAiB,mEAAoE,0CAAuCE,MAAIA,0GAAwG,oBAAmB,mBAAiBM,MAAIA,4CAAmC,WAAlS,CAA4SJ,0CAA2C,gBAAiB,QAAQ,eAAc,gCAA8B,kBAAmB,iBAAiBN,mCAAsC,SAAS,OAAQW,wvBAAwvB,eAAc,yDAA2D,eAAe,aAAa,0CAAyC,SAAS,OAAQC,kKAAkKC,6BAA8BC,WAAW9L,gBAAgB+L,0DAAyDhP,aAAamD,kBAAkB8L,uOAAqOC,kCAAmC,mBAAkBtN,4BAA2B,iBAAiB,iBAAiB,gJAA4I,yBAAsB,eAAc,0CAAsC,QAAY,eAAc,yCAAyC,eAA2B,WAAb2M,OAAaY,kBAAb,CAAa,CAAkC,UAASC,MAAO,iBAAgB,aAAY,0DAAuDC,eAAUnB,eAAiBC,IAAIA,gBAAe,iBAAiBxM,yBAAsBrH,gBAAaiU,mBAAiB,eAAe,kCAA6E,eAAe,qBAAqBe,qBAAqB,kBAAkB,8BAA4BA,0BAA4B,yBAAuBA,uLAArM,GAAqM3N,wBAA2M4M,EAAhZ,GAAgZ,4CAA8C5M,sBAAuB4M,EAArd,GAAqd9W,yBAA4BkK,qBAAsB4M,EAAvgB,GAAugBgB,iBAAoB9X,gCAAkC,kCAAgC,4BAA2B,iBAAiB,mBAAmB,sEAAsE,iBAAiB,2BAA2B,sBAAsB,cAAU,uEAAuE,wDAAwD,wDAAwD,kDAAkD,+CAA+C,4CAA4C,kDAAkD,+DAA2D,YAAoB,mBAAmB,YAAU,2BAA2B,iCAA4B,0EAAyE,2DAA0D,2DAA0D,qDAAoD,kDAAiD,yBAAqB,OAAe8W,4GAAuG,iBAAiB,MAAM,uFAAuFiB,wCAAuC,YAAYjB,gBAAcA,0BAA4B,UAASe,+BAAgC,wBAAsBA,wBAA0B,+CAA6CA,yBAA2B,0CAAwCG,oDAA+C,+BAA6BA,wBAAyB,0BAAwB9N,4BAA6B4M,EAAlyE,GAAkyEtM,UAAYN,oCAA4E,OAAvCuM,wCAAuCK,EAA13E,GAA03EL,wBAAqC,yNAAuN,iBAAiB,gBAAgB,0DAAgDwB,0CAAmD,mDAAmDzB,mDAAmD,eAAe,0EAA0E,cAAc,kBAAgB,2BAAyB,kCAA+BoB,MAAKA,mHAA4GnB,iQAA6P,8BAA2B,OAAM,sIAA2H,eAAe,MAAM,0MAA0M,mBAAmB,iBAAQ,+BAAyC,0BAAuB,OAAyF,OAAzFE,+FAAyF,CAAOuB,sBAAoB,mBAAmB,6BAAiE,OAAjEtB,yCAAiE,2GAA0GuB,gBAAe,oBAAkB,iBAA8B,OAA9BtV,iBAA8BwI,cAA8L,iBAAiB,yCAA3LwM,8JAAkJf,yBAAkFe,2CAA2C,+CAA6CA,wBAA0B,iDAA+CA,yBAA2B,4CAA0CA,oGAA+F,+BAA6BG,uBAAwB,iCAA+BA,wBAAyB,4BAA0BI,yCAAoF,OAAzC3B,0CAAyCK,8BAAoCsB,mCAAqCtB,aAAY,gLAA6K,cAAc,kBAAgB,2BAAyB,2CAAsCpC,KAAIA,kLAAuK7R,sYAA8X,cAAc,2BAA2B,iBAAiBgV,mBAAmB,mEAAmE,iBAAiB,wBAAwBA,0EAA0E,0BAAwBA,uBAAyB,8CAA4CA,yBAA2B,kEAAgEA,uBAAyB,4CAA0CA,yBAA2B,gEAA8DQ,yMAA37M,GAA27MnO,8BAAkNsM,QAAOM,EAAppN,GAAopN,aAAgB5M,6BAA8BwM,0CAAwCxM,8BAA+B4M,EAAzwN,GAAywNtM,wBAA0BN,yBAA0B,iBAAiB4M,EAA90N,GAA80NtM,oBAA90N,GAA80NA,kCAA0DN,2BAA4B,+BAA8B4M,EAAl8N,GAAk8NtM,oBAAl8N,GAAk8NA,oBAAl8N,GAAk8NA,mCAAgFN,yBAA0B,iBAAiB4M,EAA7jO,GAA6jOtM,oBAA7jO,GAA6jOA,kBAA0CN,2BAA4B,+BAA8B4M,EAAjqO,GAAiqOtM,oBAAjqO,GAAiqOA,oBAAjqO,GAAiqOA,mBAAkEb,kBAAiB,WAAW2O,UAAUC,oJAAmJC,gBAAiBC,yHAAwHC,yEAAwEC,cAAgBC,2NAA0NC,+BAAgCC,aAAYC,2EAA2EC,MAAKC,MAAO,eAAe,2CAA0W,eAAe,QAAQ,yGAAwGnC,uCAAiD,CAAjD,MAAwCL,GAASuC,WAAU,aAAY,iBAAiB,+JAA8J,iBAAiB,qCAAoC,WAAW,oTAA0S,kFAAoF,CAAK,4GAA4GnG,kBAAgB,KAAO4D,YAAY,6DAA2DyC,wBAAoBC,YAAa,eAAc,MAAM,kEAAkE,UAAU,oBAAoB3C,MAAM,OAA59C,eAAe,sBAAoBI,aAAW,CAAE,2EAAwE,KAAI,CAAE,0CAAyC,mCAAiC,8CAA0CM,MAAIA,mCAA6B,UAA5G,CAAqHrU,iBAAiBiU,IAAIF,KAAI,UAAuqCwC,IAAa,eAAe,WAAW,mCAAvhT,GAAuhT,QAAvhT,KAAuhTtC,EAAvhT,GAAuhT,KAAvhT,GAAuhTvL,KAAvhT,GAAuhTuL,EAAvhT,MAAuhTA,EAAvhT,GAAuhT,QAAvhT,IAAuhT,OAAvhT,KAAuhT,MAAvhT,IAAuhT,MAAvhT,IAAuhT,MAAvhT,MAAuhTA,EAAvhT,GAAuhT,QAAvhT,KAAuhTA,EAAvhT,GAAuhT,QAAvhT,KAAuhTA,EAAvhT,GAAuhT,SAAvhT,MAAuhT,8BAAvhT,KAAuhTA,OAAvhT,GAAuhTuC,gCAAvhT,GAAuhTA,kCAAvhT,GAAuhTA,mBAAmV,wJAA+BtJ,gJAAoJoB,sEAA8K,iCAAiC,kCAAmC,6BAAgC,8BAAoC,yBAAoB,+BAAoC,qBAAqB,6BAA6B,4BAA4B,uBAAuB,mBAAmB,oBAAoB,oeAAkemI,IAASC,oFAAoF,eAAe,8EAAwE,OAAM,yBAAwBzC,IAAIA,6BAA4BjU,4BAA2B,MAAM,8BAAyB,CAAK,UAAS,aAAYiU,IAAIA,6BAA4BF,yBAAuB,MAAM,uCAAsC,gBAAe,UAAS,8CAA6CgB,OAAMpB,oCAA6BA,oBAAoBA,cAAuO,eAAe,4HAA4HC,KAA/V,2BAAyB,cAAwFD,GAAzEoB,qBAAkB,UAAsBA,gBAAwBA,IAAS4B,6DAAgE5C,8BAAxJ,MAAwJ,CAA8K6C,mDAAuD,uEAAkEJ,wCAAzH,CAA+J5C,+MAAkN,kBAAmB,6BAA6B,cAAe,wCAA+B,UAAU,+JAAz2Y,IAAy2Y,WAAz2Y,KAAy2Y,0EAAz2Y,GAAy2YiD,kJAAz2Y,GAAy2Y1W,wOAAz2Y,GAAy2YA,mEAAz2Y,GAAy2Y0T,EAAz2Y,KAAy2YF,mGAAz2Y,GAAy2Y1T,sBAAz2Y,GAAy2YA,qBAAqyBgU,qBAAmBA,qBAAsB,KAAKA,IAAIA,kDAAiD,UAAjva,IAAiva,SAAjva,IAAiva,SAAjva,IAAiva,SAAjva,KAAivaN,mBAAjva,GAAiva,qKAAjva,GAAiva,mEAAqT,cAAe,mCAA2BA,4BAAgC,CAAKA,sBAAsB,qGAA6FxT,MAAIA,gTAAoSqW,qEAAhhc,IAAghc,8BAAhhc,KAAghcA,uFAAhhc,IAAghc9U,GAAoViS,UAApVhC,GAAoVgC,KAAp2c,GAAkuc,OAAlNmD,GAAoVnD,aAAlIhC,GAAoB,uHAA8G,4BAAp2c,GAAo2cgC,kCAAp2c,KAAo2chF,WAApV,YAAoV,CAAiH,eAAe,0BAAwB,2EAAuEoI,eAAe,oFAA+E,yBAAeC,OAAc,iDAAuC,yDAAkD,CAAK,SAAQ3C,MAAIA,wBAAmB3S,qOAAsMwS,mBAAWH,QAAgB3W,wCAA6CwC,+RAA6R,yBAAsB+O,gJAA+I,6BAAyBA,6DAA4D,2BAA2B,wBAAuB,UAAS,+QAAiQ,oBAAoB,sBAA80B,gBAAiB,QAAQ,uDAAuD,eAAeiF,aAAWA,wCAA0C,SAA58BzW,wUAAwUwW,4CAA0CxW,wBAAyBA,wBAAyB8Z,qHAAqH,8BAA8B,uDAAqDC,qHAAuH,8BAA8B,uDAAoN,qFAAsF,eAAe,wJAAiJvR,2BAA0B,4BAAyB,qFAA4E,SAAQgM,QAAIA,iBAAiB,eAAcwF,+CAA2C,SAArN,CAA8NlD,iHAA0GtO,iCAAiC,eAAe,uBAAuB,eAAe,6CAA6C,iBAAiBqP,mBAAmB,6BAA6B,yDAAyDoC,6EAA0EvD,+BAA+B,yBAAyB,iBAAwC,eAAvBA,oBAAuB,gGAA+G,iBAAiB,MAAM,6IAA6I,eAAe,4CAA4C,cAAc,sDAAsD1W,4BAA4B,wOAAwO,iBAAgB,MAAuX6C,MAA8D+U,GAArbnB,IAAU,gBAAgByD,0CAAyCjC,uBAAuBnB,kEAAmE7W,WAAnslB,IAAmslByW,SAAnslB,IAAmslBA,SAAnslB,IAAmslBA,SAAnslB,IAAmslBA,iBAAnslB,KAAmslBA,KAA0EI,iBAAuC7W,UAAvCyW,mBAAuCG,+EAA2F,aAAc,gDAA2OsD,UAA3OvD,GAA2OuD,QAA3OrD,EAAoEjU,4BAA8D+T,8GAAgGgB,IAA9J,CAAqCwC,0BAAkI3D,MAAyByD,2IAA6I,iBAAiB,4CAAoCG,gBAAuB,iBAAiB,SAAS,+JAA+J,iBAAiB,qBAAqB,OAAM,kPAA+O,sBAAqB,0DAAoD7D,8JAAgP,eAAe,8CAA8C,eAAe,iCAA4CC,UAA5CK,EAAoIN,MAAxEC,4BAA+B,sBAAmBf,QAAUgB,OAAY,YAAiB,4NAAyN,QAAQA,KAAIA,uBAAwB,cAA9Q,CAA0RF,YAA9Z,MAA4CE,GAAkX,CAAa,iBAAiB,QAAQ,yMAAyM,eAAe,8EAAwX,cAAc,oBAAxsC4D,yCAAuC,gBAAeC,oCAAy1Bva,mFAAmFwa,mKAAmK,qDAAuF,IAAssFC,GAAtsFC,eAAmB,iBAAiB,gBAAgB,mBAAmB,oEAAoE,mBAAmB,0DAA0D,iBAAiB,0BAA0B,cAAc,sEAA+DhG,QAAIA,4HAA+GlM,qOAAkO,iBAAiBqP,sBAAsB,wBAAuB,OAAM,0EAAiE,0DAA2CrP,6FAAgGlF,iCAAo4D,IAAr2DuU,sSAAkS,4BAA0BG,yBAA0B,8BAA4B9N,sDAAsDuM,sCAAqC4C,+BAA+BrB,wEAAqE,oCAAkC9N,2BAAhztB,GAAgztBA,4BAA0D,OAAMwM,+EAAh3tB,GAAg3tBA,mFAAsKmB,0BAA4B,6BAA2BA,0BAA4B,gCAA8B8C,+QAAqQ7D,yBAAsBsB,iCAAmCtB,8BAA4Be,wDAAwDf,EAAzhvB,GAAyhvB,cAAgBe,+EAA0E,uFAAqF3N,cAAxsvB,GAAwsvBA,sBAAuC4M,EAA/uvB,GAA+uvBtM,qBAAwBjC,iBAAiBsP,oGAAiGnB,qBAAkBmB,sEAA34vB,GAA+8vBP,0FAA/8vB,GAA+8vB5L,oBAAmHmM,qBAAyB,mCAAiCA,0BAA4B,kCAAgCA,2DAA6D,+BAA6BA,6BAA+B,gCAA8BA,8BAAgC,gCAA8BA,+BAAiC,gCAA8BA,gCAAkC,gCAA8BA,iCAAmC,gCAA8BG,uDAAqDyC,aAAaA,kBAAiB,gBAAiB3D,EAAjrxB,GAAirxBtM,iBAAsB,WAAWiQ,aAAaA,iBAAqG,cAAe,SAA6lW,qBAAqB,YAAyB,OAAzB7D,iBAAyB/T,YAAiB,kBAAmB,gEAAiE,kBAAiBA,MAAKA,6BAA2B,SAAS,oBAAqB,mFAAqF,yCAAmC,wCAAwC,SAAQA,KAAIA,mCAA+B,UAA7mX2I,uEAAsEiM,gBAAsCpQ,kCAAkC,6FAA2F,wGAAkG6P,aAAWA,0BAAoB,cAA5N,CAAwO7O,uDAAsD,uCAAsH,OAAtHoO,kFAAsHjO,0DAA+DiP,oBAAoB,oBAAmBA,wBAAwB,YAAU,8BAA8B,wCAAwC,4DAAsD,wBAA2B,UAAM,sBAAyB,UAAM,0BAA6B,UAAM,yBAA4B,UAAM,yBAA4B,UAAM,wBAA2B,UAAM,2BAA6B,UAAM,6BAA+B,cAAMb,UAAiB,oBAAgBa,qBAAqB,QAAQ,0DAAyD,kCAA8B,gCAAoC,UAAM,6DAAiE,UAAM,4CAAgD,UAAM,oEAAwE,UAAM,8EAAkF,UAAM,+DAAmE,UAAM,qFAAyF,UAAM,gDAAoD,UAAM,gDAA0DjP,2CAA2C,aAAYiP,sBAAsB,yGAA2GA,sBAAsB,+DAA8DmD,iBAAeC,oEAAqEpD,uBAAuB,yBAAwBA,oBAAoB,+DAA8DqD,iBAAeD,oEAAqEpD,qBAAqB,uBAAsBA,mBAAmB,wCAAsCA,wBAAwB,yBAAwBA,yBAAyB,4KAA0KA,0BAA0B,0KAAwKA,+BAA+B,mMAAkMA,wBAA0C,OAAlBf,iBAAkBlO,iMAAwMiP,+BAA+B,4CAA2CA,gCAAgC,6CAA4CA,sBAAsB,gBAAeA,wFAAmF,YAAW4B,UAAU5B,qBAAqB,6CAA4C,aAAW,gCAA2BsD,yBAAwB,+BAA4B,iCAA6BpE,GAAnK,CAAuKH,yBAAyB3T,KAAIA,6CAAkCmY,mCAA0C,aAAYvD,uBAAuB,QAAQ,0DAAyD,kCAA8B,4BAAgC,UAAM,yDAA6D,UAAM,wCAA4C,UAAM,gEAAoE,UAAM,0EAA8E,UAAM,2DAA+D,UAAM,8EAAkF,UAAM,0CAA8C,UAAM,0CAAoDjP,2CAA2C,aAAYiP,qCAAoC,WAAW,oFAAmFA,uBAAuB,WAAW,OAAOwD,sIAAqIxD,qBAAqB,iCAAgCA,2BAA2B,MAAM,sXAAwXA,sBAAsB,UAAU,gRAAiR,uGAAuG,oCAAkCA,qBAAsB,+CAA8CA,uBAAuB,6EAA4EA,mBAAmB,uCAAsCA,sBAAsB,gDAA+CA,2BAA2B,OAAOtR,yFAAwFsR,sBAAsB,oDAAoDf,MAAIA,EAA8F,GAAzFF,sEAAyFM,8CAAiD,UAASW,wBAAwB,oDAAoDf,MAAIA,EAAgG,GAA3FF,sEAA2FM,gDAAmD,UAASW,sBAAsB,oDAAoDf,MAAIA,EAA8F,GAAzFF,sEAAyFM,8CAAiD,UAASW,sBAAsB,uDAAsDhB,OAAIA,6LAA+L,oBAAmBgB,oCAAmC,wBAAuBA,wBAAwB,uIAAsIA,2BAA2B,6DAA4DA,mCAAkC,iFAAgFA,sCAAqC,qCAAoCA,6BAA4B,mCAAmC,wCAAuCA,mCAAkC,wBAAwB,wCAAuCA,0BAA0B,8BAA8B,oCAAkCA,8BAA8B,8BAA8B,wCAAsCA,6BAA6B,4BAA0BA,oCAAoC,mCAAiCA,sCAAoC,UAAU,8MAA6MA,uBAAuB,MAAM,qHAAoHA,0BAA0B,QAAQ,kLAAiLA,yBAAyB,qFAAqF,oCAAmCA,mIAA0H,yBAAwB,2CAA2C,0CAAyC,uBAAuB,wCAAmCyD,4BAAiC,yQAAqQzD,mBAAmB,4BAA2BA,qBAAqB,8FAA6FA,wBAAwB,MAAM,yJAAwJA,oCAAoC,6EAA4EA,oBAAoB,+GAA8GA,sBAAsB,sCAAqCA,0BAA0B,qCAAoCA,+CAA6C,6BAA4BA,uBAAuB,oDAAmDA,uUAAoU,sFAAoFA,uIAAwI,QAAQ,sCAAqCjP,iGAAiG,gFAA4EkM,MAAIA,iCAAiD,aAAlO,CAA6O8B,gEAAgEjN,gBAAoc+O,yBAA2B,sEAAqE/O,8BAA8B,sEAAsE,mEAAoE,gEAA8DiJ,mCAAoCjJ,0BAA0B,0BAAyBA,uBAAuB,sCAAqCA,gEAAgE,6BAA4B,8CAA0CA,4BAA4B,6EAA4EA,mBAAmB,QAAQ,uDAAuDf,6IAA2I2S,SAAU5R,sBAAsB,wDAAqD1G,QAAIA,GAAwG,OAAzE,iBAA1B4T,cAA0BC,gEAAyED,iBAA0B,4BAA+B,UAAM,2EAAoF,UAASlN,6BAA6B,iCAA4B,uCAAqCkN,OAAIA,2GAAmG,8CAAgD,UAAM,8BAAgC,UAAM,oCAAiC,GAAM,uCAA0ClN,iCAAiC,4BAA4B,sEAAqEA,6BAA6B,sFAAqFA,6BAA6B,sFAAqFA,+BAA+B,0FAAyFA,wBAAwB,iLAAgLA,6BAA6B,sLAAqLA,+BAA+B,SAAQ,oDAAiD,aAAkC,GAAlCvG,2BAAkCwF,mGAAsGkM,QAAKA,0JAAqJ,8UAAoTpR,iBAAkB,qGAAqGmT,KAAKA,IAA4d,GAAvd5T,uZAA2Z6T,kDAA4DA,0CAA8CnN,2BAA2B,yOAAwOA,gCAAgC,4QAA2QA,oBAAoB,iDAAgDA,6BAA6B,uBAAsBA,6BAA6B,uBAAsBA,0BAA0B,uKAAsKA,2BAA2B,kGAAiGA,6BAA6B,wGAAuGA,iCAAiC,SAAQ,sDAAmD,aAAkC,GAAlCvG,2BAAkCwF,0GAA6GkM,OAAIA,4OAAqO,uoBAAulBpR,iBAAkB,uIAAuImT,IAAIA,IAAkrB,GAA7qB5T,kjBAAojB6T,mDAA8DA,iDAA2DA,4CAAgDnN,6BAA6B,2PAA0PA,kCAAkC,8RAA6RA,gCAAgC,gRAA+QA,oBAAoB,4CAA2CA,4BAA4B,qCAAoC4P,SAAUiC,OAAOC,gFAA+E,CAAEA,oFAAkFC,8CAAiCC,oBAAmC,WAAW,uEAAoEvb,sJAAuJ,eAAgB,oBAAqB,iBAASwW,yFAAgG,eAAe,sCAAsC,eAAe,qBAAqB,eAAe,qBAAqB,eAAe,kBAAkB,mBAA2H,eAAe,kBAAkB,yCAAzIa,0GAAkL3L,wHAAuHhJ,kBAAsB8Y,uCAAugBlH,YAAgB,eAAe,sBAAsB,cAAc,iCAA0B,+eAAqd,oBAAmB,6BAA4B,sBAAqBmH,kBAAkB,iBAAiB,sPAA8PA,qBAAqB,sBAAsBA,0BAA0B,uBAAuBA,kBAAkB,8BAA8B,6BAA6B,0GAAqG,qBAAqB,yBAAyB,wBAAuB,wDAAyD,+BAA+B,2BAA2B,8BAA8B,iCAAiC,kCAAkC,mDAA+C,qCAA4CA,gLAAoK,kEAAkE,uQAAgQA,oBAAoB,iBAAeA,mBAAmB,iDAA+CA,0FAAoF,0BAAwBA,mDAAiD,QAAQ,mIAAkI7H,6CAA32F,qBAAqB,+HAA+P,OAA/PsD,+JAA+PpU,qKAAyJ,0CAAoCM,eAA05EiR,+GAAgKoH,mRAAsQvR,uBAA2BwM,mCAAiCxM,uBAAwBwM,uBAAoB1W,iDAAiD,iDAAiDA,iBAAkB,gDAAgDA,iBAAkB,sCAAqCA,2BAA4B,iBAAgBA,uBAAwB,wBAAwBA,yFAAyF,4BAA4BA,uBAAwB,4CAA2CA,4DAA4D,6BAA6BA,8BAA+B,+BAA+BA,+CAAgD,QAAQ,uTAAySA,qBAAsB,cAAaA,gCAAiC,iCAAiCA,uDAAuD,sDAAqDA,sCAAuC,6EAA4EA,+BAAgC,iIAAgIA,4BAA4B0b,4OAA2O1b,ICA99yD,SAKAA,KACA,kDACA2b,sDACA,sCACAC,8BACA,yBACAC,4DAEA7b,oCAbA,CAcC,kDACD,mBAEA,SAGA,cAGA,QACA,oBAGA,YACA8b,IACAja,KACAga,YAIA,0CAGA5b,OAGAA,UAKA,aAGA8b,MAGAA,oBACAA,UACA5P,2BACA6P,gBACA5P,cACA1L,SAMAqb,gBACA,sBACA,WAAoC,kBACpC,WAA0C,UAC1C,oBACA9b,GAIA8b,kBAA+D,kDAG/DA,OAGAA,WA9DA,CAiEA,CAEA,cAEAlC,cAGA,CAEA,cAQA,6BACA,CAAOoC,wBAAgBC,qBAAsCC,gBAC7D,cAAsB,eACtBlc,sBACAkc,YACAC,0BAEA,aAAoB5T,mBADpBuT,OAEAI,wEAMA,cAEAtC,aAIA,gBAEA1N,sCAA+C5F,WAC/C,WACAtG,OAwFA,eACAoc,cAmGA,eACA,IAEAC,GAFAjR,uCACA0M,yCAEA,gBAEAuE,IAAeC,4BADfxE,UAoBA,aACA,kBACAlB,EAIA,aACA,mCACAxH,KACAT,oBACAiH,SACA0G,OACAC,SACAtG,UACAuG,kBACAC,kBAEAvO,iBAEA4J,GADAsE,cACAzG,+BACA,mBACAmC,GAnBA4E,IAEA9F,EAtBArW,gCACA8b,WAGAA,YAEAA,GAKA,eACA,yBACApB,cACA,CA9LAkB,mBAdA,kBACA/Q,SACAgR,QACA,sBACA,0BAGAhR,UACAgR,QACA,uBACA,6BAcAD,qBARA,eACAC,QACA,iBACA,kBACA,uBACA,2BAQAD,gBAHA,aACAnc,sCAOAmc,eAHA,aACAnc,yCAiDAmc,mBA1CA,qBAGA,gCACAQ,mCACAC,MACAtR,MACAgP,MACAf,KACAH,MAGAgD,wBACA,8BACAS,yBACAA,OACAD,YACAtR,YACAgP,yBAIAf,SAIAzB,KACA1M,OACAiR,4BACAM,oCAGA3c,2BACA,8BACA6c,UAEAC,UADAxC,QAEAuC,OACA7c,oBASAmc,uBAgBAA,kBAZA,eACA,SACA,2CACA,0BACAQ,QACAvR,SAGAA,KACAgR,aACAhR,IAiBA+Q,wBAZA,kBACA,IACAE,GADAvE,cAGA,eACAnJ,oBACA2N,UAEAD,qCACAvE,QAAenJ,sBACf0N,IAcAF,kBARA,eACA,0BACArE,kCACA,eACA,2FACK5W,MACL,mEAiBAib,eAXA,kBACA,mBACAE,0BACAM,wBACA,OACAL,QACAS,yBACAnH,OACAoH,6BAqBAb,gBAZA,kBACA,mBACAE,SACAM,4DACAC,wDACA,OACAN,QACAS,2BACAnH,OACAoH,+BAoBAb,iBAbA,kBACA,mBACAE,2DACAjR,cACAuR,wDACAvR,aACA,OACAkR,QACAS,oBACAnH,OACAoH,wBAsBAb,uBASA,WA0BA,kBACA,iCA4CA,eACAC,oBAqFA,4BACA,WACA,sBAEA,oBACA9Q,gBACA,sBACAsR,iBAEA,eACAtR,iBAEA2R,wBAGA,mBACA,cAGA,UACA,EAEA,SACA,EAEA,6CACAC,qCAEAd,MAXA,CAWA,CAgCA,mBACA,OACAC,GACAM,GACA,SAAgB7E,0BAEhB6E,MADAN,mBACAD,SACA,WAH8CtE,MAO9C,UAiBA,sBACA,gBACAA,kBAEAoE,iBACA9Q,UAGAA,4BA8CA,gBACA,0EAeA,cAEA,QADAgR,MACAhR,KAAqBA,oBAAuBA,KAC5CgR,qBAEA,sBACA,cACA,2BA/RAD,uBAHA,eACA,kCAYAA,SATA,eACA,gCAGA,qBACA/Q,YAEAgR,UAYAD,SATA,eACA,gCAGA,qBACA/Q,YAEAgR,UAMAD,eAHA,eACA,8BAOAA,mBAJA,eACAC,+BACAvR,qBAOAsR,iBAJA,eACAC,kCACA/O,sBAOA8O,mBAgBAA,iBAZA,mBACA,QACAG,+BACAS,kCACAnH,4BACAoH,sCAEA,2CACAlF,EAEA,EAUAqE,iBANA,kBACA,OACAG,kDACA1G,kDAWAuG,gBANA,eACA,OACAG,0BACA1G,2BAWAuG,aANA,kBACA,OACAG,qBACA1G,oBAiCAuG,kBA3BA,eACA,IAEAE,GACAM,GAHAvR,MACA0M,MAYA,IATA,oBACAA,uBAEA,sBACAA,QAEA9X,gBACA8X,OAEAuE,KAAgBA,aAAmBA,KAEnC,iBADAM,WAEAvR,2BACA,CAAkB+R,gCAClB,CAAkBA,mBAElB,uBACA/R,SAAyBgS,UAGzB,WAcAjB,sBAXA,2BACA,OACA7Q,GACA,SAAgBsR,aAAuBA,KAEvC,GADAtR,0BAEA,UAGA,UAiBA6Q,wBAgBAA,qBAGAA,qDACAA,iFASAA,cANA,kBACA,mBACAkB,gEACApD,0BAUAkC,UALA,mBACA,mBACAkB,mEASAlB,aAJA,sBACA,gDACArE,KAmBAqE,yBAUAA,8BARA,mBACA,cAEA,kDACArE,UAEAA,IA8BAqE,wBAXA,sBACA,OACA,eACA/Q,WAEAiR,iBACApB,wBACA7P,2BAEAA,oCAkBA+Q,2BAdA,mBACA,OACAE,GACA,sBACAD,OAEAtE,iBACAuE,iBACApB,yBACAA,wBACAnD,MAEAsE,0BAeAD,mBAXA,mBACA,OACA,cACAD,mBAEApE,iBACAmD,wBACAiB,YAAiCtD,eAEjCsD,YAA6BmB,wBAO7BlB,qBAIAA,eAHA,gBACA,gFAQAA,eAJA,gBACA,2BACA,oCAAqCmB,UAerCnB,SAcAA,OAbA,cAEA,QADAC,MACAhR,KAAqBA,oBAAuBA,KAC5CgR,qBAEA,sBACA,mBACAtE,qBAGApO,mBAMA,UAAyB6T,eAoDzB,mBACA,sBAyEA,gBACA,oCACA/W,qBACAA,qBACAA,uBACAA,uBACAA,sBAuCA,gBACA,eAjIA2V,aAxCA,mBACA,IACAE,GACAM,GACAC,GACAtR,GACAgP,GACAf,GANAzB,MAOA,MACA,SAAoBuE,aAAyBA,MAI7C,IAHAM,UACAC,MAEAtR,eAA0CA,MAAQA,KAElD,oBADAgP,eAEAsC,4BAEA,QACA9E,UACA,MAIA8E,YACA9E,eAKA,mBAAkCuE,MAAQA,KAE1C,UADA9C,UAEAoD,WACA7E,eAIA,WAUAqE,eAPA,mBACA,iBACAxS,YACAyB,gBAQA+Q,gBAcAA,WAbA,sBAIA,GAHAnc,mBACAoc,SAEAA,IACA,cACAO,UACA,SAAoBN,aAAsBA,KAC1CM,2BAEA,YAkBAR,iBAdA,mBAGA,QAFArE,KACAuE,KACAA,cACAjR,YACAgR,gBACAtE,MAGAuE,KAGA,WAiBAF,cAdA,mBAGA,QAFArE,KACAuE,KACAA,cACAD,aACAA,gBACAtE,MAGAuE,KAGA,WAgBAF,gBAbA,mBACA,IACAE,GADAvE,aAEA,4BACA,SAEA,SAAgBuE,MAASA,KACzB,mBACA,SAGA,UAcAF,eAXA,cAEA,QADAC,MACAhR,KAAqBA,oBAAuBA,KAC5CgR,qBAEA,aAAoBtE,aAAiBA,KACrC,mBACA,eAaAqE,gBAIAA,oBAHA,gBACA,2BAA8B,KAc9BA,WATA,gBACA,UACA,iCACA,UACA/Q,qBAGAA,cAcA+Q,aATA,gBACA,UACA,iCACA,UACA/Q,8BAGAA,cAMA+Q,wBAHA,gBACA,+CAMAA,iBAHA,mBACA,cAMAA,WAUAA,QANA,mBACA,cACA,kBACA,gCA4CAA,WAnCA,2BACA,SAAgCrE,OAChC,OACA6E,GACAC,GACAtR,GACAgP,GACAf,cACA,oBACA/N,MACA6Q,yBAGAA,QACAvE,KACAwC,mBACAsC,cAIA,kBACAA,QACAD,aACArR,aACA,eACA,YACA+Q,sBAEA7Q,KACA8O,mBACAsC,YAEAtC,IAGA,EAKA,gBAEApO,sCAA+C5F,WAC/C,WACAtG,QACAgY,aACA,gBAGAzP,gBACAA,cACA2T,gBACApF,yBAEAoF,gBACAL,yBAEA/E,IACAvO,0BAEAsT,IACAtT,wBAQA,oCACA,IAEArI,EACAC,EAHAiZ,KACApV,YAKA,IADA8S,UACA5W,IAAoBA,WAAmBA,KACvCC,QAEAqd,WACApE,2BAEAjZ,YACA6D,WAIA,kBACAoV,yBAEAA,GAEAnZ,kCACA,mBACAmZ,aACApV,OACA,yBAEA6X,EADA,QACA/E,UAGAmE,uBAGA,gBAEA7B,EADA,QACAtC,QAGAmE,sBAGA,0BACAjX,cACAyZ,uCACAzZ,oCAEAA,GAEA/D,uCACA,kEACA,0DAEAA,sCACA,uEACA,uDAGAA,qCACA,kBACA,8CACA,iCAMAA,sCACA,kBACA,4CACA4b,gBAEA,kCACAA,gBAEAA,GAEA5b,+BACA,uDAEAA,6BACA,qCACA,8BACA6W,mBACAA,GAKA7W,gCACA,0BACAD,wCAEA,MAKAC,8BACA,wBACAD,sCAEA,MAEAC,2BACA,yDAEAA,EApIA,GA0IA,gBACA,2BALAkc,WAKA,EAMA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,QACAxV,QACAvC,QACA6W,cAIA,cACA,yBACA,oBACA5W,eACAA,uBACAA,EAKA,OAbAgc,iBAaA9C,sBACA,kBACA,6BACAjZ,kBACAA,CAGA,EAEAiZ,0BACA,SACA8D,UAEA,MAEA9D,oCAGAA,8CAGAA,4CAMAA,uCAGAA,uCACA,MACAjZ,EACAC,KACA,QAAoBF,WAAyBA,KAC7CC,6BAEAC,UAGA,UAEAgZ,sCACA,8CACAjZ,0BACA,WACA6D,sBAEA7D,IACA6D,sBAEA/D,yBAEAmZ,iDACA,oBACA7Q,6BAGAvI,uBACAuI,2BAEA,+BACAA,0CAEA,GAEA6Q,SACAA,oDACAA,gEACAA,EAnFA,CAoFC5W,WACD2Z,YACAnE,qBAGAlB,uBAEA4G,MACAC,aAEAC,SACAC,mBACAC,eACAC,aACAC,YACAC,iBACAC,oBACAC,aACAC,WACAC,cACAC,iBACAC,yBAMA,gBAcArS,sCAA+C5F,WAC/C,WACAtG,OACAgY,QACAxV,IACAvC,cAEA,aACA,+CAaA,OAfAic,iBAeAL,qCACA,sBACA,eACA7X,qBACAuE,4BAIA,oBACA6Q,uCACApZ,kBAUA6b,0CACAzC,gDAKAyC,4CACA,+BACAtT,qBAEA,6BAEAsT,EAhDA,CAiDC7D,WACDmE,aAIA,CAEA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,QACAgY,QACAxV,QACAvC,cAEA,aACA,+CAKA,OAPAic,iBAOAL,sCACA,8BAEAA,qCACA,0BACAtT,mBAEAsT,gCACA,oCAEAA,6BACA,mCACA,sCACAzC,GAEAyC,8BACA,2BACA7X,mBACAuE,gFAKAsT,iDACA,wDACA3b,iCACA,YACAqI,mBAEA,eACAA,4BAEAvE,EAGA,EAGA6X,EA9CA,CA+CC7b,WACDmc,YAGAlc,uBACAue,SACArH,QACAhW,OACAsd,aAKA,CAEA,gBAEAvS,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,oBACAvC,mGACA6W,OACAqF,mBACA,kBAAgCrF,GAChCqF,mBAEA,yBACA/C,wBACAA,qBACAA,qBAOA+C,kBAHA,gBACA,2BASA,iBACA,qBAuBA,uBACA,QAAiCuC,WACjC,QAAgC9c,MAChC,IAEAgV,EACArW,EACAmc,EACAiC,EALAC,OACA1H,mCAKA,oDACAyH,mBAGA/H,KACArW,KACA2W,EACA1U,WAGApC,GADAwe,UAEAhI,KACArW,OAEAmc,eACA9F,QACArW,MAGAP,eAEAO,MAIAoe,EADAD,KACAxC,iBAGAA,gBAEAtF,GACA+H,gBACAA,iBAEA/c,IACArB,EACAoe,gBAEAzH,GACAyH,iBAIAA,mBACAA,EA1EAxC,YAEAjc,iBACA,sBAGA,oBACAE,QAEAA,GAIAF,uBACA,2BAkEA4W,2BACA,0CACA,qCACA4H,QAEA,UACA7C,gCAEAA,8BAWA/E,mBAGA,uBACA,oCAEA,WACA,mBACA+H,mBACAC,uBACAC,uBACA5E,mCAIA5R,oBACA2T,kCACA9b,iBAIA,QACA,yBACAse,6BAIAnW,wBACAuW,qBACAC,qBACA5E,gCAMArD,uBACA,yBACAvO,aAEAA,UACAsW,QACAC,UACAC,UACA9E,OAIA1R,mBACAA,oBAEAA,MAGAuO,qBACA,wBAOAA,uBACA,MACA,yBACA1W,kBACAmI,aAEAA,sBAGAA,oBAEAA,MAGAuO,qBACA,wBAGAA,oBAGA,6CAGAvO,mBACAA,mBACAA,MAGAuO,kBACA,0BAGAvO,mBACAA,mBACAA,MAGAuO,wBACA,iBAGAvO,mBACAA,oBAEAsT,oCAMA,cAEA3P,sCAA+C5F,WAI/C,iBACA,gBACAiC,iBACAA,oBACAA,gBAKA,wCACA,OACAiW,4DACArd,0DAGA+a,EAfA,GAiBAC,aAKA,gBAeAjQ,sCAA+C5F,WAC/C,WACAtG,OAEAwC,cAEA,aACA,+CAIA,OANA0Z,iBAMApF,6BACA,+CACAvO,MAEAuO,8BACA,gDACAvO,MAEAuO,0CAIA,oBACA,4CAMA,gBACA+E,iBAEAzC,cACAA,GAEAtC,8BACA,wBACAvO,MAEAuO,gCAEA,QADAsC,KACApV,IAAyBA,mBAAuBA,IAChDoV,oBAGA,iCAAwC4F,SACxCzW,MAEAuO,wCAGA,iCAAwCmI,mBACxC1W,MAEAuO,oCACA,6BACA,+BAEAA,EAvDA,CADAgF,MAyDCoD,SACD/C,aAKA,cAEAjQ,sCAA+C5F,WAC/C,iBACA,cACAiC,uBACAA,iBAEA,mCACA,yBAEA2T,6BAGAA,EAXA,GAaAC,aAKA,cAEAjQ,sCAA+C5F,WAC/C,iBACA,cAEA,6BACA,WACA4F,+DACAlM,iBACAA,kCAQAkc,sBACA,WACAhQ,+DACAlM,iCAGAkc,EArBA,GAuBAC,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WAIAtG,aACA,kBACAuI,aACAA,iBACAA,4CAKA,6BACA,sBACAsT,QACA,MACA,SAEA,iBACA7X,cACA9D,qBACAC,WACAC,8BACA,sBAGA,SAEA,OADAD,qBAEAA,2BAGA,OACA6D,cACA9D,GACAA,gBAGA,QACA8D,aACAA,UAEA9D,iBACAA,WAGAA,mCACAA,SAEAA,OACAA,wCAEA,aA5BA,EA8BA8X,6BACA,wDAEAA,gCACA,6DAKAA,0CACA,+CACAlB,uCACA,2BAKAkB,+BACA,gBACAzP,iBAEA/F,kDAEAwV,EA1EA,GA4EAmE,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OAQAwC,cAEA,gBACA,2BACA,qBACArC,EAIA,OARA+b,iBAQA9C,+CACA,IACAjZ,EACAC,EACAse,EAHAxe,iBAIAqI,4BACAA,2BACAvE,GAEA0a,EADAte,GAA0Bkc,kCAG1Bpc,IACAC,oBACAue,yBAEAnW,yCAEArI,gCAGAqI,eACApI,oCACAA,GAEAue,sBAEAnW,qCAGAA,kBACAA,uBAGAsT,iDAGAzC,wCACA,MACAyC,0CAEA3b,2CAIAqI,uBAIA6Q,uCACA,MACAyC,wCAEA5b,EADAG,yCACAmI,YACAA,UACAA,oBAEAnI,GACAmI,wBAKA6Q,sCACA7Q,qBACAsT,wCAGAzC,sCACA,wBACA7Q,WACAA,iDAGA6Q,oCACA7Q,WACAA,gCACAA,qBACAA,gBAIA6Q,qCACA7Q,UACAA,kCAIA6Q,+CACAyC,gDACAtT,kBACAA,cACAA,gCAGA6Q,uCACAyC,uCAGAtT,kBACAA,6BACAA,+BAIA6Q,mCACA,0BACApV,yBACA9D,yBAEAqI,8BAEA6Q,EAxHA,CAPA0C,MAgICoD,SAID,gBACA,iBAGArD,QACAA,2BACA/E,QACAA,MAEA,CAGA,gBACA,eACA,mDACA+E,YACA,SAIA,SAvBAM,WAuBA,EAMA,gBAEAjQ,sCAA+C5F,WAC/C6V,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,aACAA,gCACA,YACAA,6BACA,aACAA,4BACA,aACAA,gCACA,YACAA,2BACA,YACAA,kBACA,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,gBAEAjQ,sCAA+C5F,WAC/C,YACAtG,QACAgY,QAUAmE,4BATA,gBACA,IACA/b,EADAD,KAEA,QAAgBC,WAAsBA,IACtCD,eACA6D,wBAEA,UAMAmY,4BAHA,cACA,0DAOAA,6BAJA,cACA,sGAOAA,8BAHA,cACA,mCAMAA,qCAHA,cACA,4BAEA,EAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,QACAgY,QAKAxV,aACA,cACA+F,0BAEA,iDACA,SACAA,gCAGAA,sDAGAtI,0CACA,wBACAsI,iCAGAA,iCAGAtI,gDACA,IACAmZ,EACApV,EACA9D,EAHA2b,sBAIA1b,KACA,QAAoBiZ,WAA2BA,KAE/ClZ,GADA8D,QACAmb,wCAEAhf,iCAGA,UAEAF,iDACA,6DACAmZ,qBACA,sCACAxY,gBACA,6BAGAX,iCACA,iDAEAA,mCACA,0DAEAA,EAjDA,GAmDAkc,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,GACAof,sBACA,mBACAvD,cACA,4BACA5b,cACA6W,aACAkB,QACa,WACblB,WACAtU,OAGAqZ,GAEAwD,oBACA,IACAxD,EADAK,wBACA9S,UACA,cACAyS,GAEAyD,kBACA,IACAxI,EADAoF,sBACA9S,UACA,YACA0N,IAIA,gBACA7W,mBACA,2BACAD,gBAEAC,GAGA,cACAA,qBACA,4BACA4b,IAEA5b,GAdAkc,WAcA,EAOA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,aACA,cACAuI,sBACAA,2BAEA,kDACAA,yBACAA,wEAGAyP,wCACA,MACAlB,EACA,uBAEA,SADA7W,cAAyCsI,kBACzC/F,EACAvC,wCAEAsI,wBAEA,QACAA,sBAGAyP,gDACA,8BACA,6BACAxV,OAEAA,GAEAwV,iCACA,4BAEAA,qCACA,0BACA,SACAzP,yBAEA,IAEAyP,iDACA,MACA,6CACA/X,0CAEAsI,uDAGA,IAEAyP,EAnDA,GAqDAmE,YACAnc,uBACAA,2BACAA,6BACAA,mCAKA,gBAEAkM,sCAA+C5F,WAC/C,WACAtG,QACAgY,QACAxV,OACAxC,2BACA,WACA8W,IAUA+E,aACA,aACAtT,mBACAA,wBAGA,wBACA,WACAtI,SACAiW,OAEAjW,GAGAmZ,oBACAA,QACAtC,KAGAsC,wBACAtC,IAEA7W,WACAA,SAGAmZ,4BACA,WACA7Q,2BACAgX,iCACAC,mCACAC,6BACAC,+BACAC,+BACAC,2BACApT,uBACAqT,mCACAC,qCAKAC,0EACA/b,+BACS,CAAIgc,aAKbD,oEACA/b,6BACS,IAGToV,8BACA7Q,kCACAwX,kEAA6EC,aAE7ED,gEAKA3G,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,QAA0ClZ,MAC1CqI,kBACAA,mBACAA,2BACArI,GACAqI,+BAIA6Q,6CACA,WACAlZ,yBACAA,IACAqI,wBACA0X,sBACAjc,sBACa9D,KAGbkZ,yCACA,wDAEAA,EAhJA,GAkJA+C,YACA3Z,qBACAwV,sBAKA,gBAEA9L,sCAA+C5F,WAC/C,YACA6V,cACAD,mBAIAC,aAHA,gBACAA,iBAMAA,gBAHA,cACA,qBAEA,EAIA,CACA,CACA,CACA,CACA,CACA,CACA,CAEA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,QACAxV,QACAvC,OACAkc,sBACAnE,6BAGA,OACAkI,uBACA,OAEAzY,qCACAD,qCACA2Y,2CAIAC,4BACA,4BACA,8BACA,gCAGAvE,GAEAwE,+BACA,4BAEA,kDACAze,QACAgd,UAGAA,WAEAA,GAGA0B,6BACA,8BACA9Z,uBAGA+Z,4BACA,8BACA/Z,uBACAA,0BACAA,uBAGAga,iCACA,8BACAha,uBACAA,0BACAA,uBAGAia,uBACA,8BACAja,kBACAA,sBACAA,uBAGAka,iCACA,8BACAla,uBAMA4S,GAEAuH,+BACA,eACA,OACA,QAGAC,uBACA,eACA,4BACA,6BAGAC,4BACA,eACA,2BACA,6BA0CA,gBACA,MACA3J,EAEA0H,oDAEAhd,IACAgd,+CAKA1H,OACAgF,uBACA,aACA0C,eAIApc,0BAIA,cACA,2CAvDA2Z,oCAPA,cACAD,uBACA,aACAwC,cAiCAvC,mBA1BA,kBAEA,wDAEAjF,gBACAA,+BAEAgF,uBACAhF,YAEA,mBAEAN,IAKAA,cACAA,cACAgI,EAEAhI,6BAEAA,mBA0BAuF,WAKAA,wBAGAhc,2BAKA,gBAEA+L,sCAA+C5F,WAC/C,WACA6V,kBACA2E,+BACAV,4BACAW,qCACAC,4BAAkC3D,QAClC4D,sBACAC,4BAEAC,gBACAC,oBACAC,iBACApb,QACAqW,aACAgF,UACAvE,yBAEAwE,YACAC,eACAC,oBACAC,8BAGAC,sBACAC,mBACAC,mBACAC,uBAEAC,gBACAC,mBACAC,eACAC,yBACAC,YAGAvH,YACAwH,SACAlC,YACAzY,YACAD,YACA6a,qBACAC,qBACArK,YACAkI,cACAoC,cACArK,YACAsK,WAGAC,qBAEAC,uBAEAC,SAGAC,gBACAC,uBACAC,cAEAC,gBAEAC,eACAC,mBAEAC,cACAC,sBACAC,0BACAC,sBACAC,sBACAC,sBACAC,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2BAGAnI,iCACAmI,2BAIAnI,2CACA,oBACAwe,wCACA,iHAEAxe,wCACAmI,6DAEAnI,0CACAmI,mDAEAnI,kCACAmI,4BACAA,0BAEAnI,mCACAmI,4BACAA,yBAEAnI,oCACAmI,wBACAA,mBACAA,kBACAA,wBAIAnI,0CACA,WACAmI,8BACA3G,wBACS,gBAETxB,2CACA,WACAmI,8BACAmW,yBACS,mBAGTte,0CACAD,2CACAoI,aACAA,cAEAA,8BACAA,gBAAyB+b,gBACzB/b,0BAEAnI,2CACAmI,gBACAA,wBACAA,uCACAA,cACAA,eAEApI,4CAIAC,8CACA,WACAmI,mCACAmW,yCAEAnW,4CACAmW,0BAGAte,yCACAmI,mCACA0W,aACAD,uBAGA5e,0CACAmI,oCACA0W,aACAD,uBAKA5e,4CACA,WACAmI,8BACA3G,wBACAA,iDACS,iBAETxB,6CACA,WACAmI,8BACAmW,iCACAA,0BACS,oBAITte,mDACA,WACAmI,8BACA3G,0BACS,yBAETxB,oDACA,WACAmI,8BACAmW,2BACS,4BAKTte,0CACAD,0CACAoI,+BACAgX,gCACAG,0CAIAtf,4CACAD,4CACAoI,uCAOAnI,yCACA,IACAwB,EACAgd,EACA1H,EAHAwH,OAIAnW,2BACA3G,gCAEAgd,qCACArW,2CACAA,8CAEA2O,0FACA3O,iDACAmW,6BACAE,IACA1H,mBACAA,kBACAwH,2CACiBxH,KAOjB9W,0CACAmI,sBACAA,sBAEAA,4BACAA,wGAEAA,iCAKAnI,wCACAmI,8BACAA,6BACAgc,yCACAhc,iCAEAA,8BACAic,2CACAjc,kCAEAA,4BACAA,iCAKAnI,uCACAmI,eACAA,oBAGApI,wCAEAoI,2BAIAnI,kCACA,gDACAJ,eAEAI,iCACAmI,yBACAA,wBAEAnI,yCACAmI,mBACAA,qCAGAnI,mCACA,SACA,6BACAJ,mCAEA0e,GAEAte,oCACAse,oCACA1e,4CAEAuI,sBACAA,yBAGAnI,gDACA,UAEAA,uCACA,UAEAA,0CAKAA,8CACA,IACAG,EADAgI,2BACAkc,+BACA/H,iBAEAA,IACAgC,kEAEAnW,wBAEAmU,qCAGAtc,iDACAmI,kCACA0W,aACAD,MACAN,aACA9c,EACAgd,EACAhI,EACA,GACArO,SASAnI,qDACAwB,GACA2G,4CAEAA,qCAGAnI,oDAEAmI,6BACA0W,aACAD,MACAN,4BACAxH,EACAN,EACArO,QAGA3G,GAEA2G,qCACA0W,aACAD,MACAN,6BACAnW,SAQAnI,gDACA,IACAG,EADAgI,2BACAkc,+BAEA/F,8EAEAnW,0BADA3G,mDACArB,QAGAH,mDACAmI,oCACA0W,aACAD,MACAN,aACA9c,EACAgd,EACAhI,EACA,GACArO,SAQAnI,iCACAmI,iBACAA,iCACAA,2BAEAnI,iDACAmI,qBACAA,gDAGApI,mDAIAC,0CACAmI,mBACAA,yBAGAnI,wCACA,8CACAmI,+BACA0W,aACAD,MACAJ,QACAA,MACAhd,EACA2G,SAMAnI,iCACAmI,kBACAA,mBACAA,uBACAA,wBAEAA,yBACAA,iCACA0W,aACAD,kBAMA5e,8CACAmI,4BACAA,kCACAA,6BACAA,wCACA3G,+BACAA,MAEAA,+BAGA2G,+BAGAnI,6CACAmI,6BACAA,wCACAmW,MACAA,kCAGAnW,kCAGAnI,2CAGA,6EAMAA,gDACAoC,2BACA+F,yBAGAnI,wCACAmI,6BACAA,8BAEAnI,6CACA,MAEAmI,8CAEA3G,gCACA5B,gCACAuI,kBAIAnI,6CACAmI,6BACAvI,4CACAuI,+BAMAnI,2CACAmI,mCACA0W,aACAD,uBAGA5e,6CACAmI,oCACA0W,aACAD,uBAKA5e,4CACA,8CACAmI,iCACA0W,UACAD,yBAMA5e,6CACA,UAKAA,8CACA,kBAIA,GAHA,uBACAwB,yDAEAA,EACA,2CAMAxB,sCACA,IAGA8W,EAHAwH,6BACA9c,KACAgd,IAKA,KAHA,0BACAF,YAEAxH,IAAoBA,IAAOA,KAC3BtV,2BACAgd,IAGA,MACA,sCAEArW,wBAIAnI,uCACA,mBACAwe,aAOA,OANAhd,IACAA,0BAEAgd,IACAA,gCAEA,wBACA,mBAEA,MAIAxe,oCACA,uBACAse,WAEAnW,yBAOAnI,gDACA,QAA8BwB,UAC9B,QAAsCgd,MAEtC,QADA1H,YACA3O,6CACA2O,gBAEA,UAEA9W,EA9oBA,CA+oBCyb,WACDM,YACAjc,8BACAA,gDACAA,gEACAqI,uCACC,WACDA,6BAEArI,0FACAqI,0DACC,WACDA,sCAEArI,oDACA,gDAEAA,sDACAqI,gCACAA,yBACC,WACDA,0BACAA,qBAEArI,sEACAqI,qDACC,WACDA,+BAEArI,4CACA,qDAEAA,sDACA,oBACAwe,gBAEAnW,sEACAA,kEACAA,+EACAA,8EAMA,gBAEA2D,sCAA+C5F,WAC/C,WACAtG,OACAgY,aACA,gBACAzP,uBACAA,iBACAA,oBAEA,mCACA,yBAGA/F,oCACA,MACAsU,EACAvO,qBACAA,6BACAA,wBACAA,8BAEA,OADAtI,kCAEAA,kCAGA,OADA6W,iCAEAA,iCAEAvO,wBACAA,wBAEA/F,+BACA,IACAqZ,EACAzC,EACApV,EAHA8S,mCAIA5W,KACAC,KACA,WAEA6D,GADAoV,QACAsL,wCACAtL,iCACAlZ,kBAGAC,kBAGAoI,uBACAA,wBAEA/F,gCACA+F,wBACAA,yBAEA/F,uCACA,qDACAqZ,0CAGAA,0BACA,2BACAtT,gBAGA/F,wCACA+F,qCACAA,kBAEA/F,uCACA,qDACAqZ,2CACA,2BACAtT,gBAGA/F,wCACA+F,sBACAA,kBAEA/F,+BACA,iDAGAA,qCAGA,UAGAA,yCAGAA,qCACA,WACA,sBAgBA,SAfA+F,0CACAoc,uBACA,6CAEAC,mBACA,OACA,wDAGAC,uBACA,8CAKA,EAGAriB,sCACA+F,mBACAA,uCAKA/F,yCACA,gBACA,QAA0CsU,MAC1C,IAGA3W,EAHAiZ,6CACApV,KACA9D,KAEA,aAEA,QAAwBC,WAAiBA,IACzCoI,2BACAvE,0BAIAkY,wBACA,WACA0C,OACAxF,IACAwF,wCAEAA,IACAA,mBACAhd,OACA1B,aAIA,UAEAsC,0CAGAA,sCAIAA,0CACA,OACA,WACAvC,oCACAA,+BACA6kB,8CACA,UACA1L,uBAEAyC,GACAzC,uBAGA7Q,oDACA6Q,sBAEAA,GAIA5W,8CACA,yBACA4W,2CACA6F,UACAD,uBAEA,aACAlI,OAEAsC,YACAtC,QAEAA,GAOAtU,wCACA,+HAEAA,6CAOA,OANA,UACA4W,wBAEA,UACApV,wBAEAuE,0BACAvE,KACAuE,uBAA+CiW,gBAAwB,EACvEpF,GAGAnZ,YAGA,IAEAuC,8CACA,oCAEAA,+CACA,UAEAA,8CACA,UAEAA,qCACA,yBACA,4BACAsU,GAEAtU,mCACA,IACAqZ,EADA/E,yBAEAsC,KACA,QAAoByC,WAAiBA,IACrCzC,aACAA,2CAEA,UAGA5W,mCACA,OACA,sCACA,sCACAob,6BAIApb,mCACA,IACAqZ,EACAzC,EAFAtC,yBAGA,QAAoB+E,eAAyBA,IAC7CzC,8CACAtC,iCAEA,WACAsC,4DAEAA,GAGA5W,uCACA,IACAqZ,EACAzC,EAFAtC,yBAGA,QAAoB+E,eAAyBA,IAC7CzC,0CACAtC,6BAEA,WACAsC,wDAEAA,GAGA5W,qCACA,IACAqZ,EACAzC,EAFAtC,yBAGA,QAAoB+E,eAAyBA,IAC7CzC,uBACAtC,eAEA,WACAsC,8BAEAA,GAEA5W,uCACA,qCACA,oBACAsU,GAEAtU,+CACA,kBAEAA,sCACAvC,0CAGAuC,2CACA,kBACA4W,cACApV,uBACA9D,uBACAC,iBACAC,iBACA,4BACAA,uCACAF,uBACAF,kHAEAwC,EAzTA,GA2TA2Z,aAIA,CACA,CACA,CACA,CAEA,gBAEAjQ,sCAA+C5F,WAC/C,YAiCA,cACA,wBACAye,uBAEAA,EAlCA7I,mCACA,wCACAlY,qBAEAuE,gBACA2T,wCAEA3T,gBACA2T,mDAEA3T,mBAEA2T,2BAEAA,+CAEAA,wCACA,uBACAA,wCAEA3T,gBACA2T,mDAKAA,mCAHA3T,mBAGAvI,QAEAuI,KAFAH,UAEA,EAeA,IAWA0O,uCAIA+E,GACA7X,cACA,2CAEA0Y,cACA,4CAQAtD,GACA4L,GAAS1e,qBACTsQ,GAAStQ,sBACT2e,GAAS3e,qBACTpC,GAASoC,qBACT4Q,GAAS5Q,oBACTnE,GAASmE,qBAOT,gBACA,OAsMA,gBACA,0BAvMAoW,0BAEAP,eAqBAA,cAXA,sBAEA,gCACAzZ,yBAYA,sBACA,IAKAwiB,EAEAjI,GAEA7F,GATAJ,eACA5T,wBACAwU,wBACA/Q,0BACAC,0BAEAqe,MAEAC,KAEAC,MACAC,MACAhO,MAGA,QAAoB4N,yCAAwGA,IAC5HC,SAGA,mBAAwClI,sCAIxCA,uBAJwIA,KAOxImI,UAIA,SAA0BhO,OAAmBA,KAC7CiO,UACAC,UAEA,iBAEAhO,GADAP,EACAuO,QAGAD,SAGAtK,WAjDA5a,GADAolB,EAJAR,eAIAxM,sBACAwM,iBAqDA,SAIA,cACA,cACA3kB,KAUA,cACA,WACA,OACAolB,sBACAC,gBAdA7jB,KAqBA,cAMA,QAJA2jB,EADA7iB,KAIAgjB,+DACAH,aACAA,KACA7iB,eACAwU,SAEAqO,KACA7iB,QAA0BijB,gBAE1BJ,KACA7iB,QAA0BkjB,aAE1BL,MACA7iB,eACAwU,SAGA,SAKA,cACA,eACA,UAGA,IAOA,cACA,IACAqO,EACAG,EAFAhjB,KAGA,QAAgB6iB,WAAmBA,IAEnC,iBADAG,QAEAhjB,kBAEAgjB,QAEAhjB,OADAgjB,aACAljB,QACAkjB,YAIAA,SAGAA,SACAhjB,OAhMA,OAiMAkU,WAjMA,QAqMA,cA/MA,KA+MA,CAOA,cACA,IACA2O,EACAG,EACA3O,EAHArU,KAIA,QAAgB6iB,WAAmBA,KACnCG,QACAE,OACA7O,uBACArU,2BAEAgjB,QACAhjB,eACAnC,YAGAmC,aAGA,SAaA,gBACA,IAGAsU,GACA5T,EAJAmiB,KAEAxO,EADAmF,uBACA2J,MAzPA,MA4PA,SAAgB7O,YAAsBA,KAvPtC,UAwPA5T,SACA0iB,UACAP,OAGA1J,sBAGA0J,UAGA,SAKA,cACA,iCACA,wBACAA,EAGA,KA+BApJ,8BAtBA,cACA,IACAoJ,EACAG,EACA3O,EACAC,GAJAtU,OAKA,QAAgB6iB,WAAmBA,KACnCG,QACAE,QACA7O,2BAEAC,wBACAA,MAKA,UACAA,QAEA,KAEA,EAKA,cAEA9K,sCAA+C5F,WAW/C6V,UATA,kBACA5T,oBACAA,gBACA/F,IACA+F,sBAKA,EAKA,gBAEA2D,sCAA+C5F,WAC/C,WACAtG,QACAgY,QACAxV,OACAvC,cAEA,aACA,yBACA,sBACAmZ,YACAA,wBACAA,gBACAA,EAEA,OATA8C,iBASAL,oBAEA,QADA7X,KACA9D,IAAyBA,mBAAuBA,IAChD8D,oBAIAuE,oDACAA,gFAEAA,sCAEAsT,qCAGAA,2CACA,IACA7X,EADAoV,wBAEA,WACA7Q,yCAGAsT,4BACA,yBAEAA,4BACA,kBACAtT,YAEAA,gBAEAsT,8BACA,MACA,oBACA3b,MACAkZ,qBAGAlZ,IAEAqI,kBAEAsT,8BACA,IAEA1b,EAFA6D,cACA9D,KAEA,WACAA,YAEA,WACAA,UAEAqI,kBAEAsT,8BACA,IACA3b,EACAC,EAFA6D,KASA,IALA9D,EADA,mBACA,IAGAkZ,EAEAjZ,IAAoBA,WAAkBA,IACtC6D,eAEAuE,kBAEAsT,iCACA,IAEA1b,EACAC,EAHA4D,KACA9D,IAGA,YAKA,iBAJAE,SAKAA,sBACA4D,OACA9D,KAGA,MAEA,SADAqI,qCACAvE,EAEAuE,+BADAnI,QAEAmI,mCAEA,gBAEA,KADAnI,eAEAmI,eAGAA,iBAEAA,4BACAA,2BAEAA,gCAGAsT,oCACA,WACAtT,gBACAA,gDACA,kBACA3G,WACAxB,WACAwB,mBACAxB,cAIAA,YAES,YACTA,WACAD,GACAA,eAIA0b,gCACA,wBACA7X,WACAuE,kBACAvE,eAGA6X,uCACA,WACAzb,IACAse,WACA9c,IACAgd,KACA1H,KACAN,KAuCA+H,gBACAxe,UACA+W,eAGA,6BACA,SACA,oBACA6D,iBACAgL,MAEApH,iCA/CA,KADAve,GAEAwB,QACAgV,KACA1W,KACA0W,KA4CA,GAEA+H,2BA1CA,qBACA,QAEAoG,kBACAnjB,WAEAgd,QAIAmG,kBACAnjB,IAEAgd,UAEAxe,GAGAwB,QAGAgV,GACA5S,MAqBA0Y,YAIAtD,sBACA,SACA,oBACA2B,iBACAgL,MAEA5lB,UACAye,cACAhd,KAEAmkB,GACAnkB,MAIAA,OACAoC,KAEA,CACAkJ,oBAEA,YAAgC6N,WAAuBA,IACvD5a,uBAEA+W,OAEAtV,OACA1B,KAGA8lB,iBACApkB,QACA1B,IACA8D,SAKA6X,8BACA,wBACA7X,GACAA,WAGA6X,EA7PA,CA8PC7b,WACDmc,YACAlc,gCACA+X,qBACAxV,sBAKA,gBAeA0J,sCAA+C5F,WAC/C,WACAtG,OAEAwC,cAEA,aACA,+CAEA,OAJA0Z,iBAIApF,kCACA,qBACAsC,sCACAA,oDAEApZ,qCAEA8W,0CACA,IACA5W,EADA8D,iCAEA,WACA,aACA,WAEAoV,YAQAtC,mCACA,IAGA3W,EAHAiZ,uBACApV,KACA9D,KAEA,YACA,SACAqI,cAEA,SACAvE,UAGA9D,UAGA,8BACAqI,kCAMAuO,iDACA,UAKAA,yCAMAA,uCACA,kCAEAA,EAjEA,CADAgF,MAmECoD,SACD/C,YACA3Z,gCAKA,cAEA0J,sCAA+C5F,WAC/C,iBACA,gBACAiC,WACAA,mBAEA,uCACA,uBACAyP,sBACA,+BACAA,+BACAA,GAEAkE,EAZA,GAcAC,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QACAvC,QACA6W,QACA+E,cAEA,aACA,+CAEA,OAJAK,iBAIAlY,gCACA,sCAEAA,uCAQA,QAJApC,EACAgd,EACA1H,EALA/W,uBACAC,eACAse,aAIA9H,KACAxW,iBAEAmI,uCAEAqW,GADAhd,sBACA2L,QACA2J,OACA3O,eACAqW,uBAGAA,cAEArW,eACA2O,gCAEAN,0BACA,wBAEAxW,gBAEA,UAEA4D,+BACAuE,eACAA,iBAEA,YAAwBpI,WAAuBA,IAC/CoI,uBAGAvE,6BACA,mCACA,qBACA9D,wCAEAA,YACAA,oCAEAqI,eACArI,sBAAqCqI,eAErCrI,GAEA8D,EA3DA,CA4DCxB,WACD2Z,YAKAN,mCACA,kDACA,iBACAtT,oCAEA6Q,QACA7Q,gCAEA6Q,OACA7Q,mBAEAvE,GAIA6X,uBACA2C,SACArd,OACA0X,UAMA,gBAEA3M,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,aACA,cACA+F,aAEA,mCACA,0BAEAtI,uCACA,qCAEAA,wCACA,+CAKAA,kCACA,qBACAgmB,4BACAhC,0BACA,yBAGAhkB,kCACA,qBACAgmB,4BACA7e,qBACA,wBAKAnH,uCACA,QAAuCmZ,MACvC,IACAlZ,EACAC,EACAC,EACAse,EACA9c,EACAgd,EACA1H,EACAN,EARA5S,eASA,gCACA9D,yBACAkZ,IACAtC,wCACA9S,IAEA0a,kCACA9c,yCACAgd,sEAEA1H,GADA0H,0BACArR,QACAhF,kCACA2O,+BAEA/W,kCACAC,mCAEA8W,GADAA,iCACAgP,gBAEApP,wCACA9S,IAIA4S,mCACA,CAGAuP,oBAGAC,mCAEAC,wBACAC,gBAGAC,qBAGAC,qBAEA5E,UAEAC,UACA4E,UACAtP,OAEAuP,oDAOAzmB,uCACA,oFACA,eAOAA,gDACA,IAIAG,EAJAgZ,sBACApV,OACA9D,OACAC,OAEA,kBAGAA,kCAFA6D,aACA9D,mBAGAE,yBACAF,QACAC,uCAEAA,mCACAD,kDAGA8D,6BACA9D,2BACAC,wCAEA,CAAiBwmB,mCAEjB1mB,2CACA,mBAAiCod,UAIjCpd,8CACA,mBACAC,aACA,mCACA2b,KACA7X,iBAEAoV,SACAlZ,iBAGA,oBAKAD,qDACA,IACAE,EACAC,EACAse,EACA9c,EACAgd,EALA1e,4BA8BA,aACAwe,uBACA9c,mBACAgd,qBAEA,OA5BA1e,KACAC,8BAEAC,gBAGAF,EADAE,IACAJ,mCAGAgE,GAIA9D,KAIAkZ,iBACA7Q,4BACAmW,kCACAuH,eAQA/O,IAEA3O,yBACAuO,iCACAI,KAEA0H,GAIA3e,mDACA,IAEAE,EACAC,EAHA4D,4BACA9D,IAGA,cACAC,YACA6D,GACA7D,aAEAA,iBAEAC,GADAD,gCACAoN,QACA,GACAnN,eACAmI,2BACArI,UAEcA,SAEd,CACAE,wCAEAD,GADAC,sCACAmN,QACA,GACApN,gBACAoI,2BACArI,UAEcA,KAEd,2BAKAD,gDACA,4FAEA,yCAGA4b,EAFA,IAEA,EAKA5b,6CACA,kBAIAA,2CACA,IACAmZ,EADAyC,4BAEA,SACAK,eAEA9C,6BACA8C,gBAEApF,GAIAoF,YAAqCmB,UAGrCpd,EA3QA,GA6QAkc,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QACAvC,OACA6W,OACA+E,cAEA,cACA,2BACA,sBACA1b,EAEA,OANA+b,iBAMAlY,sBACA,MAQA,OANAhE,oBACAI,IAEAJ,eACAI,GAAyBwmB,aAEzBxmB,GACAH,8BAEA,EAEA+D,wCACAuE,oBACAA,uCAEAvE,kCACA,IACApC,EADA8c,iBAEA,+BACAnW,yBACA,QAAwB3G,WAAsBA,IAC9C8c,0BACAA,cAIA,8BACAlc,sBAEAwB,oCACAuE,wBAKAvE,4CACA,mDACA,mBAGAA,0CACAuE,mBAEAvE,oCACA,0BAEAA,iDACA,wDACA,sCACA7D,GAEA6D,EA7DA,CA8DC/D,WACDkc,YACAN,uBACA+K,aAMA,gBAEA1a,sCAA+C5F,WAC/C,aACAtG,SACAgY,KAIAmE,oBAHA,gBACAnE,QAcAmE,sBAXA,cACA,UAGA,MACAnc,UAGAgY,KANAkE,UASA,EAKA,gBAEAhQ,sCAA+C5F,WAC/C,WACAtG,OAUAgY,aACA,cACAzP,qBACAA,mBACAA,kBACAA,iCACAA,6BACAA,gEAIA,oCACA,iCACAtI,uBACAA,iCAEAsI,cACAtI,WACA,KACAsI,2CACAA,mBACAA,0BAEAA,iBACAA,yBAIA/F,6BACA+F,iBACAA,uBACAA,gBACAA,iBACAA,eACAA,mBAGA/F,mCACA+F,aACAA,cAIA/F,0CACA,SACAsU,KACAvO,4BACA,WACArI,kBACAC,iBACAF,UACA6W,cAEAvO,aACAA,eAGA/F,wCACA,SACAsU,KACAvO,4BACA,WACArI,iBACAC,kBACAF,UACA6W,cAEAvO,YACAA,gBAIA/F,2CACA+F,mBACA,IAGAvE,EAHA8S,aACA+E,cACAzC,WAEA,QAAoBpV,IAASA,IAC7B,mBACA,UAMAxB,yCACA+F,mBACA,IAGAvE,EAHA8S,YACA+E,eACAzC,WAEA,QAAoBpV,IAASA,IAC7B,mBACA,UAKAxB,sCACA,0BACA+F,eAGA/F,wCACA,0BACA+F,gCAIA/F,uCACA,0BACA+F,gBAIA/F,yCACA,0BACA+F,iCAGA/F,iCACA,0BACA+F,8BAGA/F,qCACA,0BACA+F,cAGA/F,uCACA,0BACA+F,8BAIA/F,wCACA,0BACA+F,iBAIA/F,0CACA,0BACA+F,iCAGA/F,kCACA,0BACA+F,8BAOA/F,yCACA,MACA,4BACAvC,qCACA8G,eACA9G,kBAEAD,mBAGA,MAEAwC,0CACA,sDAEAA,uCACA,gFAEAA,sCACA,gFAEAA,EAlLA,GAoLA2Z,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QAIAvC,aACA,cACAsI,sBACAA,4BACAA,qBACAA,mBACAA,gBACAA,kBACAA,gCACAA,0BACAA,qBAEAA,0BACAA,qBACAA,yBACAA,mBAIA,kDAEA,QADA,QAAuC6Q,MACvC,sBACA,uCACA,OAEA,8BACA,OAGAyC,kBAHA,CAMAtT,qBAEAA,wDACAA,oEACAA,sCACAvI,8BACAuI,sBACAA,+BACAA,oCACAA,qBACAA,4BACAA,yBACAA,yBACAA,6CACAA,oBACAA,sBACAA,+BACAA,mBACAA,kBACAA,kCAIAuO,+CACAvO,oCAEAuO,yCACAvO,qBACAA,gBACAA,sBACAgc,kCACAhc,0BAEAA,yBACAA,sBACAA,sBACAA,+BACAvI,8BAGA8W,+CACAvO,wCAIAuO,oCAGA,sBACAvO,eACAA,2BACAse,qBACAC,+BAIAve,gBADAA,aACA,CACAwe,+BACAtH,6BACAuH,+BAIA,CACArH,+BACAC,8BAGArX,iBACAsX,6BACAC,gCAGAhJ,sCACAvO,sCACAA,mCAKAuO,oCACAvO,2BACAA,kBACAA,mBACAA,0BAGAuO,wCACAvO,6BAEAuO,mCACA,+BACA9S,2BACA9D,mBAEAqI,0BACA6Q,SACAlZ,KACAqI,gCAGAA,iBACAA,wBAIAuO,uCACAvO,2BACAA,0BAEAuO,gCACAvO,kBACAA,mBACAA,wBAGAuO,sCACAvO,2BAIAuO,mCACA,WACAvO,WACAA,0CACA6Q,qBACa7Q,YAGbA,wBAGAuO,uCACAvO,qBACAA,0BACAA,mBAKAuO,gDACAvO,4BACAA,mBACAA,mBAKAuO,wCAEAvO,+CACAsT,mBAEAtT,oBAEAuO,wCACAvO,oBAIAuO,4CAGAvO,0CACAA,2BAOAuO,gCAEA,QADAsC,KACApV,IAAyBA,mBAAuBA,IAChDoV,oBAEA7Q,iBACAA,8BAGAA,aACAA,2BAKAuO,sCACA,oBACAvO,kBACAA,qBACAsT,IACAA,eACAA,eACAtT,mBAEAA,sEAGAuO,yCACAvO,qBAEAA,mBACAA,8CAIAuO,2CACAvO,oBACAA,kDAKAuO,yCACA,IAEA5W,EACAC,EACAC,EACAse,EALAtF,yBACApV,oBAKApC,IACAgd,IACA5a,IAEA9D,4BACAC,+BACAC,6BACAse,8BAGAxe,WACA0B,wBAEAzB,aACAyB,sBAGAxB,WACAwe,wBAEAF,aACAE,uBAGArW,wBAGAuO,uCACAvO,oBACAA,qBACAA,2BAEAA,iEACAA,qEACAA,yBAIAuO,0CACA,oBACAvO,oBACAsT,mBACAtT,qBAGAA,qBACAsT,qDACAtT,qBAGAA,qBACAsT,oBACAtT,sBAGAA,sBACAsT,oDACAtT,uBAKAuO,0CACA,oBACAsC,4BAEA7Q,mBACAsT,+CAEAtT,oBACAsT,kDAEAtT,2BAEAA,wCACAA,sBAIAuO,qCACAvO,wBACAic,qCACAjc,2BACAA,yBAIAuO,6CAEAvO,uBACAA,wBAGAuO,yCAGAA,EA5VA,GA8VAqF,YACAnE,sBAKA,gBAEA9L,sCAA+C5F,WAC/C,WACAtG,OAMAwC,cAEA,aACA,+CAGA,OALA0Z,iBAKApF,sCAYA,QAHA8H,EACA1H,EACAN,EAVAiF,OACAzC,SACApV,aACA9D,+DACAC,6DACAC,KACAse,KACA9c,KAIA1B,eACAkZ,iBACAsF,cAGAte,IACAse,UACA9c,mBAEA1B,gBAEA,sBAGA,IADAgX,aACA0H,IAAiCA,YACjChd,eAD+Dgd,KAK/DhI,6BAGAA,IACAgI,WAEArW,gBACAA,kBACAA,kBACAA,cACAA,2BAGAuO,0CACAvO,iCACAA,mBACAA,gCACAA,0BACAA,6BAGAuO,qCACA,wBAGAA,sCACA,yDAGAA,uCACA,4BACA5W,0BACA,OAAiBse,gBAGjB1H,0CACA,iDAGAA,uCACA,kBACAvO,gBAGAsT,GAQA/E,wCACA,sBACA9S,kCACA,WACAoV,OAEApV,YACAoV,gBAGAA,MAMAtC,4CAGA,qCACA,MAEAvO,cACAA,6BAGA,QAMAuO,wCACA,IAKA4H,EACA9c,EACAgd,EACA1H,EACAN,EATAwC,kBACApV,+BACA9D,gCACAC,yDACAC,KAMA,QAAsBse,cAAmBA,IAEzCE,GADAhd,OACAwX,IAEAlC,gBACAN,iBAEAM,kBACAN,kBAEAxW,QACA6mB,MAEAC,qBACAC,oBAEA1J,cACA2J,cAIA,UAIAtQ,wCACA,IAKA4H,EACA9c,EACAgd,EACA1H,EACAN,EACArW,EAVA6Y,kBACApV,+BACA9D,gCACAC,yDACAC,KAOA,QAAsBse,cAAmBA,IAGzC,IADAE,GADAhd,OACAwX,IACAlC,IAA+BA,KAAcA,IAE7CN,gBACArW,iBAEAqW,kBACArW,kBAEAH,QACA6mB,MAEAC,qBACAC,oBAEA1J,cACA2J,cAKA,UAIAtQ,sCACA,+BACA,4BACA+E,2CACAA,oCAEAtT,wBACA,0BAIAuO,2CACA,+BAEAA,wCACA,cAEAvO,0CACAA,gCACAA,0CACA,SAEAuO,+CACA,IACAsC,EACApV,EAFA6X,KAGA,QAAsBzC,cAAmBA,IACzCpV,wBACA6X,uCAEA,mBAIA/E,mDACA,IAOAlV,EAPA1B,OACAC,SACAC,mDACAse,GACA,gBACAve,2CAGA,OACAyB,EADA,6CACA1B,6BAEA,6CACAF,2CAGAA,wCAGA,aACA0e,WAGAxe,uBAGAwe,gCAEA,cACAA,iBACA,kBACA,0CACA,KACAtF,IACA,mBACA,KACApV,EACA,MACA,IACA,KACA5D,EAEAD,uBAA2CgX,0CAAsDvV,GAEjGA,GACA,SAIAkV,uCACA,cAEAvO,yCACAA,2BACAA,yCACA,SAEAuO,0CACA,+BAEAA,0CACA,IACA9S,EACA9D,EAFAkZ,KAGA,QAAsBpV,cAAmBA,IACzC9D,wBACAkZ,iCAEA,mBAEAtC,2CACA,WACA5W,SACAC,mDACAC,qBACA,sEACA,+BACAD,EACA,0CACA,KACAiZ,EACA,MACA,IACA,UAIAtC,yCAUAA,qCACA,6BACAsC,IACA7Q,WACAsT,YAGAA,eAIA/E,EAlVA,CALAgF,MAwVCoD,SACD/C,aAKA,cAEAjQ,sCAA+C5F,WAC/C,iBAMA,gBACAiC,iBACAA,oBAEA,sCACA,qBACA/F,yCACAvC,wDACA6W,IACAkB,uDACA,GACAzP,+BAEA2T,8CACA,8CACA3T,mBACAA,aAEA2T,mCACA3T,mBACAA,gDACAoc,uBACA,0CAKAzI,gCACA3T,mBACAA,4CAEAA,gBAEA2T,+BACA,sBAEAA,EA1CA,GA4CAC,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,aACA,cACAzP,sBACAA,iBACAA,kBAEA,mDACAA,iEAEA/F,uCACA,MACA,kCACA4W,2BAEA7Q,oBAEAuO,GAGAtU,iCACA,wBACAsU,IACAA,kBACAvO,oBAKA/F,wCACA,IAGArC,EAHAiZ,OACApV,KACA9D,KAEA,aAEA,QAAwBC,WAAiBA,IACzC6D,+BAIAkY,wBACA,WACA0C,OAEA/C,aACA+C,mBAEAA,IACAA,QAEA7X,mBACAnF,OACA1B,aAKA,UAGAsC,yCAEA,sCACAwB,sCACA,2BACAoV,yCACApV,uBACA,2BAGAxB,yCAGAA,oCAEA+F,kBADAA,kBACAA,yBAGA2T,MAGA1Z,EAjFA,GAmFA2Z,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,QACAgY,OACAxV,aACA,gBACA+F,uBACAA,iBACAA,qBAEA,wDACAA,4BACAA,mCAGAtI,0DACAsI,mFAEAtI,0DACAsI,+CAEAtI,oDACA,IAEAG,EAFAF,0CACAC,uBAIA,IADAD,uCACAE,IAAoBA,WAAiBA,IACrCF,oBAEA,WACA,QAAwBE,WAAiBA,IACzCF,yBAGAqI,qCAKAtI,uCAGAA,gCACAsI,iBACAA,wBACAA,sBAGAtI,gDACA,IAGAC,EAHA2b,qBACAzC,8BACApV,kCAEA,uBACA9D,oBACA,sBAEAD,EAtDA,GAwDAkc,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,QAEAwC,cAEA,aACA,+CAMA,OARA0Z,iBAQApF,iCACA,qBACAsC,4DACAA,qEACAA,qEAEAtC,uCAKA,IAJAvO,6CACA0W,gBACAD,mDAGA5F,oBAIAtC,2CACA9W,sCACAuI,qBACAA,qBAEAA,qDACAsT,uCAEAtT,iDACA0W,gBACAD,oDAMAlI,yCACAvO,qBACAA,wBAEAA,qDACAsT,0CAEAtT,gDACA0W,gBACAD,MACAnD,6BACAzC,MACA7Q,eAKAuO,2BACAvO,oBACAA,yCAGAuO,EA/DA,CADAgF,MAiECoD,SACD/C,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,QACAgY,SACAxV,SACAvC,QACA6W,SACA+E,SACAzC,SACApV,cAEA,aACA,+CAEA,OAJAkY,iBAIA/b,EALA,CAMCH,WACDmc,YACAnY,wCACAA,yCACAA,yCACAA,yCACAA,yCACAA,6CAKA,gBAEAkI,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QACAvC,SACA6W,OACA+E,QACAzC,QACApV,QACA9D,QACAC,QACAC,QACAse,SACA9c,SACAgd,SAGA1H,cAEA,cACA,2BACA,mCACAyH,uBAGAA,aACAA,4BACAA,EAGA,OAZAzC,iBAYA3b,iDACA,IACAwa,EACAgL,EAFApH,uCAGA,QAAoB5D,WAAiBA,IACrCgL,OACAxd,YACAwd,8CACAA,kDAGAA,6BACAA,8BAGA,UAIAxlB,oCACAgI,mBACAA,sBACAA,mBAEAhI,qCACAgI,yBAGAhI,kCACA,IAIAwkB,EACAriB,EALAga,YACAiC,cACA5D,cACAgL,KAMA,IAHAxd,sBACAA,iDAEAwc,IAAsBA,IAAcA,IACpCgB,yCAcA,IAZAxd,gBACAA,oCACAA,uDACAA,kCACA8e,gBACAC,gBAEA/e,kCACA8e,sCACAE,kBAGAxC,IAAsBA,IAAcA,IACpC,QAA0BriB,IAAcA,IACxC6F,kCACA0W,UACAD,MACAzW,sBACAA,oBACAmU,MAQAnc,2CACA,+BACAwlB,4CACA,UACAA,mBAEA,eACAA,kDAEAhL,6BACAxS,uBACA,0DAIAA,2BACA,UACAA,2BACA,WACA,IACA,wBAIAhI,2CACA,mEAEAA,8CACA,sBAIAA,2CACA,cAEAgI,6CACAA,+BACAA,6CACA,SAEAhI,8CACA,+BAEAA,8CACA,IACAwa,EACAgL,EAFApH,KAGA,QAAsB5D,cAAmBA,IACzCgL,wBACApH,qCAEA,mBAIApe,6CACA,IAIAmC,EACA6iB,EALA5G,YACA5D,KACAgL,sDACAhB,mCAGA,wCAIAriB,yBACA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AgY,OACAxV,QACAvC,QACA6W,QACA+E,QAKAzC,cAEA,gBACA,6BACA,wCACAxX,mCACAA,uBACAA,gCACAA,oCACAA,qCAGAA,oCACAA,qCAGAA,sBACAA,0BACAuiB,mBACAmE,mBAEA1mB,EAGA,OAvBAsa,iBAuBA/b,0CAGA,MA2IA,cACA,mBAEA,aACA,8CACA,kCACAue,EAGA,OAPAxC,iBAOA9b,2CACA,gBACA,kCACA,6BACAse,iFAEA1G,0CACA,eAGA,IAGA5X,8CACA,gBACAwe,wBACA,kCACA,8BACAhd,4BACAA,sBACA,CAAsBuV,6CAA4DyH,eAElF,QAEA,IAGAxe,yCACA,gBACA,kCACA,6EACAse,iCAEA,IAIAte,uCAEA,kCACA,8BAFAmI,UAEAggB,+BAEA,IAEAnoB,2CACA,kGAEAA,EAvDA,CAwDKF,GApML8D,oBACA,oBAEA7D,0CACAoI,qEACArI,4CAEAC,sCACA,MACAue,EACAnW,kEACAA,uBACAnI,qDACAse,6CACAnW,6CACAA,gEACAA,4BAEApI,wCACAoI,6BACAA,yBAIApI,0CACA,0BACA,uBACAC,8BACAmI,yBACA,2DAEAnI,wDAGA,IACA,yCAEAA,4DAMAD,2CACA,kCACA,2CAEA,IAGAA,oCACA,6BACA,8BAKAA,uCACA,IAEAyW,EACArW,EAHAqe,yBACA1H,+CAKA3O,qBAOArI,wCACAqI,qCAGAA,yEAGAA,sBACAyP,wBACAzP,gCAEAqW,uBACArW,0BAIAqO,gCACArO,wBAEAqW,uBACArW,0BAEAmW,IACAnW,6BACAhI,sCACA+b,iBACAtE,wBAEApB,gCACArO,4BAGAA,gCAtCAmW,IACA9H,gCACArO,2BAoCA,EAIApI,8CACA,SACA6X,mDAGA7X,wCACAue,EACA1G,0CAGAA,8CAKA7X,gDACA,OAAiByV,QAEjBzV,uCACA,OAAiByV,mCAEjBzV,6CACA,WACAoI,mCAGApI,EAhKA,CAiKCF,WACDkc,YACA/C,gDACAA,kCA2DK,EAML,gBAEAlN,sCAA+C5F,WAC/C,WACAtG,OAEAwC,cAEA,aACA,+CAGA,OALA0Z,iBAKApF,6CACA,oDACA3W,kCACAC,gCAEA,iCACAD,kBAEAC,aACAA,iCAGA,oBAEA0W,EApBA,CADAgF,MAsBCoD,SACD/C,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,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,QACAgY,QACAxV,OACAvC,QACA6W,aACA,gBACAvO,oBACAA,iBAEA,mCACA,8BAMAvE,oDACA,IAEA0a,EAFAve,kBACAC,2DAGAwe,EADArW,8BACA3H,iCACAsW,uCACAN,oBACArW,iBACAmc,yBACA,QAAoBgC,WAA4BA,IAChD,8EACA,SAGA,KACA,QAAwBA,WAA4BA,IACpD,kFACA,SAIA,UAEA1a,8CACA,2DAEAA,oDACA,IAGApC,EAFAxB,EADAmI,sCACA3H,iCACA8d,uCAEA,+FACA9c,6BAEA,kCAMA,EAEAoC,mDAEA,MACAkT,EACA,aACA0H,gDA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tT,sBACAA,0BAEAA,aACAqN,4BACA0G,kCAIArc,mCACAsI,kCACAA,mCACAA,eACAA,uBAIAtI,4BACAsI,gBACAA,iBACAA,SACAA,iBAKAtI,4BACAsI,gBACAA,iBACAA,sBACAA,sBAGAtI,EArIA,GAuIAkc,YACAnE,sBAKA,gBAeA9L,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,aACA,cACA+F,iBACAA,eACAA,mBAGA,mCACAA,gBACAA,SACAA,cAEAA,eACAA,gBACAA,iBACAA,uBAIAtI,4BACAsI,gBACAA,eACAA,iBACAA,uBAIAtI,8BACA,WACA4b,eACAtT,sCACAuJ,0BACA1C,KAEAwG,MACA0G,SAEA3O,kBACAO,qBAEA3F,0CACAuO,WAEA+E,YACAtT,+DAIAtI,0CAEAsI,+CACAA,aAIAtI,qCACAsI,YACAA,UACAA,iBACAA,cAEAA,+CAGAtI,gCACA,IAMAG,EACAse,EACA9c,EACAgd,EACA1H,EAVAJ,eACA+E,kCACAzC,uBACApV,wBACA9D,YACAC,6BAOAye,WAEA1H,OADA,WACAJ,YAEA,YACAA,UAGA,EAEA3W,8BACAA,IACAC,IACAse,MAIAte,GADAwB,cACAgU,IACA8I,UAGAte,iBACAse,mBAEA,0BACAE,8CACAA,4BACA1H,6CACAA,6BAEA3O,aACAqN,YACA0G,iBAMArc,gCACAsI,iBACAA,qEAGAtI,EAxHA,GA0HAkc,YACAnE,sBAKA,gBAEA9L,sCAA+C5F,WAC/C,YACAtG,aACA,aACAuI,UACAA,iBACAA,kBAEA,oCAEA,QADA/F,KACAvC,IAAyBA,mBAAuBA,IAChDuC,kBAEA+F,4BACAA,iBAEAyP,6BACAzP,kBAEAyP,8BACAzP,iBACAA,iBAEAyP,iCACA,uCAEAA,iCACAzP,oCACAA,kBACAA,sBACAA,sBAGAyP,kCACA,qCAEAA,oCACA,IACA/X,EACA6W,EAFAtU,OAGA,MACAvC,kBACA6W,oBACAA,OAMA,YALAA,kBACAtU,gBACAA,yBAKU+F,mBACVA,qBACAA,kBAEAA,iBAEAyP,gCACA,YAEAA,EA1DA,GA4DAmE,YACAD,sBAKA,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CAEA,UAEAxB,oDACA,yCAIAA,8CACA,IACAwe,EADAhd,KAEA,QAAoBgd,WAA4BA,IAChDhd,gDAEA,UAKAxB,6CACA,IACAwe,EACA1H,EACAN,EAHAhV,oCAKA,IADAgd,sDACA1H,IAAoBA,WAAiBA,IACrCN,OACAhV,YACAgV,cAEAhV,UACAgV,YAEAA,cAGA,UAEAxW,iDACA,UAIAA,uCACAmI,8BACAqW,mBAGAxe,qCACA,IACAwe,EADAhd,qBAEA,WACA8c,SAGAte,oCAEA,OADAmI,KACA8P,UADA9P,KACA8hB,eAEAjqB,gCACA,kBAEAA,uCACA,2CAQAA,gDACA,MACAwW,EACArW,EACAmc,EAoBA,OAnBA1c,oBACAkX,SACAN,SACArW,cAGA2W,IAGAwF,GACAvF,MAFAD,gBAEAoT,qBACAjqB,eAEA,qBACAue,IACAhd,QAEAA,2BACAgd,SACAre,wBACA,OACA,oDACAqe,EACA,OAGA,cACAA,EACA,WAGAxe,qCACA,qEAGAA,wCACA,IAEAwW,EAFAgI,kBACA1H,KAEA,4DAIAA,gCACA0H,0CACA1H,yBAEAN,sBACA8H,mBACAxH,oBACA,OACAA,4CAIAA,OADAwH,IACA,UAGA,cAlBAxH,0BAqBAA,GAKA9W,0CACA,YACA,WACAwW,yBAEAE,yCAIA1W,uCACA,yDAIAA,wCACA,0BACAwe,gCACA1H,2BACAN,YACArW,wBAIA,oCACAA,gBAGAA,OACAA,2BAEA,CAAiBie,gBAGjBpe,wCACA,8BACA,qCAEAA,SACAA,EA/hBA,CAgiBCyb,WAGD,cACA,MACA6C,EAEAE,EADAhd,KAEA,WAEA,IADA8c,sBACAE,IAAoBA,WAA2BA,IAC/Chd,wBAGA,SAbAua,WAaA,EAMA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QACAvC,SACA6W,QACA+E,QACAzC,OACApV,SACA9D,SACAC,SACAC,SACAse,QACA9c,QACAgd,OACA1H,QACAN,QACArW,SACAmc,SACAiC,QACA5D,QACAgL,OACAhB,QACAriB,OACA6iB,QACAG,aACA,iBACAnd,oBACAA,4BACAA,gCAGAuO,mBACAvO,UACAA,oBACAA,0CACAA,6DACAA,2BACAA,uBACAA,wBACAA,uDACAA,mBAEA,6CAGAyO,gCACA,kBAEAA,2CACA,IACAlQ,EACAoe,EAFAre,cAiBA,GAdAqV,oBACApV,YACAoe,UAEAhJ,eACAgJ,KAEA,UACApe,cAEAoe,IACAA,MAEA3c,wBACA1B,EACA,qBAGAmQ,2CACA,4BACAzO,aAKAyO,kCACA,MACA,uBACA,cACA,mCAGAnQ,MACAzD,KACAmF,+BAGA,oBACAA,4BAIAyO,6BACA,mCAKAA,yCACA,0CACA,MACA,kDAEA,4BAGAA,yCACA,qDAEAA,sCACAY,IACAA,eACArP,qCACAgiB,iBAIAhiB,6CAGAA,oBAIAyO,kCACA,MAEAnQ,mCADA+Q,aAEArP,wCACAA,2BACAA,gCAIAyO,wCACA,8BAGAzO,iBADA,QACAA,2BAGAA,eAGAyO,6BACA,gBACAY,yDACAA,YACArP,wBACAA,oBAGAyO,6BACA,gBACAY,yDACAA,YACArP,wBACAA,oBAGAyO,iCACAzO,iCACAA,mBAEAyO,iCACAzO,gCACAA,mBAEAyO,8BACAzO,+BACAA,mBAEAyO,kCACAzO,4CACAA,mBAEAyO,uCACAzO,oCACAA,mBAGAyO,gCACA,6CAKAA,oCACAzO,qBACAA,gDAIAyO,qCACAzO,mBACAA,gDAKAyO,+BACAzO,eAGAA,wBAEAA,gBACAA,uBALAA,sBAQAyO,sCACA,WACAY,UACAA,iBAEAA,2CACA,IACAsN,EADAhJ,mBACA/R,aACAgb,oBACAlI,UAEAmI,4DACA,qBACAA,SAGA,qBACAnI,MAEA7Z,mBAIAmF,+EACA,IACA2c,MADAK,8CACA,mBACAJ,wBACA/hB,UACA+hB,IACAvN,gBAES,WACT,iCACAxU,aACAyD,GACA+Q,mBAGArP,wFACAnF,yDACAA,QACAA,6DAES,WACTA,+BAIAmF,gFACAqP,iCACAA,kCAEArP,iEACAA,oBACAA,oBACAA,oBACAA,yCACAA,gCACA2T,mDACA3T,8DAGAyO,gCACAzO,WACAA,iBAEAA,gDACAA,wBACAA,wCAEAA,4CACAA,4DACAA,mBACAA,yBACA2T,kDACA3T,6BAEAuO,sBAEAE,uCACA,+BAIAA,0CACA,WACA5T,iDACAA,YACAwU,8BAGAxU,6DACAA,aACAwU,iCACAA,0CAIAZ,4CACA5T,8BACAA,qCAOA4T,oCACA,IACAnQ,EADA+Q,YAEArP,2BACAqP,kBACArP,kBAGAA,eACA1B,YACA0B,sBACAA,6CACAA,yBACA1B,qBACAA,gFACA0B,oDAEAA,YAEAA,qEACAA,kEAEAA,oCACA1B,GACAA,qBAGA0B,0BAIAyO,kCACA,gBACAzO,0DACAA,2BACAnF,kBACAA,cACAmF,gBAKAyO,mCACA,gBACAY,kBACArP,2BACAA,iBACAA,gBACAA,wBACAA,yBACAA,0BAIAyO,+CACA,uCACAzO,gBAEAA,0BAEAyO,qCACA,uEAEAA,6CACA,QAAmC5T,MACnC,IACAyD,EADA+Q,YAEA,iCACA,WACArP,gBACA1B,mBAEA0B,4BACAqP,kEACArP,4BACAnF,GACAwU,kBAEA,GAGAZ,iCACAzO,uBACAA,kBAGAyO,kCACA,gCACAY,qBAEArP,yBADA,mBACAnF,EAEA,qBACAA,IAEA,mBACAwU,6BAEA,qBACAA,+BAEA,aACArP,qDAGA0S,kCACAA,uCAGAjE,sCAIA5T,mBACAmF,WACAA,2BACAA,yBACAA,kDAMAyO,4CACAzO,iCACAA,iCAGAyO,iDACAzO,oBACA4hB,aACAna,+BACAwM,qBAGAxF,0CACAzO,gCAEAA,oBACA4hB,SACAna,UACAwM,cAGAjU,+BACAA,iCAKAyO,qCACAzO,4DACAA,4DACAA,+DAEAyO,6CACA,OACAwT,iCACAC,4BAGAzT,6CACA,OACAwT,iCACAC,4BAIAzT,qCACA,kBACA5T,iDACAA,WACAA,MACAmF,uBAIAyO,qCACA,kBACA5T,iDACAA,WACAA,MACAmF,sBAGAyO,0CACAzO,iDAEAyO,8CACA,oBACAnQ,YACAC,kCACAoe,yDACAC,0DACA5c,iFACA,eACA,yBACAA,yCACA,eACA,wBACAA,0CACA,eACA,yBAEAyO,4CACA,uDAEA,UADAY,4BACA,EACS,IAKTZ,kCACAzO,mEAEAyO,iCACAzO,WACAA,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CA/N,mBAMA+N,IACAnH,4CACAA,iHAGAqM,kBACAlF,QAEAmF,mBACAtM,yBACAA,4CACA5G,kBAEAmT,2BACApQ,GACA2D,qBAEAqH,GAEAnH,6BAEAF,sBAGA,EAGAxe,yCACAqI,mBACAA,mDACA0W,gBACAD,MACA7e,6BACAC,EACA,GACAmI,cAKArI,wCACAqI,mBACAA,kDACA0W,gBACAD,MACA7e,6BACAC,EACA,GACAmI,cAKArI,4DACA,IAEAgX,EACAN,EAHAhV,oCACAgd,gFAGA,yCACA1H,iBACAwU,kBACA9U,iBACA+U,mBACA/U,EAEA,EAGA1W,0DACA,IAEAgX,EACAN,EAHAhV,oCACAgd,4EAGA,yCACA1H,iBACA0U,gBACAhV,iBACA+U,mBACA/U,EAEA,EAEA1W,EA/KA,CADA4b,MAiLCoD,SACD/C,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,QACAxV,QACAvC,QACA6W,QACA+E,SAEA7X,cAUA,gBACA,2BACA,uBACApC,kBACAA,EAEA,OAfAsa,iBAeA/b,2BACAoI,mBACAA,oCAGApI,yCACA,sCACA,iBACAC,8BAEAA,GAEAD,iCACA,qBACAue,oEACAA,uEAEAve,2CACAoI,oCACAA,kCACAA,8CAA+DgjB,cAG/DprB,2CACA,qBACAye,GACAiN,yDACA,4BAEAjqB,oBACA2G,gDAEA3G,0BACA2G,mDAMApI,4CACA,WACAyB,YACAgd,uBACA1H,4BACA,qBACA,yBAEA,uCACAuU,sBACA7U,YACAhV,yBACAsV,GAEAtV,0BAGAupB,2BACAzM,uBAGA,UAKAve,0CACA,IAQA4a,EACAgL,EACAhB,EAVArG,OACA9c,iBACAgd,YACA1H,aACAN,iBACArW,OACAmc,uBACAiC,4BAIA,qBACA,yBAIA,yCACAqI,8BACAwE,YACAM,iBACAf,6BACA3qB,cACA2a,MACAgL,sBACAgG,8BACA7D,cACAnZ,4CACAid,2CACA5B,YAEAnf,OACA8a,YAEA0F,sBACA/oB,YACAkc,yBACAD,GAEAC,yBAEA7D,KAEA2D,oCACAA,oBACAE,6CAEAoM,wBACA,IACA5nB,EACAwU,EACA/Q,EAHAmQ,MAKA5W,QACA2W,SAGA3T,qCACAwU,qCACAxU,OACA2hB,sCAEAle,2CACAmQ,qCAOAA,MAEAA,KACA+N,OACA/kB,mBAGA+kB,GACAnG,aACAhd,qGACAmkB,SAGAA,SAEAL,IAEAX,SAGAkG,kBACArM,kBACAmH,SACAhB,QAEAmG,mBACAlrB,kBAEAmrB,kCACA/qB,YAEA2lB,qBACAhL,IACA6D,kBACAF,oBAEAE,4CACAmG,GAEAnG,6BAGAF,uBAGA,UAGAve,uCACAoI,mBACAA,iDACA0W,gBACAD,MACA5e,6BACAse,EACA,GACAnW,cAKApI,sCACAoI,mBACAA,gDACA0W,gBACAD,MACA5e,6BACAse,EACA,GACAnW,cAKApI,qDACA,oBACA,6DACAye,GAEAze,mDACA,IAKAuc,EACAiC,EANA/c,4BACAgd,4BACA1H,KACAN,KACArW,KAGA,iCACA2W,KACAwH,YACAne,KACAqB,eAGAgV,MAGA8F,iCACAiC,iBACAuF,WACAvF,eACAA,gBACAA,kBACAA,GAEAxe,EAhQA,CADA2b,MAkQCoD,SACD/C,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,QACAxV,QACAvC,OAEA4b,cASA,cACA,2BACA,4CACA1b,EAEA,OAbA+b,iBAaAlY,2BACAuE,oCAEAvE,gCACA,uCACA,iBACA9D,8BAEAA,GAEA8D,iCACA,WACA5D,iBACAse,oBACAte,gDACAD,6CACAue,sBACA6M,wCAIAnrB,iDACAD,6CACAue,sBACAmN,uBAIA7rB,uBAGAgE,yCACA,IAEA5D,EAFAF,OACAC,iBA4CA,OA1CA,iBACA6mB,8BACA+D,4BACA3qB,QAEAqrB,sBACAvrB,oBAEA8qB,wBACA,MACAzqB,EACA2W,IACAN,2BACArW,4BAEAH,EADAwW,KACA1W,wBAGA,MAGAC,+BAEA,OACAH,oBAIAirB,kBACA7qB,OACAD,uBAEA+qB,mBACAlrB,kBAEAmrB,8BACAvM,MAEA1e,8BAIA,EAMA8D,2CACA,0CACA,kDAGA5D,GAKA4D,oDACA,OACA9D,uBACAA,qBACAC,uBACAA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2BACAiC,2BAEAjC,gBACAiC,oBACApW,oBACAA,oBACAA,sBAGAwS,8BACA/a,eACA+a,iBAEAxS,oBACAA,4BACAwS,gCACAxS,qBACAyP,cACAzP,8BAGAhI,6CACA,MACAwa,EACAgL,EAEA,iBAAwDpH,KAAQA,IAGhE,GAFA5D,mBACAgL,kCACAvjB,gBACA,SAGA,sBAIAjC,oCACAgI,mBACAA,sBACAA,mBACAA,sBAEAhI,qCAEAgI,wBAEAhI,sCAEAgI,2FADAA,yBAGAikB,yDACAjkB,sCAEAhI,mCACA,+BACAgI,iDACAwF,KACA,8CACAxF,yBACA,YACAA,6CACAA,mCACA8e,iBACAC,iBAIA/mB,yCAaA,QAJAwW,EACAC,GACA5T,EAVAsZ,YACAiC,aACA5D,UACAgL,aACAhB,mBACAriB,KACA6iB,yBACAG,gBAKAH,aACAxO,wDACAC,6DACA5T,EACA,sFACA4T,GACA,SACAxU,yCACA,UACA,IACA,QACAE,GACA,4CACAsU,2BACA,KACA+O,QACA,qDACAA,QACA,QACAR,yBACAG,yBAEA,UAEAnlB,qCACA,uBACAoe,2BACApW,6CACA,0EAEAA,sBACAA,iDAEAA,4EACAA,uBACA,YACAA,sDACAA,kCACA8e,gBACAE,kBAEAhf,8BAEAhI,uCACAgI,gCAKAhI,6CACA,IACAoe,EACA5D,EAFA2B,KAGA,QAAoBiC,cAAiBA,IACrCjC,GACA,yQAUA3B,0EAEA2B,yBAGAnU,+CACAA,uDACAA,4EACAA,oDACAA,6DACAA,2DACAA,gCACAA,mBAEAhI,+CACAgI,yBACAA,gCACAA,4BACAA,0BACAA,6BACAA,yBACAA,yBACAA,gCACAA,iCAIAhI,uCACA,IACAwa,EADA4D,KAEA,QAAoB5D,cAAiBA,IACrC4D,WAEA,QAAoB5D,WAAiBA,IACrC4D,uBAEA,UAIApe,0CACA,MACAwlB,EACAhB,EACA,QAAsBhK,cAAmBA,IAEzC,IADAgL,OACAhB,IAAwBA,WAAiBA,IACzCpG,yBAMApe,2CACA,gBAEAA,2CAEA,wBAKA,KAKAwkB,EALApG,8EACA,IAEA5D,2BACAgL,KAGA,QAAoBhB,WAAiBA,IACrCgB,uEACA3W,aACAlB,gDAGAyQ,YACAoH,wEACA3W,aACAlB,mDAEA3F,4BAEAhI,4CACAgI,uBACAA,8BACAA,4BAKAhI,uCACAqW,wCACArO,4BACAwS,GACAxS,wFAGAhI,0CACA,2CAKAA,yCACA,iEAGAA,uCACA,IAGAwkB,EACAriB,EAJAic,sBAEAoH,KADAxd,iBACAqZ,2BAMA,uBACAmE,gBAGAhB,gBAIAriB,KAHAqiB,mBAIAxc,sCACAA,oCAIAhI,2CACAgI,4BACAA,4BAGAhI,4CACA,IACAwa,EACAgL,EACAhB,EAHApG,mCAIA,QAAoB5D,WAAiBA,KACrCgL,QAEAnQ,kCADAmP,6BAEAgB,2DAKAxlB,2CACA,MACAwa,EACA,QAAoB4D,WAAiBA,KACrC5D,QACA0R,wCAIAlsB,+CACA,OACAqV,UACAoH,mBAKAzc,mCACAgI,2BACAA,6BAEAhI,mCACAgI,4BAGAhI,mCACA,wBACAwlB,qBACAhB,sBACA,4CACA,8BACAQ,wBACA,qBACA,wBACAxO,iBAEA3T,cADAub,OACA5D,GAEAlU,UACAC,cACA,OACA4gB,MACAgF,KALAnH,MAMAoC,eACArL,wBACAS,0BACAnH,MACAoH,aAKAzc,wCACA,IAEAwlB,EAFApH,4BACA5D,+BAEA,iBACAgL,mCACA,sCAIAxlB,wCACA,iEAEAA,iCACA,8BAMAA,uCACA,MACA,MACA,YACA,iEAEA,OAIA,QAAwBwlB,WAA4BA,IACpDxd,+CAKAhI,oCACAgI,yBACAA,gCAKAhI,8CACAgI,0DAGAhI,2CACAgI,gCAKAhI,iDACAgI,yBACAA,gDAGAA,yBAIAhI,yCACAgI,+BACAA,0BAEAhI,EA5cA,CA6cCN,WACDkc,YACAjF,yCACAA,gDACAA,0CACAA,wCACA2E,qBACAzC,sBAKA,gBAEAlN,sCAA+C5F,WAC/C,WACAtG,OAMAwC,cAEA,gBACA,6BACA,oBACAZ,EAEA,OANAsa,iBAMA/b,qCACAoI,iEAIApI,qDACA,MACAye,EAEA,IADAhd,kCACAgd,IAAsBA,uBAA4BA,IAClDrW,6BAEAA,oCAEApI,sCACAoI,aACAA,gCACAnI,iBAKAD,8CACA,yCAGAA,8CACA,UAGAA,oCACA,IAUAuC,EACA6iB,EACAG,EAZA9jB,YACAgd,aACA1H,iCACAN,aACArW,uBACAmc,2BACAiC,mDACA5D,+CACAgL,+BACAhB,iCAMA,GAFAgB,6CAEAnkB,mCAIA,uBACA,8BACAoV,yBACAtU,4BACA6iB,iCACAG,0CAKAhjB,gCACA6iB,qCACAG,wCAEA,oCACAnlB,MACA,kCACA,KACAwkB,EACA,iBACA,IACA,6BAEAriB,EACA,oCACA1C,gCACAA,2BAEAA,gCAEA,KACAO,QACA,yBACAP,sBACA,SACA,IACA,mCAQA+a,EACA,gDACA,IACA,QAIA5a,0CACAoI,qCACAA,gCACAA,oCACAA,gCAIApI,gDACA,MACAyB,EACAgd,EAIA,GAHArW,sBACAmW,EA6GA,cACA,IACAte,EACAse,EACA9c,EAHAzB,KAIA,QAAgBC,WAAiBA,KAGjC,IAFAse,OAEA9c,IAAoBA,YACpBwX,iBADuCxX,KAKvC8c,WACAve,yBAEA,SA7HAF,IAiIA,cACA,MACAG,EACAse,EACA9c,EACAgd,EACA,QAAgBze,WAAmBA,IAEnC,IADAC,OACAse,IAAoBA,WAAkBA,IAGtC,KAFA9c,QACA+qB,eACA/N,MAA4BA,WAAmBA,IAC/CxF,wBA5IAtC,IACAlV,QACA,QAAwBgd,WAAmBA,IAC3C/C,QAEA,QAAwB+C,WAAmBA,IAC3CrW,yCAYApI,oDACA,IACA+W,EADA0H,gBAEA,2BAmBA,IAlBAA,UAMArW,wBAGAA,yCACAnI,mCARAA,iBAWAA,gCACAA,mBACAse,KAGAxH,IAAwBA,WAAwBA,IAChD3O,qDAIApI,wCACAC,4CAGAD,6CAEA,6CAEAC,0CAEAmI,4BAIApI,+CACA,MACAyB,EACA,QAAoB8c,WAAiBA,KACrC9c,QACA6qB,2CAGA7qB,+CACAA,2BAMAzB,mDACA,IAKAI,EACAmc,EANAgC,+BACA9c,kBACAgd,iBACA1H,0CACAN,sBAGA,WAEAgI,yBAEAhI,GACArW,MACAmc,MAGAnc,IACAmc,OAEAxF,mBACAA,iBACAA,kBAC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NAK,iBAMApF,uCACA,IACA5W,EACAC,EACAC,EAHA4D,KAIA,QAAoB9D,WAAiBA,IAErCE,uBADAD,QAEAoI,0CACAvE,aAEA,UAGA8S,wCACA,IAGA1W,EACAse,EACA9c,EALAoC,wBACA9D,YACAC,eAIA,OACAC,EADA,oBACA,UAGAyb,gBAKAja,GAHA8c,sEAGAla,WACAtE,KACA0B,SAEA,kCAEAA,mCACAzB,KACAyB,SAEA,oCAEA2G,+BACAmW,GAEA5H,EApDA,CADAgF,MAsDCoD,SACD/C,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QACAvC,SAGA6W,cAEA,aACA,+CAGA,OALAoF,iBAKA9C,wCAEAlZ,IACA8D,0BAEAgU,8CAEAoB,6CACA,iEAEAA,EAhBA,CAiBC5W,WACD2Z,YACArF,iDAKA,gBAEA5K,sCAA+C5F,WAC/C,WACAtG,QACAgY,OACAxV,cAEA,aACA,+CAGA,OALA0Z,iBAKApF,6CACA,IAGA4H,EAHAxe,gDACAC,kCACAC,gCAGA,oCACAse,YACAte,sBAEAA,oBAEA,oBAEA0W,EApBA,CAqBC9W,WACDmc,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,OACAvC,QACA6W,QACA+E,SACAzC,SAIApV,cAEA,gBACA,6BACA,qCACApC,0BACAuiB,mBACAmE,mBAEA1mB,EAEA,OAVAsa,iBAUA/b,sCACAoI,iCACAA,0CACAA,uBACAA,mCACAA,uCAEApI,wCACAoI,yBAEApI,uCACAD,wCACAqI,sBACAmW,GACAnW,wDAGApI,8CACA,SACA6X,mDAEA7X,oCAMA,QALAue,gBACA9c,mDACAgd,iDACA1H,KACAN,KACAhV,KACAsV,kBACAN,gDACAhV,eAEA2G,gBACAA,kBAIApI,iDACA,IACAyB,EACAgd,EACA1H,EAHAwH,iBAIA9H,KACA,QAA2BhV,WAA6BA,IAExD,IADAgd,oCASAhI,OAPAM,GACAsG,kBACA8O,cACA7O,kBACA2J,cACAmF,cAKArV,sBACAtV,cACAxB,4DACA8W,6BACAA,WACA,MAIA,UAEA/W,0CACAo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2Z,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,OACAxV,QACAvC,QAEA4b,cAEA,gBACA,yBACA,qBACAzb,wBAAqCD,GACrCC,sBACAA,YACAA,EAEA,OATA8b,iBASAlY,4BACA,IACA5D,EADAD,IAGA,SADAoI,wBACArI,EACAC,IAIA,SACA,yDAEA,YADAoI,kCAGA,qBACA,OAEA,uBACA,OAEA,wDACA,OAEA,kBAEA,YADAA,0CACA,CAIAA,8BACAA,8BAGAA,8BACAA,6BAIAvE,+BACA,MACA7D,EACAC,EACAse,EACA9c,EACA1B,iBACAqI,qDACApI,2BAGAA,qBADAD,4BACA,IAEAE,iBACAmI,iFAEAA,iBADAmW,qBAEAnW,sBACA3G,kBACAY,iBACAkc,EACAve,EACAoI,eACAA,wBAEAtI,uCACAsI,eAGAvE,wCACA,MACA,WACAuE,8BAEAA,4CACAA,gBAEAvE,EArFA,CADA8X,MAuFCoD,SACD/C,aAKA,gBAEAjQ,sCAA+C5F,WAC/C,WACAtG,OACAgY,QACAxV,OACAvC,QACA6W,QACA+E,aACA,gBACAtT,sBACAA,iBACAA,kBAEA,yCACAA,uBAGA6Q,oCACA,yBACA,2CAIAA,wCACA,MACAjZ,EACAC,EACA,iCAMA,IAJAF,8CACAF,8BACAE,YAEAC,IAAwBA,WAAsBA,IAE9C,IADAC,2BAEAA,iBACA,UAOAgZ,sCAYA,QANAwF,EACA1H,EACAN,EACArW,EACAmc,EATAxc,0CACAC,KACAC,KACAse,KACA9c,IAOAA,GACAgd,gBACA1H,OACAtV,OACA,uBACAgd,GAAyB6I,UAEzB7I,IACAze,aACAC,0BACAwW,gBACAhV,aAEAsV,IACAwH,aACA9H,gBACAhV,aAKA,OAFAgd,mBACAve,SACAue,WAIAhI,KACArO,+CACAA,0CAEAhI,iBACAysB,YACAtQ,qCACAkC,aACAA,iBAGA,cACAA,eACAF,sBAIAE,6BACAA,8BACArW,6BACAA,kCACAqW,EAxBA,EA2BAxF,6CACA,0BACApV,0BACA/D,iBACA+D,WACA9D,cACAA,iBACAA,YACA8D,YACA9D,qBAEA4W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,qDAGAA,kDACAA,mDAEAgC,WAIA,UAEA1a,EAnDA,CAoDCxB,WACDsZ,YACA7b,sBAKA,gBAEAiM,sCAA+C5F,WAC/C,WACA0R,OACAxV,QACAvC,OACA6W,QACA+E,QACAzC,QACApV,QACA9D,QACAC,QACAC,QACAse,QACA9c,QACAgd,QACA1H,cAEA,gBACA,6BACA,2BACA6D,wBACAA,+BACAA,EAQA,OAdA/a,iBAcAO,oDACA,MACAwa,EACAgL,iBACA,oBACAhL,uCACA4D,yCAEA,CACA,8BACApW,gBACAwS,6CACA4D,yCAGAqP,+BACArP,2BAIA5D,UACA4D,SAGA,4EAGApe,iDACA,gCACAwa,0BACAgL,sCACAhB,KAEA,oEAEA,4DACA,MACA,mBACAW,aACAX,QACAvG,QACArd,MACAsc,uCACA2J,0DAMA,UAUA7mB,0CACA,gBACA,uCACAgI,iBACAoW,aACAA,WAIAA,wBACApW,gBACAoW,2BAGAA,GAEApe,oCACA,uBACA,SAEA,qBAEA,wCACA,gCACAgI,kBAGA,UAGAhI,uCAMA,QALAmc,KACAiC,IACA5D,KACAgL,KACAhB,sCACAA,6BACAxc,qBACAmU,IACA3B,UACAgL,WAGAhL,aAEAgK,yBACApG,IAEApW,uBACAA,uBACAA,iBACAA,6CAIAhI,sCACAgI,iCACA,8BACAA,kCAEAA,wCACAA,oDACAA,oDACAA,qCACA4b,2BACAmE,qBAEA/f,2CACAA,+BACAA,mDACAA,oCACAA,2CACAA,+BACAA,mDACAA,2BACAA,0EACAA,6FACAA,2GACAA,wDACAA,0CACA8e,oCACAE,gBACAD,gBAEA/e,gGAEAA,8DAEAA,6DACAA,qCAEAA,WACAA,iDAGAA,gDAEAqO,uCAEArW,0CACA,0BACA,mRAEAA,wCACAgI,+BACAqO,yCAIArW,oCACAqe,uBACArW,sCAEAA,oFACAA,gFAIAA,mBACAA,2CACAA,4DAEAA,sGACA,SACAwS,sCAEA,IADAxS,gCACAwS,6BACAxS,qBACAoW,kBAEA5D,yBAEAxS,iBACAA,uBACA,4BACAA,wDACAA,uEACAA,sCACAA,iDACAA,6CACAA,sCACA8e,iBACAE,kBAIAhf,2CACA8e,+BACAE,gBAGAzR,+CAEA,YAAwBiP,wBAA2BA,IAEnDxc,kCACA0W,aACAD,MAHAjE,oBAGAxS,2BAGAA,uBACAA,+FAGAhI,qCACAgI,uBACAA,qCAEAA,+CACAA,6BAGAA,0CACAA,2CAEAhI,sCAcA,QAbAmc,EACAiC,EACA5D,EACAgL,EACAhB,sBACAriB,qBACA6iB,qBACAG,qBAAuD,WACvD3O,OACAC,QACA5T,iBACAwU,KACA/Q,qBAAuD,2CACvDC,QAAkDA,WAAyBA,KAI3E,QAFAqe,IADAxG,QACAzG,OACA+E,2CACAmI,IAA8BA,WAAsBA,KACpDW,OAEAhP,GADAgE,QACAA,YACA,IACAsK,QACA,GAFAE,yBAEA,CACA,mBACAxO,eAIAA,aAHAsO,kCAGA,MAIAtO,sEACAuO,eACAD,oCAGAtO,aAGAsO,KACAA,gBACAtK,YAGAnD,QAA6BqW,eAC7BjX,MAEA,2BACA6C,oCACAC,iDACAA,iBACA,kBAAkDoU,aAAyBA,KAC3EvP,SACA7E,YAEAA,kBACAA,cACA,aAAwBqU,YAAqBA,MAG7CrU,eADAqU,gBACA,6BACA,gBAHApT,QAGoDvQ,aAAwBA,MAC5EkS,SACA,oCACAA,aACAlF,sBAEAqC,KACArC,6CAGAsC,IACA,2CACA4C,qBACAA,2CACA,iCAEAA,WACA,cAGA5C,YAEAA,uBACA,qDACA/B,iBACA,kBAAkDqW,aAAyBA,KAC3E1R,SACA3E,YAIA,IAFAA,kBACAA,kBACAoW,KAAwBA,YAAsBA,KAG9CpW,sBADA4G,SADAjC,SAEAuR,WAEA,MACA,CAAiBI,qBADjBtW,4BACiB,EAEjBxX,4CASA,OARAmc,YAQA,CAAiB3a,gBAPjBwG,0BACA4O,OACA9W,OACAiuB,aACS,CACT7G,sBACSxnB,iBACQkX,mBAEjB5W,uCACA,MACAwlB,sBACA,yBACAhL,MACA3Z,wFACA,WACA,aAGA2Z,yBACA3Z,eAEA2Z,uCACA4D,GACA5D,qBAEA,0CACA2B,iCAKAnc,4CACA,mBACA,qDAKAA,2CAEA,oBACA,iDAIAA,2CACA,SAEA,GADAmc,4BACAnU,6CACA,0BACAwd,aACA,CAAkBhJ,UAClB,CAAkBT,QAClBqC,wEACAvP,OACAlB,8CACAyQ,uEACAvP,OACAlB,8CAEA3F,2BAGAhI,4CACAgI,uBACAA,8BACAA,4BAKAhI,uCACA,MACAwkB,EACAriB,EACA6iB,EAEAQ,EADApH,EACA,OAGAjC,2CAEAnU,mCAKA,0BACA,MACA,2EACA7F,0BACAqiB,KACAQ,IACA,8CACAvO,OACA+N,KACAriB,KACA6iB,6CAIA7iB,KACAqiB,KAEAxc,yCACAA,4CACAA,yCACAA,4CACAmd,GACAnd,iEACA6G,eAEA7G,mCACAA,mCACAA,+BACAmd,IACAnd,mBAEAA,0BAKAA,2BAEAA,uBACAA,+BAEAA,yBACAA,kCAGAhI,uCACA,6BACAgI,uCACAA,wCAEAhI,wCACA,QACAgI,uDACA5H,mBACA,wBACA,yBAEA,UACAolB,mEACAhB,iBACAriB,6CACA,WACAA,oBAEAqiB,iBAGAA,GAIAxkB,mCACAgI,gCACAA,4BACAA,kCAGAhI,gDACA,+EACA,OACA,SAEA,kCACA,oBAGA,oBACAwlB,0BACA,kBACAA,OAKAA,eAEAA,GAKAxlB,oCACA,IACAwa,EADAxS,gCACAA,kBACAwd,gBAEAhB,KADAgB,8BAEArjB,2BACA,kBACAA,sBACAA,oDAGAA,qBACAA,iBAGAnC,sCACA,kBACA,CAAqBwc,8DAGrB,CAAqBT,+DAIrB/b,kCAEA,QADAmc,KACAiC,IAAyBA,mBAAuBA,IAChDjC,kBAEA,2DACA,4BAGAnc,0CAEA,cADA,0DACwCoe,WAAoBA,KAC5D,WACAoG,wBACAgB,UACAzJ,mBACAS,6BAMAxc,+CACAmc,EACAnU,0BACAA,2BACAA,iCAIAA,0BACAA,2BACAA,qCAIAhI,gDACA,iDACAoe,IACA,qBACA,6BACA5D,IACAA,gBACA4D,0CAGA,OAAiBrC,SAEjB/b,uCACA,OAAiB+b,6CAEjB/b,wCACA,eAKAgI,4CACAA,8CAKAhI,mCACAgI,oBAIAhI,mCACA,wBACAwlB,sBACAhB,0BAEA,2BACA,8BACA,YACA,aACAW,SACA3O,SACAC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A+E,iBACAtT,wBAEAuO,oCACAvO,sBACAA,wBAEAuO,uCACAvO,sBACAA,wDACAA,oDACAA,6BAA6C,8BAE7CuO,sCACA,oBACAsC,wBACApV,mBAEA,0BACAsY,OACAS,2BACAnH,MACAoH,+BAGAlG,qCACAvO,wBACAA,yBACAA,6BACA,gBACA,8BAKAuO,kCACAvO,uCACAA,yBACAA,6BAAiD,8BAGjDuO,8BACAvO,uBACAA,wBAEAuO,uCACAvO,6BAA6C,6BAG7CuO,uCACA,+CAGAA,wCACA,6CAEAA,oCACA,8BAEA+E,EADAtT,oBACA6Q,IAGAtC,EAlHA,GAoHAgF,aAKA,gBAEA5P,sCAA+C5F,WAC/C,WACA0R,aAIA,cACAzP,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,KACA1H,KACA3O,kCACAA,qBACA,oBACAhI,8CACAmc,mBACAnU,qCACA,yBAwMA,gBACA,OACA+T,6BACAS,gCACAnH,0BACAoH,oCA7MA5c,wBACA2a,cACAnE,yBACA+H,eAEA/H,0BACA+H,iBAEA/H,gBACA3W,eACAiX,uCACAtV,MAGAgV,gBACAE,eACA8H,MAGArW,oBACAA,oBACAA,mBAEAmW,sCACAnW,uBACAA,uBAEAmW,qCACAnW,aACAqN,OACA0G,WAGAoC,uCACA,iCACAE,kBACA1H,qBACAN,wBACArW,OACAmc,KACA,MACAnc,EA0GA,cACA,OACA+b,YACAS,cACAnH,UACAoH,iBA/GAxa,mBACA,4BAEA,6BACAmc,YAEA,GADAjC,KACAnU,mBACA,oBACA,WACAhI,8BACAA,sBAGAL,SACAwc,MAGAxc,SACAwc,MAGAnU,oBACApI,SACAuc,MAEAvc,SACAuc,OAGAb,SACAa,OAIAnU,YACAA,mBAEAmW,sCACA,kBACA,aACA,GAEAnW,iDACAA,kBACAA,qBACAqN,mFACA0G,uFACA6N,8CAGA,CACA,yCACAvL,uCACArW,oBACAA,kDACA6G,KACAwG,MACA0G,cAjBA/T,mBAiBA,EAKAmW,kCACAnW,kBACAA,kBACAA,wCAEAA,oDACAA,mCACAA,qBAGAmW,oCACAnW,kBACAA,yBACAA,6BACAA,qBAGAmW,uCACA,+CACA,cACA/P,oBACA,cACA,yCACA,qCACA,yCACA,iDACAiP,2BACA,yCACA,+CACA,2CACA,+CAEArV,kCACA3G,+BAEAA,GAEA8c,QACAA,EA5LA,GA0MA,cACA,sBAEA,cACA,sBAEA,gBACA,OAEA,gBACA,wCAHAtF,OAKA,gBACA,wCANApV,MAQA,gBACA,sBACA0a,oBACAA,eACA,GAEAA,kBACAA,oBACAA,iBACA,EAGA,CAGA,gBACA,oBACAA,oBACAA,aACA,GAEAA,oBACAA,oBACAA,mBACA,EAGA,CAtDA5C,WA8DA,EAOA,gBAEA5P,sCAA+C5F,WAC/C,WACA0R,OAEA/X,cAEA,aACA,+CAKA,OAPAD,iBAOA6b,uCACA,aACA,MAEA3b,EADA,oBACA,UAGAkZ,gBAMA,QAFAjZ,wCACA+N,0CACA9N,QAA4CA,WAAoBA,KAChE,WACAwe,kCACAhd,UACA0a,mBACAS,2BAEAnb,iBAEA,WAGAia,EAjCA,CADAK,KAmCCiT,cACDrT,aAKA,gBAEA5P,sCAA+C5F,WAC/C,WACA0R,OAEA/X,cAEA,aACA,+CAKA,OAPAD,iBAOA6b,qCAEA,QADA3b,KACAC,QAAwCA,WAAoBA,KAC5D,IAEAyB,+BAFA8c,QAGAA,UACApC,mBACAS,2BAKA2B,eADA1a,oFACAA,gBAGA,GAGA,gEACAkK,iCACAhO,aACA,gBAAwCgX,WAAoBA,KAC5D,MACA0H,UADAF,QACA+N,IAEA,aAEA5Q,EApCA,CADAK,KAsCCkT,gBACDtT,aAKA,gBAEA5P,sCAA+C5F,WAC/C,WACA0R,OACAxV,OACAvC,QACA6W,OACA+E,OACAzC,QACApV,QACA9D,QACAC,QACAC,QACAse,QACA9c,QACAgd,QACA1H,cAEA,gBACA,6BACA,uCACA6N,iCACAA,eACAA,eACAA,uBACAA,0BACAA,qBACAA,2BACAA,+BACAA,gCACAA,6BACAA,qBACAA,EAIA,OAnBA/kB,iBAmBA2e,8CACA,sCACAoH,gCAEArjB,OACAqY,SAOArY,IANAqY,QACAsU,aAJA,YAKAttB,kCAWA,QALAwjB,KACAG,KACA3O,KACAC,MACA5T,KACAwU,QAAsDA,WAA2BA,KACjF,WACA9Q,QACA4e,UAGAH,UAIA,GADAA,eACAG,SACA3O,IACAC,UAEA,CACA,qCACAkO,IACA9hB,KACA2T,QACAoG,QACApb,mCACAutB,0CAMA,QADArS,MACAmI,OAFA5iB,6CAE0D4iB,YAA6BA,KAGvF,QAFAC,SACAC,MACAhO,UAAwDA,aAA0BA,MAClF,cACA,wBACAwC,kBACAwL,MACA,OAGAA,IACArI,YAGA1U,uBACAA,oBACAA,mBACAA,kBACAA,0BACAA,oBAIAoW,sCACAjC,sCACA,0BACAnU,4DACAA,gEACAA,kCAIAA,6BACAA,yBACA,8JACAA,qCACAA,gBACAgnB,qCACAlL,4BAEA9b,oDACAA,8BACAA,wBAEAA,0BAEAoW,0CACA,0BACA,8iBAIAA,yCACA,WACAoH,gCACAxd,4CAEAA,wDACA,yBACAA,wCAEAA,2CACAwS,yBAGA4D,yCACA,WACAoG,oBAEAQ,qBACAG,gCACA,oBACA+F,qBACA1F,oCAEAc,oBACA,MAEAjP,EADAmN,EACAW,KAGAA,KAEA9N,aAfA,IAgBAA,gBACAmO,iBACAA,qBACAA,6BAEAyJ,mBACAzJ,yCAGAuF,qBAEA3M,8CACA,kDAEAA,wCACApW,kDAIAoW,uCACA,MACApW,4BACAA,gDACAA,iCAGAA,sBAEA,6BAEA7F,EADAqjB,EACA,OAGAhL,2BAEAxS,mCACAA,2CACAA,8BAEAmU,wCAEAnU,oCAEAoW,uCACA,6BACA1D,gGACAA,iGAEA0D,uCACApW,oCACAA,wBACA,gEACA,sCACAA,mBACAwS,GAKA4D,2CAGA,QAFA5D,KACAgL,8CACAhB,4BAAqDA,WAAgBA,KACrE,WACA,eACA,uBACAhO,iCACA,QACAgE,2BACAA,aACA,QAKA,UAEA4D,4CACA,iBACA,wCACA,MACA,uBACA,MACA,mDAEA+G,EADAX,+BACAhK,WACAxS,sCACAA,kDAKAoW,yCACA,gCACA,MACA,uBACA,MACA,mDACA4G,mBACAhd,sCACAA,iDAMAoW,mCACA,SACAjC,mCACAnU,mCACAA,mCACAwc,kBACAhK,YAGA,wBAA0D,6BAC1DxS,sBACAA,qCACA8e,MACAC,gBAEA/e,4BAEAoW,mCACAjC,mCACAnU,oBACAA,yBACAA,4BAEAoW,mCACA,0CACA,MACA,6CACA,WACA,OACA8Q,8CACA/C,YACA/E,eACArL,YACAS,cACAnH,uCACAoH,gDAKA2B,wCACA,+CACA,8DAEAA,iCACA,+BAIAA,wCACA,gBAAkDoH,WAAyBA,IAE3Exd,oBADAwc,KACA,EAGApG,yCAGA,aAFApW,kCACAA,mCACAA,qBACAA,0CAEAA,yBAEAoW,uCACApW,wBAEAoW,yCACApW,wBAIAoW,2CACA,IAEAjc,EAFAqjB,KACAhB,KAEA,gBACA,WACAhO,kBACAC,sBACA,aACA,iBAA8D5T,WAA2BA,KAEzF2iB,EADArjB,UACAqjB,UACAR,UAIAxO,qBACAgO,QAIA,SADAxc,6BACAwd,GACA,WACAb,yBACAA,GACAA,0BAMAvG,4CAIA,GAHApW,kBACAA,0BACAA,6BACAA,iBACAA,0BACA,kCAAuDwd,WAAgBA,KACvE,WACArjB,wDACAqY,SAIAxS,6BACAA,qCAGAoW,sCACApW,6CACAA,2CACAA,6BACAA,4CAQAoW,yCACA,SACAjc,wBACAqjB,IACAhL,SACAgL,mCAEAhL,aACAgL,oCAGAA,EACAxd,2BAGAA,kBAEAA,iBACAA,6BACAwS,0BACAxS,kBAEAA,yBACA7F,iDAEA6F,sBAEA,yBAAiDgd,WAAgBA,IAEjEhd,oBADAmd,KACAhjB,GAEA,UA4QA,cACA,SACA,iBACA,SAEAga,WAEA,SAnRAnc,YACAmC,mBAEAA,GAGAic,uCACA,iCACA,kBACApW,2BACAA,oBACAwd,2BACAhL,0BACAxS,kBACAA,uBAGAwd,GAKApH,sCAGA,QAFA,QAAiCoH,0BACjC,QAAqChB,mBACrCA,UACA,yCACAriB,uBACA6F,2BAGAA,oC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BACA9H,YACAgI,gBACA,YACA1H,EACA,aACA,IAuIA,cACA,MACAN,EACArW,kBACAmc,2BACAiC,uBACA5D,WAKA,OAHA,iBACA2B,SAEAA,OACA,OACA3B,SACA,UACA,QACA6D,8BACA7D,UAEA7D,QACA,UACA,OACA0H,8BACA7D,UAEA7D,2BACA,UACA,MACA0H,4BACA7D,2BAEA6D,+BACA7D,UAEA4D,IACAzH,uBAIAN,SACA,UACA,OACA+H,IACA5D,uBAEA6D,6BACA1H,6BAEAN,2BACA,UACA,SAEArW,kBA/NA,GAgOAwa,sBACA7D,WAGA6D,4BAEA,UACA,SAEAxa,kBAzOA,GA0OAwa,OACA7D,WAGA6D,QAEA,UACA,cACAA,QACA7D,WAGA,mCAhNAtV,IACAgd,gDACA,WACA,mBACA,4CACA,4BACAre,KAGAqe,cACAA,gDACAA,+BACAA,uBAQA,4BACAA,eACAD,EACA3G,cACA4G,eACAA,yEAuLA,EAMA,gBAEA1S,sCAA+C5F,WAC/C,WACA0R,OACAxV,QACAvC,QACA6W,QACA+E,QACAzC,QAEAlZ,aACA,cACAqI,qBACAA,YACAA,kCACAA,mCACAA,mCAAwD,iBAExD,6CACA,+BACAA,iCACA4b,2BACAmE,qBAEA/f,uCACAA,2BACAA,+DACAA,yCACAA,iCAA4D+f,6BAC5D/f,uCACAA,2BACAA,iKACAA,8DACAA,qCACAA,oFACAA,yCACAA,wCACAA,6EACAA,oCACAA,qCACAA,6CACAA,sBACAA,wBAEApI,sCAKA,QAJAC,2BACAse,qBACA9c,gDACAgd,eACA1H,QAAgDA,WAAwBA,IAGxE0H,IAFAre,QACA0vB,OACA,4BAGA,QAIA1nB,kBADAqW,iBAEAhd,KACAA,aACA2G,4BACA3G,GACA,mCACAxB,+GAGA4X,wCACA,2BAKApW,UACA,YAAwB8a,WAAqBA,KAC7C,WACAiC,iBACA/c,GACA,iFAGArB,SACA,uEAGA,IACA,8BACAyX,8BACA,iBAEA2G,2CACA,cAGA,mBACA,kBACA,EAEAxe,uCACA,WACAoI,2DACA3G,QACAiJ,2BACAzK,iCAIAD,+CACA,WACA+W,u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Ape,KACA/O,gBACA+O,uCAEA/O,gBACA+O,uCAIA/O,cACA+O,mCAEA/O,cACA+O,gCAEA/O,cACA+O,gCAEA,kCACA,OACAqe,kBACAC,cACAC,aAoCA,kBACA,eACAzT,WACA8S,IACAY,OACAC,QAEA,eACAC,SACAC,UACKf,IAiCL,gBACA,qBACAvmB,YACAyT,WACA8S,oEACAQ,SACApe,QACA,UACA,UACA,uCACA3I,MAEAyT,WAEMsT,GACN/mB,MACM2I,IACN8K,OAEA,OACAmF,QACAna,UA0CA,sBACA,qBACAsoB,kBACApe,kBACA+K,WACA8M,iBACAD,YACAE,oBACA1f,YACA0H,oBACA8e,iBACAC,kBACAC,mBACAC,eACAC,gCACAC,2BACAC,mBACA/e,2BACAgf,wBACAC,cACAC,sBACAC,eACAC,sBACA5mB,cACAC,oBACAC,eACA2mB,oBACAjf,oCACAkf,uBACAC,OACAvY,eACA8I,SACAna,YAEAkF,OACAmM,eACA8I,SACAna,WACK,SACL6pB,4CACAC,8CAIApf,OACA2G,eACA8I,SACAna,YAEA+pB,OACA1Y,eACA8I,SACAna,WACK,SACLwK,4CACAnD,6CACAlV,sBACA,uBACAsY,iBACAkf,gBACAA,uBACAA,UACAA,wBACAA,yBACAA,gBACAA,4BACAA,4BACAA,sDACA,8BAEAA,aACAlf,GAEA,2BAiBAxB,eAiKA,QACAqW,kBACA/mB,qBACAA,kBACAA,mBACAA,oBACAA,cACAA,sBAGAyxB,yBACA,mBACAzoB,eACAyT,iBACA8S,gBACAQ,+BACApe,+BACA8d,SACAlb,QACA,OACAqN,sCAh9BA,KAi9BAna,sCAh9BA,MAk9BAzH,qBACA0xB,OACA9P,cACAna,kBAEAgoB,QACAlb,UAGAod,sBACA,yBACA3oB,iBACAyT,wBACA8S,8BACAQ,qCACApe,oCACA+K,OACA8M,UACAD,YACAxgB,mBACA,MACAygB,aAEAD,aAEQ,MACRA,aAEAC,aAEA,QACA1Q,cACA8Y,gBACAC,gBACAjQ,QACAna,WAEAzH,mBACAA,0BACAA,wBACAypB,8DACAA,kEACAA,6BACAA,8BACAA,mBACAA,iBACAzpB,6BAAwCypB,KAExCqI,0BACA,mBACAvC,sBACAQ,mBACApe,mBACA+K,aACA8M,iBACAD,mBACA,MACA,mCACAxf,gCACA2S,KACA+M,yBACA1f,0BACA,QACAA,QACA0f,QAEA1f,UAGU2S,MACV+M,GACAA,6BACY1f,GACZA,8BACYwf,MAEZxf,aACAyf,GAFAC,YAGAA,QAEA1f,UAIA,WACA+O,cACA8I,SACAna,YAGAsC,aACAgmB,YAFAtG,YAGAsG,gBACAA,gBACAA,iBAEA,KACA,eACA,yBACAS,uBACAT,0BACAA,yBACAA,0BACAA,yBACAxG,mBACAwG,sDACAA,qDACAA,kBACAA,gBACA,QACAA,qBACAA,0BACAA,2BAEAA,uBACAA,yBACAA,iCAKAA,qBACAA,qBACAA,oBACAA,qBAIAgC,2BACA,sBACAxC,kBACA,MACA,OAvbA,gBACA,eACAvmB,YACAyT,YAEA,QADAA,mBAEA,OACAmF,QACAna,UAGA,wBACAsoB,gBACApe,eACA+K,WACA8M,WACA,aACA5H,QACAna,UACM,CACNma,QACAna,UAkaAuqB,EACApQ,6CACAna,+CACAwqB,sBAEAtgB,WACA+K,YACA8M,6BACAD,gCACA9M,sBACAA,uBACAA,UACAA,YACAA,kBACAA,iBACAA,kBACAzc,yBAEAyc,0CACAA,mBAEAA,8CACAA,gBAEAA,0DACAA,8DACAzc,wBACAyc,sDACAA,kDACAA,iBACAA,eACAiV,mBACA9P,cACAna,iBACO2iB,IACP8H,kBACAC,qBAEAnyB,oBACAA,4BACAA,0BAGAoyB,wBACA,sBACA3V,iBACA8S,2CACAQ,8CACAhe,MACA6P,SACAna,UACAsM,oBACA1G,sBAEAqkB,kBACA9P,cACAna,iBACO2iB,OACP8H,kBACAC,kBACO1V,MACP1T,GACA/I,eAGAqyB,uBACA,mBACArpB,kBACAyT,sCACA8S,8BACAQ,IACAnO,cACAna,iBAEAgV,IACAzT,mBACA+mB,qBAEAA,sBAGA/vB,oBACAA,yBAGA+vB,8DACAA,kEAGAA,2CACAA,8CACAA,oCACAA,oCACAA,mBACAA,iBACA/vB,8BAAyC+vB,KAEzCuC,2BACA,mBACA/C,sBACAQ,mBACApe,mBACA+K,eACA8M,gBACA,MACA,oCACAC,iCACA1f,4EACA0H,+EAGA8X,yBACAE,0BACAD,IACAD,OACAE,QACAA,QAEAF,QAEYA,GACZE,QACYA,KACZF,SAEA9X,QACAA,QAEA1H,SAKA4H,2BACAA,4BACAA,cACAA,eAEA3I,IACA0T,GACA/K,8BACAA,4BACAA,sDACAA,yDAEAA,YACAA,WACAA,2BACAA,+BAIA4gB,yBACA,mBACAvpB,qBACAyT,oBACAA,0CACAA,mBAEAA,8CACAA,gBAEAA,0DACAA,8DACAzc,yBACAyc,sDACAA,kDACAA,iBACAA,eACA1T,6BAEAmI,0DAEAwgB,oBACA9P,cACAna,iBACO2iB,IACP8H,kBACAC,qBAEAnyB,4BACAA,wBAEAA,eACAA,eAGAwyB,kBACAxyB,eACAyyB,qCAIAC,IACAC,uBACA,mBACA3pB,mBACAyT,uBACA8S,kCACAQ,iCACApe,gCAQA,GAPA3I,IACA2I,iBAEAA,SACAA,SACA3R,4BACAA,oBACAyc,EAGA,SACA,mBACAC,sCACQD,kBACRC,OAEA1c,gBACA+C,iBACA,qCAGAmO,QACA0Q,oBACAna,sBACAjC,mBAEAwD,IACAugB,kBAEAA,UACAA,UAQAA,2LACAC,eACAA,sBAGAoJ,wBACA7vB,6BACA,cACA2uB,MACA9P,cACAna,kBAEAsB,mBAt+BA,kBACA,aACA,WACAikB,KAEA,CAFA,MACQhkB,GACRgkB,qBAEMA,WAEN,WACAA,aAEA,CAFA,MACQhkB,GACRgkB,0BAGAA,0CAw9BA6F,SAGAvF,mBACA,qBACAtkB,kBACAyT,mBACA8S,WACAQ,YACApe,UACA+K,WACA8M,uBACAD,sBACAvpB,8BAGA0xB,yBACA9P,QACAna,UACO2iB,OACP8H,cACAC,gBACOppB,MACPhG,8BACA,gBACA0O,YACA8e,aACAC,MACAC,MACAC,KACAnB,KAEAkB,OADAC,WAGAX,YAEAS,OADAE,UAEAD,OAEAiB,OACA9P,SACAna,YAEAiqB,yCACA9P,WACAna,aACS2iB,OACT8H,iBACAC,mBACSppB,WAKT+pB,IACAnlB,gBACA,mBACA3E,eACAyT,eACA3I,iBACA9B,qBAEA8B,gBACA9B,oBAEA8B,eACA9B,mBAEA8B,YACA9B,gBAEA8B,YACA9B,gBAEAA,oDACAhJ,2BACAgJ,KA76CA,QA66CAhS,oCACAyX,WACAsb,aAGA/pB,4BACAgJ,kDAEAA,gEACAA,8DACAhJ,cACAgJ,UAz7CA,SAy7CAhS,uCAGA4N,kBACA,mBACA5E,eACAyT,eACA3I,iBACAkf,qBAEAlf,gBACAkf,oBAEAlf,eACAkf,mBAEAlf,YACAkf,gBAEAlf,YACAkf,gBAEAA,0BACAhqB,2BACAgqB,KAh9CA,QAg9CAhzB,cACAyX,WACAsb,aAGA/pB,4BACAgqB,yBAEAA,uCACAA,sCACAhqB,cACAgqB,UA59CA,SA49CAhzB,iBAKAizB,IACAC,kBACA,kBAGA,KASAxW,EACA8M,EAVAzgB,eACAC,iBACAyT,qBACA8S,yBACAQ,2BACApe,sCAGA,QAGA5I,YACA2T,uBACA8M,yBAEAxpB,cACA+I,YACA/I,wCACA0c,cAEA1c,yCACAwpB,kBAKA2J,oBACAnzB,eAhhDA,SAghDAA,uBAGAA,iBAxwCA,kBACA,wEAuwCAsU,kBAphDA,OAohDAzF,KAEAukB,kBACA,WACA3W,0CACA8S,KACAvvB,gBAGA+I,oBAGA/I,gBAGAA,iBACA0X,sBACA1O,eACO,IACPD,SACAwmB,mBACQxmB,aACRwmB,qBACQxmB,WACRwmB,oBAEAvvB,sBAEAqzB,sBACA,gBACA5W,WACA,qBAGA,yEAEA7Z,4BAGAmG,YAGA,KAEA4I,EAFA4d,gBACAQ,iBAEAhnB,iBAEAhG,gCACAgtB,yBAIAA,yBAGApe,EADAhO,sDACAwQ,EAEAmf,gBAEAnkB,aAMO,IAHPsjB,oBACAc,gBACAC,aAMAzqB,mBACA/I,cACAA,iBACA2R,QACA3R,iBACAyvB,uBAGAgE,qBACA,kBACA,qBAGA,qBACA1qB,oBAIO,IAHP0pB,oBACAc,gBACAC,aAIAzqB,iBACAhG,iCAEAgP,wBAAiD2hB,aAGjD3hB,yBAAmD2hB,UAEnD1zB,kBAEA2zB,oBACA,kBAGA,mBACAlX,gBACA1T,iBACAhG,wCACA0Z,0BAGAA,kBAEAzT,IAGAD,mBACApF,wBACA3D,gBAEAA,gBACAA,iBACA0vB,qDAEA+C,oBACAc,gBACAC,eAKAI,IACAC,mBACA,IAkBA/hB,GAjBA2K,kBACA8S,sBACAQ,oBACApe,gBACA+K,cACA8M,EANAxpB,aAMA8Y,YACAyQ,WACAE,UACA1f,YACA0H,aACA8e,SACAC,SACAC,KACAC,KACAC,YACAC,aACAC,OAIArH,gBACAA,kBAEAxpB,eAEA0wB,aACAC,IAFAF,eAEA/d,0CACAke,mDAEA,4BACAG,IACAh5B,oBACAN,qBAEAu5B,gBACA,gBACA5a,EACAma,aACAQ,YAEA,WACAve,EACA+W,aACAwH,YAEA,WACAvU,EACAiN,aACAsH,YAEA,WACAvT,EACAgT,aACAO,YAEA,EAGA,eAEApiB,EACA4a,SACAE,SACA,WAGArT,EACA,2CACAya,MACA,MAEAG,OACAjnB,UACA,IACA2S,IAEA6M,IADAxf,QAGAyf,IAEAC,gBADAhY,UACA,GAEA,WACA+K,EACA,2CACAqU,MACA,MAEAG,MAEAvH,UADAhY,UAEA,IACAiL,IAEA+M,IADAhY,QAGA+X,IAEAD,eADAxf,UACA,GAEA,WACAyI,EACA,2CACAqe,MACA,MAEAG,MAEAzH,UADAxf,UAEA,IACA2S,IAEA6M,IADAxf,QAGAyf,IAEAC,gBADAhY,UACA,GAEA,WACA+L,EACA,2CACAqT,MACA,MAEAG,OACAvf,UACA,IACAiL,IAEA+M,IADAhY,QAGA+X,IAEAD,eADAxf,UACA,GAEA,WACA5P,EACA,MACA,8BACA02B,MACA,MAEAG,MAEAvH,SACA1f,IAFA0H,UAEA+X,OAEAwH,MACAA,MACAD,QACAR,MACAxmB,SACgBgnB,kBAChBF,OAGA9mB,SAEAgnB,QACAtH,QACAhY,SACAgY,WAGAhY,SACAgY,UAGA1f,YACA2S,IAGA+M,IAFAhY,OAGA8X,IAFAxf,QAGYA,MACZ2S,IAEA6M,IADAxf,QAEY0H,OACZiL,IAEA+M,IADA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T,QACApe,OACA+K,WACA8M,YACAD,sCACA,SACAwG,OACApe,MACA+K,MACA8M,OAEA,WACAzf,OACA+O,eACA8I,sBACAna,0BAEAgK,OACAqH,eACA8I,oBACAna,uBACO,SACP8oB,OACAzX,eACA8I,kCACAna,uCAEA+oB,YACAC,aACAD,4CACAC,8CACA,wCACAE,uBACAD,gBACAA,iBACAC,wCACAA,uBACA,+BACAE,mBACA/e,2BACA6e,4BACA7e,KACA6e,6BAIA,IAMAO,GACA5mB,GAGAC,GACAC,GACA2mB,GACAjf,GAbA4e,WACAC,YAGAC,MACAC,KASAD,eACAA,KACAE,KACA3mB,KACA4mB,MACQH,OACRzmB,OACAymB,KAEAG,GADAD,sBAEQF,SACRzmB,KAEA4mB,GADAD,sBAGAA,sBACAD,KACA3mB,KACAE,KACA0H,MACQ+e,OACRzmB,OACAymB,KAEA/e,GADA5H,sBAEQ2mB,SACRzmB,KAEA0H,GADA5H,sBAGA,qBAGA,eACA,YACA8mB,iCAKA,8DACA,+BAEAV,IAOA2E,2BACA,mBACA,+BAEArsB,iCACAhJ,aACAA,mBACAA,cACAA,uBAIAA,MAOAs1B,wBACA,mBACA7Y,eACA8S,aACA,+BACA,cACA5d,aAjqFA,SAiqFA5I,EAEAC,WADAD,UAjqFA,OAmqFAmI,WACAwe,YACAA,WACA1mB,mBAEAkI,YACAwe,aACAA,aAGA,cAIA6F,aACAtkB,cAMA,eACA,gEAEA,GADA0C,YACA5K,uBACA,4FAEA/I,eACAA,mBAA8BwC,aAC9BxC,gBACAA,iBACAA,iBACAA,cACAA,kBACAA,iBACAA,cACAA,eACAA,YAEA,OA9xFA,mBACA,4BACAgJ,WACArF,sCACAspB,cAEAD,GAwxFAvd,MACA+lB,WACAz3B,iBACA,IAEAwxB,GAFAvmB,eACAyT,0BAEA,SAIA,IADAzT,UACA,WAQA,GAPAhJ,cAGAuvB,6BACAvvB,qBAGAuvB,GACA,OAIAA,aACU,yCACVA,kBAEAvvB,iBAEK,CACLw1B,WACAz3B,kBACA,WACA,KAGA,YACAiC,kBACA,oBACA+vB,gBAMA,IALAA,6BACAA,yBAIAA,yCAEA,YADA/vB,aAKA,cASA,YAPA4P,WACA5P,UAh8DA,gBACA,wBACAgJ,UACAyT,4BACA8S,qBACA,4BACAA,wBAEA9S,EAw7DAgZ,KAIAz1B,cAOA,yBACA0c,wBACA1c,kBACAA,WAMA2R,YACAA,YACAA,cACAA,wBAEAA,0CACAA,WAGAA,oBACA8K,oBAEA9K,uBACA8K,eACAA,YAIAsT,6CACA/mB,SAIA2I,mBACAA,6BACAA,qDACAA,YAEK,CACL6jB,WACAz3B,kBACA,mBACAwxB,kBAIAQ,GAn9DA,gBACA,IACA/mB,EADAD,mBAIA,IACA,MACAwmB,GACAQ,GAGA,4CAGA,QAFApe,eACA+K,IACAA,QACA,+CACA6S,KACA,MAEA7S,KAGA,OACA,IACA6M,SACA,YA7EA,oBACA,SACAvgB,KACA,aAAwBumB,KAAYA,MACpC9S,uBAEA,SAuEA9L,GAFA4e,KAEA,IACA,uBAEA,KADA9S,eACA,aACA,0BACA,2BACA1S,QACAgmB,YAMA,OACA,IACAQ,GACAC,GAFA/e,qBAGA,SAAoB+e,MAAaA,MAEjC,qBADAD,cACA9T,IAKAzT,cAHAunB,MAGA9T,GAGA1T,oBACA,OAKA,CALA,MAIM0nB,IACNznB,IAEA,SAu5DAxB,IACAmK,IACA+K,IACA8M,IACA,SAEAxpB,SA7+DA,kBAMA,QALAgJ,KAIAumB,sBACAA,aAGAvmB,sCALA,SAMAumB,eANA,MAQA,mCAAsChT,yBAi+DtCmZ,OACA,OAt5DA,gBACA,QACA1sB,IACAyT,IACA,gBAEA,EACAzT,KACA,WAGA,EACAD,OACA,WAGA,EACA0T,KACA,WAGA,EACA1T,KACA0T,KACA,WAGA,EACA1T,KACA,WAGA,EACAA,KACAC,KACA,WAGA,EACAD,MAGA,OACAwrB,SACAE,SACAC,UAy2DAntB,KACAoK,YACA+K,YACA8M,YAEA/M,cACA8S,aAEA9S,aACA8S,YACAA,aAEAvvB,eAEK,CACLw1B,YACAz3B,iBACA,mBACA0e,WACA8S,iBACAQ,KACA/vB,uCACAuvB,KACAA,gBAIAQ,UAEA/vB,oBACAA,uBACA,oCACAuvB,KACA5d,kBAEAA,YACAA,iCACA3R,aACA2R,+BACAA,+BACA8d,QACAzmB,6CAEK,CACLwsB,YACAz3B,iBACA,WACA0e,aACAA,cACAA,eACAzc,eAIA,sFACA+vB,mBACAhe,gBACA6f,gBACAC,iBACA/Y,oBAEA9P,yBAA6CA,aAC7CA,YACAA,WACAA,WAIA,wBAIA,oCACA0T,0CACA1c,mBACA2R,oBACAoe,qBACAR,IACA7S,kBAGA/K,YAIA4d,KACA5d,uKACA+K,iBAjBA,MADAqT,kCAkBA,GAGK,CACLyF,WACAz3B,iBACA,iBACAiL,cACAA,eACAA,4BACAhJ,kBAEK,CACLw1B,YACAz3B,iBACA,2BAGA,oBACA0e,eACA8S,cAGAQ,gBACApe,gCACAA,YAn0FA,orCAo0FA,kDACA6X,2CACAD,8CACAE,8CACA1f,2CACA/J,kBACAA,eACAA,cACAA,gBACAA,gBACAA,wDACAA,aACAwpB,kBAGAiG,QAGAM,iCAGAxb,SACAvU,mBACAA,YACAyc,2DACAA,6CACAA,6DACAgT,SACAhT,UACAgT,wDAEAhT,UACAgT,wDAEAhT,cACAgT,yBAEAhT,aACAgT,SAEAhT,mBACAgT,UACAve,aAEAuL,qBACAgT,sDACAA,wDAEAzvB,cACAA,cACAA,6BACAyc,YACAzc,YAEAA,qBACA8T,aACA9B,KA19FA,QA09FAyK,SACAkZ,UAGAlD,KA99FA,QA89FA,IAEK,CACL+C,cACAz3B,iBACA,cAGA,eACAiC,cACAA,oBACA,8BACAgJ,GACAA,4BAEAuL,sBAEK,CACLihB,eACAz3B,iBACAiC,YACAA,eACAA,cACAA,iBACUA,aACVA,6BACAA,eACAA,eACUA,gBACVA,sBACAA,kBACUA,YACVA,eAQK,EACLw1B,iBACAz3B,iBACA,yBACAivB,KAOK,CACLwI,kBACAz3B,kBACAgU,oBAhXA,GAoXA,0CAEAd,KCrsGA,WAiBA,QAGA,yBACA,2BAGAuG,gDACA,OAEA,qBAYAA,mBAJA,WACA,kDAIAoe,mCACAA,8CACAjyB,sCA1CA,GCDA,SAMAnM,KACA,kDACA2b,mBACA,sCACAC,aACA,yBACAC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+BACA,8BACA,wBACAsU,iBACAA,oCAEAA,GAGAtU,+BACA,oBACA,aAEA,+BACA,yBACA,kBACA,2CAGA,kCADApC,mBACA,mBACKmS,WAEL6G,QACApV,iBACA9D,uBACAC,oBACA,6BAEA,QADAue,cACAA,MACA,QACA,kBACAvC,SACAva,6BACAwX,kBACA,WACA+C,SACAva,6BACA1B,UACAkZ,YACA,WACA+C,QACAva,4CACA,gBACAsV,YACA4E,qBACA1C,yDAEAA,oBAIAsF,QAGAtF,UAGA5W,mCACAsU,UAIA,QAHA+E,uBACAzC,QACApV,IACA6X,cACA,kCACA,eACA1b,6BACAC,4BACAF,2BACA,OACAkZ,yBACMhZ,IACNgZ,sBACM,CACN,IAAuD,IAAvDnZ,6BAAuD+D,GACvD,OAEAA,KACAoV,SAGAA,cACAnZ,OAAsB+D,IAItBxB,oCAEA,GADAsU,MACA,mBACA,mCAKA,QAHA+E,uBACAzC,oBACApV,QACA6X,0BACA,wDACA,GACM,wBACN7X,qBACM,CACN,8CACA7D,YACAC,YACA,YAEA,SACQA,SACR4D,UAGAA,qEAdAA,6BAkBA,iBAGAxB,4CACAsU,MAGA,QAFA+E,uBACAzC,IACAyC,oBACA,qBACA3b,eACA2b,SACA,cAGM,0BACN5b,MAEAmZ,MALAnZ,kBAKA,CAEA,UAIAH,cAKA,eAEA,aAEA,sCACAqc,4BACAL,wBACAI,kCAEAlc,cACA,uCACAic,iBAGA,8BAGAjE,cACA,qCACA,SAGA,IASA9X,EATAkZ,0BACApV,0FAEA,yBACA,SAMA,YAEA,gCAIAxB,gBACAsZ,wBACAA,YACA3P,cACA4P,gBACAzV,iBACAkvB,cAGA3Z,sBAKA5b,gBACA,mBACA,iBACA,OACI,KAGJ,mBAJA,CAQA,aAGAH,wBACA,gBACA4e,eACA9c,IACAgd,mBACA1H,KAaA,IAVA,sBACAA,IACAwH,mBAEA9c,MAEA,qDACA8c,MAGQ9c,MAAYA,EAGpB,UAFAia,gBAIA,WACA7X,SAIA0a,KAHAxe,YAKAgX,wBACA/W,GACAA,KACAC,gBAEAA,eAIAoC,KAA4BoQ,iCAGrB,OACPpQ,KAA4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CO,GACPpW,wBACA,iCACAC,+BACAmW,IAEAA,mCACO,GACP1U,uBACAA,iBAEG,CACHw1B,iBACAz3B,oBACA,iCACAiC,mDAEG,CACHw1B,iBACAz3B,oBACA,WAEA6e,6DAEA,4BACAjZ,qCACA,oDACA,uCACAkL,KACAgO,uBACA,mBACA,2BAEY,CACZ,6BACAvL,+BACAwL,kCAJAA,qBAMAjO,YAGA7O,uBACAA,qEAEG,CACHw1B,iBACAz3B,oBACA,WAEA6e,6DAEA,4CACAD,mCAEA3c,qEAEG,CACHw1B,kBACAz3B,oBACA,iCAEG,CACHy3B,eACAz3B,iBACA,gDACA,4BACO,iBAEJ,CACHy3B,gBACAz3B,kBACA,+DAEA4e,KACAC,MACA,MACA5c,wCACA,IACA8c,GADAvJ,OACA,GAEAuJ,wBACAH,WACYG,8BACZF,eAIAD,yBACAC,gDAEA,8BACA,yBAEA,QADA/N,kCACAlL,2BACA,iBACA,sBACAkL,iCAEA,YAEA,uCAEG,CACH2mB,cACAz3B,oBACA,gDACA,kCACO1F,gBACP,kBACO2R,WAEJ,CACHwrB,kBACAz3B,sBACA,mCACAiC,6CAnLA,kBAA4C,cAAkB2D,2BAAkC5F,oDAAgFlD,OAAoBA,EAmLpM2hB,IAA2Fje,SAExF,CACHi3B,iBACAz3B,oBACA,WAEA6e,6DAEA,qDACA5c,0BACA2D,qCACAgZ,0CAEA3c,qEAEG,CACHw1B,cACAz3B,iBACA,2CACA,0CACA,gCAEA,QADAO,yCACAA,sBACAA,uCAEG,CACHk3B,mBACAz3B,oBACA,wBAEA6e,yBACAlI,WACAmI,QACAhO,SAEAiO,KACAC,iBACA,UAIAD,GAHAD,uBAGAA,wBAFAA,cAIAE,6CAEA,IACAzL,GADAtR,yBACAg5B,2CACAznB,wCACA,6BAEG,CACHikB,aACAz3B,kBACA,gEACA4e,gEAEAC,cACA,sGAEA,mCACAC,0BACAhO,0BACAiO,gDACAC,8BACAhO,sCACAuC,oDACAhT,4BACA,iBACAiT,uBAEAA,aAES,eACTvR,8BAEAA,6BACA1B,+CACAA,yBAGA,aAIAzD,EAlQA,GAqQA,gBACA,2CACA,oBACAwU,YACA/Q,UACMoV,oBACNrE,uBACA/Q,0BAGAA,kBAEAA,GACG,IA2BH9G,aAIA,iBAEA,aAGAmM,sCACA5F,WAEAvG,yBAEA,MAA6a,cAA2B,oBAA0B,SAAc,gCAA2C,OAAxf,gBAAiC,SAAegmB,KAAehB,KAAgBriB,SAAoB,IAAM,mCAA0CqjB,uBAA4ChL,iBAAqB4D,iBAAlCoH,MAAmL,CAAjJ,MAAuChP,GAAcgO,KAAWriB,YAAsB,KAAMqjB,uBAAqD,CAArD,QAAqD,cAAsB,SAA6HxlB,MAAuC,6EAElkBub,aAAiC,gBAA2C,YAAgBf,WAAkBA,KAAO,WAA2BgL,8BAAwDA,kBAAgC,6BAAuD7Z,kCAA+D,uBAAyD,2BAAqE6O,UAA6D2B,GAAzhB,GAIA1c,IAFA4Z,MAMApX,IAFAoX,OAMA9C,IAFA8C,OAMAR,IAFAQ,MAQA,cAAuC,0BAAuCsF,WAE9E,cAAmC,qBAA0B,8BAA0CxC,WAAgBA,IAAOiC,UAAoB,SAAsB,qBAExK,gBAAkD,qBAA0C,yDAE5F,SARAxe,EAFAyZ,OAUAsF,4BAEAN,gBACA,+DAEAF,UAEAnW,aACAA,eAGA2O,aACA,gBACA,WAEAwH,UAEAnW,eACAA,cACAA,kBACAA,kBACAA,8BACAA,4CAEAA,0CACAA,yBACAA,sBACAA,6DACAwS,aACAkF,wDAGA1X,6DACAwd,gDACAhL,qCAGAxS,iEACA,gBACA,0BACA,SACAwd,kCAEAhL,yDACA,IACAA,qEACU,CADV,MACUgK,UAGVxc,+DACA,YACA,cAMAwS,iBALArY,YACAA,cACAA,UACAA,YAEA,IAGA6F,sCAGA,aACAw1B,wBACAz3B,iBACA,WAEAiC,yDACAoW,iBAEApW,uDAEA,GADAoW,eACAA,iBACA,yBACA,aACAsB,sBACAtB,mEACW,QAIR,CACHof,qBACAz3B,iBACA,WAEAiC,4DACAoW,iBAEApW,0DACAoW,eACAA,qCAGG,CACHof,YACAz3B,iBACAiC,kBACAA,kBACAA,kCAEG,CACHw1B,aACAz3B,oBACA,yDACA,sBACA,4BACA,0EACA,yCACA,sCACA,kBAEA,gCACA,8BACAye,0CAEAA,yCAEAxc,qBAEAA,wBACAA,uBACAA,2EACAA,kBAEG,CACHw1B,gBACAz3B,kBACA,+DAEAyf,uBACApH,kBACA5D,sBACA,aACArY,sBACA6iB,SACAG,OACA3O,OACA,uBAEA,wBAEA3T,UAEA2hB,OACAhO,OAEA,6BACA,QACAa,gBAEA,4BAEA9Q,SAKA,UAHA4e,QAGA,YAEA,iBAJA3O,QAIA,GAEAoO,UAEA,OAGAvN,SAHAmN,QACAhO,SAGAa,0BAEA,cACAwN,SACA,0BACArO,iBACAa,gBACAA,kBAEAA,kBACAA,cACAqF,YAEAmI,8BAEAA,oCACArO,mBAEA,CACAiG,sBACAhN,gBACAsM,WACAS,YACAnH,UACAuU,WAIG,CACH4T,qBACAz3B,iBACA,8BACA,wCACA,sBACA,uBACA,8BACA,kCACAyf,IAEG,CACHgY,eACAz3B,iBACA,4BACA,2BAEA,CADAiC,0BACAoW,KAEG,CACHof,eACAz3B,iBACA,4CAEG,CACHy3B,wBACAz3B,kBACA,WAEAyf,kCACApH,oBACAoH,kCAEA,wBACA,aACA/O,QACA5T,OAEAwU,wBACA/Q,qBACA,aACAA,EACU+Q,iCACV/Q,aAEAA,kBAGAnE,6DACA6iB,wCACA,sBAEG,CACHwY,sBACAz3B,kBACA,8EACA,YAEA,OACAkY,OAAiBoiB,4CACjBz/B,KAAey/B,wCACfY,UAEA,0CAGA,QAFAzc,SACAriB,aACAqiB,2CACA,yBACAA,kBACAriB,YACYqiB,wBAIZ,MAFAriB,GADAqiB,yBACAga,wCAEA,CAGAhZ,sBAEAhL,IAEG,CACHgjB,oBACAz3B,kBACA,WAEAyf,mDACAhB,KACAriB,uBACA,+BACA6iB,kBACA,IACAvO,oBACA5T,UAEAyD,OACAC,EAFA1D,KAEAuL,kBAEAuW,SAKAH,OAHAG,KACAre,OAEA,GAEAke,aACAA,eAEAA,IAEG,CACHgZ,qBACAz3B,kBACA,qBACA,WACA,wCACA,WACA,8BAEA5D,wCAEAgjB,EADAvJ,OACA,GAEApF,IACA,eACA,sDAIAA,EAFAoF,QAEA,GAEA,oBACA,iCACA4J,YACApH,yBACQoH,oBACRpH,qCAGG,CACHof,qBACAz3B,oBACA,+DACAye,2DACAriB,0DAGA,GADAd,iCACA,4EAGA,+BACA,WACA,YACA2G,mCACA,kCAAiDi5B,OACjD,6FAEA,kBACAzmB,6CACA4D,gBAEA,kBACAoG,6CACAgB,gBAEA,6BACAhP,gBACAA,cACAwO,oBACAA,oBAGAA,oBACAhd,iBACA8rB,yBAGG,CACH0J,eACAz3B,kBACA,8DACAyf,+EAOA,GALA,qBACAA,IACAhL,MAEAnZ,qBACA,SACA,4BACA2G,sDAEAA,0BAEAA,iBAEG,CACHw1B,aACAz3B,iBACA,oFAEAyU,iBAEAgL,kBACAhB,SACAriB,OACA6iB,OAMA,GAJAhd,iBACA,uBACAA,kCAEA,gCACA,OAEAA,kFACAA,sBAEA,IAGAyO,GAHAD,wFACA2O,yEACA/G,+BAGA3H,uCAMAzW,EA/ZA,GAkaA,gBASA,2BACAmc,gBAEAnc,cAGAR,UACAA,aAIA,iBAEA,aAGAmM,sCACA5F,WAGA,iBAAiC,gBAA2C,YAAgBnG,WAAkBA,KAAO,WAA2BC,8BAAwDA,kBAAgC,6BAAuD8L,kCAA+D,uBAAyD,2BAAqE/L,UAA6D6D,GAAzhB,GAEA8X,oBAAsD,iCAAkD,2CAA8D,eAA0B,+BAA4C,qBAAuB,EAA2B1C,SAA4C,eAA4B,eAA4B,YAAuB,uBAA4B,EAAoBxX,WAQzc,gBAAkD,qBAA0C,yDAE5F,gBAAkD,MAAa,sFAAyF,uDAIxJ,kBAGA,aACA,iBAEA3B,sEAGA,OAXA,gBAA2C,kCAA+D,yFAAuGmZ,0CAAyEtM,aAAexG,qDAA6EtC,oEAGtX8S,MAQAqF,MACA4hB,iBACAz3B,oBACA,sBACAwV,8FAEAvT,gBAGG,CACHw1B,aACAz3B,iBACA,WAEG,CACHy3B,YACAz3B,iBACA,YAEG,EACHy3B,YACAz3B,sBAKAtC,EAnCA,CARA,cAAuC,0BAAuCkb,WAF9ElH,CAFA4B,MAgDCsF,eAEDrD,mBACAA,eAEA9b,aAIA,iBAEA,aAEA,IACAE,EADAkc,yBACAlc,yBACA,CAAW+b,wBAAgBC,qBAAsCnF,gBACjE,cAA0B,iDAC1B,cAEA,aAAwBvO,mBADxBtI,OAEA6W,wEAGA5K,sCAA+C5F,WAC/C,YACA4V,QACAlc,OACAgY,cAEA,cACA,2BACA,iBACAoB,EAEA,OANA+C,OAMArF,oCACAvO,sBAEAuO,8BACA7W,8BACAsI,kCACAsT,cAGA/E,6BACA,WACAvO,4BAEA,SACAlF,8BACAo+B,UACArd,oBACA,IACA,WACAvI,yCAMA,CANA,MAEA3b,GACA,iCACA,OAEA,YAIA4W,mCACA,4BACA,qBAEAvO,4CACAvE,mBAGA8S,qCACA,0CACA,+BACA,iCACA,MAEA5W,eACAA,kBAGA,WAGA4W,6CACA,QAAgCsC,UAChC,QAAiCpV,oBACjC,SACA7D,IACA,oDACA,wBACA,mCACAD,UAEAE,iBACAF,kCAEAC,OAEAD,GAEA4W,8BACAvO,kCACAsT,aAEA5b,+BAEA6W,uCACAvO,4CACApI,uBAGA2W,qCACA,mCACA,KACA3W,WAFAD,KAEAkZ,SAEA,CACA,+CACA7Q,sBAGAuO,uCACA,wCACAvO,8CACA,wBAEA,+FAEAsT,sBAEA/E,8BACA,0CACA,qBACS,IAETA,uCACAvO,kCACAsT,uBAGA/E,iCAEA,GADA7W,kCACA,yBACA,oCACA,0CACAsI,oBACA6Q,mBAGA7Q,eAIAuO,oCACA,QAAoCsC,MACpC,4CACAhZ,aACA,sBACAA,uBAEA,SACAA,cAEAA,IAEA0W,oCACAvO,yBAEAuO,gCACA+E,gBACAA,qBAEA5b,kCAEA6W,gCAEA,QADA,QAAgCsC,OAChCA,GACA,SACA,YACA,qBACA,iBAEA,mBACA,6CACA7Q,wDACArI,eACA8D,mBAEAA,GAEA8S,8BACAvO,yCACAA,eAEAuO,iCACA,WACA5W,KACAC,KACA0b,sBACAzb,6CACAF,6BACAC,kCAGAA,sBAIA,yBAEA,sBACAk0B,8EAGA,iBACA,UAEA,+DACA3V,cAGAxe,EACA4E,mBACA,iCAEA+pB,mBACA,aACA,EACAzuB,8DACA,GAEA,IAEAgkB,oBACA,WACA,sBACA1F,yBAEA,YACA9c,2BACA,gBACAA,wBAEAoC,gCAIA8S,EA7NA,CA8NCoF,WACD,cACA,gBACA,WACA,IACAp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DA,6CACA,+CACA,iCAGAoL,6BAMAF,GA3IA,CA4ICsF,WAqLD,kBACA,OAGA,OAIG3B,EAJHsK,IACA0Y,MACAiE,YACA/0B,aAJAmY,kCAKG,kCACH,gBACAA,mBACAtL,iBAGA,8BAIA,QAHAgC,QACA,aAEA4C,kBACA0G,gBACAhO,GACA7O,uEAEAA,2DAGA6O,GACA7O,qEAEAA,qEAGA,GAdA,GAeG8c,GAGH,iBACA,6CAEA,oCAEA/N,GADAwE,QACA,GAEAjC,MACA,kBACA,qCAEAtC,GADAuE,QACA,GAEA,4BACA,oBACAqW,qCACAtY,yCAIA,6DACAtR,4DACA2D,0BACA3D,+DAEAA,oBAGA,iBAEA,6DACA,yCACA,WACA+O,KAEAuC,+BAEAqU,GADApS,QACA,GAEA,6BACA,qCAEAqW,GADArW,QACA,GAEA,OACA,oBACApS,mCACA4b,wCACAhO,gBAGA/O,yDACA2D,0BACA3D,kEAIA,cACA,8BACA8c,MACA,gBACA,uBACA/N,6BACA+N,wCAEA9c,gDACA2D,0BACA3D,2DAEAA,0DACAA,mBAGA,iBACA,YAEA6c,YACA7c,6CAEA,qDACA,kFACA+O,sBAEAA,IACG,IACH/O,8DAGAA,4DACAA,mBACA2D,4CACA,eACA+P,8BACA,aACAoJ,4DAIA,cACA,OACA0Y,eACAiE,YACA1X,QAAc,iBACdgI,qBACA,qCACAhb,YACAuC,aAEAC,uCACAoU,WACA3W,SACA4W,SAEA,YACA,gCACA3jB,4BACAd,6BACA8N,mDACA2W,KACA3W,2BACA4N,GACA7N,0BACA4W,kBACA,OACA7W,kBAEAuC,mBAEU9B,wBACVR,iCACA4W,kBACA,OACA7W,kBAEAuC,mBAGAsU,kBAEA5lB,0CACAA,2DAKA,eACA,OACAw1B,uBACAkE,YACA3P,wBACA/pB,4DAKA,eACA,0CACA,WAAuBw1B,QAKvB,GAHA,2CACA3Y,uBAEA,uBACA,qCACAA,0CACM,iBAGN,YAFAA,uCAEA,CAGA,oBACAA,uBACAA,YAEAA,EAtYArO,QACAmrB,YACAC,MACAC,SACAC,UACAC,QACAC,MACAC,SACAC,QACAC,WAGA3rB,YACA4rB,UACAC,gBACAC,oBACAC,0BACAC,QAEAhF,eACAzT,sCACAgI,wBACA,wCACA/pB,0DAGAy6B,SACAjF,eACAiE,YACA1X,sCAEAgI,wBACA,wCACA/pB,0DAGA,qBACAw1B,qBACA8D,aACAG,cACAiB,aACAC,aACAj2B,YACAqd,yBACA3U,SACA2c,wBACA,uBACA/pB,wDACU,sBACVA,sDAIA,0BACA,2BACA,cACAw1B,eACAiE,YACAH,aACAC,aACAxP,qBACA/pB,6DAGA46B,KACApF,eACAzL,qBACA/pB,4BACA,uEACAA,qDACAA,4BACAA,+DAGA,oBACAw1B,iBACA8D,aACAvX,gBACAvkB,SACAusB,wBACA/pB,oDACA8c,kBACA9c,wDAIA,mBACAw1B,iBACA8D,aACAvX,QAAgB8Y,gBAChB9Q,qBACA,oCACAhN,WACAhO,SACAuC,SAEAC,oBAA8CxC,cAAoB8rB,iBAClElV,uFAAwIkV,mBACxI76B,qDACAA,6DACAA,8BAGA,gBACAw1B,iBACA8D,aACAvX,kBACAyX,YACAzP,wBACA,oCACAhb,WACAuC,SACAC,SAEAoU,8FAA+IjoB,cAC/IsC,qDACAA,6DACAA,8BAGA,iBACAw1B,QACA8D,aACAvX,QAAgB8Y,SAChBtB,yCACAxP,wBACA,wBAEAhb,gCACAuC,WACAC,SACAoU,SAEA,kBACA,cACA,6BACA,eACA3W,eACA,UACA,MACAA,aACA,UACA,YACAA,YACA,cAEAA,aAEAhP,2DACAA,4BACA,2FAA8I66B,UAC9I76B,qDACAA,4BACAA,gEAGA,aACAw1B,iBACA8D,aACAvX,sBACAwX,eACAC,eACAzP,qBACA,oCACAhN,WACAhO,SACAuC,SAEAC,+DAA4G,oBAAoBylB,UAChIh3B,uDAGA,gCACA,sCACA,kCACA,0CA0NAxI,YACAA,cAIA,iBAEA,aAGAmM,sCACA5F,WAGA,IAEAwV,oBAAsD,iCAAkD,2CAA8D,eAA0B,+BAA4C,qBAAuB,EAA2B3b,SAA4C,eAA4B,eAA4B,YAAuB,uBAA4B,EAAoByW,WAEzcsF,aAAiC,gBAA2C,YAAgBta,WAAkBA,KAAO,WAA2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ACAA,8CAEA,wBAEA,0CACAye,iCACAze,QACcye,mCACdze,QACcye,kCACdze,SAGA,oBAQA0B,6CALA,WACA6O,gCACAE,eAGA,KAIA4N,EAjGA,CAkGChlB,WAED8W,gCAAmD9W,oBACnD6/B,SACAiF,SACAj5B,UACAo4B,mBACA57B,0CAEA+4B,iBACA,WAEAnc,6DACA,YACAA,oCACA0P,4BACA1P,sFACAA,6BACAA,wCACA,sCACA,sBACAlI,sBACA,gCACAiI,kFAA2Hoc,wBAAwBxqB,wBACnJoO,0DACAC,aAEAlI,iCAGA1U,gCAEA4c,YAEAwf,iBACAp8B,6CAOA,kBAGA,kBACAoW,UAEA,uEAEA,4DACAyG,WACAA,EAGA,OAZAW,OAYA5J,MACA4hB,aACAz3B,iBACA,YAEAiC,oDACA6Q,4BACA6D,UACAmI,oBACUhM,8BACV6D,YACAmI,wBAIG,CACH2Y,aACAz3B,iBACAiC,cAEG,CACHw1B,WACAz3B,iBACA,qEACA8e,8DAEA7c,wCACAA,sCACA,QACAA,qBACQ0U,2CACR1U,uBAEAA,qEACAA,sBACAA,mFACAA,yCAEG,CACHw1B,mBACAz3B,iBACA,+CACAiC,mBACAA,6CAEG,CACHw1B,WACAz3B,iBACA,0BACA,gDACA,OAEA,gCACAiC,gBACAA,8EACAA,iBAEAA,oBACAA,qDAEAA,4BACA,UAEA,QAEA0U,GA0BA,cACA,uKACA,UACAiI,+DAEAA,8DAEAA,qDAEApe,EAnCA8Q,SAEA,UAEA,aACA,mCACA,aACA,0BACArP,yFACA,iDACAA,uDAEAA,sDAMAA,sBACAA,gBAIA2c,EArGA,CAsGC3kB,WAcD,gBACA,+DAEA2kB,uBACA,uCACAjI,QACAmI,sCAEAA,2BAEAte,mBAIA/G,gBACAA,cAIA,iBAEA,aAEAmM,sCAA+C5F,WAC/C,iBACA,aACAiC,yBACAA,cAEA,qCAEA,QADA2T,KACAlc,IAAyBA,mBAAuBA,IAChDkc,kBAEA3T,6BACA2T,YACA3T,oCAGAuT,iCAEA,QADA9b,oBACAA,OACA,SACA,SAEA,UAEA8b,wCACAI,IAEAA,SACA,SACAA,cACA,eACAl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","debug_id":"df9eb42b-09fa-5fa4-8829-4724984a43eb"}