toast-ui-calendar-vue3
Version:
Simple `@toast-ui/calendar` wrapper for vue3, pr welcomes ~
23,130 lines • 897 kB
JavaScript
import { toValue, defineComponent, markRaw, ref, watchEffect, onMounted, onBeforeUnmount, createElementBlock, openBlock } from "vue";
var commonjsGlobal$1 = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function getDefaultExportFromCjs(x2) {
return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
}
var tuiDatePicker = { exports: {} };
var tuiTimePicker = { exports: {} };
/*!
* TOAST UI Time Picker
* @version 2.1.6
* @license MIT
*/
var hasRequiredTuiTimePicker;
function requireTuiTimePicker() {
if (hasRequiredTuiTimePicker) return tuiTimePicker.exports;
hasRequiredTuiTimePicker = 1;
(function(module, exports) {
(function webpackUniversalModuleDefinition(root, factory) {
module.exports = factory();
})(window, function() {
return (
/******/
function(modules) {
var installedModules = {};
function __webpack_require__(moduleId) {
if (installedModules[moduleId]) {
return installedModules[moduleId].exports;
}
var module2 = installedModules[moduleId] = {
/******/
i: moduleId,
/******/
l: false,
/******/
exports: {}
/******/
};
modules[moduleId].call(module2.exports, module2, module2.exports, __webpack_require__);
module2.l = true;
return module2.exports;
}
__webpack_require__.m = modules;
__webpack_require__.c = installedModules;
__webpack_require__.d = function(exports2, name, getter) {
if (!__webpack_require__.o(exports2, name)) {
Object.defineProperty(exports2, name, { enumerable: true, get: getter });
}
};
__webpack_require__.r = function(exports2) {
if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
}
Object.defineProperty(exports2, "__esModule", { value: true });
};
__webpack_require__.t = function(value, mode) {
if (mode & 1) value = __webpack_require__(value);
if (mode & 8) return value;
if (mode & 4 && typeof value === "object" && value && value.__esModule) return value;
var ns = /* @__PURE__ */ Object.create(null);
__webpack_require__.r(ns);
Object.defineProperty(ns, "default", { enumerable: true, value });
if (mode & 2 && typeof value != "string") for (var key in value) __webpack_require__.d(ns, key, (function(key2) {
return value[key2];
}).bind(null, key));
return ns;
};
__webpack_require__.n = function(module2) {
var getter = module2 && module2.__esModule ? (
/******/
function getDefault() {
return module2["default"];
}
) : (
/******/
function getModuleExports() {
return module2;
}
);
__webpack_require__.d(getter, "a", getter);
return getter;
};
__webpack_require__.o = function(object, property) {
return Object.prototype.hasOwnProperty.call(object, property);
};
__webpack_require__.p = "dist";
return __webpack_require__(__webpack_require__.s = 20);
}([
/* 0 */
/***/
function(module2, exports2, __webpack_require__) {
var isArray2 = __webpack_require__(3);
function inArray(searchElement, array2, startIndex) {
var i2;
var length;
startIndex = startIndex || 0;
if (!isArray2(array2)) {
return -1;
}
if (Array.prototype.indexOf) {
return Array.prototype.indexOf.call(array2, searchElement, startIndex);
}
length = array2.length;
for (i2 = startIndex; startIndex >= 0 && i2 < length; i2 += 1) {
if (array2[i2] === searchElement) {
return i2;
}
}
return -1;
}
module2.exports = inArray;
},
/* 1 */
/***/
function(module2, exports2, __webpack_require__) {
function forEachArray2(arr, iteratee, context) {
var index = 0;
var len = arr.length;
context = context || null;
for (; index < len; index += 1) {
if (iteratee.call(context, arr[index], index, arr) === false) {
break;
}
}
}
module2.exports = forEachArray2;
},
/* 2 */
/***/
function(module2, exports2, __webpack_require__) {
function extend2(target, objects) {
var hasOwnProp = Object.prototype.hasOwnProperty;
var source, prop, i2, len;
for (i2 = 1, len = arguments.length; i2 < len; i2 += 1) {
source = arguments[i2];
for (prop in source) {
if (hasOwnProp.call(source, prop)) {
target[prop] = source[prop];
}
}
}
return target;
}
module2.exports = extend2;
},
/* 3 */
/***/
function(module2, exports2, __webpack_require__) {
function isArray2(obj) {
return obj instanceof Array;
}
module2.exports = isArray2;
},
/* 4 */
/***/
function(module2, exports2, __webpack_require__) {
var isArray2 = __webpack_require__(3);
var forEachArray2 = __webpack_require__(1);
var forEachOwnProperties2 = __webpack_require__(16);
function forEach2(obj, iteratee, context) {
if (isArray2(obj)) {
forEachArray2(obj, iteratee, context);
} else {
forEachOwnProperties2(obj, iteratee, context);
}
}
module2.exports = forEach2;
},
/* 5 */
/***/
function(module2, exports2, __webpack_require__) {
function isUndefined2(obj) {
return obj === void 0;
}
module2.exports = isUndefined2;
},
/* 6 */
/***/
function(module2, exports2, __webpack_require__) {
function isString2(obj) {
return typeof obj === "string" || obj instanceof String;
}
module2.exports = isString2;
},
/* 7 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(0);
var forEach2 = __webpack_require__(4);
var isArray2 = __webpack_require__(3);
var isString2 = __webpack_require__(6);
var extend2 = __webpack_require__(2);
var EXPRESSION_REGEXP = /{{\s?|\s?}}/g;
var BRACKET_NOTATION_REGEXP = /^[a-zA-Z0-9_@]+\[[a-zA-Z0-9_@"']+\]$/;
var BRACKET_REGEXP = /\[\s?|\s?\]/;
var DOT_NOTATION_REGEXP = /^[a-zA-Z_]+\.[a-zA-Z_]+$/;
var DOT_REGEXP = /\./;
var STRING_NOTATION_REGEXP = /^["']\w+["']$/;
var STRING_REGEXP = /"|'/g;
var NUMBER_REGEXP = /^-?\d+\.?\d*$/;
var EXPRESSION_INTERVAL = 2;
var BLOCK_HELPERS = {
"if": handleIf,
"each": handleEach,
"with": handleWith
};
var isValidSplit = "a".split(/a/).length === 3;
var splitByRegExp = function() {
if (isValidSplit) {
return function(text, regexp) {
return text.split(regexp);
};
}
return function(text, regexp) {
var result = [];
var prevIndex = 0;
var match, index;
if (!regexp.global) {
regexp = new RegExp(regexp, "g");
}
match = regexp.exec(text);
while (match !== null) {
index = match.index;
result.push(text.slice(prevIndex, index));
prevIndex = index + match[0].length;
match = regexp.exec(text);
}
result.push(text.slice(prevIndex));
return result;
};
}();
function getValueFromContext(exp, context) {
var splitedExps;
var value = context[exp];
if (exp === "true") {
value = true;
} else if (exp === "false") {
value = false;
} else if (STRING_NOTATION_REGEXP.test(exp)) {
value = exp.replace(STRING_REGEXP, "");
} else if (BRACKET_NOTATION_REGEXP.test(exp)) {
splitedExps = exp.split(BRACKET_REGEXP);
value = getValueFromContext(splitedExps[0], context)[getValueFromContext(splitedExps[1], context)];
} else if (DOT_NOTATION_REGEXP.test(exp)) {
splitedExps = exp.split(DOT_REGEXP);
value = getValueFromContext(splitedExps[0], context)[splitedExps[1]];
} else if (NUMBER_REGEXP.test(exp)) {
value = parseFloat(exp);
}
return value;
}
function extractElseif(ifExps, sourcesInsideBlock) {
var exps = [ifExps];
var sourcesInsideIf = [];
var otherIfCount = 0;
var start = 0;
forEach2(sourcesInsideBlock, function(source, index) {
if (source.indexOf("if") === 0) {
otherIfCount += 1;
} else if (source === "/if") {
otherIfCount -= 1;
} else if (!otherIfCount && (source.indexOf("elseif") === 0 || source === "else")) {
exps.push(source === "else" ? ["true"] : source.split(" ").slice(1));
sourcesInsideIf.push(sourcesInsideBlock.slice(start, index));
start = index + 1;
}
});
sourcesInsideIf.push(sourcesInsideBlock.slice(start));
return {
exps,
sourcesInsideIf
};
}
function handleIf(exps, sourcesInsideBlock, context) {
var analyzed = extractElseif(exps, sourcesInsideBlock);
var result = false;
var compiledSource = "";
forEach2(analyzed.exps, function(exp, index) {
result = handleExpression(exp, context);
if (result) {
compiledSource = compile(analyzed.sourcesInsideIf[index], context);
}
return !result;
});
return compiledSource;
}
function handleEach(exps, sourcesInsideBlock, context) {
var collection = handleExpression(exps, context);
var additionalKey = isArray2(collection) ? "@index" : "@key";
var additionalContext = {};
var result = "";
forEach2(collection, function(item, key) {
additionalContext[additionalKey] = key;
additionalContext["@this"] = item;
extend2(context, additionalContext);
result += compile(sourcesInsideBlock.slice(), context);
});
return result;
}
function handleWith(exps, sourcesInsideBlock, context) {
var asIndex = inArray("as", exps);
var alias = exps[asIndex + 1];
var result = handleExpression(exps.slice(0, asIndex), context);
var additionalContext = {};
additionalContext[alias] = result;
return compile(sourcesInsideBlock, extend2(context, additionalContext)) || "";
}
function extractSourcesInsideBlock(sources, start, end) {
var sourcesInsideBlock = sources.splice(start + 1, end - start);
sourcesInsideBlock.pop();
return sourcesInsideBlock;
}
function handleBlockHelper(helperKeyword, sourcesToEnd, context) {
var executeBlockHelper = BLOCK_HELPERS[helperKeyword];
var helperCount = 1;
var startBlockIndex = 0;
var endBlockIndex;
var index = startBlockIndex + EXPRESSION_INTERVAL;
var expression = sourcesToEnd[index];
while (helperCount && isString2(expression)) {
if (expression.indexOf(helperKeyword) === 0) {
helperCount += 1;
} else if (expression.indexOf("/" + helperKeyword) === 0) {
helperCount -= 1;
endBlockIndex = index;
}
index += EXPRESSION_INTERVAL;
expression = sourcesToEnd[index];
}
if (helperCount) {
throw Error(helperKeyword + " needs {{/" + helperKeyword + "}} expression.");
}
sourcesToEnd[startBlockIndex] = executeBlockHelper(
sourcesToEnd[startBlockIndex].split(" ").slice(1),
extractSourcesInsideBlock(sourcesToEnd, startBlockIndex, endBlockIndex),
context
);
return sourcesToEnd;
}
function handleExpression(exps, context) {
var result = getValueFromContext(exps[0], context);
if (result instanceof Function) {
return executeFunction(result, exps.slice(1), context);
}
return result;
}
function executeFunction(helper, argExps, context) {
var args = [];
forEach2(argExps, function(exp) {
args.push(getValueFromContext(exp, context));
});
return helper.apply(null, args);
}
function compile(sources, context) {
var index = 1;
var expression = sources[index];
var exps, firstExp, result;
while (isString2(expression)) {
exps = expression.split(" ");
firstExp = exps[0];
if (BLOCK_HELPERS[firstExp]) {
result = handleBlockHelper(firstExp, sources.splice(index, sources.length - index), context);
sources = sources.concat(result);
} else {
sources[index] = handleExpression(exps, context);
}
index += EXPRESSION_INTERVAL;
expression = sources[index];
}
return sources.join("");
}
function template(text, context) {
return compile(splitByRegExp(text, EXPRESSION_REGEXP), context);
}
module2.exports = template;
},
/* 8 */
/***/
function(module2, exports2, __webpack_require__) {
var extend2 = __webpack_require__(2);
var isExisty2 = __webpack_require__(23);
var isString2 = __webpack_require__(6);
var isObject2 = __webpack_require__(25);
var isArray2 = __webpack_require__(3);
var isFunction2 = __webpack_require__(26);
var forEach2 = __webpack_require__(4);
var R_EVENTNAME_SPLIT2 = /\s+/g;
function CustomEvents2() {
this.events = null;
this.contexts = null;
}
CustomEvents2.mixin = function(func) {
extend2(func.prototype, CustomEvents2.prototype);
};
CustomEvents2.prototype._getHandlerItem = function(handler, context) {
var item = { handler };
if (context) {
item.context = context;
}
return item;
};
CustomEvents2.prototype._safeEvent = function(eventName) {
var events = this.events;
var byName;
if (!events) {
events = this.events = {};
}
if (eventName) {
byName = events[eventName];
if (!byName) {
byName = [];
events[eventName] = byName;
}
events = byName;
}
return events;
};
CustomEvents2.prototype._safeContext = function() {
var context = this.contexts;
if (!context) {
context = this.contexts = [];
}
return context;
};
CustomEvents2.prototype._indexOfContext = function(ctx) {
var context = this._safeContext();
var index = 0;
while (context[index]) {
if (ctx === context[index][0]) {
return index;
}
index += 1;
}
return -1;
};
CustomEvents2.prototype._memorizeContext = function(ctx) {
var context, index;
if (!isExisty2(ctx)) {
return;
}
context = this._safeContext();
index = this._indexOfContext(ctx);
if (index > -1) {
context[index][1] += 1;
} else {
context.push([ctx, 1]);
}
};
CustomEvents2.prototype._forgetContext = function(ctx) {
var context, contextIndex;
if (!isExisty2(ctx)) {
return;
}
context = this._safeContext();
contextIndex = this._indexOfContext(ctx);
if (contextIndex > -1) {
context[contextIndex][1] -= 1;
if (context[contextIndex][1] <= 0) {
context.splice(contextIndex, 1);
}
}
};
CustomEvents2.prototype._bindEvent = function(eventName, handler, context) {
var events = this._safeEvent(eventName);
this._memorizeContext(context);
events.push(this._getHandlerItem(handler, context));
};
CustomEvents2.prototype.on = function(eventName, handler, context) {
var self2 = this;
if (isString2(eventName)) {
eventName = eventName.split(R_EVENTNAME_SPLIT2);
forEach2(eventName, function(name) {
self2._bindEvent(name, handler, context);
});
} else if (isObject2(eventName)) {
context = handler;
forEach2(eventName, function(func, name) {
self2.on(name, func, context);
});
}
};
CustomEvents2.prototype.once = function(eventName, handler, context) {
var self2 = this;
if (isObject2(eventName)) {
context = handler;
forEach2(eventName, function(func, name) {
self2.once(name, func, context);
});
return;
}
function onceHandler() {
handler.apply(context, arguments);
self2.off(eventName, onceHandler, context);
}
this.on(eventName, onceHandler, context);
};
CustomEvents2.prototype._spliceMatches = function(arr, predicate) {
var i2 = 0;
var len;
if (!isArray2(arr)) {
return;
}
for (len = arr.length; i2 < len; i2 += 1) {
if (predicate(arr[i2]) === true) {
arr.splice(i2, 1);
len -= 1;
i2 -= 1;
}
}
};
CustomEvents2.prototype._matchHandler = function(handler) {
var self2 = this;
return function(item) {
var needRemove = handler === item.handler;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents2.prototype._matchContext = function(context) {
var self2 = this;
return function(item) {
var needRemove = context === item.context;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents2.prototype._matchHandlerAndContext = function(handler, context) {
var self2 = this;
return function(item) {
var matchHandler = handler === item.handler;
var matchContext = context === item.context;
var needRemove = matchHandler && matchContext;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents2.prototype._offByEventName = function(eventName, handler) {
var self2 = this;
var andByHandler = isFunction2(handler);
var matchHandler = self2._matchHandler(handler);
eventName = eventName.split(R_EVENTNAME_SPLIT2);
forEach2(eventName, function(name) {
var handlerItems = self2._safeEvent(name);
if (andByHandler) {
self2._spliceMatches(handlerItems, matchHandler);
} else {
forEach2(handlerItems, function(item) {
self2._forgetContext(item.context);
});
self2.events[name] = [];
}
});
};
CustomEvents2.prototype._offByHandler = function(handler) {
var self2 = this;
var matchHandler = this._matchHandler(handler);
forEach2(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchHandler);
});
};
CustomEvents2.prototype._offByObject = function(obj, handler) {
var self2 = this;
var matchFunc;
if (this._indexOfContext(obj) < 0) {
forEach2(obj, function(func, name) {
self2.off(name, func);
});
} else if (isString2(handler)) {
matchFunc = this._matchContext(obj);
self2._spliceMatches(this._safeEvent(handler), matchFunc);
} else if (isFunction2(handler)) {
matchFunc = this._matchHandlerAndContext(handler, obj);
forEach2(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchFunc);
});
} else {
matchFunc = this._matchContext(obj);
forEach2(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchFunc);
});
}
};
CustomEvents2.prototype.off = function(eventName, handler) {
if (isString2(eventName)) {
this._offByEventName(eventName, handler);
} else if (!arguments.length) {
this.events = {};
this.contexts = [];
} else if (isFunction2(eventName)) {
this._offByHandler(eventName);
} else if (isObject2(eventName)) {
this._offByObject(eventName, handler);
}
};
CustomEvents2.prototype.fire = function(eventName) {
this.invoke.apply(this, arguments);
};
CustomEvents2.prototype.invoke = function(eventName) {
var events, args, index, item;
if (!this.hasListener(eventName)) {
return true;
}
events = this._safeEvent(eventName);
args = Array.prototype.slice.call(arguments, 1);
index = 0;
while (events[index]) {
item = events[index];
if (item.handler.apply(item.context, args) === false) {
return false;
}
index += 1;
}
return true;
};
CustomEvents2.prototype.hasListener = function(eventName) {
return this.getListenerLength(eventName) > 0;
};
CustomEvents2.prototype.getListenerLength = function(eventName) {
var events = this._safeEvent(eventName);
return events.length;
};
module2.exports = CustomEvents2;
},
/* 9 */
/***/
function(module2, exports2, __webpack_require__) {
var inherit = __webpack_require__(27);
var extend2 = __webpack_require__(2);
function defineClass(parent, props) {
var obj;
if (!props) {
props = parent;
parent = null;
}
obj = props.init || function() {
};
if (parent) {
inherit(obj, parent);
}
if (props.hasOwnProperty("static")) {
extend2(obj, props["static"]);
delete props["static"];
}
extend2(obj.prototype, props);
return obj;
}
module2.exports = defineClass;
},
/* 10 */
/***/
function(module2, exports2, __webpack_require__) {
var isString2 = __webpack_require__(6);
var forEach2 = __webpack_require__(4);
var safeEvent = __webpack_require__(17);
function on2(element, types, handler, context) {
if (isString2(types)) {
forEach2(types.split(/\s+/g), function(type) {
bindEvent(element, type, handler, context);
});
return;
}
forEach2(types, function(func, type) {
bindEvent(element, type, func, handler);
});
}
function bindEvent(element, type, handler, context) {
function eventHandler(e2) {
handler.call(context || element, e2 || window.event);
}
if ("addEventListener" in element) {
element.addEventListener(type, eventHandler);
} else if ("attachEvent" in element) {
element.attachEvent("on" + type, eventHandler);
}
memorizeHandler(element, type, handler, eventHandler);
}
function memorizeHandler(element, type, handler, wrappedHandler) {
var events = safeEvent(element, type);
var existInEvents = false;
forEach2(events, function(obj) {
if (obj.handler === handler) {
existInEvents = true;
return false;
}
return true;
});
if (!existInEvents) {
events.push({
handler,
wrappedHandler
});
}
}
module2.exports = on2;
},
/* 11 */
/***/
function(module2, exports2, __webpack_require__) {
var isString2 = __webpack_require__(6);
var forEach2 = __webpack_require__(4);
var safeEvent = __webpack_require__(17);
function off(element, types, handler) {
if (isString2(types)) {
forEach2(types.split(/\s+/g), function(type) {
unbindEvent(element, type, handler);
});
return;
}
forEach2(types, function(func, type) {
unbindEvent(element, type, func);
});
}
function unbindEvent(element, type, handler) {
var events = safeEvent(element, type);
var index;
if (!handler) {
forEach2(events, function(item) {
removeHandler(element, type, item.wrappedHandler);
});
events.splice(0, events.length);
} else {
forEach2(events, function(item, idx) {
if (handler === item.handler) {
removeHandler(element, type, item.wrappedHandler);
index = idx;
return false;
}
return true;
});
events.splice(index, 1);
}
}
function removeHandler(element, type, handler) {
if ("removeEventListener" in element) {
element.removeEventListener(type, handler);
} else if ("detachEvent" in element) {
element.detachEvent("on" + type, handler);
}
}
module2.exports = off;
},
/* 12 */
/***/
function(module2, exports2, __webpack_require__) {
var matches = __webpack_require__(30);
function closest(element, selector) {
var parent = element.parentNode;
if (matches(element, selector)) {
return element;
}
while (parent && parent !== document) {
if (matches(parent, selector)) {
return parent;
}
parent = parent.parentNode;
}
return null;
}
module2.exports = closest;
},
/* 13 */
/***/
function(module2, exports2, __webpack_require__) {
function removeElement(element) {
if (element && element.parentNode) {
element.parentNode.removeChild(element);
}
}
module2.exports = removeElement;
},
/* 14 */
/***/
function(module2, exports2, __webpack_require__) {
function isHTMLNode(html) {
if (typeof HTMLElement === "object") {
return html && (html instanceof HTMLElement || !!html.nodeType);
}
return !!(html && html.nodeType);
}
module2.exports = isHTMLNode;
},
/* 15 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(0);
var forEachArray2 = __webpack_require__(1);
var sendHostname2 = __webpack_require__(35);
var uniqueId = 0;
var utils = {
/**
* Returns unique id
* @returns {number}
*/
getUniqueId: function() {
uniqueId += 1;
return uniqueId;
},
/**
* Convert a value to meet the format
* @param {number|string} value
* @param {string} format - ex) hh, h, mm, m
* @returns {string}
*/
formatTime: function(value, format) {
var PADDING_ZERO_TYPES = ["hh", "mm"];
value = String(value);
return inArray(format, PADDING_ZERO_TYPES) >= 0 && value.length === 1 ? "0" + value : value;
},
/**
* Get meridiem hour
* @param {number} hour - Original hour
* @returns {number} Converted meridiem hour
*/
getMeridiemHour: function(hour) {
hour %= 12;
if (hour === 0) {
hour = 12;
}
return hour;
},
/**
* Returns range arr
* @param {number} start - Start value
* @param {number} end - End value
* @param {number} [step] - Step value
* @returns {Array}
*/
getRangeArr: function(start, end, step) {
var arr = [];
var i2;
step = step || 1;
if (start > end) {
for (i2 = end; i2 >= start; i2 -= step) {
arr.push(i2);
}
} else {
for (i2 = start; i2 <= end; i2 += step) {
arr.push(i2);
}
}
return arr;
},
/**
* Returns array filled with selected value
* @param {number} start - Start index of array to fill
* @param {number} end - End index of array to fill
* @param {number} value - Value to be filled
* @param {Array} [target] - Array to fill
* @returns {Array}
*/
fill: function(start, end, value, target) {
var arr = target || [];
var replaceEnd = Math.min(arr.length - 1, end);
var i2;
for (i2 = start; i2 <= replaceEnd; i2 += 1) {
arr[i2] = value;
}
for (i2 = replaceEnd; i2 <= end; i2 += 1) {
arr.push(value);
}
return arr;
},
/**
* Get a target element
* @param {Event} ev Event object
* @returns {HTMLElement} An event target element
*/
getTarget: function(ev) {
return ev.target || ev.srcElement;
},
/**
* send host name
* @ignore
*/
sendHostName: function() {
sendHostname2("time-picker", "UA-129987462-1");
},
/**
* Get disabled minute array
* @param {Array} enableRanges array of object which contains range
*/
getDisabledMinuteArr: function(enableRanges, minuteStep) {
var arr = this.fill(0, Math.floor(60 / minuteStep) - 2, false);
function setDisabled(enableRange) {
var beginDisabledMinute = Math.ceil(enableRange.begin / minuteStep);
var endDisabledMinute = Math.floor(enableRange.end / minuteStep);
arr = this.fill(beginDisabledMinute, endDisabledMinute, true, arr);
}
forEachArray2(enableRanges, setDisabled.bind(this));
return arr;
},
/**
* Set disabled on target element
* @param {HTMLInputElement} el target element
* @param {boolean} isDisabled target element
*/
setDisabled: function(el, isDisabled) {
el.disabled = isDisabled;
}
};
module2.exports = utils;
},
/* 16 */
/***/
function(module2, exports2, __webpack_require__) {
function forEachOwnProperties2(obj, iteratee, context) {
var key;
context = context || null;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (iteratee.call(context, obj[key], key, obj) === false) {
break;
}
}
}
}
module2.exports = forEachOwnProperties2;
},
/* 17 */
/***/
function(module2, exports2, __webpack_require__) {
var EVENT_KEY = "_feEventKey";
function safeEvent(element, type) {
var events = element[EVENT_KEY];
var handlers;
if (!events) {
events = element[EVENT_KEY] = {};
}
handlers = events[type];
if (!handlers) {
handlers = events[type] = [];
}
return handlers;
}
module2.exports = safeEvent;
},
/* 18 */
/***/
function(module2, exports2, __webpack_require__) {
var isUndefined2 = __webpack_require__(5);
function getClass(element) {
if (!element || !element.className) {
return "";
}
if (isUndefined2(element.className.baseVal)) {
return element.className;
}
return element.className.baseVal;
}
module2.exports = getClass;
},
/* 19 */
/***/
function(module2, exports2, __webpack_require__) {
var isArray2 = __webpack_require__(3);
var isUndefined2 = __webpack_require__(5);
function setClassName(element, cssClass) {
cssClass = isArray2(cssClass) ? cssClass.join(" ") : cssClass;
cssClass = cssClass.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
if (isUndefined2(element.className.baseVal)) {
element.className = cssClass;
return;
}
element.className.baseVal = cssClass;
}
module2.exports = setClassName;
},
/* 20 */
/***/
function(module2, exports2, __webpack_require__) {
__webpack_require__(21);
module2.exports = __webpack_require__(22);
},
/* 21 */
/***/
function(module2, exports2, __webpack_require__) {
},
/* 22 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(0);
var forEachArray2 = __webpack_require__(1);
var CustomEvents2 = __webpack_require__(8);
var defineClass = __webpack_require__(9);
var extend2 = __webpack_require__(2);
var on2 = __webpack_require__(10);
var off = __webpack_require__(11);
var addClass = __webpack_require__(29);
var closest = __webpack_require__(12);
var removeElement = __webpack_require__(13);
var removeClass = __webpack_require__(32);
var isHTMLNode = __webpack_require__(14);
var isNumber2 = __webpack_require__(33);
var Spinbox = __webpack_require__(34);
var Selectbox = __webpack_require__(38);
var util = __webpack_require__(15);
var localeTexts = __webpack_require__(40);
var tmpl = __webpack_require__(41);
var meridiemTmpl = __webpack_require__(42);
var SELECTOR_HOUR_ELEMENT = ".tui-timepicker-hour";
var SELECTOR_MINUTE_ELEMENT = ".tui-timepicker-minute";
var SELECTOR_MERIDIEM_ELEMENT = ".tui-timepicker-meridiem";
var CLASS_NAME_LEFT_MERIDIEM = "tui-has-left";
var CLASS_NAME_HIDDEN = "tui-hidden";
var CLASS_NAME_CHECKED = "tui-timepicker-meridiem-checked";
var INPUT_TYPE_SPINBOX = "spinbox";
var INPUT_TYPE_SELECTBOX = "selectbox";
var START_NUMBER_OF_TIME = 0;
var END_NUMBER_OF_MINUTE = 59;
var END_NUMBER_OF_HOUR = 23;
var END_NUMBER_OF_HOUR_WITH_MERIDIEM = 12;
var mergeDefaultOptions = function(options) {
return extend2(
{
language: "en",
initialHour: 0,
initialMinute: 0,
showMeridiem: true,
inputType: "selectbox",
hourStep: 1,
minuteStep: 1,
meridiemPosition: "right",
format: "h:m",
disabledHours: [],
disabledMinutes: {},
usageStatistics: true
},
options
);
};
var TimePicker = defineClass(
/** @lends TimePicker.prototype */
{
static: {
/**
* Locale text data
* @type {object}
* @memberof TimePicker
* @static
* @example
* TimePicker.localeTexts['customKey'] = {
* am: 'a.m.',
* pm: 'p.m.'
* };
*
* const instance = new TimePicker('#timepicker-container', {
* language: 'customKey',
* });
*/
localeTexts
},
init: function(container, options) {
options = mergeDefaultOptions(options);
this.id = util.getUniqueId();
this.container = isHTMLNode(container) ? container : document.querySelector(container);
this.element = null;
this.meridiemElement = null;
this.amEl = null;
this.pmEl = null;
this.showMeridiem = options.showMeridiem;
this.meridiemPosition = options.meridiemPosition;
this.hourInput = null;
this.minuteInput = null;
this.hour = options.initialHour;
this.minute = options.initialMinute;
this.hourStep = options.hourStep;
this.minuteStep = options.minuteStep;
this.disabledHours = options.disabledHours;
this.disabledMinutes = options.disabledMinutes;
this.inputType = options.inputType;
this.localeText = localeTexts[options.language];
this.format = this.getValidTimeFormat(options.format);
this.render();
this.setEvents();
if (options.usageStatistics) {
util.sendHostName();
}
},
/**
* Set event handlers to selectors, container
* @private
*/
setEvents: function() {
this.hourInput.on("change", this.onChangeTimeInput, this);
this.minuteInput.on("change", this.onChangeTimeInput, this);
if (this.showMeridiem) {
if (this.inputType === INPUT_TYPE_SELECTBOX) {
on2(this.meridiemElement.querySelector("select"), "change", this.onChangeMeridiem, this);
} else if (this.inputType === INPUT_TYPE_SPINBOX) {
on2(this.meridiemElement, "click", this.onChangeMeridiem, this);
}
}
},
/**
* Remove events
* @private
*/
removeEvents: function() {
this.off();
this.hourInput.destroy();
this.minuteInput.destroy();
if (this.showMeridiem) {
if (this.inputType === INPUT_TYPE_SELECTBOX) {
off(this.meridiemElement.querySelector("select"), "change", this.onChangeMeridiem, this);
} else if (this.inputType === INPUT_TYPE_SPINBOX) {
off(this.meridiemElement, "click", this.onChangeMeridiem, this);
}
}
},
/**
* Render element
* @private
*/
render: function() {
var context = {
showMeridiem: this.showMeridiem,
isSpinbox: this.inputType === "spinbox"
};
if (this.showMeridiem) {
extend2(context, {
meridiemElement: this.makeMeridiemHTML()
});
}
if (this.element) {
removeElement(this.element);
}
this.container.innerHTML = tmpl(context);
this.element = this.container.firstChild;
this.renderTimeInputs();
if (this.showMeridiem) {
this.setMeridiemElement();
}
},
/**
* Set meridiem element on timepicker
* @private
*/
setMeridiemElement: function() {
if (this.meridiemPosition === "left") {
addClass(this.element, CLASS_NAME_LEFT_MERIDIEM);
}
this.meridiemElement = this.element.querySelector(SELECTOR_MERIDIEM_ELEMENT);
this.amEl = this.meridiemElement.querySelector('[value="AM"]');
this.pmEl = this.meridiemElement.querySelector('[value="PM"]');
this.syncToMeridiemElements();
},
/**
* Make html for meridiem element
* @returns {HTMLElement} Meridiem element
* @private
*/
makeMeridiemHTML: function() {
var localeText = this.localeText;
return meridiemTmpl({
am: localeText.am,
pm: localeText.pm,
radioId: this.id,
isSpinbox: this.inputType === "spinbox"
});
},
/**
* Render time selectors
* @private
*/
renderTimeInputs: function() {
var hour = this.hour;
var showMeridiem = this.showMeridiem;
var hourElement = this.element.querySelector(SELECTOR_HOUR_ELEMENT);
var minuteElement = this.element.querySelector(SELECTOR_MINUTE_ELEMENT);
var BoxComponent = this.inputType.toLowerCase() === "selectbox" ? Selectbox : Spinbox;
var formatExplode = this.format.split(":");
var hourItems = this.getHourItems();
if (showMeridiem) {
hour = util.getMeridiemHour(hour);
}
this.hourInput = new BoxComponent(hourElement, {
initialValue: hour,
items: hourItems,
format: formatExplode[0],
disabledItems: this.makeDisabledStatItems(hourItems)
});
this.minuteInput = new BoxComponent(minuteElement, {
initialValue: this.minute,
items: this.getMinuteItems(),
format: formatExplode[1]
});
},
makeDisabledStatItems: function(hourItems) {
var result = [];
var disabledHours = this.disabledHours.slice();
if (this.showMeridiem) {
disabledHours = this.meridiemableTime(disabledHours);
}
forEachArray2(hourItems, function(hour) {
result.push(inArray(hour, disabledHours) >= 0);
});
return result;
},
meridiemableTime: function(disabledHours) {
var diffHour = 0;
var startHour = 0;
var endHour = 11;
var result = [];
if (this.hour >= 12) {
diffHour = 12;
startHour = 12;
endHour = 23;
}
forEachArray2(disabledHours, function(hour) {
if (hour >= startHour && hour <= endHour) {
result.push(hour - diffHour === 0 ? 12 : hour - diffHour);
}
});
return result;
},
/**
* Return formatted format.
* @param {string} format - format option
* @returns {string}
* @private
*/
getValidTimeFormat: function(format) {
if (!format.match(/^[h]{1,2}:[m]{1,2}$/i)) {
return "h:m";
}
return format.toLowerCase();
},
/**
* Initialize meridiem elements
* @private
*/
syncToMeridiemElements: function() {
var selectedEl = this.hour >= 12 ? this.pmEl : this.amEl;
var notSelectedEl = selectedEl === this.pmEl ? this.amEl : this.pmEl;
selectedEl.setAttribute("selected", true);
selectedEl.setAttribute("checked", true);
addClass(selectedEl, CLASS_NAME_CHECKED);
notSelectedEl.removeAttribute("selected");
notSelectedEl.removeAttribute("checked");
removeClass(notSelectedEl, CLASS_NAME_CHECKED);
},
/**
* Set values in spinboxes from time
* @private
*/
syncToInputs: function() {
var hour = this.hour;
var minute = this.minute;
if (this.showMeridiem) {
hour = util.getMeridiemHour(hour);
}
this.hourInput.setValue(hour, true);
this.minuteInput.setValue(minute, true);
},
/**
* DOM event handler
* @param {Event} ev - Change event on meridiem element
* @private
*/
onChangeMeridiem: function(ev) {
var hour = this.hour;
var target = util.getTarget(ev);
if (target.value && closest(target, SELECTOR_MERIDIEM_ELEMENT)) {
hour = this.to24Hour(target.value === "PM", hour);
this.setTime(hour, this.minute);
this.setDisabledHours();
this.setDisabledMinutes(hour);
}
},
/**
* Time change event handler
* @private
*/
onChangeTimeInput: function() {
var hour = this.hourInput.getValue();
var minute = this.minuteInput.getValue();
var isPM = this.hour >= 12;
if (this.showMeridiem) {
hour = this.to24Hour(isPM, hour);
}
this.setTime(hour, minute);
this.setDisabledMinutes(hour);
},
/**
* 12Hour-expression to 24Hour-expression
* @param {boolean} isPM - Is pm?
* @param {number} hour - Hour
* @returns {number}
* @private
*/
to24Hour: function(isPM, hour) {
hour %= 12;
if (isPM) {
hour += 12;
}
return hour;
},
setDisabledHours: function() {
var hourItems = this.getHourItems();
var disabledItems = this.makeDisabledStatItems(hourItems);
this.hourInput.setDisabledItems(disabledItems);
},
setDisabledMinutes: function(hour) {
var disabledItems;
disabledItems = this.disabledMinutes[hour] || [];
this.minuteInput.setDisabledItems(disabledItems);
},
/**
* Get items of hour
* @returns {array} Hour item list
* @private
*/
getHourItems: function() {
var step = this.hourStep;
return this.showMeridiem ? util.getRangeArr(1, 12, step) : util.getRangeArr(0, 23, step);
},
/**
* Get items of minute
* @returns {array} Minute item list
* @private
*/
getMinuteItems: function() {
return util.getRangeArr(0, 59, this.minuteStep);
},
/**
* Whether the hour and minute are in valid items or not
* @param {number} hour - Hour value
* @param {number} minute - Minute value
* @returns {boolean} State
* @private
*/
validItems: function(hour, minute) {
if (!isNumber2(hour) || !isNumber2(minute)) {
return false;
}
if (this.showMeridiem) {
hour = util.getMeridiemHour(hour);
}
return inArray(hour, this.getHourItems()) > -1 && inArray(minute, this.getMinuteItems()) > -1;
},
/**
* Set step of hour
* @param {array} step - Step to create items of hour
*/
setHourStep: function(step) {
this.hourStep = step;
this.hourInput.fire("changeItems", this.getHourItems());
},
/**
* Get step of hour
* @returns {number} Step of hour
*/
getHourStep: function() {
return this.hourStep;
},
/**
* Set step of minute
* @param {number} step - Step to create items of minute
*/
setMinuteStep: function(step) {
this.minuteStep = step;
this.minuteInput.fire("changeItems", this.getMinuteItems());
},
/**
* Get step of minute
* @returns {number} Step of minute
*/
getMinuteStep: function() {
return this.minuteStep;
},
/**
* Show time picker element
*/
show: function() {
removeClass(this.element, CLASS_NAME_HIDDEN);
},
/**
* Hide time picker element
*/
hide: function() {
addClass(this.element, CLASS_NAME_HIDDEN);
},
/**
* Set hour
* @param {number} hour for time picker - (0~23)
* @returns {boolean} result of set time
*/
setHour: function(hour) {
return this.setTime(hour, this.minute);
},
/**
* Set minute
* @param {number} minute for time picker
* @returns {boolean} result of set time
*/
setMinute: function(minute) {
return this.setTime(this.hour, minute);
},
/**
* Set time
* @param {number} hour for time picker - (0~23)
* @param {number} minute for time picker
* @param {boolean} [silent] if it set true, 'change' event will not be fired.
*/
setTime: function(hour, minute, silent) {
if (!this.validItems(hour, minute)) {
return;
}
this.hour = hour;
this.minute = minute;
this.syncToInputs();
if (this.showMeridiem) {
this.syncToMeridiemElements();
}
if (!silent) {
this.fire("change", {
hour: this.hour,
minute: this.minute
});
}
},
/**
* Set selectable range
* @param {Object} begin - Contain begin hour and minute of range
* @param {number} begin.hour - begin hour of range
* @param {number} begin.minute - begin minute of range
* @param {Object} [end] - Contain end hour and minute of range
* @param {number} end.hour - end hour of range
* @param {number} end.minute - end minute of range
*/
setRange: function(begin, end) {
var beginHour = begin.hour;
var beginMin = begin.minute;
var endHour, endMin;
if (!this.isValidRange(begin, end)) {
return;
}
if (end) {
endHour = end.hour;
endMin = end.minute;
}
this.setRangeHour(beginHour, endHour);
this.setRangeMinute(beginHour, beginMin, endHour, endMin);
this.applyRange(beginHour, beginMin, endHour);
},
/**
* Set selectable range on hour
* @param {number} beginHour - begin hour of range
* @param {number} [endHour] - end hour of range
* @private
*/
setRangeHour: function(beginHour, endHour) {
var disabledHours = util.getRangeArr(START_NUMBER_OF_TIME, beginHour - 1);
if (endHour) {
disabledHours = disabledHours.concat(util.getRangeArr(endHour + 1, END_NUMBER_OF_HOUR));
}
this.disabledHours = disabledHours.slice();
},
/**
* Set selectable range on minute
* @param {number} beginHour - begin hour of range
* @param {number} beginMin - begin minute of range
* @param {number} [endHour] - end hour of range
* @param {number} [endMin] - end minute of range
* @private
*/
setRangeMinute: function(beginHour, beginMin, endHour, endMin) {
var disabledMinRanges = [];
if (!beginHour && !beginMin) {
return;
}
disabledMinRanges.push({
begin: START_NUMBER_OF_TIME,
end: beginMin
});
if (endHour && endMin) {
disabledMinRanges.push({
begin: endMin,
end: END_NUMBER_OF_MINUTE
});
if (beginHour === endHour) {
this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges, this.minuteStep).slice();
return;
}
this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]], this.minuteStep).slice();
}
this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]], this.minuteStep).slice();
},
/**
* Apply range
* @param {number} beginHour - begin hour of range
* @param {number} beginMin - begin minute of range
* @param {number} [endHour] - end hour of range
* @private
*/
// eslint-disable-next-line complexity
applyRange: function(beginHour, beginMin, endHour) {
var targetMinuteIndex = Math.ceil(beginMin / this.minuteStep);
var targetHour = beginHour;
var targetMinute = targetMinuteIndex * this.minuteStep;
var diffFromSelectableMinute;
if (this.isLaterThanSetTime(beginHour, beginMin)) {
if (this.disabledMinutes[targetHour][targetMinuteIndex]) {
diffFromSelectableMinute = this.disabledMinutes[targetHour].slice(targetMinuteIndex).findIndex(function(isMinuteDisabled) {
return !isMinuteDisabled;
}) * this.minuteStep;
targetMinute = diffFromSelectableMinute >= 0 ? targetMinute + diffFromSelectableMinute : 60;
}
if (this.hourStep !== 1 && beginHour % this.hourStep !== 1 || targetMinute >= 60) {
targetHour = beginHour + beginHour % this.hourStep + 1;
targetMinute = 0;
}
this.setTime(targetHour, targetMinute);
}
this.setDisabledHours();
this.setDisabledMinutes(this.hour);
if (this.showMeridiem) {
this.syncToMeridiemElements();
util.setDisabled(this.amEl, beginHour >= END_NUMBER_OF_HOUR_WITH_MERIDIEM);
util.setDisabled(this.pmEl, endHour < END_NUMBER_OF_HOUR_WITH_MERIDIEM);
}
},
/**
* Reset minute selectable range
*/
resetMinuteRange: function() {
var i2;
this.disabledMinutes = {};
for (i2 = 0; i2 <= END_NUMBER_OF_HOUR; i2 += 1) {
this.setDisabledMinutes(this.hour);
}
},
/**
* Whether the given range a valid range
* @param {Object} begin - Contain begin hour and minute of range
* @param {number} begin.hour - begin hour of range
* @param {number} begin.minute - begin minute of range
* @param {Object} [end] - Contain end hour and minute of range
* @param {number} end.hour - end hour of range
* @param {number} end.minute - end minute of range
* @returns {boolean} result of range validation
* @private
*/
isValidRange: function(begin, end) {
var beginHour = begin.hour;
var beginMin = begin.minute;
var endHour, endMin;
if (!this.isValidTime(beginHour, beginMin)) {
return false;
}
if (!end) {
return true;
}
endHour = end.hour;
endMin = end.minute;
return this.isValidTime(endHour, endMin) && this.compareTimes(begin, end) > 0;
},
/**
* Whether the given time a valid time
* @param {number} hour - hour for validation
* @param {number} minute - minute for validation
* @returns {boolean} result of time validation
* @private
*/
isValidTime: function(hour, minute) {
return hour >= START_NUMBER_OF_TIME && hour <= END_NUMBER_OF_HOUR && minute >= START_NUMBER_OF_TIME && minute <= END_NUMBER_OF_MINUTE;
},
/**
* Compare given time with set time
* @param {number} hour - given hour
* @param {number} minute - given minute
* @returns {boolean} result of compare
* @private
*/
isLaterThanSetTime: function(hour, minute) {
return hour > this.hour || hour === this.hour && minute > this.minute;
},
/**
* Compare two times
* it returns
* 0: when begin equals end
* positive: when end later than begin
* negative: when begin later than end
* @param {Object} begin - Contain begin hour and minute of range
* @param {number} begin.hour - begin hour of range
* @param {number} begin.minute - begin minute of range
* @param {Object} end - Contain end hour and minute of range
* @param {number} end.hour - end hour of range
* @param {number} end.minute - end minute of range
* @returns {boolean} result of range validation
* @private
*/
compareTimes: function(begin, end) {
var first2 = /* @__PURE__ */ new Date(0);
var second = /* @__PURE__ */ new Date(0);
first2.setHours(begin.hour, begin.minute);
second.setHours(end.hour, end.minute);
return second.getTime() - first2.getTime();
},
/**
* Get hour
* @returns {number} hour - (0~23)
*/
getHour: function() {
return this.hour;
},
/**
* Get minute
* @returns {number} minute
*/
getMinute: function() {
return this.minute;
},
/**
* Change locale text of meridiem by language code
* @param {string} language - Language code
*/
changeLanguage: function(language) {
this.localeText = localeTexts[language];
this.render();
},
/**
* Destroy
*/
destroy: function() {
this.removeEvents();
removeElement(this.element);
this.container = this.showMeridiem = this.hourInput = this.minuteInput = this.hour = this.minute = this.inputType = this.element = this.meridiemElement = this.amEl = this.pmEl = null;
}
}
);
CustomEvents2.mixin(TimePicker);
module2.exports = TimePicker;
},
/* 23 */
/***/
function(module2, exports2, __webpack_require__) {
var isUndefined2 = __webpack_require__(5);
var isNull2 = __webpack_require__(24);
function isExisty2(param) {
return !isUndefined2(param) && !isNull2(param);
}
module2.exports = isExisty2;
},
/* 24 */
/***/
function(module2, exports2, __webpack_require__) {
function isNull2(obj) {
return obj === null;
}
module2.exports = isNull2;
},
/* 25 */
/***/
function(module2, exports2, __webpack_require__) {
function isObject2(obj) {
return obj === Object(obj);
}
module2.exports = isObject2;
},
/* 26 */
/***/
function(module2, exports2, __webpack_require__) {
function isFunction2(obj) {
return obj instanceof Function;
}
module2.exports = isFunction2;
},
/* 27 */
/***/
function(module2, exports2, __webpack_require__) {
var createObject = __webpack_require__(28);
function inherit(subType, superType) {
var prototype = createObject(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
module2.exports = inherit;
},
/* 28 */
/***/
function(module2, exports2, __webpack_require__) {
function createObject(obj) {
function F2() {
}
F2.prototype = obj;
return new F2();
}
module2.exports = createObject;
},
/* 29 */
/***/
function(module2, exports2, __webpack_require__) {
var forEach2 = __webpack_require__(4);
var inArray = __webpack_require__(0);
var getClass = __webpack_require__(18);
var setClassName = __webpack_require__(19);
function addClass(element) {
var cssClass = Array.prototype.slice.call(arguments, 1);
var classList = element.classList;
var newClass = [];
var origin;
if (classList) {
forEach2(cssClass, function(name) {
element.classList.add(name);
});
return;
}
origin = getClass(element);
if (origin) {
cssClass = [].concat(origin.split(/\s+/), cssClass);
}
forEach2(cssClass, function(cls2) {
if (inArray(cls2, newClass) < 0) {
newClass.push(cls2);
}
});
setClassName(element, newClass);
}
module2.exports = addClass;
},
/* 30 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(0);
var toArray = __webpack_require__(31);
var elProto2 = Element.prototype;
var matchSelector = elProto2.matches || elProto2.webkitMatchesSelector || elProto2.mozMatchesSelector || elProto2.msMatchesSelector || function(selector) {
var doc = this.document || this.ownerDocument;
return inArray(this, toArray(doc.querySelectorAll(selector))) > -1;
};
function matches(element, selector) {
return matchSelector.call(element, selector);
}
module2.exports = matches;
},
/* 31 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(1);
function toArray(arrayLike) {
var arr;
try {
arr = Array.prototype.slice.call(arrayLike);
} catch (e2) {
arr = [];
forEachArray2(arrayLike, function(value) {
arr.push(value);
});
}
return arr;
}
module2.exports = toArray;
},
/* 32 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(1);
var inArray = __webpack_require__(0);
var getClass = __webpack_require__(18);
var setClassName = __webpack_require__(19);
function removeClass(element) {
var cssClass = Array.prototype.slice.call(arguments, 1);
var classList = element.classList;
var origin, newClass;
if (classList) {
forEachArray2(cssClass, function(name) {
classList.remove(name);
});
return;
}
origin = getClass(element).split(/\s+/);
newClass = [];
forEachArray2(origin, function(name) {
if (inArray(name, cssClass) < 0) {
newClass.push(name);
}
});
setClassName(element, newClass);
}
module2.exports = removeClass;
},
/* 33 */
/***/
function(module2, exports2, __webpack_require__) {
function isNumber2(obj) {
return typeof obj === "number" || obj instanceof Number;
}
module2.exports = isNumber2;
},
/* 34 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(0);
var forEachArray2 = __webpack_require__(1);
var CustomEvents2 = __webpack_require__(8);
var defineClass = __webpack_require__(9);
var extend2 = __webpack_require__(2);
var on2 = __webpack_require__(10);
var off = __webpack_require__(11);
var closest = __webpack_require__(12);
var removeElement = __webpack_require__(13);
var isHTMLNode = __webpack_require__(14);
var util = __webpack_require__(15);
var tmpl = __webpack_require__(37);
var SELECTOR_UP_BUTTON = ".tui-timepicker-btn-up";
var SELECTOR_DOWN_BUTTON = ".tui-timepicker-btn-down";
var Spinbox = defineClass(
/** @lends Spinbox.prototype */
{
init: function(container, options) {
options = extend2(
{
items: []
},
options
);
this._container = isHTMLNode(container) ? container : document.querySelector(container);
this._element = null;
this._inputElement = null;
this._items = options.items;
this._disabledItems = options.disabledItems || [];
this._selectedIndex = Math.max(0, inArray(options.initialValue, this._items));
this._format = options.format;
this._render();
this._setEvents();
},
/**
* Render spinbox
* @private
*/
_render: function() {
var index = inArray(this.getValue(), this._items);
var context;
if (this._disabledItems[index]) {
this._selectedIndex = this._findEnabledIndex();
}
context = {
maxLength: this._getMaxLength(),
initialValue: this.getValue(),
format: this._format,
formatTime: util.formatTime
};
this._container.innerHTML = tmpl(context);
this._element = this._container.firstChild;
this._inputElement = this._element.querySelector("input");
},
/**
* Find the index of the enabled item
* @returns {number} - find selected index
* @private
*/
_findEnabledIndex: function() {
return inArray(false, this._disabledItems);
},
/**
* Returns maxlength of value
* @returns {number}
* @private
*/
_getMaxLength: function() {
var lengths = [];
forEachArray2(this._items, function(item) {
lengths.push(String(item).length);
});
return Math.max.apply(null, lengths);
},
/**
* Set disabledItems
* @param {object} disabledItems - disabled status of items
*/
setDisabledItems: function(disabledItems) {
this._disabledItems = disabledItems;
this._changeToInputValue();
},
/**
* Assign default events to up/down button
* @private
*/
_setEvents: function() {
on2(this._container, "click", this._onClickHandler, this);
on2(this._inputElement, "keydown", this._onKeydownInputElement, this);
on2(this._inputElement, "change", this._onChangeHandler, this);
this.on(
"changeItems",
function(items) {
this._items = items;
this._render();
},
this
);
},
/**
* Remove events to up/down button
* @private
*/
_removeEvents: function() {
this.off();
off(this._container, "click", this._onClickHandler, this);
off(this._inputElement, "keydown", this._onKeydownInputElement, this);
off(this._inputElement, "change", this._onChangeHandler, this);
},
/**
* Click event handler
* @param {Event} ev - Change event on up/down buttons.
*/
_onClickHandler: function(ev) {
var target = util.getTarget(ev);
if (closest(target, SELECTOR_DOWN_BUTTON)) {
this._setNextValue(true);
} else if (closest(target, SELECTOR_UP_BUTTON)) {
this._setNextValue(false);
}
},
/**
* Set input value
* @param {boolean} isDown - From down-action?
* @private
*/
_setNextValue: function(isDown) {
var index = this._selectedIndex;
if (isDown) {
index = index ? index - 1 : this._items.length - 1;
} else {
index = index < this._items.length - 1 ? index + 1 : 0;
}
if (this._disabledItems[index]) {
this._selectedIndex = index;
this._setNextValue(isDown);
} else {
this.setValue(this._items[index]);
}
},
/**
* DOM(Input element) Keydown Event handler
* @param {Event} ev event-object
* @private
*/
_onKeydownInputElement: function(ev) {
var keyCode = ev.which || ev.keyCode;
var isDown;
if (closest(util.getTarget(ev), "input")) {
switch (keyCode) {
case 38:
isDown = false;
break;
case 40:
isDown = true;
break;
default:
return;
}
this._setNextValue(isDown);
}
},
/**
* DOM(Input element) Change Event handler
* @param {Event} ev Change event on an input element.
* @private
*/
_onChangeHandler: function(ev) {
if (closest(util.getTarget(ev), "input")) {
this._changeToInputValue();
}
},
/**
* Change value to input-box if it is valid.
* @private
* @param {boolean} silent prevents firing 'change' event if it is true.
*/
_changeToInputValue: function(silent) {
var newValue = Number(this._inputElement.value);
var newIndex = inArray(newValue, this._items);
if (this._disabledItems[newIndex]) {
newIndex = this._findEnabledIndex();
newValue = this._items[newIndex];
} else if (newIndex === this._selectedIndex) {
return;
}
if (newIndex === -1) {
this.setValue(this._items[this._selectedIndex], silent);
} else {
this._selectedIndex = newIndex;
if (!silent) {
this.fire("change", {
value: newValue
});
}
}
},
/**
* Set value to input-box.
* @param {number} value - Value
* @param {boolean} silent - prevents firing 'change' event if it is true.
*/
setValue: function(value, silent) {
this._inputElement.value = util.formatTime(value, this._format);
this._changeToInputValue(silent);
},
/**
* Returns current value
* @returns {number}
*/
getValue: function() {
return this._items[this._selectedIndex];
},
/**
* Destory
*/
destroy: function() {
this._removeEvents();
removeElement(this._element);
this._container = this._element = this._inputElement = this._items = this._selectedIndex = null;
}
}
);
CustomEvents2.mixin(Spinbox);
module2.exports = Spinbox;
},
/* 35 */
/***/
function(module2, exports2, __webpack_require__) {
var isUndefined2 = __webpack_require__(5);
var imagePing2 = __webpack_require__(36);
var ms7days2 = 7 * 24 * 60 * 60 * 1e3;
function isExpired2(date2) {
var now = (/* @__PURE__ */ new Date()).getTime();
return now - date2 > ms7days2;
}
function sendHostname2(appName, trackingId) {
var url = "https://www.google-analytics.com/collect";
var hostname = location.hostname;
var hitType = "event";
var eventCategory = "use";
var applicationKeyForStorage = "TOAST UI " + appName + " for " + hostname + ": Statistics";
var date2 = window.localStorage.getItem(applicationKeyForStorage);
if (!isUndefined2(window.tui) && window.tui.usageStatistics === false) {
return;
}
if (date2 && !isExpired2(date2)) {
return;
}
window.localStorage.setItem(applicationKeyForStorage, (/* @__PURE__ */ new Date()).getTime());
setTimeout(function() {
if (document.readyState === "interactive" || document.readyState === "complete") {
imagePing2(url, {
v: 1,
t: hitType,
tid: trackingId,
cid: hostname,
dp: hostname,
dh: appName,
el: appName,
ec: eventCategory
});
}
}, 1e3);
}
module2.exports = sendHostname2;
},
/* 36 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachOwnProperties2 = __webpack_require__(16);
function imagePing2(url, trackingInfo) {
var trackingElement = document.createElement("img");
var queryString = "";
forEachOwnProperties2(trackingInfo, function(value, key) {
queryString += "&" + key + "=" + value;
});
queryString = queryString.substring(1);
trackingElement.src = url + "?" + queryString;
trackingElement.style.display = "none";
document.body.appendChild(trackingElement);
document.body.removeChild(trackingElement);
return trackingElement;
}
module2.exports = imagePing2;
},
/* 37 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(7);
module2.exports = function(context) {
var source = '<div class="tui-timepicker-btn-area"> <input type="text" class="tui-timepicker-spinbox-input" maxlength="{{maxLength}}" size="{{maxLength}}" value="{{formatTime initialValue format}}" aria-label="TimePicker spinbox value"> <button type="button" class="tui-timepicker-btn tui-timepicker-btn-up"> <span class="tui-ico-t-btn">Increase</span> </button> <button type="button" class="tui-timepicker-btn tui-timepicker-btn-down"> <span class="tui-ico-t-btn">Decrease</span> </button></div>';
return template(source, context);
};
},
/* 38 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(0);
var CustomEvents2 = __webpack_require__(8);
var defineClass = __webpack_require__(9);
var extend2 = __webpack_require__(2);
var on2 = __webpack_require__(10);
var off = __webpack_require__(11);
var closest = __webpack_require__(12);
var removeElement = __webpack_require__(13);
var isHTMLNode = __webpack_require__(14);
var util = __webpack_require__(15);
var tmpl = __webpack_require__(39);
var Selectbox = defineClass(
/** @lends Selectbox.prototype */
{
init: function(container, options) {
options = extend2(
{
items: []
},
options
);
this._container = isHTMLNode(container) ? container : document.querySelector(container);
this._items = options.items || [];
this._disabledItems = options.disabledItems || [];
this._selectedIndex = Math.max(0, inArray(options.initialValue, this._items));
this._format = options.format;
this._element = null;
this._render();
this._setEvents();
},
/**
* Render selectbox
* @private
*/
_render: function() {
var context;
this._changeEnabledIndex();
context = {
items: this._items,
format: this._format,
initialValue: this.getValue(),
disabledItems: this._disabledItems,
formatTime: util.formatTime,
equals: function(a2, b2) {
return a2 === b2;
}
};
if (this._element) {
this._removeElement();
}
this._container.innerHTML = tmpl(context);
this._element = this._container.firstChild;
on2(this._element, "change", this._onChangeHandler, this);
},
/**
* Change the index of the enabled item
* @private
*/
_changeEnabledIndex: function() {
var index = inArray(this.getValue(), this._items);
if (this._disabledItems[index]) {
this._selectedIndex = inArray(false, this._disabledItems);
}
},
/**
* Set disabledItems
* @param {object} disabledItems - disabled status of items
* @private
*/
setDisabledItems: function(disabledItems) {
this._disabledItems = disabledItems;
this._render();
},
/**
* Set events
* @private
*/
_setEvents: function() {
this.on(
"changeItems",
function(items) {
this._items = items;
this._render();
},
this
);
},
/**
* Remove events
* @private
*/
_removeEvents: function() {
this.off();
},
/**
* Remove element
* @private
*/
_removeElement: function() {
off(this._element, "change", this._onChangeHandler, this);
removeElement(this._element);
},
/**
* Change event handler
* @param {Event} ev Change event on a select element.
* @private
*/
_onChangeHandler: function(ev) {
if (closest(util.getTarget(ev), "select")) {
this._setNewValue();
}
},
/**
* Set new value
* @private
* @param {boolean} silent prevents firing 'change' event if it is true.
*/
_setNewValue: function(silent) {
var newValue = Number(this._element.value);
this._selectedIndex = inArray(newValue, this._items);
if (!silent) {
this.fire("change", {
value: newValue
});
}
},
/**
* Returns current value
* @returns {number}
*/
getValue: function() {
return this._items[this._selectedIndex];
},
/**
* Set value
* @param {number} value - New value
* @param {boolean} silent - prevents firing 'change' event if it is true.
*/
setValue: function(value, silent) {
var newIndex = inArray(value, this._items);
if (newIndex > -1 && newIndex !== this._selectedIndex) {
this._selectedIndex = newIndex;
this._element.value = value;
this._setNewValue(silent);
}
},
/**
* Destory
*/
destroy: function() {
this._removeEvents();
this._removeElement();
this._container = this._items = this._selectedIndex = this._element = null;
}
}
);
CustomEvents2.mixin(Selectbox);
module2.exports = Selectbox;
},
/* 39 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(7);
module2.exports = function(context) {
var source = '<select class="tui-timepicker-select" aria-label="Time"> {{each items}} {{if equals initialValue @this}} <option value="{{@this}}" selected {{if disabledItems[@index]}}disabled{{/if}}>{{formatTime @this format}}</option> {{else}} <option value="{{@this}}" {{if disabledItems[@index]}}disabled{{/if}}>{{formatTime @this format}}</option> {{/if}} {{/each}}</select>';
return template(source, context);
};
},
/* 40 */
/***/
function(module2, exports2, __webpack_require__) {
module2.exports = {
en: {
am: "AM",
pm: "PM"
},
ko: {
am: "오전",
pm: "오후"
}
};
},
/* 41 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(7);
module2.exports = function(context) {
var source = '<div class="tui-timepicker"> <div class="tui-timepicker-body"> <div class="tui-timepicker-row"> {{if isSpinbox}} <div class="tui-timepicker-column tui-timepicker-spinbox tui-timepicker-hour"></div> <span class="tui-timepicker-column tui-timepicker-colon"><span class="tui-ico-colon">:</span></span> <div class="tui-timepicker-column tui-timepicker-spinbox tui-timepicker-minute"></div> {{if showMeridiem}} {{meridiemElement}} {{/if}} {{else}} <div class="tui-timepicker-column tui-timepicker-selectbox tui-timepicker-hour"></div> <span class="tui-timepicker-column tui-timepicker-colon"><span class="tui-ico-colon">:</span></span> <div class="tui-timepicker-column tui-timepicker-selectbox tui-timepicker-minute"></div> {{if showMeridiem}} {{meridiemElement}} {{/if}} {{/if}} </div> </div></div>';
return template(source, context);
};
},
/* 42 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(7);
module2.exports = function(context) {
var source = '{{if isSpinbox}} <div class="tui-timepicker-column tui-timepicker-checkbox tui-timepicker-meridiem"> <div class="tui-timepicker-check-area"> <ul class="tui-timepicker-check-lst"> <li class="tui-timepicker-check"> <div class="tui-timepicker-radio"> <input type="radio" name="optionsRadios-{{radioId}}" value="AM" class="tui-timepicker-radio-am" id="tui-timepicker-radio-am-{{radioId}}"> <label for="tui-timepicker-radio-am-{{radioId}}" class="tui-timepicker-radio-label"> <span class="tui-timepicker-input-radio"></span>{{am}} </label> </div> </li> <li class="tui-timepicker-check"> <div class="tui-timepicker-radio"> <input type="radio" name="optionsRadios-{{radioId}}" value="PM" class="tui-timepicker-radio-pm" id="tui-timepicker-radio-pm-{{radioId}}"> <label for="tui-timepicker-radio-pm-{{radioId}}" class="tui-timepicker-radio-label"> <span class="tui-timepicker-input-radio"></span>{{pm}} </label> </div> </li> </ul> </div> </div>{{else}} <div class="tui-timepicker-column tui-timepicker-selectbox tui-is-add-picker tui-timepicker-meridiem"> <select class="tui-timepicker-select" aria-label="AM/PM"> <option value="AM">{{am}}</option> <option value="PM">{{pm}}</option> </select> </div>{{/if}}';
return template(source, context);
};
}
/******/
])
);
});
})(tuiTimePicker);
return tuiTimePicker.exports;
}
/*!
* TOAST UI Date Picker
* @version 4.3.3
* @author NHN Cloud. FE Development Lab <dl_javascript@nhn.com>
* @license MIT
*/
var hasRequiredTuiDatePicker;
function requireTuiDatePicker() {
if (hasRequiredTuiDatePicker) return tuiDatePicker.exports;
hasRequiredTuiDatePicker = 1;
(function(module, exports) {
(function webpackUniversalModuleDefinition(root, factory) {
module.exports = factory(requireTuiTimePicker());
})(window, function(__WEBPACK_EXTERNAL_MODULE__43__) {
return (
/******/
function(modules) {
var installedModules = {};
function __webpack_require__(moduleId) {
if (installedModules[moduleId]) {
return installedModules[moduleId].exports;
}
var module2 = installedModules[moduleId] = {
/******/
i: moduleId,
/******/
l: false,
/******/
exports: {}
/******/
};
modules[moduleId].call(module2.exports, module2, module2.exports, __webpack_require__);
module2.l = true;
return module2.exports;
}
__webpack_require__.m = modules;
__webpack_require__.c = installedModules;
__webpack_require__.d = function(exports2, name, getter) {
if (!__webpack_require__.o(exports2, name)) {
Object.defineProperty(exports2, name, { enumerable: true, get: getter });
}
};
__webpack_require__.r = function(exports2) {
if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
}
Object.defineProperty(exports2, "__esModule", { value: true });
};
__webpack_require__.t = function(value, mode) {
if (mode & 1) value = __webpack_require__(value);
if (mode & 8) return value;
if (mode & 4 && typeof value === "object" && value && value.__esModule) return value;
var ns = /* @__PURE__ */ Object.create(null);
__webpack_require__.r(ns);
Object.defineProperty(ns, "default", { enumerable: true, value });
if (mode & 2 && typeof value != "string") for (var key in value) __webpack_require__.d(ns, key, (function(key2) {
return value[key2];
}).bind(null, key));
return ns;
};
__webpack_require__.n = function(module2) {
var getter = module2 && module2.__esModule ? (
/******/
function getDefault() {
return module2["default"];
}
) : (
/******/
function getModuleExports() {
return module2;
}
);
__webpack_require__.d(getter, "a", getter);
return getter;
};
__webpack_require__.o = function(object, property) {
return Object.prototype.hasOwnProperty.call(object, property);
};
__webpack_require__.p = "dist";
return __webpack_require__(__webpack_require__.s = 34);
}([
/* 0 */
/***/
function(module2, exports2, __webpack_require__) {
var inherit = __webpack_require__(35);
var extend2 = __webpack_require__(7);
function defineClass(parent, props) {
var obj;
if (!props) {
props = parent;
parent = null;
}
obj = props.init || function() {
};
if (parent) {
inherit(obj, parent);
}
if (props.hasOwnProperty("static")) {
extend2(obj, props["static"]);
delete props["static"];
}
extend2(obj.prototype, props);
return obj;
}
module2.exports = defineClass;
},
/* 1 */
/***/
function(module2, exports2, __webpack_require__) {
module2.exports = {
TYPE_DATE: "date",
TYPE_MONTH: "month",
TYPE_YEAR: "year",
TYPE_HOUR: "hour",
TYPE_MINUTE: "minute",
TYPE_MERIDIEM: "meridiem",
MIN_DATE: new Date(1900, 0, 1),
MAX_DATE: new Date(2999, 11, 31),
DEFAULT_LANGUAGE_TYPE: "en",
CLASS_NAME_SELECTED: "tui-is-selected",
CLASS_NAME_PREV_MONTH_BTN: "tui-calendar-btn-prev-month",
CLASS_NAME_PREV_YEAR_BTN: "tui-calendar-btn-prev-year",
CLASS_NAME_NEXT_YEAR_BTN: "tui-calendar-btn-next-year",
CLASS_NAME_NEXT_MONTH_BTN: "tui-calendar-btn-next-month",
CLASS_NAME_TITLE_TODAY: "tui-calendar-title-today",
DEFAULT_WEEK_START_DAY: "Sun",
WEEK_START_DAY_MAP: {
sun: 0,
mon: 1,
tue: 2,
wed: 3,
thu: 4,
fri: 5,
sat: 6
}
};
},
/* 2 */
/***/
function(module2, exports2, __webpack_require__) {
function forEachArray2(arr, iteratee, context) {
var index = 0;
var len = arr.length;
context = context || null;
for (; index < len; index += 1) {
if (iteratee.call(context, arr[index], index, arr) === false) {
break;
}
}
}
module2.exports = forEachArray2;
},
/* 3 */
/***/
function(module2, exports2, __webpack_require__) {
var isArray2 = __webpack_require__(6);
function inArray(searchElement, array2, startIndex) {
var i2;
var length;
startIndex = startIndex || 0;
if (!isArray2(array2)) {
return -1;
}
if (Array.prototype.indexOf) {
return Array.prototype.indexOf.call(array2, searchElement, startIndex);
}
length = array2.length;
for (i2 = startIndex; startIndex >= 0 && i2 < length; i2 += 1) {
if (array2[i2] === searchElement) {
return i2;
}
}
return -1;
}
module2.exports = inArray;
},
/* 4 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(2);
var isHTMLNode = __webpack_require__(46);
var sendHostname2 = __webpack_require__(47);
var currentId = 0;
var utils = {
/**
* Get a target element
* @param {Event} ev Event object
* @returns {HTMLElement} An event target element
*/
getTarget: function(ev) {
return ev.target || ev.srcElement;
},
/**
* Return the same element with an element or a matched element searched by a selector.
* @param {HTMLElement|string} param HTMLElement or selector
* @returns {HTMLElement} A matched element
*/
getElement: function(param) {
return isHTMLNode(param) ? param : document.querySelector(param);
},
/**
* Get a selector of the element.
* @param {HTMLElement} elem An element
* @returns {string}
*/
getSelector: function(elem) {
var selector = "";
if (elem.id) {
selector = "#" + elem.id;
} else if (elem.className) {
selector = "." + elem.className.split(" ")[0];
}
return selector;
},
/**
* Create an unique id.
* @returns {number}
*/
generateId: function() {
currentId += 1;
return currentId;
},
/**
* Create a new array with all elements that pass the test implemented by the provided function.
* @param {Array} arr - Array that will be traversed
* @param {function} iteratee - iteratee callback function
* @returns {Array}
*/
filter: function(arr, iteratee) {
var result = [];
forEachArray2(arr, function(item) {
if (iteratee(item)) {
result.push(item);
}
});
return result;
},
/**
* Send hostname for GA
* @ignore
*/
sendHostName: function() {
sendHostname2("date-picker", "UA-129987462-1");
}
};
module2.exports = utils;
},
/* 5 */
/***/
function(module2, exports2, __webpack_require__) {
var isDate = __webpack_require__(28);
var isNumber2 = __webpack_require__(15);
var constants = __webpack_require__(1);
var TYPE_DATE = constants.TYPE_DATE;
var TYPE_MONTH = constants.TYPE_MONTH;
var TYPE_YEAR = constants.TYPE_YEAR;
var utils = {
/**
* Get weeks count by paramenter
* @param {number} year A year
* @param {number} month A month
* @returns {number} Weeks count (4~6)
**/
getWeeksCount: function(year, month) {
var firstDay = utils.getFirstDay(year, month), lastDate = utils.getLastDayInMonth(year, month);
return Math.ceil((firstDay + lastDate) / 7);
},
/**
* @param {Date} date - Date instance
* @returns {boolean}
*/
isValidDate: function(date2) {
return isDate(date2) && !isNaN(date2.getTime());
},
/**
* Get which day is first by parameters that include year and month information.
* @param {number} year A year
* @param {number} month A month
* @returns {number} (0~6)
*/
getFirstDay: function(year, month) {
return new Date(year, month - 1, 1).getDay();
},
/**
* Get timestamp of the first day.
* @param {number} year A year
* @param {number} month A month
* @returns {number} timestamp
*/
getFirstDayTimestamp: function(year, month) {
return new Date(year, month, 1).getTime();
},
/**
* Get last date by parameters that include year and month information.
* @param {number} year A year
* @param {number} month A month
* @returns {number} (1~31)
*/
getLastDayInMonth: function(year, month) {
return new Date(year, month, 0).getDate();
},
/**
* Chagne number 0~9 to '00~09'
* @param {number} number number
* @returns {string}
* @example
* dateUtil.prependLeadingZero(0); // '00'
* dateUtil.prependLeadingZero(9); // '09'
* dateUtil.prependLeadingZero(12); // '12'
*/
prependLeadingZero: function(number) {
var prefix = "";
if (number < 10) {
prefix = "0";
}
return prefix + number;
},
/**
* Get meridiem hour
* @param {number} hour - Original hour
* @returns {number} Converted meridiem hour
*/
getMeridiemHour: function(hour) {
hour %= 12;
if (hour === 0) {
hour = 12;
}
return hour;
},
/**
* Returns number or default
* @param {*} any - Any value
* @param {number} defaultNumber - Default number
* @throws Will throw an error if the defaultNumber is invalid.
* @returns {number}
*/
getSafeNumber: function(any, defaultNumber) {
if (isNaN(defaultNumber) || !isNumber2(defaultNumber)) {
throw Error("The defaultNumber must be a valid number.");
}
if (isNaN(any)) {
return defaultNumber;
}
return Number(any);
},
/**
* Return date of the week
* @param {number} year - Year
* @param {number} month - Month
* @param {number} weekNumber - Week number (0~5)
* @param {number} dayNumber - Day number (0: sunday, 1: monday, ....)
* @returns {number}
*/
getDateOfWeek: function(year, month, weekNumber, dayNumber) {
var firstDayOfMonth = new Date(year, month - 1).getDay();
var dateOffset = firstDayOfMonth - dayNumber - 1;
return new Date(year, month - 1, weekNumber * 7 - dateOffset);
},
/**
* Returns range arr
* @param {number} start - Start value
* @param {number} end - End value
* @returns {Array}
*/
getRangeArr: function(start, end) {
var arr = [];
var i2;
if (start > end) {
for (i2 = end; i2 >= start; i2 -= 1) {
arr.push(i2);
}
} else {
for (i2 = start; i2 <= end; i2 += 1) {
arr.push(i2);
}
}
return arr;
},
/**
* Returns cloned date with the start of a unit of time
* @param {Date|number} date - Original date
* @param {string} [type = TYPE_DATE] - Unit type
* @throws {Error}
* @returns {Date}
*/
cloneWithStartOf: function(date2, type) {
type = type || TYPE_DATE;
date2 = new Date(date2);
date2.setHours(0, 0, 0, 0);
switch (type) {
case TYPE_DATE:
break;
case TYPE_MONTH:
date2.setDate(1);
break;
case TYPE_YEAR:
date2.setMonth(0, 1);
break;
default:
throw Error("Unsupported type: " + type);
}
return date2;
},
/**
* Returns cloned date with the end of a unit of time
* @param {Date|number} date - Original date
* @param {string} [type = TYPE_DATE] - Unit type
* @throws {Error}
* @returns {Date}
*/
cloneWithEndOf: function(date2, type) {
type = type || TYPE_DATE;
date2 = new Date(date2);
date2.setHours(23, 59, 59, 999);
switch (type) {
case TYPE_DATE:
break;
case TYPE_MONTH:
date2.setMonth(date2.getMonth() + 1, 0);
break;
case TYPE_YEAR:
date2.setMonth(11, 31);
break;
default:
throw Error("Unsupported type: " + type);
}
return date2;
},
/**
* Compare two dates
* @param {Date|number} dateA - Date
* @param {Date|number} dateB - Date
* @param {string} [cmpLevel] - Comparing level
* @returns {number}
*/
compare: function(dateA, dateB, cmpLevel) {
var aTimestamp, bTimestamp;
if (!(utils.isValidDate(dateA) && utils.isValidDate(dateB))) {
return NaN;
}
if (!cmpLevel) {
aTimestamp = dateA.getTime();
bTimestamp = dateB.getTime();
} else {
aTimestamp = utils.cloneWithStartOf(dateA, cmpLevel).getTime();
bTimestamp = utils.cloneWithStartOf(dateB, cmpLevel).getTime();
}
if (aTimestamp > bTimestamp) {
return 1;
}
return aTimestamp === bTimestamp ? 0 : -1;
},
/**
* Returns whether two dates are same
* @param {Date|number} dateA - Date
* @param {Date|number} dateB - Date
* @param {string} [cmpLevel] - Comparing level
* @returns {boolean}
*/
isSame: function(dateA, dateB, cmpLevel) {
return utils.compare(dateA, dateB, cmpLevel) === 0;
},
/**
* Returns whether the target is in range
* @param {Date|number} start - Range start
* @param {Date|number} end - Range end
* @param {Date|number} target - Target
* @param {string} [cmpLevel = TYPE_DATE] - Comparing level
* @returns {boolean}
*/
inRange: function(start, end, target, cmpLevel) {
return utils.compare(start, target, cmpLevel) < 1 && utils.compare(end, target, cmpLevel) > -1;
}
};
module2.exports = utils;
},
/* 6 */
/***/
function(module2, exports2, __webpack_require__) {
function isArray2(obj) {
return obj instanceof Array;
}
module2.exports = isArray2;
},
/* 7 */
/***/
function(module2, exports2, __webpack_require__) {
function extend2(target, objects) {
var hasOwnProp = Object.prototype.hasOwnProperty;
var source, prop, i2, len;
for (i2 = 1, len = arguments.length; i2 < len; i2 += 1) {
source = arguments[i2];
for (prop in source) {
if (hasOwnProp.call(source, prop)) {
target[prop] = source[prop];
}
}
}
return target;
}
module2.exports = extend2;
},
/* 8 */
/***/
function(module2, exports2, __webpack_require__) {
var extend2 = __webpack_require__(7);
var isExisty2 = __webpack_require__(37);
var isString2 = __webpack_require__(13);
var isObject2 = __webpack_require__(22);
var isArray2 = __webpack_require__(6);
var isFunction2 = __webpack_require__(39);
var forEach2 = __webpack_require__(9);
var R_EVENTNAME_SPLIT2 = /\s+/g;
function CustomEvents2() {
this.events = null;
this.contexts = null;
}
CustomEvents2.mixin = function(func) {
extend2(func.prototype, CustomEvents2.prototype);
};
CustomEvents2.prototype._getHandlerItem = function(handler, context) {
var item = { handler };
if (context) {
item.context = context;
}
return item;
};
CustomEvents2.prototype._safeEvent = function(eventName) {
var events = this.events;
var byName;
if (!events) {
events = this.events = {};
}
if (eventName) {
byName = events[eventName];
if (!byName) {
byName = [];
events[eventName] = byName;
}
events = byName;
}
return events;
};
CustomEvents2.prototype._safeContext = function() {
var context = this.contexts;
if (!context) {
context = this.contexts = [];
}
return context;
};
CustomEvents2.prototype._indexOfContext = function(ctx) {
var context = this._safeContext();
var index = 0;
while (context[index]) {
if (ctx === context[index][0]) {
return index;
}
index += 1;
}
return -1;
};
CustomEvents2.prototype._memorizeContext = function(ctx) {
var context, index;
if (!isExisty2(ctx)) {
return;
}
context = this._safeContext();
index = this._indexOfContext(ctx);
if (index > -1) {
context[index][1] += 1;
} else {
context.push([ctx, 1]);
}
};
CustomEvents2.prototype._forgetContext = function(ctx) {
var context, contextIndex;
if (!isExisty2(ctx)) {
return;
}
context = this._safeContext();
contextIndex = this._indexOfContext(ctx);
if (contextIndex > -1) {
context[contextIndex][1] -= 1;
if (context[contextIndex][1] <= 0) {
context.splice(contextIndex, 1);
}
}
};
CustomEvents2.prototype._bindEvent = function(eventName, handler, context) {
var events = this._safeEvent(eventName);
this._memorizeContext(context);
events.push(this._getHandlerItem(handler, context));
};
CustomEvents2.prototype.on = function(eventName, handler, context) {
var self2 = this;
if (isString2(eventName)) {
eventName = eventName.split(R_EVENTNAME_SPLIT2);
forEach2(eventName, function(name) {
self2._bindEvent(name, handler, context);
});
} else if (isObject2(eventName)) {
context = handler;
forEach2(eventName, function(func, name) {
self2.on(name, func, context);
});
}
};
CustomEvents2.prototype.once = function(eventName, handler, context) {
var self2 = this;
if (isObject2(eventName)) {
context = handler;
forEach2(eventName, function(func, name) {
self2.once(name, func, context);
});
return;
}
function onceHandler() {
handler.apply(context, arguments);
self2.off(eventName, onceHandler, context);
}
this.on(eventName, onceHandler, context);
};
CustomEvents2.prototype._spliceMatches = function(arr, predicate) {
var i2 = 0;
var len;
if (!isArray2(arr)) {
return;
}
for (len = arr.length; i2 < len; i2 += 1) {
if (predicate(arr[i2]) === true) {
arr.splice(i2, 1);
len -= 1;
i2 -= 1;
}
}
};
CustomEvents2.prototype._matchHandler = function(handler) {
var self2 = this;
return function(item) {
var needRemove = handler === item.handler;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents2.prototype._matchContext = function(context) {
var self2 = this;
return function(item) {
var needRemove = context === item.context;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents2.prototype._matchHandlerAndContext = function(handler, context) {
var self2 = this;
return function(item) {
var matchHandler = handler === item.handler;
var matchContext = context === item.context;
var needRemove = matchHandler && matchContext;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents2.prototype._offByEventName = function(eventName, handler) {
var self2 = this;
var andByHandler = isFunction2(handler);
var matchHandler = self2._matchHandler(handler);
eventName = eventName.split(R_EVENTNAME_SPLIT2);
forEach2(eventName, function(name) {
var handlerItems = self2._safeEvent(name);
if (andByHandler) {
self2._spliceMatches(handlerItems, matchHandler);
} else {
forEach2(handlerItems, function(item) {
self2._forgetContext(item.context);
});
self2.events[name] = [];
}
});
};
CustomEvents2.prototype._offByHandler = function(handler) {
var self2 = this;
var matchHandler = this._matchHandler(handler);
forEach2(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchHandler);
});
};
CustomEvents2.prototype._offByObject = function(obj, handler) {
var self2 = this;
var matchFunc;
if (this._indexOfContext(obj) < 0) {
forEach2(obj, function(func, name) {
self2.off(name, func);
});
} else if (isString2(handler)) {
matchFunc = this._matchContext(obj);
self2._spliceMatches(this._safeEvent(handler), matchFunc);
} else if (isFunction2(handler)) {
matchFunc = this._matchHandlerAndContext(handler, obj);
forEach2(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchFunc);
});
} else {
matchFunc = this._matchContext(obj);
forEach2(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchFunc);
});
}
};
CustomEvents2.prototype.off = function(eventName, handler) {
if (isString2(eventName)) {
this._offByEventName(eventName, handler);
} else if (!arguments.length) {
this.events = {};
this.contexts = [];
} else if (isFunction2(eventName)) {
this._offByHandler(eventName);
} else if (isObject2(eventName)) {
this._offByObject(eventName, handler);
}
};
CustomEvents2.prototype.fire = function(eventName) {
this.invoke.apply(this, arguments);
};
CustomEvents2.prototype.invoke = function(eventName) {
var events, args, index, item;
if (!this.hasListener(eventName)) {
return true;
}
events = this._safeEvent(eventName);
args = Array.prototype.slice.call(arguments, 1);
index = 0;
while (events[index]) {
item = events[index];
if (item.handler.apply(item.context, args) === false) {
return false;
}
index += 1;
}
return true;
};
CustomEvents2.prototype.hasListener = function(eventName) {
return this.getListenerLength(eventName) > 0;
};
CustomEvents2.prototype.getListenerLength = function(eventName) {
var events = this._safeEvent(eventName);
return events.length;
};
module2.exports = CustomEvents2;
},
/* 9 */
/***/
function(module2, exports2, __webpack_require__) {
var isArray2 = __webpack_require__(6);
var forEachArray2 = __webpack_require__(2);
var forEachOwnProperties2 = __webpack_require__(23);
function forEach2(obj, iteratee, context) {
if (isArray2(obj)) {
forEachArray2(obj, iteratee, context);
} else {
forEachOwnProperties2(obj, iteratee, context);
}
}
module2.exports = forEach2;
},
/* 10 */
/***/
function(module2, exports2, __webpack_require__) {
module2.exports = {
en: {
titles: {
DD: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
D: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
MMM: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
MMMM: [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
},
titleFormat: "MMMM yyyy",
todayFormat: "To\\d\\ay: DD, MMMM d, yyyy",
time: "Time",
date: "Date"
},
ko: {
titles: {
DD: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
D: ["일", "월", "화", "수", "목", "금", "토"],
MMM: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
MMMM: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
},
titleFormat: "yyyy.MM",
todayFormat: "오늘: yyyy.MM.dd (D)",
date: "날짜",
time: "시간"
}
};
},
/* 11 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(3);
var forEach2 = __webpack_require__(9);
var isArray2 = __webpack_require__(6);
var isString2 = __webpack_require__(13);
var extend2 = __webpack_require__(7);
var EXPRESSION_REGEXP = /{{\s?|\s?}}/g;
var BRACKET_NOTATION_REGEXP = /^[a-zA-Z0-9_@]+\[[a-zA-Z0-9_@"']+\]$/;
var BRACKET_REGEXP = /\[\s?|\s?\]/;
var DOT_NOTATION_REGEXP = /^[a-zA-Z_]+\.[a-zA-Z_]+$/;
var DOT_REGEXP = /\./;
var STRING_NOTATION_REGEXP = /^["']\w+["']$/;
var STRING_REGEXP = /"|'/g;
var NUMBER_REGEXP = /^-?\d+\.?\d*$/;
var EXPRESSION_INTERVAL = 2;
var BLOCK_HELPERS = {
"if": handleIf,
"each": handleEach,
"with": handleWith
};
var isValidSplit = "a".split(/a/).length === 3;
var splitByRegExp = function() {
if (isValidSplit) {
return function(text, regexp) {
return text.split(regexp);
};
}
return function(text, regexp) {
var result = [];
var prevIndex = 0;
var match, index;
if (!regexp.global) {
regexp = new RegExp(regexp, "g");
}
match = regexp.exec(text);
while (match !== null) {
index = match.index;
result.push(text.slice(prevIndex, index));
prevIndex = index + match[0].length;
match = regexp.exec(text);
}
result.push(text.slice(prevIndex));
return result;
};
}();
function getValueFromContext(exp, context) {
var splitedExps;
var value = context[exp];
if (exp === "true") {
value = true;
} else if (exp === "false") {
value = false;
} else if (STRING_NOTATION_REGEXP.test(exp)) {
value = exp.replace(STRING_REGEXP, "");
} else if (BRACKET_NOTATION_REGEXP.test(exp)) {
splitedExps = exp.split(BRACKET_REGEXP);
value = getValueFromContext(splitedExps[0], context)[getValueFromContext(splitedExps[1], context)];
} else if (DOT_NOTATION_REGEXP.test(exp)) {
splitedExps = exp.split(DOT_REGEXP);
value = getValueFromContext(splitedExps[0], context)[splitedExps[1]];
} else if (NUMBER_REGEXP.test(exp)) {
value = parseFloat(exp);
}
return value;
}
function extractElseif(ifExps, sourcesInsideBlock) {
var exps = [ifExps];
var sourcesInsideIf = [];
var otherIfCount = 0;
var start = 0;
forEach2(sourcesInsideBlock, function(source, index) {
if (source.indexOf("if") === 0) {
otherIfCount += 1;
} else if (source === "/if") {
otherIfCount -= 1;
} else if (!otherIfCount && (source.indexOf("elseif") === 0 || source === "else")) {
exps.push(source === "else" ? ["true"] : source.split(" ").slice(1));
sourcesInsideIf.push(sourcesInsideBlock.slice(start, index));
start = index + 1;
}
});
sourcesInsideIf.push(sourcesInsideBlock.slice(start));
return {
exps,
sourcesInsideIf
};
}
function handleIf(exps, sourcesInsideBlock, context) {
var analyzed = extractElseif(exps, sourcesInsideBlock);
var result = false;
var compiledSource = "";
forEach2(analyzed.exps, function(exp, index) {
result = handleExpression(exp, context);
if (result) {
compiledSource = compile(analyzed.sourcesInsideIf[index], context);
}
return !result;
});
return compiledSource;
}
function handleEach(exps, sourcesInsideBlock, context) {
var collection = handleExpression(exps, context);
var additionalKey = isArray2(collection) ? "@index" : "@key";
var additionalContext = {};
var result = "";
forEach2(collection, function(item, key) {
additionalContext[additionalKey] = key;
additionalContext["@this"] = item;
extend2(context, additionalContext);
result += compile(sourcesInsideBlock.slice(), context);
});
return result;
}
function handleWith(exps, sourcesInsideBlock, context) {
var asIndex = inArray("as", exps);
var alias = exps[asIndex + 1];
var result = handleExpression(exps.slice(0, asIndex), context);
var additionalContext = {};
additionalContext[alias] = result;
return compile(sourcesInsideBlock, extend2(context, additionalContext)) || "";
}
function extractSourcesInsideBlock(sources, start, end) {
var sourcesInsideBlock = sources.splice(start + 1, end - start);
sourcesInsideBlock.pop();
return sourcesInsideBlock;
}
function handleBlockHelper(helperKeyword, sourcesToEnd, context) {
var executeBlockHelper = BLOCK_HELPERS[helperKeyword];
var helperCount = 1;
var startBlockIndex = 0;
var endBlockIndex;
var index = startBlockIndex + EXPRESSION_INTERVAL;
var expression = sourcesToEnd[index];
while (helperCount && isString2(expression)) {
if (expression.indexOf(helperKeyword) === 0) {
helperCount += 1;
} else if (expression.indexOf("/" + helperKeyword) === 0) {
helperCount -= 1;
endBlockIndex = index;
}
index += EXPRESSION_INTERVAL;
expression = sourcesToEnd[index];
}
if (helperCount) {
throw Error(helperKeyword + " needs {{/" + helperKeyword + "}} expression.");
}
sourcesToEnd[startBlockIndex] = executeBlockHelper(
sourcesToEnd[startBlockIndex].split(" ").slice(1),
extractSourcesInsideBlock(sourcesToEnd, startBlockIndex, endBlockIndex),
context
);
return sourcesToEnd;
}
function handleExpression(exps, context) {
var result = getValueFromContext(exps[0], context);
if (result instanceof Function) {
return executeFunction(result, exps.slice(1), context);
}
return result;
}
function executeFunction(helper, argExps, context) {
var args = [];
forEach2(argExps, function(exp) {
args.push(getValueFromContext(exp, context));
});
return helper.apply(null, args);
}
function compile(sources, context) {
var index = 1;
var expression = sources[index];
var exps, firstExp, result;
while (isString2(expression)) {
exps = expression.split(" ");
firstExp = exps[0];
if (BLOCK_HELPERS[firstExp]) {
result = handleBlockHelper(firstExp, sources.splice(index, sources.length - index), context);
sources = sources.concat(result);
} else {
sources[index] = handleExpression(exps, context);
}
index += EXPRESSION_INTERVAL;
expression = sources[index];
}
return sources.join("");
}
function template(text, context) {
return compile(splitByRegExp(text, EXPRESSION_REGEXP), context);
}
module2.exports = template;
},
/* 12 */
/***/
function(module2, exports2, __webpack_require__) {
function isUndefined2(obj) {
return obj === void 0;
}
module2.exports = isUndefined2;
},
/* 13 */
/***/
function(module2, exports2, __webpack_require__) {
function isString2(obj) {
return typeof obj === "string" || obj instanceof String;
}
module2.exports = isString2;
},
/* 14 */
/***/
function(module2, exports2, __webpack_require__) {
function removeElement(element) {
if (element && element.parentNode) {
element.parentNode.removeChild(element);
}
}
module2.exports = removeElement;
},
/* 15 */
/***/
function(module2, exports2, __webpack_require__) {
function isNumber2(obj) {
return typeof obj === "number" || obj instanceof Number;
}
module2.exports = isNumber2;
},
/* 16 */
/***/
function(module2, exports2, __webpack_require__) {
var forEach2 = __webpack_require__(9);
var inArray = __webpack_require__(3);
var getClass = __webpack_require__(17);
var setClassName = __webpack_require__(24);
function addClass(element) {
var cssClass = Array.prototype.slice.call(arguments, 1);
var classList = element.classList;
var newClass = [];
var origin;
if (classList) {
forEach2(cssClass, function(name) {
element.classList.add(name);
});
return;
}
origin = getClass(element);
if (origin) {
cssClass = [].concat(origin.split(/\s+/), cssClass);
}
forEach2(cssClass, function(cls2) {
if (inArray(cls2, newClass) < 0) {
newClass.push(cls2);
}
});
setClassName(element, newClass);
}
module2.exports = addClass;
},
/* 17 */
/***/
function(module2, exports2, __webpack_require__) {
var isUndefined2 = __webpack_require__(12);
function getClass(element) {
if (!element || !element.className) {
return "";
}
if (isUndefined2(element.className.baseVal)) {
return element.className;
}
return element.className.baseVal;
}
module2.exports = getClass;
},
/* 18 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(2);
var inArray = __webpack_require__(3);
var getClass = __webpack_require__(17);
var setClassName = __webpack_require__(24);
function removeClass(element) {
var cssClass = Array.prototype.slice.call(arguments, 1);
var classList = element.classList;
var origin, newClass;
if (classList) {
forEachArray2(cssClass, function(name) {
classList.remove(name);
});
return;
}
origin = getClass(element).split(/\s+/);
newClass = [];
forEachArray2(origin, function(name) {
if (inArray(name, cssClass) < 0) {
newClass.push(name);
}
});
setClassName(element, newClass);
}
module2.exports = removeClass;
},
/* 19 */
/***/
function(module2, exports2, __webpack_require__) {
var on2 = __webpack_require__(31);
var off = __webpack_require__(33);
var mouseTouchEvent = {
/**
* Detect mobile browser
* @type {boolean} Whether using Mobile browser
* @private
*/
_isMobile: function() {
return /Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(
navigator.userAgent
);
}(),
/**
* Return a matched event type by a mouse event type
* @param {string} type A mouse event type - mousedown, click
* @returns {string}
* @private
*/
_getEventType: function(type) {
if (this._isMobile) {
if (type === "mousedown") {
type = "touchstart";
} else if (type === "click") {
type = "touchend";
}
}
return type;
},
/**
* Bind touch or mouse events
* @param {HTMLElement} element An element to bind
* @param {string} type A mouse event type - mousedown, click
* @param {Function} handler A handler function
* @param {object} [context] A context for handler.
*/
on: function(element, type, handler, context) {
on2(element, this._getEventType(type), handler, context);
},
/**
* Unbind touch or mouse events
* @param {HTMLElement} element - Target element
* @param {string} type A mouse event type - mousedown, click
* @param {Function} handler - Handler
*/
off: function(element, type, handler) {
off(element, this._getEventType(type), handler);
}
};
module2.exports = mouseTouchEvent;
},
/* 20 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var removeElement = __webpack_require__(14);
var localeText = __webpack_require__(10);
var DEFAULT_LANGUAGE_TYPE = __webpack_require__(1).DEFAULT_LANGUAGE_TYPE;
var LayerBase = defineClass(
/** @lends LayerBase.prototype */
{
init: function(language) {
language = language || DEFAULT_LANGUAGE_TYPE;
this._element = null;
this._localeText = localeText[language];
this._type = "base";
},
/**
* Make context
* @abstract
* @throws {Error}
* @returns {object}
* @private
*/
_makeContext: function() {
throwOverrideError(this.getType(), "_makeContext");
},
/**
* Render the layer element
* @abstract
* @throws {Error}
*/
render: function() {
throwOverrideError(this.getType(), "render");
},
/**
* Returns date elements
* @abstract
* @throws {Error}
* @returns {HTMLElement[]}
*/
getDateElements: function() {
throwOverrideError(this.getType(), "getDateElements");
},
/**
* Returns layer type
* @returns {string}
*/
getType: function() {
return this._type;
},
/**
* Set language
* @param {string} language - Language name
*/
changeLanguage: function(language) {
this._localeText = localeText[language];
},
/**
* Remove elements
*/
remove: function() {
if (this._element) {
removeElement(this._element);
}
this._element = null;
}
}
);
function throwOverrideError(layerType, methodName) {
throw new Error(layerType + ' layer does not have the "' + methodName + '" method.');
}
module2.exports = LayerBase;
},
/* 21 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(3);
var forEachArray2 = __webpack_require__(2);
var defineClass = __webpack_require__(0);
var CustomEvents2 = __webpack_require__(8);
var addClass = __webpack_require__(16);
var closest = __webpack_require__(25);
var getData = __webpack_require__(26);
var hasClass = __webpack_require__(27);
var removeClass = __webpack_require__(18);
var removeElement = __webpack_require__(14);
var extend2 = __webpack_require__(7);
var isArray2 = __webpack_require__(6);
var isDate = __webpack_require__(28);
var isNumber2 = __webpack_require__(15);
var isObject2 = __webpack_require__(22);
var TimePicker = __webpack_require__(43);
var Calendar2 = __webpack_require__(29);
var RangeModel = __webpack_require__(56);
var constants = __webpack_require__(1);
var localeTexts = __webpack_require__(10);
var dateUtil = __webpack_require__(5);
var util = __webpack_require__(4);
var mouseTouchEvent = __webpack_require__(19);
var tmpl = __webpack_require__(58);
var DatePickerInput = __webpack_require__(59);
var DEFAULT_WEEK_START_DAY = constants.DEFAULT_WEEK_START_DAY;
var DEFAULT_LANGUAGE_TYPE = constants.DEFAULT_LANGUAGE_TYPE;
var TYPE_DATE = constants.TYPE_DATE;
var TYPE_MONTH = constants.TYPE_MONTH;
var TYPE_YEAR = constants.TYPE_YEAR;
var CLASS_NAME_NEXT_YEAR_BTN = constants.CLASS_NAME_NEXT_YEAR_BTN;
var CLASS_NAME_NEXT_MONTH_BTN = constants.CLASS_NAME_NEXT_MONTH_BTN;
var CLASS_NAME_PREV_YEAR_BTN = constants.CLASS_NAME_PREV_YEAR_BTN;
var CLASS_NAME_PREV_MONTH_BTN = constants.CLASS_NAME_PREV_MONTH_BTN;
var CLASS_NAME_SELECTED = constants.CLASS_NAME_SELECTED;
var CLASS_NAME_TITLE_TODAY = constants.CLASS_NAME_TITLE_TODAY;
var CLASS_NAME_SELECTABLE = "tui-is-selectable";
var CLASS_NAME_BLOCKED = "tui-is-blocked";
var CLASS_NAME_CHECKED = "tui-is-checked";
var CLASS_NAME_SELECTOR_BUTTON = "tui-datepicker-selector-button";
var CLASS_NAME_TODAY = "tui-calendar-today";
var CLASS_NAME_HIDDEN = "tui-hidden";
var SELECTOR_BODY = ".tui-datepicker-body";
var SELECTOR_DATE_ICO = ".tui-ico-date";
var SELECTOR_CALENDAR_TITLE = ".tui-calendar-title";
var SELECTOR_CALENDAR_CONTAINER = ".tui-calendar-container";
var SELECTOR_TIMEPICKER_CONTAINER = ".tui-timepicker-container";
var mergeDefaultOption = function(option) {
option = extend2(
{
language: DEFAULT_LANGUAGE_TYPE,
calendar: {},
input: {
element: null,
format: null
},
timePicker: null,
date: null,
showAlways: false,
type: TYPE_DATE,
selectableRanges: null,
openers: [],
autoClose: true,
usageStatistics: true,
weekStartDay: DEFAULT_WEEK_START_DAY
},
option
);
option.selectableRanges = option.selectableRanges || [[constants.MIN_DATE, constants.MAX_DATE]];
if (!isObject2(option.calendar)) {
throw new Error("Calendar option must be an object");
}
if (!isObject2(option.input)) {
throw new Error("Input option must be an object");
}
if (!isArray2(option.selectableRanges)) {
throw new Error("Selectable-ranges must be a 2d-array");
}
option.localeText = localeTexts[option.language];
option.calendar.language = option.language;
option.calendar.type = option.type;
option.timePicker = option.timePicker || option.timepicker;
return option;
};
var DatePicker2 = defineClass(
/** @lends DatePicker.prototype */
{
static: {
/**
* Locale text data. English('en') and Korean('ko') are provided as default.
* @type {object}
* @memberof DatePicker
* @static
* @example
* DatePicker.localeTexts['customKey'] = {
* titles: {
* // days
* DD: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
* // daysShort
* D: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
* // months
* MMMM: [
* 'January', 'February', 'March', 'April', 'May', 'June',
* 'July', 'August', 'September', 'October', 'November', 'December'
* ],
* // monthsShort
* MMM: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
* },
* titleFormat: 'MMM yyyy',
* todayFormat: 'D, MMMM dd, yyyy',
* date: 'Date',
* time: 'Time'
* };
*
* const datepicker = new DatePicker('#datepicker-container', {
* language: 'customKey'
* });
*/
localeTexts
},
init: function(container, options) {
options = mergeDefaultOption(options);
this._language = options.language;
this._container = util.getElement(container);
this._container.innerHTML = tmpl(
extend2(options, {
isTab: options.timePicker && options.timePicker.layoutType === "tab"
})
);
this._element = this._container.firstChild;
this._calendar = new Calendar2(
this._element.querySelector(SELECTOR_CALENDAR_CONTAINER),
extend2(options.calendar, {
usageStatistics: options.usageStatistics,
weekStartDay: options.weekStartDay
})
);
this._timePicker = null;
this._datepickerInput = null;
this._date = null;
this._rangeModel = null;
this._openers = [];
this._isEnabled = true;
this._id = "tui-datepicker-" + util.generateId();
this._type = options.type;
this.showAlways = options.showAlways;
this.autoClose = options.autoClose;
this._initializeDatePicker(options);
},
/**
* Initialize method
* @param {Object} option - user option
* @private
*/
_initializeDatePicker: function(option) {
this.setRanges(option.selectableRanges);
this._setEvents();
this._initTimePicker(option.timePicker, option.usageStatistics);
this.setInput(option.input.element);
this.setDateFormat(option.input.format);
this.setDate(option.date);
forEachArray2(option.openers, this.addOpener, this);
if (!this.showAlways) {
this._hide();
}
if (this.getType() === TYPE_DATE) {
addClass(this._element.querySelector(SELECTOR_BODY), "tui-datepicker-type-date");
}
},
/**
* Set events on the date picker's element
* @param {object} option - Constructor option
* @private
*/
_setEvents: function() {
mouseTouchEvent.on(this._element, "click", this._onClickHandler, this);
this._calendar.on("draw", this._onDrawCalendar, this);
},
/**
* Remove events on the date picker's element
* @private
*/
_removeEvents: function() {
mouseTouchEvent.off(this._element, "click", this._onClickHandler, this);
this._calendar.off();
},
/**
* Set events on the document
* @private
*/
_setDocumentEvents: function() {
mouseTouchEvent.on(document, "mousedown", this._onMousedownDocument, this);
},
/**
* Remove events on the document
* @private
*/
_removeDocumentEvents: function() {
mouseTouchEvent.off(document, "mousedown", this._onMousedownDocument);
},
/**
* Set events on the opener
* @param {HTMLElement} opener An opener to bind the events
* @private
*/
_setOpenerEvents: function(opener) {
mouseTouchEvent.on(opener, "click", this.toggle, this);
},
/**
* Remove events on the opener
* @param {HTMLElement} opener An opener to unbind the events
* @private
*/
_removeOpenerEvents: function(opener) {
mouseTouchEvent.off(opener, "click", this.toggle);
},
/**
* Set TimePicker instance
* @param {object|boolean} opTimePicker - TimePicker instance options
* @param {boolean} usageStatistics - GA tracking options
* @private
*/
_initTimePicker: function(opTimePicker, usageStatistics) {
var layoutType;
if (!opTimePicker) {
return;
}
layoutType = opTimePicker.layoutType || "";
if (isObject2(opTimePicker)) {
opTimePicker.usageStatistics = usageStatistics;
} else {
opTimePicker = {
usageStatistics
};
}
this._timePicker = new TimePicker(
this._element.querySelector(SELECTOR_TIMEPICKER_CONTAINER),
opTimePicker
);
if (layoutType.toLowerCase() === "tab") {
this._timePicker.hide();
}
this._timePicker.on(
"change",
function(ev) {
var prevDate;
if (this._date) {
prevDate = new Date(this._date);
this.setDate(prevDate.setHours(ev.hour, ev.minute));
}
},
this
);
},
/**
* Change picker's type by a selector button.
* @param {HTMLElement} target A target element
* @private
*/
_changePicker: function(target) {
var btnSelector = "." + CLASS_NAME_SELECTOR_BUTTON;
var selectedBtn = closest(target, btnSelector);
var isDateElement = !!selectedBtn.querySelector(SELECTOR_DATE_ICO);
if (isDateElement) {
this._calendar.show();
this._timePicker.hide();
} else {
this._calendar.hide();
this._timePicker.show();
}
removeClass(this._element.querySelector("." + CLASS_NAME_CHECKED), CLASS_NAME_CHECKED);
addClass(selectedBtn, CLASS_NAME_CHECKED);
},
/**
* Returns whether the element is opener
* @param {string|HTMLElement} element - Element or selector
* @returns {boolean}
* @private
*/
_isOpener: function(element) {
var el = util.getElement(element);
return inArray(el, this._openers) > -1;
},
/**
* add/remove today-class-name to date element
* @param {HTMLElement} el - date element
* @private
*/
_setTodayClassName: function(el) {
var timestamp, isToday;
if (this.getCalendarType() !== TYPE_DATE) {
return;
}
timestamp = Number(getData(el, "timestamp"));
isToday = timestamp === (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0);
if (isToday) {
addClass(el, CLASS_NAME_TODAY);
} else {
removeClass(el, CLASS_NAME_TODAY);
}
},
/**
* add/remove selectable-class-name to date element
* @param {HTMLElement} el - date element
* @private
*/
_setSelectableClassName: function(el) {
var elDate = new Date(Number(getData(el, "timestamp")));
if (this._isSelectableOnCalendar(elDate)) {
addClass(el, CLASS_NAME_SELECTABLE);
removeClass(el, CLASS_NAME_BLOCKED);
} else {
removeClass(el, CLASS_NAME_SELECTABLE);
addClass(el, CLASS_NAME_BLOCKED);
}
},
/**
* add/remove selected-class-name to date element
* @param {HTMLElement} el - date element
* @private
*/
_setSelectedClassName: function(el) {
var elDate = new Date(Number(getData(el, "timestamp")));
if (this._isSelectedOnCalendar(elDate)) {
addClass(el, CLASS_NAME_SELECTED);
} else {
removeClass(el, CLASS_NAME_SELECTED);
}
},
/**
* Returns whether the date is selectable on calendar
* @param {Date} date - Date instance
* @returns {boolean}
* @private
*/
_isSelectableOnCalendar: function(date2) {
var type = this.getCalendarType();
var start = dateUtil.cloneWithStartOf(date2, type).getTime();
var end = dateUtil.cloneWithEndOf(date2, type).getTime();
return this._rangeModel.hasOverlap(start, end);
},
/**
* Returns whether the date is selected on calendar
* @param {Date} date - Date instance
* @returns {boolean}
* @private
*/
_isSelectedOnCalendar: function(date2) {
var curDate = this.getDate();
var calendarType = this.getCalendarType();
return curDate && dateUtil.isSame(curDate, date2, calendarType);
},
/**
* Show the date picker element
* @private
*/
_show: function() {
removeClass(this._element, CLASS_NAME_HIDDEN);
},
/**
* Hide the date picker element
* @private
*/
_hide: function() {
addClass(this._element, CLASS_NAME_HIDDEN);
},
/**
* Set value a date-string of current this instance to input element
* @private
*/
_syncToInput: function() {
if (!this._date) {
return;
}
this._datepickerInput.setDate(this._date);
},
/**
* Set date from input value
* @param {boolean} [shouldRollback = false] - Should rollback from unselectable or error
* @private
*/
_syncFromInput: function(shouldRollback) {
var isFailed = false;
var date2;
try {
date2 = this._datepickerInput.getDate();
if (this.isSelectable(date2)) {
if (this._timePicker) {
this._timePicker.setTime(date2.getHours(), date2.getMinutes());
}
this.setDate(date2);
} else {
isFailed = true;
}
} catch (err) {
this.fire("error", {
type: "ParsingError",
message: err.message
});
isFailed = true;
} finally {
if (isFailed) {
if (shouldRollback) {
this._syncToInput();
} else {
this.setNull();
}
}
}
},
/**
* Event handler for mousedown of document<br>
* - When click the out of layer, close the layer
* @param {Event} ev - Event object
* @private
*/
_onMousedownDocument: function(ev) {
var target = util.getTarget(ev);
var selector = util.getSelector(target);
var isContain = selector ? this._element.querySelector(selector) : false;
var isInput = this._datepickerInput.is(target);
var isInOpener = inArray(target, this._openers) > -1;
var shouldClose = !(this.showAlways || isInput || isContain || isInOpener);
if (shouldClose) {
this.close();
}
},
/**
* Event handler for click of calendar
* @param {Event} ev An event object
* @private
*/
_onClickHandler: function(ev) {
var target = util.getTarget(ev);
if (closest(target, "." + CLASS_NAME_SELECTABLE)) {
ev.preventDefault();
this._updateDate(target);
} else if (closest(target, "." + CLASS_NAME_TITLE_TODAY)) {
ev.preventDefault();
this._updateDateToToday();
} else if (closest(target, SELECTOR_CALENDAR_TITLE)) {
this.drawUpperCalendar(this._date);
} else if (closest(target, "." + CLASS_NAME_SELECTOR_BUTTON)) {
this._changePicker(target);
}
},
/**
* Update date to today
* @private
*/
_updateDateToToday: function() {
this.setDate(Date.now());
this.close();
},
/**
* Update date from event-target
* @param {HTMLElement} target An event target element
* @private
*/
_updateDate: function(target) {
var timestamp = Number(getData(target, "timestamp"));
var newDate = new Date(timestamp);
var timePicker = this._timePicker;
var prevDate = this._date;
var calendarType = this.getCalendarType();
var pickerType = this.getType();
if (calendarType !== pickerType) {
this.drawLowerCalendar(newDate);
} else {
if (timePicker) {
newDate.setHours(timePicker.getHour(), timePicker.getMinute());
} else if (prevDate) {
newDate.setHours(prevDate.getHours(), prevDate.getMinutes());
}
this.setDate(newDate);
if (!this.showAlways && this.autoClose) {
this.close();
}
}
},
/**
* Event handler for 'draw'-custom event of calendar
* @param {Object} eventData - custom event data
* @see {@link Calendar#draw}
* @private
*/
_onDrawCalendar: function(eventData) {
forEachArray2(
eventData.dateElements,
function(el) {
this._setTodayClassName(el);
this._setSelectableClassName(el);
this._setSelectedClassName(el);
},
this
);
this._setDisplayHeadButtons();
this.fire("draw", eventData);
},
/**
* Hide useless buttons (next, next-year, prev, prev-year)
* @see Don't save buttons reference. The buttons are rerendered every "calendar.draw".
* @private
*/
_setDisplayHeadButtons: function() {
var customStep = 60;
var nextYearDate = this._calendar.getNextYearDate(
this.getCalendarType() === TYPE_YEAR ? customStep : null
);
var prevYearDate = this._calendar.getPrevYearDate(
this.getCalendarType() === TYPE_YEAR ? -60 : null
);
var maxTimestamp = this._rangeModel.getMaximumValue();
var minTimestamp = this._rangeModel.getMinimumValue();
var nextYearBtn = this._element.querySelector("." + CLASS_NAME_NEXT_YEAR_BTN);
var prevYearBtn = this._element.querySelector("." + CLASS_NAME_PREV_YEAR_BTN);
var nextMonthDate, prevMonthDate, nextMonBtn, prevMonBtn;
if (this.getCalendarType() === TYPE_DATE) {
nextMonthDate = dateUtil.cloneWithStartOf(this._calendar.getNextDate(), TYPE_MONTH);
prevMonthDate = dateUtil.cloneWithEndOf(this._calendar.getPrevDate(), TYPE_MONTH);
nextMonBtn = this._element.querySelector("." + CLASS_NAME_NEXT_MONTH_BTN);
prevMonBtn = this._element.querySelector("." + CLASS_NAME_PREV_MONTH_BTN);
this._setDisplay(nextMonBtn, nextMonthDate.getTime() <= maxTimestamp);
this._setDisplay(prevMonBtn, prevMonthDate.getTime() >= minTimestamp);
prevYearDate.setDate(1);
nextYearDate.setDate(1);
} else {
prevYearDate.setMonth(12, 0);
nextYearDate.setMonth(0, 1);
}
this._setDisplay(nextYearBtn, nextYearDate.getTime() <= maxTimestamp);
this._setDisplay(prevYearBtn, prevYearDate.getTime() >= minTimestamp);
},
/**
* Set display show/hide by condition
* @param {HTMLElement} el - An Element
* @param {boolean} shouldShow - Condition
* @private
*/
_setDisplay: function(el, shouldShow) {
if (el) {
if (shouldShow) {
removeClass(el, CLASS_NAME_HIDDEN);
} else {
addClass(el, CLASS_NAME_HIDDEN);
}
}
},
/**
* Input change handler
* @private
* @throws {Error}
*/
_onChangeInput: function() {
this._syncFromInput(true);
},
/**
* Returns whether the date is changed
* @param {Date} date - Date
* @returns {boolean}
* @private
*/
_isChanged: function(date2) {
var prevDate = this.getDate();
return !prevDate || date2.getTime() !== prevDate.getTime();
},
/**
* Refresh datepicker
* @private
*/
_refreshFromRanges: function() {
if (!this.isSelectable(this._date)) {
this.setNull();
} else {
this._calendar.draw();
}
},
/**
* Return the current calendar's type.
* @returns {('date'|'month'|'year')}
*/
getCalendarType: function() {
return this._calendar.getType();
},
/**
* Return the date picker's type.
* @returns {('date'|'month'|'year')}
*/
getType: function() {
return this._type;
},
/**
* Return whether the date is selectable.
* @param {Date} date - Date to check
* @returns {boolean}
*/
isSelectable: function(date2) {
var type = this.getType();
var start, end;
if (!dateUtil.isValidDate(date2)) {
return false;
}
start = dateUtil.cloneWithStartOf(date2, type).getTime();
end = dateUtil.cloneWithEndOf(date2, type).getTime();
return this._rangeModel.hasOverlap(start, end);
},
/**
* Return whether the date is selected.
* @param {Date} date - Date to check
* @returns {boolean}
*/
isSelected: function(date2) {
return dateUtil.isValidDate(date2) && dateUtil.isSame(this._date, date2, this.getType());
},
/**
* Set selectable ranges. Previous ranges will be removed.
* @param {Array.<Array<Date|number>>} ranges - Selectable ranges. Use Date instances or numbers(timestamp).
* @example
* datepicker.setRanges([
* [new Date(2017, 0, 1), new Date(2018, 0, 2)],
* [new Date(2015, 2, 3), new Date(2016, 4, 2)]
* ]);
*/
setRanges: function(ranges) {
var result = [];
forEachArray2(ranges, function(range2) {
var start = new Date(range2[0]).getTime();
var end = new Date(range2[1]).getTime();
result.push([start, end]);
});
this._rangeModel = new RangeModel(result);
this._refreshFromRanges();
},
/**
* Set the calendar's type.
* @param {('date'|'month'|'year')} type - Calendar type
* @example
* datepicker.setType('month');
*/
setType: function(type) {
this._type = type;
},
/**
* Add a selectable range. Use Date instances or numbers(timestamp).
* @param {Date|number} start - the start date
* @param {Date|number} end - the end date
* @example
* const start = new Date(2015, 1, 3);
* const end = new Date(2015, 2, 6);
*
* datepicker.addRange(start, end);
*/
addRange: function(start, end) {
start = new Date(start).getTime();
end = new Date(end).getTime();
this._rangeModel.add(start, end);
this._refreshFromRanges();
},
/**
* Remove a range. Use Date instances or numbers(timestamp).
* @param {Date|number} start - the start date
* @param {Date|number} end - the end date
* @param {null|'date'|'month'|'year'} type - Range type. If falsy, start and end values are considered as timestamp
* @example
* const start = new Date(2015, 1, 3);
* const end = new Date(2015, 2, 6);
*
* datepicker.removeRange(start, end);
*/
removeRange: function(start, end, type) {
start = new Date(start);
end = new Date(end);
if (type) {
start = dateUtil.cloneWithStartOf(start, type);
end = dateUtil.cloneWithEndOf(end, type);
}
this._rangeModel.exclude(start.getTime(), end.getTime());
this._refreshFromRanges();
},
/**
* Add an opener.
* @param {HTMLElement|string} opener - element or selector of opener
*/
addOpener: function(opener) {
opener = util.getElement(opener);
if (!this._isOpener(opener)) {
this._openers.push(opener);
this._setOpenerEvents(opener);
}
},
/**
* Remove an opener.
* @param {HTMLElement|string} opener - element or selector of opener
*/
removeOpener: function(opener) {
var index;
opener = util.getElement(opener);
index = inArray(opener, this._openers);
if (index > -1) {
this._removeOpenerEvents(opener);
this._openers.splice(index, 1);
}
},
/**
* Remove all openers.
*/
removeAllOpeners: function() {
forEachArray2(
this._openers,
function(opener) {
this._removeOpenerEvents(opener);
},
this
);
this._openers = [];
},
/**
* Open the date picker.
* @example
* datepicker.open();
*/
open: function() {
if (this.isOpened() || !this._isEnabled) {
return;
}
this._calendar.draw({
date: this._date,
type: this._type
});
this._show();
if (!this.showAlways) {
this._setDocumentEvents();
}
this.fire("open");
},
/**
* Raise the calendar type. (date -> month -> year)
* @param {Date} [date] - Date to set
*/
drawUpperCalendar: function(date2) {
var calendarType = this.getCalendarType();
if (calendarType === TYPE_DATE) {
this._calendar.draw({
date: date2,
type: TYPE_MONTH
});
} else if (calendarType === TYPE_MONTH) {
this._calendar.draw({
date: date2,
type: TYPE_YEAR
});
}
},
/**
* Lower the calendar type. (year -> month -> date)
* @param {Date} [date] - Date to set
*/
drawLowerCalendar: function(date2) {
var calendarType = this.getCalendarType();
var pickerType = this.getType();
var isLast = calendarType === pickerType;
if (isLast) {
return;
}
if (calendarType === TYPE_MONTH) {
this._calendar.draw({
date: date2,
type: TYPE_DATE
});
} else if (calendarType === TYPE_YEAR) {
this._calendar.draw({
date: date2,
type: TYPE_MONTH
});
}
},
/**
* Close the date picker.
* @exmaple
* datepicker.close();
*/
close: function() {
if (!this.isOpened()) {
return;
}
this._removeDocumentEvents();
this._hide();
this.fire("close");
},
/**
* Toggle the date picker.
* @example
* datepicker.toggle();
*/
toggle: function() {
if (this.isOpened()) {
this.close();
} else {
this.open();
}
},
/**
* Return the selected date.
* @returns {?Date} - selected date
* @example
* // 2015-04-13
* datepicker.getDate(); // new Date(2015, 3, 13)
*/
getDate: function() {
if (!this._date) {
return null;
}
return new Date(this._date);
},
/**
* Select the date.
* @param {Date|number} date - Date instance or timestamp to set
* @param {boolean} [silent] - Prevents firing 'change' event if it is true.
* @example
* datepicker.setDate(new Date()); // Set today
*/
// eslint-disable-next-line complexity
setDate: function(date2, silent) {
var isValidInput, newDate, shouldUpdate;
if (date2 === null) {
this.setNull();
return;
}
isValidInput = isNumber2(date2) || isDate(date2);
newDate = new Date(date2);
shouldUpdate = isValidInput && this._isChanged(newDate) && this.isSelectable(newDate);
if (shouldUpdate) {
newDate = new Date(date2);
this._date = newDate;
this._calendar.draw({ date: newDate });
if (this._timePicker) {
this._timePicker.setTime(newDate.getHours(), newDate.getMinutes(), true);
}
this._syncToInput();
if (!silent) {
this.fire("change");
}
}
},
/**
* Set no date to be selected. (Selected date: null)
*/
setNull: function() {
var calendarDate = this._calendar.getDate();
var isChagned = this._date !== null;
this._date = null;
if (this._datepickerInput) {
this._datepickerInput.clearText();
}
if (this._timePicker) {
this._timePicker.setTime(0, 0);
}
if (!this.isSelectable(calendarDate)) {
this._calendar.draw({
date: new Date(this._rangeModel.getMinimumValue())
});
} else {
this._calendar.draw();
}
if (isChagned) {
this.fire("change");
}
},
/**
* Select the date by the date string format.
* @param {String} [format] - Date string format
* @example
* datepicker.setDateFormat('yyyy-MM-dd');
* datepicker.setDateFormat('MM-dd, yyyy');
* datepicker.setDateFormat('yy/M/d');
* datepicker.setDateFormat('yy/MM/dd');
*/
setDateFormat: function(format) {
this._datepickerInput.setFormat(format);
this._syncToInput();
},
/**
* Return whether the datepicker opens or not
* @returns {boolean}
* @example
* datepicker.close();
* datepicker.isOpened(); // false
*
* datepicker.open();
* datepicker.isOpened(); // true
*/
isOpened: function() {
return !hasClass(this._element, CLASS_NAME_HIDDEN);
},
/**
* Return the time picker instance
* @returns {?TimePicker} - TimePicker instance
* @see {@link https://nhn.github.io/tui.time-picker/latest tui-time-picker}
* @example
* const timePicker = this.getTimePicker();
*/
getTimePicker: function() {
return this._timePicker;
},
/**
* Return the calendar instance.
* @see {@link calendar Calendar}
* @returns {Calendar}
*/
getCalendar: function() {
return this._calendar;
},
/**
* Return the locale text object.
* @see {@link DatePicker#localeTexts DatePicker.localeTexts}
* @returns {object}
*/
getLocaleText: function() {
return localeTexts[this._language] || localeTexts[DEFAULT_LANGUAGE_TYPE];
},
/**
* Set the input element
* @param {string|HTMLElement} element - Input element or selector
* @param {object} [options] - Input option
* @param {string} [options.format = prevInput.format] - Format of the Date string in the input
* @param {boolean} [options.syncFromInput = false] - Whether set the date from the input
*/
setInput: function(element, options) {
var prev = this._datepickerInput;
var localeText = this.getLocaleText();
var prevFormat;
options = options || {};
if (prev) {
prevFormat = prev.getFormat();
prev.destroy();
}
this._datepickerInput = new DatePickerInput(element, {
format: options.format || prevFormat,
id: this._id,
localeText
});
this._datepickerInput.on(
{
change: this._onChangeInput,
click: this.open
},
this
);
if (options.syncFromInput) {
this._syncFromInput();
} else {
this._syncToInput();
}
},
/**
* Enable the date picker.
*/
enable: function() {
if (this._isEnabled) {
return;
}
this._isEnabled = true;
this._datepickerInput.enable();
forEachArray2(
this._openers,
function(opener) {
opener.removeAttribute("disabled");
this._setOpenerEvents(opener);
},
this
);
},
/**
* Disable the date picker.
*/
disable: function() {
if (!this._isEnabled) {
return;
}
this._isEnabled = false;
this.close();
this._datepickerInput.disable();
forEachArray2(
this._openers,
function(opener) {
opener.setAttribute("disabled", true);
this._removeOpenerEvents(opener);
},
this
);
},
/**
* Return whether the date picker is disabled
* @returns {boolean}
*/
isDisabled: function() {
return !this._isEnabled;
},
/**
* Apply a CSS class to the date picker.
* @param {string} className - Class name
*/
addCssClass: function(className2) {
addClass(this._element, className2);
},
/**
* Remove a CSS class from the date picker.
* @param {string} className - Class name
*/
removeCssClass: function(className2) {
removeClass(this._element, className2);
},
/**
* Return the date elements on the calendar.
* @returns {HTMLElement[]}
*/
getDateElements: function() {
return this._calendar.getDateElements();
},
/**
* Return the first overlapped range from the point or range.
* @param {Date|number} startDate - Start date to find overlapped range
* @param {Date|number} endDate - End date to find overlapped range
* @returns {Array.<Date>} - \[startDate, endDate]
*/
findOverlappedRange: function(startDate, endDate) {
var startTimestamp = new Date(startDate).getTime();
var endTimestamp = new Date(endDate).getTime();
var overlappedRange = this._rangeModel.findOverlappedRange(startTimestamp, endTimestamp);
return [new Date(overlappedRange[0]), new Date(overlappedRange[1])];
},
/**
* Change language.
* @param {string} language - Language code. English('en') and Korean('ko') are provided as default.
* @see To set to the other languages, use {@link DatePicker#localeTexts DatePicker.localeTexts}.
*/
changeLanguage: function(language) {
this._language = language;
this._calendar.changeLanguage(this._language);
this._datepickerInput.changeLocaleTitles(this.getLocaleText().titles);
this.setDateFormat(this._datepickerInput.getFormat());
if (this._timePicker) {
this._timePicker.changeLanguage(this._language);
}
},
/**
* Destroy the date picker.
*/
destroy: function() {
this._removeDocumentEvents();
this._calendar.destroy();
if (this._timePicker) {
this._timePicker.destroy();
}
if (this._datepickerInput) {
this._datepickerInput.destroy();
}
this._removeEvents();
removeElement(this._element);
this.removeAllOpeners();
this._calendar = this._timePicker = this._datepickerInput = this._container = this._element = this._date = this._rangeModel = this._openers = this._isEnabled = this._id = null;
}
}
);
CustomEvents2.mixin(DatePicker2);
module2.exports = DatePicker2;
},
/* 22 */
/***/
function(module2, exports2, __webpack_require__) {
function isObject2(obj) {
return obj === Object(obj);
}
module2.exports = isObject2;
},
/* 23 */
/***/
function(module2, exports2, __webpack_require__) {
function forEachOwnProperties2(obj, iteratee, context) {
var key;
context = context || null;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (iteratee.call(context, obj[key], key, obj) === false) {
break;
}
}
}
}
module2.exports = forEachOwnProperties2;
},
/* 24 */
/***/
function(module2, exports2, __webpack_require__) {
var isArray2 = __webpack_require__(6);
var isUndefined2 = __webpack_require__(12);
function setClassName(element, cssClass) {
cssClass = isArray2(cssClass) ? cssClass.join(" ") : cssClass;
cssClass = cssClass.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
if (isUndefined2(element.className.baseVal)) {
element.className = cssClass;
return;
}
element.className.baseVal = cssClass;
}
module2.exports = setClassName;
},
/* 25 */
/***/
function(module2, exports2, __webpack_require__) {
var matches = __webpack_require__(40);
function closest(element, selector) {
var parent = element.parentNode;
if (matches(element, selector)) {
return element;
}
while (parent && parent !== document) {
if (matches(parent, selector)) {
return parent;
}
parent = parent.parentNode;
}
return null;
}
module2.exports = closest;
},
/* 26 */
/***/
function(module2, exports2, __webpack_require__) {
var convertToKebabCase = __webpack_require__(42);
function getData(element, key) {
if (element.dataset) {
return element.dataset[key];
}
return element.getAttribute("data-" + convertToKebabCase(key));
}
module2.exports = getData;
},
/* 27 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(3);
var getClass = __webpack_require__(17);
function hasClass(element, cssClass) {
var origin;
if (element.classList) {
return element.classList.contains(cssClass);
}
origin = getClass(element).split(/\s+/);
return inArray(cssClass, origin) > -1;
}
module2.exports = hasClass;
},
/* 28 */
/***/
function(module2, exports2, __webpack_require__) {
function isDate(obj) {
return obj instanceof Date;
}
module2.exports = isDate;
},
/* 29 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var CustomEvents2 = __webpack_require__(8);
var addClass = __webpack_require__(16);
var hasClass = __webpack_require__(27);
var removeClass = __webpack_require__(18);
var removeElement = __webpack_require__(14);
var extend2 = __webpack_require__(7);
var Header = __webpack_require__(44);
var Body = __webpack_require__(49);
var localeTexts = __webpack_require__(10);
var constants = __webpack_require__(1);
var dateUtil = __webpack_require__(5);
var util = __webpack_require__(4);
var DEFAULT_WEEK_START_DAY = constants.DEFAULT_WEEK_START_DAY;
var DEFAULT_LANGUAGE_TYPE = constants.DEFAULT_LANGUAGE_TYPE;
var TYPE_DATE = constants.TYPE_DATE;
var TYPE_MONTH = constants.TYPE_MONTH;
var TYPE_YEAR = constants.TYPE_YEAR;
var CLASS_NAME_PREV_MONTH_BTN = constants.CLASS_NAME_PREV_MONTH_BTN;
var CLASS_NAME_PREV_YEAR_BTN = constants.CLASS_NAME_PREV_YEAR_BTN;
var CLASS_NAME_NEXT_YEAR_BTN = constants.CLASS_NAME_NEXT_YEAR_BTN;
var CLASS_NAME_NEXT_MONTH_BTN = constants.CLASS_NAME_NEXT_MONTH_BTN;
var CLASS_NAME_CALENDAR_MONTH = "tui-calendar-month";
var CLASS_NAME_CALENDAR_YEAR = "tui-calendar-year";
var CLASS_NAME_HIDDEN = "tui-hidden";
var HEADER_SELECTOR = ".tui-calendar-header";
var BODY_SELECTOR = ".tui-calendar-body";
var Calendar2 = defineClass(
/** @lends Calendar.prototype */
{
static: {
localeTexts
},
init: function(container, options) {
options = extend2(
{
language: DEFAULT_LANGUAGE_TYPE,
showToday: true,
showJumpButtons: false,
date: /* @__PURE__ */ new Date(),
type: TYPE_DATE,
usageStatistics: true,
weekStartDay: DEFAULT_WEEK_START_DAY
},
options
);
this._container = util.getElement(container);
this._container.innerHTML = '<div class="tui-calendar"> <div class="tui-calendar-header"></div> <div class="tui-calendar-body"></div></div>';
this._element = this._container.firstChild;
this._date = null;
this._type = null;
this._header = null;
this._body = null;
this._initHeader(options);
this._initBody(options);
this.draw({
date: options.date,
type: options.type
});
if (options.usageStatistics) {
util.sendHostName();
}
},
/**
* Initialize header
* @param {object} options - Header options
* @private
*/
_initHeader: function(options) {
var headerContainer = this._element.querySelector(HEADER_SELECTOR);
this._header = new Header(headerContainer, options);
this._header.on(
"click",
function(ev) {
var target = util.getTarget(ev);
if (hasClass(target, CLASS_NAME_PREV_MONTH_BTN)) {
this.drawPrev();
} else if (hasClass(target, CLASS_NAME_PREV_YEAR_BTN)) {
this._onClickPrevYear();
} else if (hasClass(target, CLASS_NAME_NEXT_MONTH_BTN)) {
this.drawNext();
} else if (hasClass(target, CLASS_NAME_NEXT_YEAR_BTN)) {
this._onClickNextYear();
}
},
this
);
},
/**
* Initialize body
* @param {object} options - Body options
* @private
*/
_initBody: function(options) {
var bodyContainer = this._element.querySelector(BODY_SELECTOR);
this._body = new Body(bodyContainer, options);
},
/**
* clickHandler - prev year button
* @private
*/
_onClickPrevYear: function() {
if (this.getType() === TYPE_DATE) {
this.draw({
date: this._getRelativeDate(-12)
});
} else {
this.drawPrev();
}
},
/**
* clickHandler - next year button
* @private
*/
_onClickNextYear: function() {
if (this.getType() === TYPE_DATE) {
this.draw({
date: this._getRelativeDate(12)
});
} else {
this.drawNext();
}
},
/**
* Returns whether the layer type is valid
* @param {string} type - Layer type to check
* @returns {boolean}
* @private
*/
_isValidType: function(type) {
return type === TYPE_DATE || type === TYPE_MONTH || type === TYPE_YEAR;
},
/**
* @param {Date} date - Date to draw
* @param {string} type - Layer type to draw
* @returns {boolean}
* @private
*/
_shouldUpdate: function(date2, type) {
var prevDate = this._date;
if (!dateUtil.isValidDate(date2)) {
throw new Error("Invalid date");
}
if (!this._isValidType(type)) {
throw new Error("Invalid layer type");
}
return !prevDate || prevDate.getFullYear() !== date2.getFullYear() || prevDate.getMonth() !== date2.getMonth() || this.getType() !== type;
},
/**
* Render header & body elements
* @private
*/
_render: function() {
var date2 = this._date;
var type = this.getType();
this._header.render(date2, type);
this._body.render(date2, type);
removeClass(this._element, CLASS_NAME_CALENDAR_MONTH, CLASS_NAME_CALENDAR_YEAR);
switch (type) {
case TYPE_MONTH:
addClass(this._element, CLASS_NAME_CALENDAR_MONTH);
break;
case TYPE_YEAR:
addClass(this._element, CLASS_NAME_CALENDAR_YEAR);
break;
}
},
/**
* Returns relative date
* @param {number} step - Month step
* @returns {Date}
* @private
*/
_getRelativeDate: function(step) {
var prev = this._date;
return new Date(prev.getFullYear(), prev.getMonth() + step);
},
/**
* Draw the calendar.
* @param {Object} [options] - Draw options
* @param {Date} [options.date] - Date to set
* @param {('date'|'month'|'year')} [options.type = 'date'] - Calendar type. Determine whether to show a date, month, or year.
* @example
* calendar.draw();
* calendar.draw({
* date: new Date()
* });
* calendar.draw({
* type: 'month'
* });
* calendar.draw({
* type: 'month',
* date: new Date()
* });
*/
draw: function(options) {
var date2, type;
options = options || {};
date2 = options.date || this._date;
type = (options.type || this.getType()).toLowerCase();
if (this._shouldUpdate(date2, type)) {
this._date = date2;
this._type = type;
this._render();
}
this.fire("draw", {
date: this._date,
type,
dateElements: this._body.getDateElements()
});
},
/**
* Show the calendar.
*/
show: function() {
removeClass(this._element, CLASS_NAME_HIDDEN);
},
/**
* Hide the calendar.
*/
hide: function() {
addClass(this._element, CLASS_NAME_HIDDEN);
},
/**
* Draw the next page.
*/
drawNext: function() {
this.draw({
date: this.getNextDate()
});
},
/**
* Draw the previous page.
*/
drawPrev: function() {
this.draw({
date: this.getPrevDate()
});
},
/**
* Return the next date.
* @returns {Date}
*/
getNextDate: function() {
if (this.getType() === TYPE_DATE) {
return this._getRelativeDate(1);
}
return this.getNextYearDate();
},
/**
* Return the previous date.
* @returns {Date}
*/
getPrevDate: function() {
if (this.getType() === TYPE_DATE) {
return this._getRelativeDate(-1);
}
return this.getPrevYearDate();
},
/**
* Return the date a year later.
* @param {number} [customStep] - custom step for getting relative date
* @returns {Date}
*/
getNextYearDate: function(customStep) {
if (customStep) {
return this._getRelativeDate(customStep);
}
switch (this.getType()) {
case TYPE_DATE:
case TYPE_MONTH:
return this._getRelativeDate(12);
// 12 months = 1 year
case TYPE_YEAR:
return this._getRelativeDate(108);
// 108 months = 9 years = 12 * 9
default:
throw new Error("Unknown layer type");
}
},
/**
* Return the date a year previously.
* @param {number} [customStep] - custom step for getting relative date
* @returns {Date}
*/
getPrevYearDate: function(customStep) {
if (customStep) {
return this._getRelativeDate(customStep);
}
switch (this.getType()) {
case TYPE_DATE:
case TYPE_MONTH:
return this._getRelativeDate(-12);
// 12 months = 1 year
case TYPE_YEAR:
return this._getRelativeDate(-108);
// 108 months = 9 years = 12 * 9
default:
throw new Error("Unknown layer type");
}
},
/**
* Change language.
* @param {string} language - Language code. English('en') and Korean('ko') are provided as default.
* @see To set to the other languages, use {@link DatePicker#localeTexts DatePicker.localeTexts}.
*/
changeLanguage: function(language) {
this._header.changeLanguage(language);
this._body.changeLanguage(language);
this._render();
},
/**
* Return the rendered date.
* @returns {Date}
*/
getDate: function() {
return new Date(this._date);
},
/**
* Return the calendar's type.
* @returns {('date'|'month'|'year')}
*/
getType: function() {
return this._type;
},
/**
* Returns HTML elements for dates.
* @returns {HTMLElement[]}
*/
getDateElements: function() {
return this._body.getDateElements();
},
/**
* Apply a CSS class to the calendar.
* @param {string} className - Class name
*/
addCssClass: function(className2) {
addClass(this._element, className2);
},
/**
* Remove a CSS class from the calendar.
* @param {string} className - Class name
*/
removeCssClass: function(className2) {
removeClass(this._element, className2);
},
/**
* Destroy the calendar.
*/
destroy: function() {
this._header.destroy();
this._body.destroy();
removeElement(this._element);
this._type = this._date = this._container = this._element = this._header = this._body = null;
}
}
);
CustomEvents2.mixin(Calendar2);
module2.exports = Calendar2;
},
/* 30 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(3);
var forEachArray2 = __webpack_require__(2);
var defineClass = __webpack_require__(0);
var util = __webpack_require__(4);
var dateUtil = __webpack_require__(5);
var constants = __webpack_require__(1);
var localeTexts = __webpack_require__(10);
var rFormableKeys = /\\?(yyyy|yy|mmmm|mmm|mm|m|dd|d|hh|h|a)/gi;
var mapForConverting = {
yyyy: {
expression: "(\\d{4}|\\d{2})",
type: constants.TYPE_YEAR
},
yy: {
expression: "(\\d{4}|\\d{2})",
type: constants.TYPE_YEAR
},
y: {
expression: "(\\d{4}|\\d{2})",
type: constants.TYPE_YEAR
},
M: {
expression: "(1[012]|0[1-9]|[1-9])",
type: constants.TYPE_MONTH
},
MM: {
expression: "(1[012]|0[1-9]|[1-9])",
type: constants.TYPE_MONTH
},
MMM: {
expression: "(1[012]|0[1-9]|[1-9])",
type: constants.TYPE_MONTH
},
MMMM: {
expression: "(1[012]|0[1-9]|[1-9])",
type: constants.TYPE_MONTH
},
mmm: {
expression: "(1[012]|0[1-9]|[1-9])",
type: constants.TYPE_MONTH
},
mmmm: {
expression: "(1[012]|0[1-9]|[1-9])",
type: constants.TYPE_MONTH
},
dd: {
expression: "([12]\\d{1}|3[01]|0[1-9]|[1-9])",
type: constants.TYPE_DATE
},
d: {
expression: "([12]\\d{1}|3[01]|0[1-9]|[1-9])",
type: constants.TYPE_DATE
},
D: {
expression: "([12]\\d{1}|3[01]|0[1-9]|[1-9])",
type: constants.TYPE_DATE
},
DD: {
expression: "([12]\\d{1}|3[01]|0[1-9]|[1-9])",
type: constants.TYPE_DATE
},
h: {
expression: "(d{1}|0\\d{1}|1\\d{1}|2[0123])",
type: constants.TYPE_HOUR
},
hh: {
expression: "(d{1}|[01]\\d{1}|2[0123])",
type: constants.TYPE_HOUR
},
H: {
expression: "(d{1}|0\\d{1}|1\\d{1}|2[0123])",
type: constants.TYPE_HOUR
},
HH: {
expression: "(d{1}|[01]\\d{1}|2[0123])",
type: constants.TYPE_HOUR
},
m: {
expression: "(d{1}|[012345]\\d{1})",
type: constants.TYPE_MINUTE
},
mm: {
expression: "(d{1}|[012345]\\d{1})",
type: constants.TYPE_MINUTE
},
a: {
expression: "([ap]m)",
type: constants.TYPE_MERIDIEM
},
A: {
expression: "([ap]m)",
type: constants.TYPE_MERIDIEM
}
};
var DateTimeFormatter = defineClass(
/** @lends DateTimeFormatter.prototype */
{
init: function(rawStr, titles) {
this._rawStr = rawStr;
this._keyOrder = null;
this._regExp = null;
this._titles = titles || localeTexts.en.titles;
this._parseFormat();
},
/**
* Parse initial format and make the keyOrder, regExp
* @private
*/
_parseFormat: function() {
var regExpStr = "^";
var matchedKeys = this._rawStr.match(rFormableKeys);
var keyOrder = [];
matchedKeys = util.filter(matchedKeys, function(key) {
return key[0] !== "\\";
});
forEachArray2(matchedKeys, function(key, index) {
if (!/m/i.test(key)) {
key = key.toLowerCase();
}
regExpStr += mapForConverting[key].expression + "[\\D\\s]*";
keyOrder[index] = mapForConverting[key].type;
});
regExpStr += "$";
this._keyOrder = keyOrder;
this._regExp = new RegExp(regExpStr, "gi");
},
/**
* Parse string to dateHash
* @param {string} str - Date string
* @returns {Date}
*/
parse: function(str) {
var dateHash = {
year: 0,
month: 1,
date: 1,
hour: 0,
minute: 0
};
var hasMeridiem = false;
var isPM = false;
var matched;
this._regExp.lastIndex = 0;
matched = this._regExp.exec(str);
if (!matched) {
throw Error('DateTimeFormatter: Not matched - "' + str + '"');
}
forEachArray2(this._keyOrder, function(name, index) {
var value = matched[index + 1];
if (name === constants.TYPE_MERIDIEM && /[ap]m/i.test(value)) {
hasMeridiem = true;
isPM = /pm/i.test(value);
} else {
value = Number(value);
if (value !== 0 && !value) {
throw Error("DateTimeFormatter: Unknown value - " + matched[index + 1]);
}
if (name === constants.TYPE_YEAR && value < 100) {
value += 2e3;
}
dateHash[name] = value;
}
});
if (hasMeridiem) {
isPM = isPM || dateHash.hour > 12;
dateHash.hour %= 12;
if (isPM) {
dateHash.hour += 12;
}
}
return new Date(
dateHash.year,
dateHash.month - 1,
dateHash.date,
dateHash.hour,
dateHash.minute
);
},
/**
* Returns raw string of format
* @returns {string}
*/
getRawString: function() {
return this._rawStr;
},
/**
* Format date to string
* @param {Date} dateObj - Date object
* @returns {string}
*/
format: function(dateObj) {
var year = dateObj.getFullYear();
var month = dateObj.getMonth() + 1;
var dayInMonth = dateObj.getDate();
var day = dateObj.getDay();
var hour = dateObj.getHours();
var minute = dateObj.getMinutes();
var meridiem = "a";
var replaceMap;
if (inArray(constants.TYPE_MERIDIEM, this._keyOrder) > -1) {
meridiem = hour >= 12 ? "pm" : "am";
hour = dateUtil.getMeridiemHour(hour);
}
replaceMap = {
yyyy: year,
yy: String(year).substr(2, 2),
M: month,
MM: dateUtil.prependLeadingZero(month),
MMM: this._titles.MMM[month - 1],
MMMM: this._titles.MMMM[month - 1],
d: dayInMonth,
dd: dateUtil.prependLeadingZero(dayInMonth),
D: this._titles.D[day],
DD: this._titles.DD[day],
hh: dateUtil.prependLeadingZero(hour),
h: hour,
mm: dateUtil.prependLeadingZero(minute),
m: minute,
A: meridiem.toUpperCase(),
a: meridiem
};
return this._rawStr.replace(rFormableKeys, function(key) {
if (key[0] === "\\") {
return key.substr(1);
}
return replaceMap[key] || replaceMap[key.toLowerCase()] || "";
});
}
}
);
module2.exports = DateTimeFormatter;
},
/* 31 */
/***/
function(module2, exports2, __webpack_require__) {
var isString2 = __webpack_require__(13);
var forEach2 = __webpack_require__(9);
var safeEvent = __webpack_require__(32);
function on2(element, types, handler, context) {
if (isString2(types)) {
forEach2(types.split(/\s+/g), function(type) {
bindEvent(element, type, handler, context);
});
return;
}
forEach2(types, function(func, type) {
bindEvent(element, type, func, handler);
});
}
function bindEvent(element, type, handler, context) {
function eventHandler(e2) {
handler.call(context || element, e2 || window.event);
}
if ("addEventListener" in element) {
element.addEventListener(type, eventHandler);
} else if ("attachEvent" in element) {
element.attachEvent("on" + type, eventHandler);
}
memorizeHandler(element, type, handler, eventHandler);
}
function memorizeHandler(element, type, handler, wrappedHandler) {
var events = safeEvent(element, type);
var existInEvents = false;
forEach2(events, function(obj) {
if (obj.handler === handler) {
existInEvents = true;
return false;
}
return true;
});
if (!existInEvents) {
events.push({
handler,
wrappedHandler
});
}
}
module2.exports = on2;
},
/* 32 */
/***/
function(module2, exports2, __webpack_require__) {
var EVENT_KEY = "_feEventKey";
function safeEvent(element, type) {
var events = element[EVENT_KEY];
var handlers;
if (!events) {
events = element[EVENT_KEY] = {};
}
handlers = events[type];
if (!handlers) {
handlers = events[type] = [];
}
return handlers;
}
module2.exports = safeEvent;
},
/* 33 */
/***/
function(module2, exports2, __webpack_require__) {
var isString2 = __webpack_require__(13);
var forEach2 = __webpack_require__(9);
var safeEvent = __webpack_require__(32);
function off(element, types, handler) {
if (isString2(types)) {
forEach2(types.split(/\s+/g), function(type) {
unbindEvent(element, type, handler);
});
return;
}
forEach2(types, function(func, type) {
unbindEvent(element, type, func);
});
}
function unbindEvent(element, type, handler) {
var events = safeEvent(element, type);
var index;
if (!handler) {
forEach2(events, function(item) {
removeHandler(element, type, item.wrappedHandler);
});
events.splice(0, events.length);
} else {
forEach2(events, function(item, idx) {
if (handler === item.handler) {
removeHandler(element, type, item.wrappedHandler);
index = idx;
return false;
}
return true;
});
events.splice(index, 1);
}
}
function removeHandler(element, type, handler) {
if ("removeEventListener" in element) {
element.removeEventListener(type, handler);
} else if ("detachEvent" in element) {
element.detachEvent("on" + type, handler);
}
}
module2.exports = off;
},
/* 34 */
/***/
function(module2, exports2, __webpack_require__) {
var DatePicker2 = __webpack_require__(21);
var DateRangePicker = __webpack_require__(60);
var Calendar2 = __webpack_require__(29);
__webpack_require__(61);
DatePicker2.createCalendar = function(wrapperElement, options) {
return new Calendar2(wrapperElement, options);
};
DatePicker2.createRangePicker = function(options) {
return new DateRangePicker(options);
};
module2.exports = DatePicker2;
},
/* 35 */
/***/
function(module2, exports2, __webpack_require__) {
var createObject = __webpack_require__(36);
function inherit(subType, superType) {
var prototype = createObject(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
module2.exports = inherit;
},
/* 36 */
/***/
function(module2, exports2, __webpack_require__) {
function createObject(obj) {
function F2() {
}
F2.prototype = obj;
return new F2();
}
module2.exports = createObject;
},
/* 37 */
/***/
function(module2, exports2, __webpack_require__) {
var isUndefined2 = __webpack_require__(12);
var isNull2 = __webpack_require__(38);
function isExisty2(param) {
return !isUndefined2(param) && !isNull2(param);
}
module2.exports = isExisty2;
},
/* 38 */
/***/
function(module2, exports2, __webpack_require__) {
function isNull2(obj) {
return obj === null;
}
module2.exports = isNull2;
},
/* 39 */
/***/
function(module2, exports2, __webpack_require__) {
function isFunction2(obj) {
return obj instanceof Function;
}
module2.exports = isFunction2;
},
/* 40 */
/***/
function(module2, exports2, __webpack_require__) {
var inArray = __webpack_require__(3);
var toArray = __webpack_require__(41);
var elProto2 = Element.prototype;
var matchSelector = elProto2.matches || elProto2.webkitMatchesSelector || elProto2.mozMatchesSelector || elProto2.msMatchesSelector || function(selector) {
var doc = this.document || this.ownerDocument;
return inArray(this, toArray(doc.querySelectorAll(selector))) > -1;
};
function matches(element, selector) {
return matchSelector.call(element, selector);
}
module2.exports = matches;
},
/* 41 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(2);
function toArray(arrayLike) {
var arr;
try {
arr = Array.prototype.slice.call(arrayLike);
} catch (e2) {
arr = [];
forEachArray2(arrayLike, function(value) {
arr.push(value);
});
}
return arr;
}
module2.exports = toArray;
},
/* 42 */
/***/
function(module2, exports2, __webpack_require__) {
function convertToKebabCase(key) {
return key.replace(/([A-Z])/g, function(match) {
return "-" + match.toLowerCase();
});
}
module2.exports = convertToKebabCase;
},
/* 43 */
/***/
function(module2, exports2) {
module2.exports = __WEBPACK_EXTERNAL_MODULE__43__;
},
/* 44 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var CustomEvents2 = __webpack_require__(8);
var closest = __webpack_require__(25);
var removeElement = __webpack_require__(14);
var localeTexts = __webpack_require__(10);
var headerTmpl = __webpack_require__(45);
var DateTimeFormatter = __webpack_require__(30);
var constants = __webpack_require__(1);
var util = __webpack_require__(4);
var mouseTouchEvent = __webpack_require__(19);
var TYPE_DATE = constants.TYPE_DATE;
var TYPE_MONTH = constants.TYPE_MONTH;
var TYPE_YEAR = constants.TYPE_YEAR;
var CLASS_NAME_TITLE_MONTH = "tui-calendar-title-month";
var CLASS_NAME_TITLE_YEAR = "tui-calendar-title-year";
var CLASS_NAME_TITLE_YEAR_TO_YEAR = "tui-calendar-title-year-to-year";
var SELECTOR_INNER_ELEM = ".tui-calendar-header-inner";
var SELECTOR_INFO_ELEM = ".tui-calendar-header-info";
var SELECTOR_BTN = ".tui-calendar-btn";
var YEAR_TITLE_FORMAT = "yyyy";
var Header = defineClass(
/** @lends Header.prototype */
{
init: function(container, option) {
this._container = util.getElement(container);
this._innerElement = null;
this._infoElement = null;
this._showToday = option.showToday;
this._showJumpButtons = option.showJumpButtons;
this._yearMonthTitleFormatter = null;
this._yearTitleFormatter = null;
this._todayFormatter = null;
this._setFormatters(localeTexts[option.language]);
this._setEvents(option);
},
/**
* @param {object} localeText - Locale text
* @private
*/
_setFormatters: function(localeText) {
this._yearMonthTitleFormatter = new DateTimeFormatter(
localeText.titleFormat,
localeText.titles
);
this._yearTitleFormatter = new DateTimeFormatter(YEAR_TITLE_FORMAT, localeText.titles);
this._todayFormatter = new DateTimeFormatter(localeText.todayFormat, localeText.titles);
},
/**
* @param {object} option - Constructor option
* @private
*/
_setEvents: function() {
mouseTouchEvent.on(this._container, "click", this._onClickHandler, this);
},
/**
* @private
*/
_removeEvents: function() {
this.off();
mouseTouchEvent.off(this._container, "click", this._onClickHandler);
},
/**
* Fire customEvents
* @param {Event} ev An event object
* @private
*/
_onClickHandler: function(ev) {
var target = util.getTarget(ev);
if (closest(target, SELECTOR_BTN)) {
this.fire("click", ev);
}
},
/**
* @param {string} type - Calendar type
* @returns {string}
* @private
*/
_getTitleClass: function(type) {
switch (type) {
case TYPE_DATE:
return CLASS_NAME_TITLE_MONTH;
case TYPE_MONTH:
return CLASS_NAME_TITLE_YEAR;
case TYPE_YEAR:
return CLASS_NAME_TITLE_YEAR_TO_YEAR;
default:
return "";
}
},
/**
* @param {Date} date - date
* @param {string} type - Calendar type
* @returns {string}
* @private
*/
_getTitleText: function(date2, type) {
var currentYear, start, end;
switch (type) {
case TYPE_DATE:
return this._yearMonthTitleFormatter.format(date2);
case TYPE_MONTH:
return this._yearTitleFormatter.format(date2);
case TYPE_YEAR:
currentYear = date2.getFullYear();
start = new Date(currentYear - 4, 0, 1);
end = new Date(currentYear + 4, 0, 1);
return this._yearTitleFormatter.format(start) + " - " + this._yearTitleFormatter.format(end);
default:
return "";
}
},
/**
* Change langauge
* @param {string} language - Language
*/
changeLanguage: function(language) {
this._setFormatters(localeTexts[language]);
},
/**
* Render header
* @param {Date} date - date
* @param {string} type - Calendar type
*/
render: function(date2, type) {
var context = {
showToday: this._showToday,
showJumpButtons: this._showJumpButtons,
todayText: this._todayFormatter.format(/* @__PURE__ */ new Date()),
isDateCalendar: type === TYPE_DATE,
titleClass: this._getTitleClass(type),
title: this._getTitleText(date2, type)
};
this._container.innerHTML = headerTmpl(context).replace(/^\s+|\s+$/g, "");
this._innerElement = this._container.querySelector(SELECTOR_INNER_ELEM);
if (context.showToday) {
this._infoElement = this._container.querySelector(SELECTOR_INFO_ELEM);
}
},
/**
* Destroy header
*/
destroy: function() {
this._removeEvents();
removeElement(this._innerElement);
removeElement(this._infoElement);
this._container = this._showToday = this._showJumpButtons = this._yearMonthTitleFormatter = this._yearTitleFormatter = this._todayFormatter = this._innerElement = this._infoElement = null;
}
}
);
CustomEvents2.mixin(Header);
module2.exports = Header;
},
/* 45 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(11);
module2.exports = function(context) {
var source = '{{if isDateCalendar}} {{if showJumpButtons}} <div class="tui-calendar-header-inner tui-calendar-has-btns"> <button class="tui-calendar-btn tui-calendar-btn-prev-year">Prev year</button> <button class="tui-calendar-btn tui-calendar-btn-prev-month">Prev month</button> <em class="tui-calendar-title {{titleClass}}">{{title}}</em> <button class="tui-calendar-btn tui-calendar-btn-next-month">Next month</button> <button class="tui-calendar-btn tui-calendar-btn-next-year">Next year</button> </div> {{else}} <div class="tui-calendar-header-inner"> <button class="tui-calendar-btn tui-calendar-btn-prev-month">Prev month</button> <em class="tui-calendar-title {{titleClass}}">{{title}}</em> <button class="tui-calendar-btn tui-calendar-btn-next-month">Next month</button> </div> {{/if}}{{else}} <div class="tui-calendar-header-inner"> <button class="tui-calendar-btn tui-calendar-btn-prev-year">Prev year</button> <em class="tui-calendar-title {{titleClass}}">{{title}}</em> <button class="tui-calendar-btn tui-calendar-btn-next-year">Next year</button> </div>{{/if}}{{if showToday}} <div class="tui-calendar-header-info"> <p class="tui-calendar-title-today">{{todayText}}</p> </div>{{/if}}';
return template(source, context);
};
},
/* 46 */
/***/
function(module2, exports2, __webpack_require__) {
function isHTMLNode(html) {
if (typeof HTMLElement === "object") {
return html && (html instanceof HTMLElement || !!html.nodeType);
}
return !!(html && html.nodeType);
}
module2.exports = isHTMLNode;
},
/* 47 */
/***/
function(module2, exports2, __webpack_require__) {
var isUndefined2 = __webpack_require__(12);
var imagePing2 = __webpack_require__(48);
var ms7days2 = 7 * 24 * 60 * 60 * 1e3;
function isExpired2(date2) {
var now = (/* @__PURE__ */ new Date()).getTime();
return now - date2 > ms7days2;
}
function sendHostname2(appName, trackingId) {
var url = "https://www.google-analytics.com/collect";
var hostname = location.hostname;
var hitType = "event";
var eventCategory = "use";
var applicationKeyForStorage = "TOAST UI " + appName + " for " + hostname + ": Statistics";
var date2 = window.localStorage.getItem(applicationKeyForStorage);
if (!isUndefined2(window.tui) && window.tui.usageStatistics === false) {
return;
}
if (date2 && !isExpired2(date2)) {
return;
}
window.localStorage.setItem(applicationKeyForStorage, (/* @__PURE__ */ new Date()).getTime());
setTimeout(function() {
if (document.readyState === "interactive" || document.readyState === "complete") {
imagePing2(url, {
v: 1,
t: hitType,
tid: trackingId,
cid: hostname,
dp: hostname,
dh: appName,
el: appName,
ec: eventCategory
});
}
}, 1e3);
}
module2.exports = sendHostname2;
},
/* 48 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachOwnProperties2 = __webpack_require__(23);
function imagePing2(url, trackingInfo) {
var trackingElement = document.createElement("img");
var queryString = "";
forEachOwnProperties2(trackingInfo, function(value, key) {
queryString += "&" + key + "=" + value;
});
queryString = queryString.substring(1);
trackingElement.src = url + "?" + queryString;
trackingElement.style.display = "none";
document.body.appendChild(trackingElement);
document.body.removeChild(trackingElement);
return trackingElement;
}
module2.exports = imagePing2;
},
/* 49 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(2);
var defineClass = __webpack_require__(0);
var DateLayer = __webpack_require__(50);
var MonthLayer = __webpack_require__(52);
var YearLayer = __webpack_require__(54);
var constants = __webpack_require__(1);
var TYPE_DATE = constants.TYPE_DATE;
var TYPE_MONTH = constants.TYPE_MONTH;
var TYPE_YEAR = constants.TYPE_YEAR;
var Body = defineClass(
/** @lends Body.prototype */
{
init: function(bodyContainer, options) {
var language = options.language;
var weekStartDay = options.weekStartDay;
this._container = bodyContainer;
this._dateLayer = new DateLayer(language, weekStartDay);
this._monthLayer = new MonthLayer(language);
this._yearLayer = new YearLayer(language);
this._currentLayer = this._dateLayer;
},
/**
* Returns matched layer
* @param {string} type - Layer type
* @returns {Base} - Layer
* @private
*/
_getLayer: function(type) {
switch (type) {
case TYPE_DATE:
return this._dateLayer;
case TYPE_MONTH:
return this._monthLayer;
case TYPE_YEAR:
return this._yearLayer;
default:
return this._currentLayer;
}
},
/**
* Iterate each layer
* @param {Function} fn - function
* @private
*/
_eachLayer: function(fn2) {
forEachArray2([this._dateLayer, this._monthLayer, this._yearLayer], fn2);
},
/**
* Change language
* @param {string} language - Language
*/
changeLanguage: function(language) {
this._eachLayer(function(layer) {
layer.changeLanguage(language);
});
},
/**
* Render body
* @param {Date} date - date
* @param {string} type - Layer type
*/
render: function(date2, type) {
var nextLayer = this._getLayer(type);
var prevLayer = this._currentLayer;
prevLayer.remove();
nextLayer.render(date2, this._container);
this._currentLayer = nextLayer;
},
/**
* Returns date elements
* @returns {HTMLElement[]}
*/
getDateElements: function() {
return this._currentLayer.getDateElements();
},
/**
* Destory
*/
destroy: function() {
this._eachLayer(function(layer) {
layer.remove();
});
this._container = this._currentLayer = this._dateLayer = this._monthLayer = this._yearLayer = null;
}
}
);
module2.exports = Body;
},
/* 50 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var dateUtil = __webpack_require__(5);
var bodyTmpl = __webpack_require__(51);
var LayerBase = __webpack_require__(20);
var TYPE_DATE = __webpack_require__(1).TYPE_DATE;
var WEEK_START_DAY_MAP = __webpack_require__(1).WEEK_START_DAY_MAP;
var DATE_SELECTOR = ".tui-calendar-date";
var DAYS_OF_WEEK = 7;
var DateLayer = defineClass(
LayerBase,
/** @lends DateLayer.prototype */
{
init: function(language, weekStartDay) {
LayerBase.call(this, language);
this.weekStartDay = WEEK_START_DAY_MAP[String(weekStartDay).toLowerCase()] || 0;
},
/**
* Layer type
* @type {string}
* @private
*/
_type: TYPE_DATE,
/**
* @override
* @private
* @returns {object} Template context
*/
_makeContext: function(date2) {
var daysShort = this._localeText.titles.D;
var year, month, days, i2;
date2 = date2 || /* @__PURE__ */ new Date();
year = date2.getFullYear();
month = date2.getMonth() + 1;
if (this.weekStartDay) {
days = daysShort.slice();
for (i2 = 0; i2 < this.weekStartDay; i2 += 1) {
days.push(days.shift());
}
daysShort = days;
}
return {
Sun: daysShort[0],
Mon: daysShort[1],
Tue: daysShort[2],
Wed: daysShort[3],
Thu: daysShort[4],
Fri: daysShort[5],
Sat: daysShort[6],
year,
month,
weeks: this._getWeeks(year, month)
};
},
/**
* weeks (templating) for date-calendar
* @param {number} year - Year
* @param {number} month - Month
* @returns {Array.<Array.<Date>>}
* @private
*/
_getWeeks: function(year, month) {
var weekNumber = 0;
var weeksCount = 6;
var weeks = [];
var week, dates, i2;
while (weekNumber < weeksCount) {
dates = [];
for (i2 = this.weekStartDay; i2 < DAYS_OF_WEEK + this.weekStartDay; i2 += 1) {
dates.push(dateUtil.getDateOfWeek(year, month, weekNumber, i2));
}
week = this._getWeek(year, month, dates);
if (this.weekStartDay && !_isFirstWeek(weekNumber, week[0].dayInMonth)) {
weeks.push(this._getFirstWeek(year, month));
weeksCount -= 1;
}
weeks.push(week);
weekNumber += 1;
}
return weeks;
},
/**
* week (templating) for date-calendar
* @param {number} currentYear
* @param {number} currentMonth
* @param {Array.<Date>} dates
* @private
*/
_getWeek: function(currentYear, currentMonth, dates) {
var firstDateOfCurrentMonth = new Date(currentYear, currentMonth - 1, 1);
var lastDateOfCurrentMonth = new Date(currentYear, currentMonth, 0);
var contexts = [];
var i2 = 0;
var length = dates.length;
var date2, className2;
for (; i2 < length; i2 += 1) {
className2 = "tui-calendar-date";
date2 = dates[i2];
if (date2 < firstDateOfCurrentMonth) {
className2 += " tui-calendar-prev-month";
}
if (date2 > lastDateOfCurrentMonth) {
className2 += " tui-calendar-next-month";
}
if (date2.getDay() === 0) {
className2 += " tui-calendar-sun";
} else if (date2.getDay() === 6) {
className2 += " tui-calendar-sat";
}
contexts.push({
dayInMonth: date2.getDate(),
className: className2,
timestamp: date2.getTime()
});
}
return contexts;
},
/**
* Render date-layer
* @override
* @param {Date} date Date to render
* @param {HTMLElement} container A container element for the rendered element
*/
render: function(date2, container) {
var context = this._makeContext(date2);
container.innerHTML = bodyTmpl(context);
this._element = container.firstChild;
},
/**
* Return date elements
* @override
* @returns {HTMLElement[]}
*/
getDateElements: function() {
return this._element.querySelectorAll(DATE_SELECTOR);
},
_getFirstWeek: function(year, month) {
var firstWeekDates = [];
var i2;
for (i2 = this.weekStartDay; i2 < DAYS_OF_WEEK + this.weekStartDay; i2 += 1) {
firstWeekDates.push(dateUtil.getDateOfWeek(year, month, -1, i2));
}
return this._getWeek(year, month, firstWeekDates);
}
}
);
function _isFirstWeek(weekIndex, dayInMonth) {
return weekIndex || dayInMonth === 1 || dayInMonth > DAYS_OF_WEEK;
}
module2.exports = DateLayer;
},
/* 51 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(11);
module2.exports = function(context) {
var source = '<table class="tui-calendar-body-inner" cellspacing="0" cellpadding="0"> <caption><span>Dates</span></caption> <thead class="tui-calendar-body-header"> <tr> <th class="tui-sun" scope="col">{{Sun}}</th> <th scope="col">{{Mon}}</th> <th scope="col">{{Tue}}</th> <th scope="col">{{Wed}}</th> <th scope="col">{{Thu}}</th> <th scope="col">{{Fri}}</th> <th class="tui-sat" scope="col">{{Sat}}</th> </tr> </thead> <tbody> {{each weeks}} <tr class="tui-calendar-week"> {{each @this}} <td class="{{@this["className"]}}" data-timestamp="{{@this["timestamp"]}}">{{@this["dayInMonth"]}}</td> {{/each}} </tr> {{/each}} </tbody></table>';
return template(source, context);
};
},
/* 52 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var bodyTmpl = __webpack_require__(53);
var LayerBase = __webpack_require__(20);
var TYPE_MONTH = __webpack_require__(1).TYPE_MONTH;
var dateUtil = __webpack_require__(5);
var DATE_SELECTOR = ".tui-calendar-month";
var MonthLayer = defineClass(
LayerBase,
/** @lends MonthLayer.prototype */
{
init: function(language) {
LayerBase.call(this, language);
},
/**
* Layer type
* @type {string}
* @private
*/
_type: TYPE_MONTH,
/**
* @override
* @returns {object} Template context
* @private
*/
_makeContext: function(date2) {
var monthsShort = this._localeText.titles.MMM;
return {
year: date2.getFullYear(),
Jan: monthsShort[0],
Feb: monthsShort[1],
Mar: monthsShort[2],
Apr: monthsShort[3],
May: monthsShort[4],
Jun: monthsShort[5],
Jul: monthsShort[6],
Aug: monthsShort[7],
Sep: monthsShort[8],
Oct: monthsShort[9],
Nov: monthsShort[10],
Dec: monthsShort[11],
getFirstDayTimestamp: dateUtil.getFirstDayTimestamp
};
},
/**
* Render month-layer element
* @override
* @param {Date} date Date to render
* @param {HTMLElement} container A container element for the rendered element
*/
render: function(date2, container) {
var context = this._makeContext(date2);
container.innerHTML = bodyTmpl(context);
this._element = container.firstChild;
},
/**
* Returns month elements
* @override
* @returns {HTMLElement[]}
*/
getDateElements: function() {
return this._element.querySelectorAll(DATE_SELECTOR);
}
}
);
module2.exports = MonthLayer;
},
/* 53 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(11);
module2.exports = function(context) {
var source = '<table class="tui-calendar-body-inner"> <caption><span>Months</span></caption> <tbody> <tr class="tui-calendar-month-group"> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 0}}>{{Jan}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 1}}>{{Feb}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 2}}>{{Mar}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 3}}>{{Apr}}</td> </tr> <tr class="tui-calendar-month-group"> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 4}}>{{May}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 5}}>{{Jun}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 6}}>{{Jul}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 7}}>{{Aug}}</td> </tr> <tr class="tui-calendar-month-group"> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 8}}>{{Sep}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 9}}>{{Oct}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 10}}>{{Nov}}</td> <td class="tui-calendar-month" data-timestamp={{getFirstDayTimestamp year 11}}>{{Dec}}</td> </tr> </tbody></table>';
return template(source, context);
};
},
/* 54 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var bodyTmpl = __webpack_require__(55);
var LayerBase = __webpack_require__(20);
var TYPE_YEAR = __webpack_require__(1).TYPE_YEAR;
var dateUtil = __webpack_require__(5);
var DATE_SELECTOR = ".tui-calendar-year";
var YearLayer = defineClass(
LayerBase,
/** @lends YearLayer.prototype */
{
init: function(language) {
LayerBase.call(this, language);
},
/**
* Layer type
* @type {string}
* @private
*/
_type: TYPE_YEAR,
/**
* @override
* @returns {object} Template context
* @private
*/
_makeContext: function(date2) {
var year = date2.getFullYear();
return {
yearGroups: [
dateUtil.getRangeArr(year - 4, year - 2),
dateUtil.getRangeArr(year - 1, year + 1),
dateUtil.getRangeArr(year + 2, year + 4)
],
getFirstDayTimestamp: dateUtil.getFirstDayTimestamp
};
},
/**
* Render year-layer element
* @override
* @param {Date} date Date to render
* @param {HTMLElement} container A container element for the rendered element
*/
render: function(date2, container) {
var context = this._makeContext(date2);
container.innerHTML = bodyTmpl(context);
this._element = container.firstChild;
},
/**
* Returns year elements
* @override
* @returns {HTMLElement[]}
*/
getDateElements: function() {
return this._element.querySelectorAll(DATE_SELECTOR);
}
}
);
module2.exports = YearLayer;
},
/* 55 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(11);
module2.exports = function(context) {
var source = '<table class="tui-calendar-body-inner"> <caption><span>Years</span></caption> <tbody> {{each yearGroups}} <tr class="tui-calendar-year-group"> {{each @this}} <td class="tui-calendar-year" data-timestamp={{getFirstDayTimestamp @this 0}}> {{@this}} </td> {{/each}} </tr> {{/each}} </tbody></table>';
return template(source, context);
};
},
/* 56 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(2);
var defineClass = __webpack_require__(0);
var isNumber2 = __webpack_require__(15);
var Range = __webpack_require__(57);
var util = __webpack_require__(4);
var RangeModel = defineClass(
/** @lends RangeModel.prototype */
{
init: function(ranges) {
ranges = ranges || [];
this._ranges = [];
forEachArray2(
ranges,
function(range2) {
this.add(range2[0], range2[1]);
},
this
);
},
/**
* Whether the ranges contain a time or time-range
* @param {number} start - Start
* @param {number} [end] - End
* @returns {boolean}
*/
contains: function(start, end) {
var i2 = 0;
var length = this._ranges.length;
var range2;
for (; i2 < length; i2 += 1) {
range2 = this._ranges[i2];
if (range2.contains(start, end)) {
return true;
}
}
return false;
},
/**
* Whether overlaps with a point or range
* @param {number} start - Start
* @param {number} [end] - End
* @returns {boolean}
*/
hasOverlap: function(start, end) {
var i2 = 0;
var length = this._ranges.length;
var range2;
for (; i2 < length; i2 += 1) {
range2 = this._ranges[i2];
if (range2.isOverlapped(start, end)) {
return true;
}
}
return false;
},
/**
* Add range
* @param {number} start - Start
* @param {number} [end] - End
*/
add: function(start, end) {
var overlapped = false;
var i2 = 0;
var len = this._ranges.length;
var range2;
for (; i2 < len; i2 += 1) {
range2 = this._ranges[i2];
overlapped = range2.isOverlapped(start, end);
if (overlapped) {
range2.merge(start, end);
break;
}
if (start < range2.start) {
break;
}
}
if (!overlapped) {
this._ranges.splice(i2, 0, new Range(start, end));
}
},
/**
* Returns minimum value in ranges
* @returns {number}
*/
getMinimumValue: function() {
return this._ranges[0].start;
},
/**
* Returns maximum value in ranges
* @returns {number}
*/
getMaximumValue: function() {
var length = this._ranges.length;
return this._ranges[length - 1].end;
},
/**
* @param {number} start - Start
* @param {number} [end] - End
*/
exclude: function(start, end) {
if (!isNumber2(end)) {
end = start;
}
forEachArray2(
this._ranges,
function(range2) {
var rangeEnd;
if (range2.isOverlapped(start, end)) {
rangeEnd = range2.end;
range2.exclude(start, end);
if (end + 1 <= rangeEnd) {
this.add(end + 1, rangeEnd);
}
}
},
this
);
this._ranges = util.filter(this._ranges, function(range2) {
return !range2.isEmpty();
});
},
/**
* Returns the first overlapped range from the point or range
* @param {number} start - Start
* @param {number} end - End
* @returns {Array.<number>} - [start, end]
*/
findOverlappedRange: function(start, end) {
var i2 = 0;
var len = this._ranges.length;
var range2;
for (; i2 < len; i2 += 1) {
range2 = this._ranges[i2];
if (range2.isOverlapped(start, end)) {
return [range2.start, range2.end];
}
}
return null;
}
}
);
module2.exports = RangeModel;
},
/* 57 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var isNumber2 = __webpack_require__(15);
var Range = defineClass(
/** @lends Range.prototype */
{
init: function(start, end) {
this.setRange(start, end);
},
/**
* Set range
* @param {number} start - Start number
* @param {number} [end] - End number
*/
setRange: function(start, end) {
if (!isNumber2(end)) {
end = start;
}
this.start = Math.min(start, end);
this.end = Math.max(start, end);
},
/**
* Merge range
* @param {number} start - Start
* @param {number} [end] - End
*/
merge: function(start, end) {
if (!isNumber2(start) || !isNumber2(end) || !this.isOverlapped(start, end)) {
return;
}
this.start = Math.min(start, this.start);
this.end = Math.max(end, this.end);
},
/**
* Whether being empty.
* @returns {boolean}
*/
isEmpty: function() {
return !isNumber2(this.start) || !isNumber2(this.end);
},
/**
* Set empty
*/
setEmpty: function() {
this.start = this.end = null;
},
/**
* Whether containing a range.
* @param {number} start - Start
* @param {number} [end] - End
* @returns {boolean}
*/
contains: function(start, end) {
if (!isNumber2(end)) {
end = start;
}
return this.start <= start && end <= this.end;
},
/**
* Whether overlaps with a range
* @param {number} start - Start
* @param {number} [end] - End
* @returns {boolean}
*/
isOverlapped: function(start, end) {
if (!isNumber2(end)) {
end = start;
}
return this.start <= end && this.end >= start;
},
/**
* Exclude a range
* @param {number} start - Start
* @param {number} end - End
*/
exclude: function(start, end) {
if (start <= this.start && end >= this.end) {
this.setEmpty();
} else if (this.contains(start)) {
this.setRange(this.start, start - 1);
} else if (this.contains(end)) {
this.setRange(end + 1, this.end);
}
}
}
);
module2.exports = Range;
},
/* 58 */
/***/
function(module2, exports2, __webpack_require__) {
var template = __webpack_require__(11);
module2.exports = function(context) {
var source = '<div class="tui-datepicker"> {{if timePicker}} {{if isTab}} <div class="tui-datepicker-selector"> <button type="button" class="tui-datepicker-selector-button tui-is-checked" aria-label="selected"> <span class="tui-ico-date"></span>{{localeText["date"]}} </button> <button type="button" class="tui-datepicker-selector-button"> <span class="tui-ico-time"></span>{{localeText["time"]}} </button> </div> <div class="tui-datepicker-body"> <div class="tui-calendar-container"></div> <div class="tui-timepicker-container"></div> </div> {{else}} <div class="tui-datepicker-body"> <div class="tui-calendar-container"></div> </div> <div class="tui-datepicker-footer"> <div class="tui-timepicker-container"></div> </div> {{/if}} {{else}} <div class="tui-datepicker-body"> <div class="tui-calendar-container"></div> </div> {{/if}}</div>';
return template(source, context);
};
},
/* 59 */
/***/
function(module2, exports2, __webpack_require__) {
var defineClass = __webpack_require__(0);
var CustomEvents2 = __webpack_require__(8);
var on2 = __webpack_require__(31);
var off = __webpack_require__(33);
var DateTimeFormatter = __webpack_require__(30);
var mouseTouchEvent = __webpack_require__(19);
var util = __webpack_require__(4);
var DEFAULT_FORMAT = "yyyy-MM-dd";
var DatePickerInput = defineClass(
/** @lends DatePickerInput.prototype */
{
init: function(inputElement, option) {
option.format = option.format || DEFAULT_FORMAT;
this._input = util.getElement(inputElement);
this._id = option.id;
this._titles = option.localeText.titles;
this._formatter = new DateTimeFormatter(option.format, this._titles);
this._setEvents();
},
/**
* Change locale titles
* @param {object} titles - locale text in format
*/
changeLocaleTitles: function(titles) {
this._titles = titles;
},
/**
* Set input 'click', 'change' event
* @private
*/
_setEvents: function() {
if (this._input) {
on2(this._input, "change", this._onChangeHandler, this);
mouseTouchEvent.on(this._input, "click", this._onClickHandler, this);
}
},
/**
* Remove events
* @private
*/
_removeEvents: function() {
this.off();
if (this._input) {
off(this._input, "change", this._onChangeHandler);
mouseTouchEvent.off(this._input, "click", this._onClickHandler);
}
},
/**
* Onchange handler
*/
_onChangeHandler: function() {
this.fire("change");
},
/**
* Onclick handler
*/
_onClickHandler: function() {
this.fire("click");
},
/**
* Check element is same as the input element.
* @param {HTMLElement} el - To check matched set of elements
* @returns {boolean}
*/
is: function(el) {
return this._input === el;
},
/**
* Enable input
*/
enable: function() {
if (this._input) {
this._input.removeAttribute("disabled");
}
},
/**
* Disable input
*/
disable: function() {
if (this._input) {
this._input.setAttribute("disabled", true);
}
},
/**
* Return format
* @returns {string}
*/
getFormat: function() {
return this._formatter.getRawString();
},
/**
* Set format
* @param {string} format - Format
*/
setFormat: function(format) {
if (!format) {
return;
}
this._formatter = new DateTimeFormatter(format, this._titles);
},
/**
* Clear text
*/
clearText: function() {
if (this._input) {
this._input.value = "";
}
},
/**
* Set value from date
* @param {Date} date - Date
*/
setDate: function(date2) {
if (this._input) {
this._input.value = this._formatter.format(date2);
}
},
/**
* Returns date from input-text
* @returns {Date}
* @throws {Error}
*/
getDate: function() {
var value = "";
if (this._input) {
value = this._input.value;
}
return this._formatter.parse(value);
},
/**
* Destroy
*/
destroy: function() {
this._removeEvents();
this._input = this._id = this._formatter = null;
}
}
);
CustomEvents2.mixin(DatePickerInput);
module2.exports = DatePickerInput;
},
/* 60 */
/***/
function(module2, exports2, __webpack_require__) {
var forEachArray2 = __webpack_require__(2);
var defineClass = __webpack_require__(0);
var CustomEvents2 = __webpack_require__(8);
var addClass = __webpack_require__(16);
var getData = __webpack_require__(26);
var removeClass = __webpack_require__(18);
var extend2 = __webpack_require__(7);
var DatePicker2 = __webpack_require__(21);
var dateUtil = __webpack_require__(5);
var constants = __webpack_require__(1);
var util = __webpack_require__(4);
var CLASS_NAME_RANGE_PICKER = "tui-rangepicker";
var CLASS_NAME_SELECTED = constants.CLASS_NAME_SELECTED;
var CLASS_NAME_SELECTED_RANGE = "tui-is-selected-range";
var DateRangePicker = defineClass(
/** @lends DateRangePicker.prototype */
{
init: function(options) {
var startpickerOpt, endpickerOpt;
options = options || {};
startpickerOpt = options.startpicker;
endpickerOpt = options.endpicker;
if (!startpickerOpt) {
throw new Error('The "startpicker" option is required.');
}
if (!endpickerOpt) {
throw new Error('The "endpicker" option is required.');
}
this._startpicker = null;
this._endpicker = null;
this._isRangeSet = false;
this._preEndPickerDate = (/* @__PURE__ */ new Date()).getDate();
this._initializePickers(options);
this._syncRangesToEndpicker();
},
/**
* Create picker
* @param {Object} options - DatePicker options
* @private
*/
_initializePickers: function(options) {
var startpickerContainer = util.getElement(options.startpicker.container);
var endpickerContainer = util.getElement(options.endpicker.container);
var startInput = util.getElement(options.startpicker.input);
var endInput = util.getElement(options.endpicker.input);
var startpickerOpt = extend2({}, options, {
input: {
element: startInput,
format: options.format
},
date: options.startpicker.date,
weekStartDay: options.startpicker.weekStartDay
});
var endpickerOpt = extend2({}, options, {
input: {
element: endInput,
format: options.format
},
date: options.endpicker.date,
weekStartDay: options.endpicker.weekStartDay
});
this._startpicker = new DatePicker2(startpickerContainer, startpickerOpt);
this._startpicker.addCssClass(CLASS_NAME_RANGE_PICKER);
this._startpicker.on("change", this._onChangeStartpicker, this);
this._startpicker.on("draw", this._onDrawPicker, this);
this._endpicker = new DatePicker2(endpickerContainer, endpickerOpt);
this._endpicker.addCssClass(CLASS_NAME_RANGE_PICKER);
this._endpicker.on("change", this._onChangeEndpicker, this);
this._endpicker.on("draw", this._onDrawPicker, this);
},
/**
* Set selection-class to elements after calendar drawing
* @param {Object} eventData - Event data {@link DatePicker#event:draw}
* @private
*/
_onDrawPicker: function(eventData) {
var calendarType = eventData.type;
var startDate = this._startpicker.getDate();
var endDate = this._endpicker.getDate();
if (!startDate) {
return;
}
if (!endDate) {
endDate = /* @__PURE__ */ new Date(NaN);
}
forEachArray2(
eventData.dateElements,
function(el) {
var elDate = new Date(Number(getData(el, "timestamp")));
var isInRange = dateUtil.inRange(startDate, endDate, elDate, calendarType);
var isSelected = dateUtil.isSame(startDate, elDate, calendarType) || dateUtil.isSame(endDate, elDate, calendarType);
this._setRangeClass(el, isInRange);
this._setSelectedClass(el, isSelected);
},
this
);
},
/**
* Set range class to element
* @param {HTMLElement} el - Element
* @param {boolean} isInRange - In range
* @private
*/
_setRangeClass: function(el, isInRange) {
if (isInRange) {
addClass(el, CLASS_NAME_SELECTED_RANGE);
} else {
removeClass(el, CLASS_NAME_SELECTED_RANGE);
}
},
/**
* Set selected class to element
* @param {HTMLElement} el - Element
* @param {boolean} isSelected - Is selected
* @private
*/
_setSelectedClass: function(el, isSelected) {
if (isSelected) {
addClass(el, CLASS_NAME_SELECTED);
} else {
removeClass(el, CLASS_NAME_SELECTED);
}
},
/**
* Sync ranges to endpicker
* @private
*/
_syncRangesToEndpicker: function() {
var startDate = this._startpicker.getDate();
var overlappedRange;
if (startDate) {
overlappedRange = this._startpicker.findOverlappedRange(
dateUtil.cloneWithStartOf(startDate).getTime(),
dateUtil.cloneWithEndOf(startDate).getTime()
);
this._endpicker.enable();
this._endpicker.setRanges([[startDate.getTime(), overlappedRange[1].getTime()]]);
this._setTimeRangeOnEndPicker();
} else {
this._endpicker.setNull();
this._endpicker.disable();
}
},
/**
* After change on start-picker
* @private
*/
_onChangeStartpicker: function() {
this._syncRangesToEndpicker();
this.fire("change:start");
},
/**
* After change on end-picker
* @private
*/
_onChangeEndpicker: function() {
var date2;
var endPickerDate = this._endpicker.getDate();
if (endPickerDate) {
date2 = endPickerDate.getDate();
if (this._preEndPickerDate !== date2) {
this._setTimeRangeOnEndPicker();
}
this._preEndPickerDate = date2;
} else {
this._preEndPickerDate = null;
}
this.fire("change:end");
},
/*
* Get date of start picker and end picker being same
* @returns {boolean}
* @private
*/
_isStartAndEndDateSame: function() {
return !!this._endpicker.getDate() && !!this._startpicker.getDate() && dateUtil.compare(
this._endpicker.getDate(),
this._startpicker.getDate(),
constants.TYPE_DATE
) === 0;
},
/**
* Set time range on end picker
* @private
*/
_setTimeRangeOnEndPicker: function() {
var pickerDate, timeRange, timeRangeToSet;
var endTimePicker = this._endpicker._timePicker;
if (!endTimePicker) {
return;
}
pickerDate = this._endpicker.getDate() || this._startpicker.getDate();
timeRange = this._getTimeRangeFromStartPicker();
timeRangeToSet = pickerDate && timeRange[pickerDate.getDate()];
if (this._isStartAndEndDateSame() && timeRangeToSet) {
endTimePicker.setRange(timeRangeToSet);
this._isRangeSet = true;
} else if (this._isRangeSet) {
endTimePicker.setRange({ hour: 0, minute: 0 });
endTimePicker.resetMinuteRange();
this._isRangeSet = false;
}
},
/**
* Return object of time range from start picker.
* @returns {object}
* @private
*/
_getTimeRangeFromStartPicker: function() {
var startDate = this._startpicker.getDate();
var timeRange = {};
timeRange[startDate.getDate()] = {
hour: startDate.getHours(),
minute: startDate.getMinutes()
};
return timeRange;
},
/**
* Return a start-datepicker.
* @returns {DatePicker}
*/
getStartpicker: function() {
return this._startpicker;
},
/**
* Return a end-datepicker.
* @returns {DatePicker}
*/
getEndpicker: function() {
return this._endpicker;
},
/**
* Set the start date.
* @param {Date} date - Start date
*/
setStartDate: function(date2) {
this._startpicker.setDate(date2);
},
/**
* Return the start date.
* @returns {?Date}
*/
getStartDate: function() {
return this._startpicker.getDate();
},
/**
* Return the end date.
* @returns {?Date}
*/
getEndDate: function() {
return this._endpicker.getDate();
},
/**
* Set the end date.
* @param {Date} date - End date
*/
setEndDate: function(date2) {
this._endpicker.setDate(date2);
},
/**
* Set selectable ranges.
* @param {Array.<Array.<number|Date>>} ranges - Selectable ranges. Use Date instances or numbers(timestamp).
*/
setRanges: function(ranges) {
this._startpicker.setRanges(ranges);
this._syncRangesToEndpicker();
},
/**
* Add a selectable range. Use Date instances or numbers(timestamp).
* @param {Date|number} start - the start date
* @param {Date|number} end - the end date
*/
addRange: function(start, end) {
this._startpicker.addRange(start, end);
this._syncRangesToEndpicker();
},
/**
* Remove a range. Use Date instances or numbers(timestamp).
* @param {Date|number} start - the start date
* @param {Date|number} end - the end date
* @param {null|'date'|'month'|'year'} type - Range type. If falsy, start and end values are considered as timestamp
*/
removeRange: function(start, end, type) {
this._startpicker.removeRange(start, end, type);
this._syncRangesToEndpicker();
},
/**
* Change language.
* @param {string} language - Language code. English('en') and Korean('ko') are provided as default.
* @see To set to the other languages, use {@link DatePicker#localeTexts DatePicker.localeTexts}.
*/
changeLanguage: function(language) {
this._startpicker.changeLanguage(language);
this._endpicker.changeLanguage(language);
},
/**
* Destroy the date-range picker.
*/
destroy: function() {
this.off();
this._startpicker.destroy();
this._endpicker.destroy();
this._startpicker = this._endpicker = null;
}
}
);
CustomEvents2.mixin(DateRangePicker);
module2.exports = DateRangePicker;
},
/* 61 */
/***/
function(module2, exports2, __webpack_require__) {
}
/******/
])
);
});
})(tuiDatePicker);
return tuiDatePicker.exports;
}
var tuiDatePickerExports = requireTuiDatePicker();
const DatePicker = /* @__PURE__ */ getDefaultExportFromCjs(tuiDatePickerExports);
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a2, b2) => {
for (var prop in b2 || (b2 = {}))
if (__hasOwnProp.call(b2, prop))
__defNormalProp(a2, prop, b2[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b2)) {
if (__propIsEnum.call(b2, prop))
__defNormalProp(a2, prop, b2[prop]);
}
return a2;
};
var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
var n$2, l$3, u$3, t$2, o$3, r$3, f$3 = {}, e$1 = [], c$3 = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;
function s$3(n2, l2) {
for (var u2 in l2)
n2[u2] = l2[u2];
return n2;
}
function a$3(n2) {
var l2 = n2.parentNode;
l2 && l2.removeChild(n2);
}
function h$3(l2, u2, i2) {
var t2, o2, r2, f2 = {};
for (r2 in u2)
r2 == "key" ? t2 = u2[r2] : r2 == "ref" ? o2 = u2[r2] : f2[r2] = u2[r2];
if (arguments.length > 2 && (f2.children = arguments.length > 3 ? n$2.call(arguments, 2) : i2), typeof l2 == "function" && l2.defaultProps != null)
for (r2 in l2.defaultProps)
f2[r2] === void 0 && (f2[r2] = l2.defaultProps[r2]);
return v$3(l2, f2, t2, o2, null);
}
function v$3(n2, i2, t2, o2, r2) {
var f2 = { type: n2, props: i2, key: t2, ref: o2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: r2 == null ? ++u$3 : r2 };
return r2 == null && l$3.vnode != null && l$3.vnode(f2), f2;
}
function p$3(n2) {
return n2.children;
}
function d$3(n2, l2) {
this.props = n2, this.context = l2;
}
function _$3(n2, l2) {
if (l2 == null)
return n2.__ ? _$3(n2.__, n2.__.__k.indexOf(n2) + 1) : null;
for (var u2; l2 < n2.__k.length; l2++)
if ((u2 = n2.__k[l2]) != null && u2.__e != null)
return u2.__e;
return typeof n2.type == "function" ? _$3(n2) : null;
}
function k$2(n2) {
var l2, u2;
if ((n2 = n2.__) != null && n2.__c != null) {
for (n2.__e = n2.__c.base = null, l2 = 0; l2 < n2.__k.length; l2++)
if ((u2 = n2.__k[l2]) != null && u2.__e != null) {
n2.__e = n2.__c.base = u2.__e;
break;
}
return k$2(n2);
}
}
function b$2(n2) {
(!n2.__d && (n2.__d = true) && t$2.push(n2) && !g$4.__r++ || o$3 !== l$3.debounceRendering) && ((o$3 = l$3.debounceRendering) || setTimeout)(g$4);
}
function g$4() {
for (var n2; g$4.__r = t$2.length; )
n2 = t$2.sort(function(n3, l2) {
return n3.__v.__b - l2.__v.__b;
}), t$2 = [], n2.some(function(n3) {
var l2, u2, i2, t2, o2, r2;
n3.__d && (o2 = (t2 = (l2 = n3).__v).__e, (r2 = l2.__P) && (u2 = [], (i2 = s$3({}, t2)).__v = t2.__v + 1, j$3(r2, t2, i2, l2.__n, r2.ownerSVGElement !== void 0, t2.__h != null ? [o2] : null, u2, o2 == null ? _$3(t2) : o2, t2.__h), z$2(u2, t2), t2.__e != o2 && k$2(t2)));
});
}
function w$3(n2, l2, u2, i2, t2, o2, r2, c2, s2, a2) {
var h2, y2, d2, k2, b2, g2, w2, x2 = i2 && i2.__k || e$1, C2 = x2.length;
for (u2.__k = [], h2 = 0; h2 < l2.length; h2++)
if ((k2 = u2.__k[h2] = (k2 = l2[h2]) == null || typeof k2 == "boolean" ? null : typeof k2 == "string" || typeof k2 == "number" || typeof k2 == "bigint" ? v$3(null, k2, null, null, k2) : Array.isArray(k2) ? v$3(p$3, { children: k2 }, null, null, null) : k2.__b > 0 ? v$3(k2.type, k2.props, k2.key, null, k2.__v) : k2) != null) {
if (k2.__ = u2, k2.__b = u2.__b + 1, (d2 = x2[h2]) === null || d2 && k2.key == d2.key && k2.type === d2.type)
x2[h2] = void 0;
else
for (y2 = 0; y2 < C2; y2++) {
if ((d2 = x2[y2]) && k2.key == d2.key && k2.type === d2.type) {
x2[y2] = void 0;
break;
}
d2 = null;
}
j$3(n2, k2, d2 = d2 || f$3, t2, o2, r2, c2, s2, a2), b2 = k2.__e, (y2 = k2.ref) && d2.ref != y2 && (w2 || (w2 = []), d2.ref && w2.push(d2.ref, null, k2), w2.push(y2, k2.__c || b2, k2)), b2 != null ? (g2 == null && (g2 = b2), typeof k2.type == "function" && k2.__k === d2.__k ? k2.__d = s2 = m$2(k2, s2, n2) : s2 = A$2(n2, k2, d2, x2, b2, s2), typeof u2.type == "function" && (u2.__d = s2)) : s2 && d2.__e == s2 && s2.parentNode != n2 && (s2 = _$3(d2));
}
for (u2.__e = g2, h2 = C2; h2--; )
x2[h2] != null && (typeof u2.type == "function" && x2[h2].__e != null && x2[h2].__e == u2.__d && (u2.__d = _$3(i2, h2 + 1)), N(x2[h2], x2[h2]));
if (w2)
for (h2 = 0; h2 < w2.length; h2++)
M$2(w2[h2], w2[++h2], w2[++h2]);
}
function m$2(n2, l2, u2) {
for (var i2, t2 = n2.__k, o2 = 0; t2 && o2 < t2.length; o2++)
(i2 = t2[o2]) && (i2.__ = n2, l2 = typeof i2.type == "function" ? m$2(i2, l2, u2) : A$2(u2, i2, i2, t2, i2.__e, l2));
return l2;
}
function x$3(n2, l2) {
return l2 = l2 || [], n2 == null || typeof n2 == "boolean" || (Array.isArray(n2) ? n2.some(function(n3) {
x$3(n3, l2);
}) : l2.push(n2)), l2;
}
function A$2(n2, l2, u2, i2, t2, o2) {
var r2, f2, e2;
if (l2.__d !== void 0)
r2 = l2.__d, l2.__d = void 0;
else if (u2 == null || t2 != o2 || t2.parentNode == null)
n:
if (o2 == null || o2.parentNode !== n2)
n2.appendChild(t2), r2 = null;
else {
for (f2 = o2, e2 = 0; (f2 = f2.nextSibling) && e2 < i2.length; e2 += 2)
if (f2 == t2)
break n;
n2.insertBefore(t2, o2), r2 = o2;
}
return r2 !== void 0 ? r2 : t2.nextSibling;
}
function C$1(n2, l2, u2, i2, t2) {
var o2;
for (o2 in u2)
o2 === "children" || o2 === "key" || o2 in l2 || H$2(n2, o2, null, u2[o2], i2);
for (o2 in l2)
t2 && typeof l2[o2] != "function" || o2 === "children" || o2 === "key" || o2 === "value" || o2 === "checked" || u2[o2] === l2[o2] || H$2(n2, o2, l2[o2], u2[o2], i2);
}
function $$1(n2, l2, u2) {
l2[0] === "-" ? n2.setProperty(l2, u2) : n2[l2] = u2 == null ? "" : typeof u2 != "number" || c$3.test(l2) ? u2 : u2 + "px";
}
function H$2(n2, l2, u2, i2, t2) {
var o2;
n:
if (l2 === "style")
if (typeof u2 == "string")
n2.style.cssText = u2;
else {
if (typeof i2 == "string" && (n2.style.cssText = i2 = ""), i2)
for (l2 in i2)
u2 && l2 in u2 || $$1(n2.style, l2, "");
if (u2)
for (l2 in u2)
i2 && u2[l2] === i2[l2] || $$1(n2.style, l2, u2[l2]);
}
else if (l2[0] === "o" && l2[1] === "n")
o2 = l2 !== (l2 = l2.replace(/Capture$/, "")), l2 = l2.toLowerCase() in n2 ? l2.toLowerCase().slice(2) : l2.slice(2), n2.l || (n2.l = {}), n2.l[l2 + o2] = u2, u2 ? i2 || n2.addEventListener(l2, o2 ? T$2 : I$2, o2) : n2.removeEventListener(l2, o2 ? T$2 : I$2, o2);
else if (l2 !== "dangerouslySetInnerHTML") {
if (t2)
l2 = l2.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
else if (l2 !== "href" && l2 !== "list" && l2 !== "form" && l2 !== "tabIndex" && l2 !== "download" && l2 in n2)
try {
n2[l2] = u2 == null ? "" : u2;
break n;
} catch (n3) {
}
typeof u2 == "function" || (u2 != null && (u2 !== false || l2[0] === "a" && l2[1] === "r") ? n2.setAttribute(l2, u2) : n2.removeAttribute(l2));
}
}
function I$2(n2) {
this.l[n2.type + false](l$3.event ? l$3.event(n2) : n2);
}
function T$2(n2) {
this.l[n2.type + true](l$3.event ? l$3.event(n2) : n2);
}
function j$3(n2, u2, i2, t2, o2, r2, f2, e2, c2) {
var a2, h2, v2, y2, _2, k2, b2, g2, m2, x2, A2, C2, $2, H2 = u2.type;
if (u2.constructor !== void 0)
return null;
i2.__h != null && (c2 = i2.__h, e2 = u2.__e = i2.__e, u2.__h = null, r2 = [e2]), (a2 = l$3.__b) && a2(u2);
try {
n:
if (typeof H2 == "function") {
if (g2 = u2.props, m2 = (a2 = H2.contextType) && t2[a2.__c], x2 = a2 ? m2 ? m2.props.value : a2.__ : t2, i2.__c ? b2 = (h2 = u2.__c = i2.__c).__ = h2.__E : ("prototype" in H2 && H2.prototype.render ? u2.__c = h2 = new H2(g2, x2) : (u2.__c = h2 = new d$3(g2, x2), h2.constructor = H2, h2.render = O$2), m2 && m2.sub(h2), h2.props = g2, h2.state || (h2.state = {}), h2.context = x2, h2.__n = t2, v2 = h2.__d = true, h2.__h = []), h2.__s == null && (h2.__s = h2.state), H2.getDerivedStateFromProps != null && (h2.__s == h2.state && (h2.__s = s$3({}, h2.__s)), s$3(h2.__s, H2.getDerivedStateFromProps(g2, h2.__s))), y2 = h2.props, _2 = h2.state, v2)
H2.getDerivedStateFromProps == null && h2.componentWillMount != null && h2.componentWillMount(), h2.componentDidMount != null && h2.__h.push(h2.componentDidMount);
else {
if (H2.getDerivedStateFromProps == null && g2 !== y2 && h2.componentWillReceiveProps != null && h2.componentWillReceiveProps(g2, x2), !h2.__e && h2.shouldComponentUpdate != null && h2.shouldComponentUpdate(g2, h2.__s, x2) === false || u2.__v === i2.__v) {
h2.props = g2, h2.state = h2.__s, u2.__v !== i2.__v && (h2.__d = false), h2.__v = u2, u2.__e = i2.__e, u2.__k = i2.__k, u2.__k.forEach(function(n3) {
n3 && (n3.__ = u2);
}), h2.__h.length && f2.push(h2);
break n;
}
h2.componentWillUpdate != null && h2.componentWillUpdate(g2, h2.__s, x2), h2.componentDidUpdate != null && h2.__h.push(function() {
h2.componentDidUpdate(y2, _2, k2);
});
}
if (h2.context = x2, h2.props = g2, h2.__v = u2, h2.__P = n2, A2 = l$3.__r, C2 = 0, "prototype" in H2 && H2.prototype.render)
h2.state = h2.__s, h2.__d = false, A2 && A2(u2), a2 = h2.render(h2.props, h2.state, h2.context);
else
do {
h2.__d = false, A2 && A2(u2), a2 = h2.render(h2.props, h2.state, h2.context), h2.state = h2.__s;
} while (h2.__d && ++C2 < 25);
h2.state = h2.__s, h2.getChildContext != null && (t2 = s$3(s$3({}, t2), h2.getChildContext())), v2 || h2.getSnapshotBeforeUpdate == null || (k2 = h2.getSnapshotBeforeUpdate(y2, _2)), $2 = a2 != null && a2.type === p$3 && a2.key == null ? a2.props.children : a2, w$3(n2, Array.isArray($2) ? $2 : [$2], u2, i2, t2, o2, r2, f2, e2, c2), h2.base = u2.__e, u2.__h = null, h2.__h.length && f2.push(h2), b2 && (h2.__E = h2.__ = null), h2.__e = false;
} else
r2 == null && u2.__v === i2.__v ? (u2.__k = i2.__k, u2.__e = i2.__e) : u2.__e = L$2(i2.__e, u2, i2, t2, o2, r2, f2, c2);
(a2 = l$3.diffed) && a2(u2);
} catch (n3) {
u2.__v = null, (c2 || r2 != null) && (u2.__e = e2, u2.__h = !!c2, r2[r2.indexOf(e2)] = null), l$3.__e(n3, u2, i2);
}
}
function z$2(n2, u2) {
l$3.__c && l$3.__c(u2, n2), n2.some(function(u3) {
try {
n2 = u3.__h, u3.__h = [], n2.some(function(n3) {
n3.call(u3);
});
} catch (n3) {
l$3.__e(n3, u3.__v);
}
});
}
function L$2(l2, u2, i2, t2, o2, r2, e2, c2) {
var s2, h2, v2, y2 = i2.props, p2 = u2.props, d2 = u2.type, k2 = 0;
if (d2 === "svg" && (o2 = true), r2 != null) {
for (; k2 < r2.length; k2++)
if ((s2 = r2[k2]) && "setAttribute" in s2 == !!d2 && (d2 ? s2.localName === d2 : s2.nodeType === 3)) {
l2 = s2, r2[k2] = null;
break;
}
}
if (l2 == null) {
if (d2 === null)
return document.createTextNode(p2);
l2 = o2 ? document.createElementNS("http://www.w3.org/2000/svg", d2) : document.createElement(d2, p2.is && p2), r2 = null, c2 = false;
}
if (d2 === null)
y2 === p2 || c2 && l2.data === p2 || (l2.data = p2);
else {
if (r2 = r2 && n$2.call(l2.childNodes), h2 = (y2 = i2.props || f$3).dangerouslySetInnerHTML, v2 = p2.dangerouslySetInnerHTML, !c2) {
if (r2 != null)
for (y2 = {}, k2 = 0; k2 < l2.attributes.length; k2++)
y2[l2.attributes[k2].name] = l2.attributes[k2].value;
(v2 || h2) && (v2 && (h2 && v2.__html == h2.__html || v2.__html === l2.innerHTML) || (l2.innerHTML = v2 && v2.__html || ""));
}
if (C$1(l2, p2, y2, o2, c2), v2)
u2.__k = [];
else if (k2 = u2.props.children, w$3(l2, Array.isArray(k2) ? k2 : [k2], u2, i2, t2, o2 && d2 !== "foreignObject", r2, e2, r2 ? r2[0] : i2.__k && _$3(i2, 0), c2), r2 != null)
for (k2 = r2.length; k2--; )
r2[k2] != null && a$3(r2[k2]);
c2 || ("value" in p2 && (k2 = p2.value) !== void 0 && (k2 !== l2.value || d2 === "progress" && !k2 || d2 === "option" && k2 !== y2.value) && H$2(l2, "value", k2, y2.value, false), "checked" in p2 && (k2 = p2.checked) !== void 0 && k2 !== l2.checked && H$2(l2, "checked", k2, y2.checked, false));
}
return l2;
}
function M$2(n2, u2, i2) {
try {
typeof n2 == "function" ? n2(u2) : n2.current = u2;
} catch (n3) {
l$3.__e(n3, i2);
}
}
function N(n2, u2, i2) {
var t2, o2;
if (l$3.unmount && l$3.unmount(n2), (t2 = n2.ref) && (t2.current && t2.current !== n2.__e || M$2(t2, null, u2)), (t2 = n2.__c) != null) {
if (t2.componentWillUnmount)
try {
t2.componentWillUnmount();
} catch (n3) {
l$3.__e(n3, u2);
}
t2.base = t2.__P = null;
}
if (t2 = n2.__k)
for (o2 = 0; o2 < t2.length; o2++)
t2[o2] && N(t2[o2], u2, typeof n2.type != "function");
i2 || n2.__e == null || a$3(n2.__e), n2.__e = n2.__d = void 0;
}
function O$2(n2, l2, u2) {
return this.constructor(n2, u2);
}
function P$2(u2, i2, t2) {
var o2, r2, e2;
l$3.__ && l$3.__(u2, i2), r2 = (o2 = false) ? null : i2.__k, e2 = [], j$3(i2, u2 = i2.__k = h$3(p$3, null, [u2]), r2 || f$3, f$3, i2.ownerSVGElement !== void 0, r2 ? null : i2.firstChild ? n$2.call(i2.childNodes) : null, e2, r2 ? r2.__e : i2.firstChild, o2), z$2(e2, u2);
}
function q$3(l2, u2, i2) {
var t2, o2, r2, f2 = s$3({}, l2.props);
for (r2 in u2)
r2 == "key" ? t2 = u2[r2] : r2 == "ref" ? o2 = u2[r2] : f2[r2] = u2[r2];
return arguments.length > 2 && (f2.children = arguments.length > 3 ? n$2.call(arguments, 2) : i2), v$3(l2.type, f2, t2 || l2.key, o2 || l2.ref, null);
}
function B$1(n2, l2) {
var u2 = { __c: l2 = "__cC" + r$3++, __: n2, Consumer: function(n3, l3) {
return n3.children(l3);
}, Provider: function(n3) {
var u3, i2;
return this.getChildContext || (u3 = [], (i2 = {})[l2] = this, this.getChildContext = function() {
return i2;
}, this.shouldComponentUpdate = function(n4) {
this.props.value !== n4.value && u3.some(b$2);
}, this.sub = function(n4) {
u3.push(n4);
var l3 = n4.componentWillUnmount;
n4.componentWillUnmount = function() {
u3.splice(u3.indexOf(n4), 1), l3 && l3.call(n4);
};
}), n3.children;
} };
return u2.Provider.__ = u2.Consumer.contextType = u2;
}
n$2 = e$1.slice, l$3 = { __e: function(n2, l2, u2, i2) {
for (var t2, o2, r2; l2 = l2.__; )
if ((t2 = l2.__c) && !t2.__)
try {
if ((o2 = t2.constructor) && o2.getDerivedStateFromError != null && (t2.setState(o2.getDerivedStateFromError(n2)), r2 = t2.__d), t2.componentDidCatch != null && (t2.componentDidCatch(n2, i2 || {}), r2 = t2.__d), r2)
return t2.__E = t2;
} catch (l3) {
n2 = l3;
}
throw n2;
} }, u$3 = 0, d$3.prototype.setState = function(n2, l2) {
var u2;
u2 = this.__s != null && this.__s !== this.state ? this.__s : this.__s = s$3({}, this.state), typeof n2 == "function" && (n2 = n2(s$3({}, u2), this.props)), n2 && s$3(u2, n2), n2 != null && this.__v && (l2 && this.__h.push(l2), b$2(this));
}, d$3.prototype.forceUpdate = function(n2) {
this.__v && (this.__e = true, n2 && this.__h.push(n2), b$2(this));
}, d$3.prototype.render = p$3, t$2 = [], g$4.__r = 0, r$3 = 0;
var t$1, u$2, r$2, o$2, i$2 = 0, c$2 = [], f$2 = [], e = l$3.__b, a$2 = l$3.__r, v$2 = l$3.diffed, l$2 = l$3.__c, m$1 = l$3.unmount;
function p$2(t2, r2) {
l$3.__h && l$3.__h(u$2, t2, i$2 || r2), i$2 = 0;
var o2 = u$2.__H || (u$2.__H = { __: [], __h: [] });
return t2 >= o2.__.length && o2.__.push({ __V: f$2 }), o2.__[t2];
}
function y$1(n2) {
return i$2 = 1, d$2(z$1, n2);
}
function d$2(n2, r2, o2) {
var i2 = p$2(t$1++, 2);
return i2.t = n2, i2.__c || (i2.__ = [z$1(void 0, r2), function(n3) {
var t2 = i2.t(i2.__[0], n3);
i2.__[0] !== t2 && (i2.__ = [t2, i2.__[1]], i2.__c.setState({}));
}], i2.__c = u$2), i2.__;
}
function _$2(r2, o2) {
var i2 = p$2(t$1++, 3);
!l$3.__s && w$2(i2.__H, o2) && (i2.__ = r2, i2.u = o2, u$2.__H.__h.push(i2));
}
function h$2(r2, o2) {
var i2 = p$2(t$1++, 4);
!l$3.__s && w$2(i2.__H, o2) && (i2.__ = r2, i2.u = o2, u$2.__h.push(i2));
}
function s$2(n2) {
return i$2 = 5, F$2(function() {
return { current: n2 };
}, []);
}
function F$2(n2, u2) {
var r2 = p$2(t$1++, 7);
return w$2(r2.__H, u2) ? (r2.__V = n2(), r2.u = u2, r2.__h = n2, r2.__V) : r2.__;
}
function T$1(n2, t2) {
return i$2 = 8, F$2(function() {
return n2;
}, t2);
}
function q$2(n2) {
var r2 = u$2.context[n2.__c], o2 = p$2(t$1++, 9);
return o2.c = n2, r2 ? (o2.__ == null && (o2.__ = true, r2.sub(u$2)), r2.props.value) : n2.__;
}
function b$1() {
for (var t2; t2 = c$2.shift(); )
if (t2.__P)
try {
t2.__H.__h.forEach(j$2), t2.__H.__h.forEach(k$1), t2.__H.__h = [];
} catch (u2) {
t2.__H.__h = [], l$3.__e(u2, t2.__v);
}
}
l$3.__b = function(n2) {
u$2 = null, e && e(n2);
}, l$3.__r = function(n2) {
a$2 && a$2(n2), t$1 = 0;
var o2 = (u$2 = n2.__c).__H;
o2 && (r$2 === u$2 ? (o2.__h = [], u$2.__h = [], o2.__.forEach(function(n3) {
n3.__V = f$2, n3.u = void 0;
})) : (o2.__h.forEach(j$2), o2.__h.forEach(k$1), o2.__h = [])), r$2 = u$2;
}, l$3.diffed = function(t2) {
v$2 && v$2(t2);
var i2 = t2.__c;
i2 && i2.__H && (i2.__H.__h.length && (c$2.push(i2) !== 1 && o$2 === l$3.requestAnimationFrame || ((o$2 = l$3.requestAnimationFrame) || function(n2) {
var t3, u2 = function() {
clearTimeout(r2), g$3 && cancelAnimationFrame(t3), setTimeout(n2);
}, r2 = setTimeout(u2, 100);
g$3 && (t3 = requestAnimationFrame(u2));
})(b$1)), i2.__H.__.forEach(function(n2) {
n2.u && (n2.__H = n2.u), n2.__V !== f$2 && (n2.__ = n2.__V), n2.u = void 0, n2.__V = f$2;
})), r$2 = u$2 = null;
}, l$3.__c = function(t2, u2) {
u2.some(function(t3) {
try {
t3.__h.forEach(j$2), t3.__h = t3.__h.filter(function(n2) {
return !n2.__ || k$1(n2);
});
} catch (r2) {
u2.some(function(n2) {
n2.__h && (n2.__h = []);
}), u2 = [], l$3.__e(r2, t3.__v);
}
}), l$2 && l$2(t2, u2);
}, l$3.unmount = function(t2) {
m$1 && m$1(t2);
var u2, r2 = t2.__c;
r2 && r2.__H && (r2.__H.__.forEach(function(n2) {
try {
j$2(n2);
} catch (n3) {
u2 = n3;
}
}), u2 && l$3.__e(u2, r2.__v));
};
var g$3 = typeof requestAnimationFrame == "function";
function j$2(n2) {
var t2 = u$2, r2 = n2.__c;
typeof r2 == "function" && (n2.__c = void 0, r2()), u$2 = t2;
}
function k$1(n2) {
var t2 = u$2;
n2.__c = n2.__(), u$2 = t2;
}
function w$2(n2, t2) {
return !n2 || n2.length !== t2.length || t2.some(function(t3, u2) {
return t3 !== n2[u2];
});
}
function z$1(n2, t2) {
return typeof t2 == "function" ? t2(n2) : t2;
}
function n$1(n2) {
for (var r2 = arguments.length, t2 = Array(r2 > 1 ? r2 - 1 : 0), e2 = 1; e2 < r2; e2++)
t2[e2 - 1] = arguments[e2];
throw Error("[Immer] minified error nr: " + n2 + (t2.length ? " " + t2.map(function(n3) {
return "'" + n3 + "'";
}).join(",") : "") + ". Find the full error at: https://bit.ly/3cXEKWf");
}
function r$1(n2) {
return !!n2 && !!n2[Q$1];
}
function t(n2) {
return !!n2 && (function(n3) {
if (!n3 || typeof n3 != "object")
return false;
var r2 = Object.getPrototypeOf(n3);
if (r2 === null)
return true;
var t2 = Object.hasOwnProperty.call(r2, "constructor") && r2.constructor;
return t2 === Object || typeof t2 == "function" && Function.toString.call(t2) === Z$1;
}(n2) || Array.isArray(n2) || !!n2[L$1] || !!n2.constructor[L$1] || s$1(n2) || v$1(n2));
}
function i$1(n2, r2, t2) {
t2 === void 0 && (t2 = false), o$1(n2) === 0 ? (t2 ? Object.keys : nn)(n2).forEach(function(e2) {
t2 && typeof e2 == "symbol" || r2(e2, n2[e2], n2);
}) : n2.forEach(function(t3, e2) {
return r2(e2, t3, n2);
});
}
function o$1(n2) {
var r2 = n2[Q$1];
return r2 ? r2.i > 3 ? r2.i - 4 : r2.i : Array.isArray(n2) ? 1 : s$1(n2) ? 2 : v$1(n2) ? 3 : 0;
}
function u$1(n2, r2) {
return o$1(n2) === 2 ? n2.has(r2) : Object.prototype.hasOwnProperty.call(n2, r2);
}
function a$1(n2, r2) {
return o$1(n2) === 2 ? n2.get(r2) : n2[r2];
}
function f$1(n2, r2, t2) {
var e2 = o$1(n2);
e2 === 2 ? n2.set(r2, t2) : e2 === 3 ? (n2.delete(r2), n2.add(t2)) : n2[r2] = t2;
}
function c$1(n2, r2) {
return n2 === r2 ? n2 !== 0 || 1 / n2 == 1 / r2 : n2 != n2 && r2 != r2;
}
function s$1(n2) {
return X && n2 instanceof Map;
}
function v$1(n2) {
return q$1 && n2 instanceof Set;
}
function p$1(n2) {
return n2.o || n2.t;
}
function l$1(n2) {
if (Array.isArray(n2))
return Array.prototype.slice.call(n2);
var r2 = rn(n2);
delete r2[Q$1];
for (var t2 = nn(r2), e2 = 0; e2 < t2.length; e2++) {
var i2 = t2[e2], o2 = r2[i2];
o2.writable === false && (o2.writable = true, o2.configurable = true), (o2.get || o2.set) && (r2[i2] = { configurable: true, writable: true, enumerable: o2.enumerable, value: n2[i2] });
}
return Object.create(Object.getPrototypeOf(n2), r2);
}
function d$1(n2, e2) {
return e2 === void 0 && (e2 = false), y(n2) || r$1(n2) || !t(n2) ? n2 : (o$1(n2) > 1 && (n2.set = n2.add = n2.clear = n2.delete = h$1), Object.freeze(n2), e2 && i$1(n2, function(n3, r2) {
return d$1(r2, true);
}, true), n2);
}
function h$1() {
n$1(2);
}
function y(n2) {
return n2 == null || typeof n2 != "object" || Object.isFrozen(n2);
}
function b(r2) {
var t2 = tn[r2];
return t2 || n$1(18, r2), t2;
}
function _$1() {
return U;
}
function j$1(n2, r2) {
r2 && (b("Patches"), n2.u = [], n2.s = [], n2.v = r2);
}
function O$1(n2) {
g$2(n2), n2.p.forEach(S$1), n2.p = null;
}
function g$2(n2) {
n2 === U && (U = n2.l);
}
function w$1(n2) {
return U = { p: [], l: U, h: n2, m: true, _: 0 };
}
function S$1(n2) {
var r2 = n2[Q$1];
r2.i === 0 || r2.i === 1 ? r2.j() : r2.O = true;
}
function P$1(r2, e2) {
e2._ = e2.p.length;
var i2 = e2.p[0], o2 = r2 !== void 0 && r2 !== i2;
return e2.h.g || b("ES5").S(e2, r2, o2), o2 ? (i2[Q$1].P && (O$1(e2), n$1(4)), t(r2) && (r2 = M$1(e2, r2), e2.l || x$2(e2, r2)), e2.u && b("Patches").M(i2[Q$1].t, r2, e2.u, e2.s)) : r2 = M$1(e2, i2, []), O$1(e2), e2.u && e2.v(e2.u, e2.s), r2 !== H$1 ? r2 : void 0;
}
function M$1(n2, r2, t2) {
if (y(r2))
return r2;
var e2 = r2[Q$1];
if (!e2)
return i$1(r2, function(i2, o3) {
return A$1(n2, e2, r2, i2, o3, t2);
}, true), r2;
if (e2.A !== n2)
return r2;
if (!e2.P)
return x$2(n2, e2.t, true), e2.t;
if (!e2.I) {
e2.I = true, e2.A._--;
var o2 = e2.i === 4 || e2.i === 5 ? e2.o = l$1(e2.k) : e2.o;
i$1(e2.i === 3 ? new Set(o2) : o2, function(r3, i2) {
return A$1(n2, e2, o2, r3, i2, t2);
}), x$2(n2, o2, false), t2 && n2.u && b("Patches").R(e2, t2, n2.u, n2.s);
}
return e2.o;
}
function A$1(e2, i2, o2, a2, c2, s2) {
if (r$1(c2)) {
var v2 = M$1(e2, c2, s2 && i2 && i2.i !== 3 && !u$1(i2.D, a2) ? s2.concat(a2) : void 0);
if (f$1(o2, a2, v2), !r$1(v2))
return;
e2.m = false;
}
if (t(c2) && !y(c2)) {
if (!e2.h.F && e2._ < 1)
return;
M$1(e2, c2), i2 && i2.A.l || x$2(e2, c2);
}
}
function x$2(n2, r2, t2) {
t2 === void 0 && (t2 = false), n2.h.F && n2.m && d$1(r2, t2);
}
function z(n2, r2) {
var t2 = n2[Q$1];
return (t2 ? p$1(t2) : n2)[r2];
}
function I$1(n2, r2) {
if (r2 in n2)
for (var t2 = Object.getPrototypeOf(n2); t2; ) {
var e2 = Object.getOwnPropertyDescriptor(t2, r2);
if (e2)
return e2;
t2 = Object.getPrototypeOf(t2);
}
}
function k(n2) {
n2.P || (n2.P = true, n2.l && k(n2.l));
}
function E$1(n2) {
n2.o || (n2.o = l$1(n2.t));
}
function R$1(n2, r2, t2) {
var e2 = s$1(r2) ? b("MapSet").N(r2, t2) : v$1(r2) ? b("MapSet").T(r2, t2) : n2.g ? function(n3, r3) {
var t3 = Array.isArray(n3), e3 = { i: t3 ? 1 : 0, A: r3 ? r3.A : _$1(), P: false, I: false, D: {}, l: r3, t: n3, k: null, o: null, j: null, C: false }, i2 = e3, o2 = en;
t3 && (i2 = [e3], o2 = on);
var u2 = Proxy.revocable(i2, o2), a2 = u2.revoke, f2 = u2.proxy;
return e3.k = f2, e3.j = a2, f2;
}(r2, t2) : b("ES5").J(r2, t2);
return (t2 ? t2.A : _$1()).p.push(e2), e2;
}
function D$1(e2) {
return r$1(e2) || n$1(22, e2), function n2(r2) {
if (!t(r2))
return r2;
var e3, u2 = r2[Q$1], c2 = o$1(r2);
if (u2) {
if (!u2.P && (u2.i < 4 || !b("ES5").K(u2)))
return u2.t;
u2.I = true, e3 = F$1(r2, c2), u2.I = false;
} else
e3 = F$1(r2, c2);
return i$1(e3, function(r3, t2) {
u2 && a$1(u2.t, r3) === t2 || f$1(e3, r3, n2(t2));
}), c2 === 3 ? new Set(e3) : e3;
}(e2);
}
function F$1(n2, r2) {
switch (r2) {
case 2:
return new Map(n2);
case 3:
return Array.from(n2);
}
return l$1(n2);
}
var G, U, W$1 = typeof Symbol != "undefined" && typeof Symbol("x") == "symbol", X = typeof Map != "undefined", q$1 = typeof Set != "undefined", B = typeof Proxy != "undefined" && Proxy.revocable !== void 0 && typeof Reflect != "undefined", H$1 = W$1 ? Symbol.for("immer-nothing") : ((G = {})["immer-nothing"] = true, G), L$1 = W$1 ? Symbol.for("immer-draftable") : "__$immer_draftable", Q$1 = W$1 ? Symbol.for("immer-state") : "__$immer_state", Z$1 = "" + Object.prototype.constructor, nn = typeof Reflect != "undefined" && Reflect.ownKeys ? Reflect.ownKeys : Object.getOwnPropertySymbols !== void 0 ? function(n2) {
return Object.getOwnPropertyNames(n2).concat(Object.getOwnPropertySymbols(n2));
} : Object.getOwnPropertyNames, rn = Object.getOwnPropertyDescriptors || function(n2) {
var r2 = {};
return nn(n2).forEach(function(t2) {
r2[t2] = Object.getOwnPropertyDescriptor(n2, t2);
}), r2;
}, tn = {}, en = { get: function(n2, r2) {
if (r2 === Q$1)
return n2;
var e2 = p$1(n2);
if (!u$1(e2, r2))
return function(n3, r3, t2) {
var e3, i3 = I$1(r3, t2);
return i3 ? "value" in i3 ? i3.value : (e3 = i3.get) === null || e3 === void 0 ? void 0 : e3.call(n3.k) : void 0;
}(n2, e2, r2);
var i2 = e2[r2];
return n2.I || !t(i2) ? i2 : i2 === z(n2.t, r2) ? (E$1(n2), n2.o[r2] = R$1(n2.A.h, i2, n2)) : i2;
}, has: function(n2, r2) {
return r2 in p$1(n2);
}, ownKeys: function(n2) {
return Reflect.ownKeys(p$1(n2));
}, set: function(n2, r2, t2) {
var e2 = I$1(p$1(n2), r2);
if (e2 == null ? void 0 : e2.set)
return e2.set.call(n2.k, t2), true;
if (!n2.P) {
var i2 = z(p$1(n2), r2), o2 = i2 == null ? void 0 : i2[Q$1];
if (o2 && o2.t === t2)
return n2.o[r2] = t2, n2.D[r2] = false, true;
if (c$1(t2, i2) && (t2 !== void 0 || u$1(n2.t, r2)))
return true;
E$1(n2), k(n2);
}
return n2.o[r2] === t2 && typeof t2 != "number" && (t2 !== void 0 || r2 in n2.o) || (n2.o[r2] = t2, n2.D[r2] = true, true);
}, deleteProperty: function(n2, r2) {
return z(n2.t, r2) !== void 0 || r2 in n2.t ? (n2.D[r2] = false, E$1(n2), k(n2)) : delete n2.D[r2], n2.o && delete n2.o[r2], true;
}, getOwnPropertyDescriptor: function(n2, r2) {
var t2 = p$1(n2), e2 = Reflect.getOwnPropertyDescriptor(t2, r2);
return e2 ? { writable: true, configurable: n2.i !== 1 || r2 !== "length", enumerable: e2.enumerable, value: t2[r2] } : e2;
}, defineProperty: function() {
n$1(11);
}, getPrototypeOf: function(n2) {
return Object.getPrototypeOf(n2.t);
}, setPrototypeOf: function() {
n$1(12);
} }, on = {};
i$1(en, function(n2, r2) {
on[n2] = function() {
return arguments[0] = arguments[0][0], r2.apply(this, arguments);
};
}), on.deleteProperty = function(r2, t2) {
return on.set.call(this, r2, t2, void 0);
}, on.set = function(r2, t2, e2) {
return en.set.call(this, r2[0], t2, e2, r2[0]);
};
var un$1 = function() {
function e2(r2) {
var e3 = this;
this.g = B, this.F = true, this.produce = function(r3, i3, o2) {
if (typeof r3 == "function" && typeof i3 != "function") {
var u2 = i3;
i3 = r3;
var a2 = e3;
return function(n2) {
var r4 = this;
n2 === void 0 && (n2 = u2);
for (var t2 = arguments.length, e4 = Array(t2 > 1 ? t2 - 1 : 0), o3 = 1; o3 < t2; o3++)
e4[o3 - 1] = arguments[o3];
return a2.produce(n2, function(n3) {
var t3;
return (t3 = i3).call.apply(t3, [r4, n3].concat(e4));
});
};
}
var f2;
if (typeof i3 != "function" && n$1(6), o2 !== void 0 && typeof o2 != "function" && n$1(7), t(r3)) {
var c2 = w$1(e3), s2 = R$1(e3, r3, void 0), v2 = true;
try {
f2 = i3(s2), v2 = false;
} finally {
v2 ? O$1(c2) : g$2(c2);
}
return typeof Promise != "undefined" && f2 instanceof Promise ? f2.then(function(n2) {
return j$1(c2, o2), P$1(n2, c2);
}, function(n2) {
throw O$1(c2), n2;
}) : (j$1(c2, o2), P$1(f2, c2));
}
if (!r3 || typeof r3 != "object") {
if ((f2 = i3(r3)) === void 0 && (f2 = r3), f2 === H$1 && (f2 = void 0), e3.F && d$1(f2, true), o2) {
var p2 = [], l2 = [];
b("Patches").M(r3, f2, p2, l2), o2(p2, l2);
}
return f2;
}
n$1(21, r3);
}, this.produceWithPatches = function(n2, r3) {
if (typeof n2 == "function")
return function(r4) {
for (var t3 = arguments.length, i4 = Array(t3 > 1 ? t3 - 1 : 0), o3 = 1; o3 < t3; o3++)
i4[o3 - 1] = arguments[o3];
return e3.produceWithPatches(r4, function(r5) {
return n2.apply(void 0, [r5].concat(i4));
});
};
var t2, i3, o2 = e3.produce(n2, r3, function(n3, r4) {
t2 = n3, i3 = r4;
});
return typeof Promise != "undefined" && o2 instanceof Promise ? o2.then(function(n3) {
return [n3, t2, i3];
}) : [o2, t2, i3];
}, typeof (r2 == null ? void 0 : r2.useProxies) == "boolean" && this.setUseProxies(r2.useProxies), typeof (r2 == null ? void 0 : r2.autoFreeze) == "boolean" && this.setAutoFreeze(r2.autoFreeze);
}
var i2 = e2.prototype;
return i2.createDraft = function(e3) {
t(e3) || n$1(8), r$1(e3) && (e3 = D$1(e3));
var i3 = w$1(this), o2 = R$1(this, e3, void 0);
return o2[Q$1].C = true, g$2(i3), o2;
}, i2.finishDraft = function(r2, t2) {
var e3 = r2 && r2[Q$1];
var i3 = e3.A;
return j$1(i3, t2), P$1(void 0, i3);
}, i2.setAutoFreeze = function(n2) {
this.F = n2;
}, i2.setUseProxies = function(r2) {
r2 && !B && n$1(20), this.g = r2;
}, i2.applyPatches = function(n2, t2) {
var e3;
for (e3 = t2.length - 1; e3 >= 0; e3--) {
var i3 = t2[e3];
if (i3.path.length === 0 && i3.op === "replace") {
n2 = i3.value;
break;
}
}
e3 > -1 && (t2 = t2.slice(e3 + 1));
var o2 = b("Patches").$;
return r$1(n2) ? o2(n2, t2) : this.produce(n2, function(n3) {
return o2(n3, t2);
});
}, e2;
}(), an = new un$1(), fn = an.produce;
an.produceWithPatches.bind(an);
an.setAutoFreeze.bind(an);
an.setUseProxies.bind(an);
an.applyPatches.bind(an);
an.createDraft.bind(an);
an.finishDraft.bind(an);
var produce = fn;
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function isUndefined$3(obj) {
return obj === void 0;
}
var isUndefined_1 = isUndefined$3;
var isUndefined$2 = isUndefined_1;
function range(start, stop, step) {
var arr = [];
var flag;
if (isUndefined$2(stop)) {
stop = start || 0;
start = 0;
}
step = step || 1;
flag = step < 0 ? -1 : 1;
stop *= flag;
for (; start * flag < stop; start += step) {
arr.push(start);
}
return arr;
}
var range_1 = range;
const DEFAULT_DAY_NAME_MARGIN_LEFT = "0";
const MONTH_EVENT_HEIGHT = 24;
const MONTH_EVENT_MARGIN_TOP = 2;
const MONTH_CELL_PADDING_TOP = 3;
const MONTH_CELL_BAR_HEIGHT = 27;
const MONTH_MORE_VIEW_PADDING = 5;
const MONTH_MORE_VIEW_MIN_WIDTH = 280;
const MONTH_MORE_VIEW_HEADER_HEIGHT = 44;
const MONTH_MORE_VIEW_HEADER_MARGIN_BOTTOM = 12;
const MONTH_MORE_VIEW_HEADER_PADDING_TOP = 12;
const MONTH_MORE_VIEW_HEADER_PADDING = "12px 17px 0";
const WEEK_DAY_NAME_HEIGHT = 42;
const WEEK_DAY_NAME_BORDER = 1;
const WEEK_EVENT_MARGIN_TOP = 2;
const DEFAULT_PANEL_HEIGHT = 72;
const DEFAULT_EVENT_COLORS = {
color: "#000",
backgroundColor: "#a1b56c",
dragBackgroundColor: "#a1b56c",
borderColor: "#000"
};
const TIME_EVENT_CONTAINER_MARGIN_LEFT = 2;
const COLLAPSED_DUPLICATE_EVENT_WIDTH_PX = 9;
function isBoolean(obj) {
return typeof obj === "boolean" || obj instanceof Boolean;
}
var isBoolean_1 = isBoolean;
function isNumber(obj) {
return typeof obj === "number" || obj instanceof Number;
}
var isNumber_1 = isNumber;
function isObject$1(obj) {
return obj === Object(obj);
}
var isObject_1 = isObject$1;
function isString$1(obj) {
return typeof obj === "string" || obj instanceof String;
}
var isString_1 = isString$1;
function isNil(value) {
return isUndefined_1(value) || value === null;
}
function isPresent(value) {
return !isNil(value);
}
function isFunction$2(value) {
return typeof value === "function";
}
const CSS_PREFIX = "toastui-calendar-";
function cls(...args) {
const result = [];
args.forEach((arg) => {
if (!arg) {
return;
}
if (isString_1(arg)) {
result.push(arg);
} else {
Object.keys(arg).forEach((className2) => {
if (arg[className2]) {
result.push(className2);
}
});
}
});
return result.map((str) => `${CSS_PREFIX}${str}`).join(" ");
}
function toPercent(value) {
return `${value}%`;
}
function toPx(value) {
return `${value}px`;
}
function extractPercentPx(value) {
const percentRegexp = /(\d+)%/;
const percentResult = value.match(percentRegexp);
const pxRegexp = /(-?)\s?(\d+)px/;
const pxResult = value.match(pxRegexp);
return {
percent: percentResult ? parseInt(percentResult[1], 10) : 0,
px: pxResult ? parseInt(`${pxResult[1]}${pxResult[2]}`, 10) : 0
};
}
function getEventColors(uiModel, calendarColor) {
const eventColors = uiModel.model.getColors();
return Object.keys(DEFAULT_EVENT_COLORS).reduce((colors, _key) => {
var _a, _b;
const key = _key;
colors[key] = (_b = (_a = eventColors[key]) != null ? _a : calendarColor[key]) != null ? _b : DEFAULT_EVENT_COLORS[key];
return colors;
}, {});
}
const rISO8601 = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.)?([0-9]+)?([+-]\d\d(?::?\d\d)?|\s*Z)?$/;
function throwNotSupported() {
throw new Error("This operation is not supported.");
}
function getDateTime(dateString) {
const match = rISO8601.exec(dateString);
if (match) {
const [, y2, M2, d2, h2, m2, s2, , ms, zoneInfo] = match;
return {
y: Number(y2),
M: Number(M2) - 1,
d: Number(d2),
h: Number(h2),
m: Number(m2),
s: Number(s2),
ms: Number(ms) || 0,
zoneInfo
};
}
return null;
}
function createFromDateString(dateString) {
const info = getDateTime(dateString);
if (info && !info.zoneInfo) {
const { y: y2, M: M2, d: d2, h: h2, m: m2, s: s2, ms } = info;
return new Date(y2, M2, d2, h2, m2, s2, ms);
}
return null;
}
class LocalDate {
constructor(...args) {
const [firstArg] = args;
if (firstArg instanceof Date) {
this.d = new Date(firstArg.getTime());
} else if (isString_1(firstArg) && args.length === 1) {
this.d = createFromDateString(firstArg);
}
if (!this.d) {
this.d = new Date(...args);
}
}
setTimezoneOffset() {
throwNotSupported();
}
setTimezoneName() {
throwNotSupported();
}
clone() {
return new LocalDate(this.d);
}
toDate() {
return new Date(this.d.getTime());
}
toString() {
return this.d.toString();
}
}
const getterMethods = [
"getTime",
"getTimezoneOffset",
"getFullYear",
"getMonth",
"getDate",
"getHours",
"getMinutes",
"getSeconds",
"getMilliseconds",
"getDay"
];
const setterMethods = [
"setTime",
"setFullYear",
"setMonth",
"setDate",
"setHours",
"setMinutes",
"setSeconds",
"setMilliseconds"
];
getterMethods.forEach((methodName) => {
LocalDate.prototype[methodName] = function(...args) {
return this.d[methodName](...args);
};
});
setterMethods.forEach((methodName) => {
LocalDate.prototype[methodName] = function(...args) {
return this.d[methodName](...args);
};
});
class UTCDate extends LocalDate {
clone() {
return new UTCDate(this.d);
}
getTimezoneOffset() {
return 0;
}
}
const getterProperties = [
"FullYear",
"Month",
"Date",
"Hours",
"Minutes",
"Seconds",
"Milliseconds",
"Day"
];
const setterProperties = [
"FullYear",
"Month",
"Date",
"Hours",
"Minutes",
"Seconds",
"Milliseconds"
];
getterProperties.forEach((prop) => {
const methodName = `get${prop}`;
UTCDate.prototype[methodName] = function(...args) {
return this.d[`getUTC${prop}`](...args);
};
});
setterProperties.forEach((prop) => {
const methodName = `set${prop}`;
UTCDate.prototype[methodName] = function(...args) {
return this.d[`setUTC${prop}`](...args);
};
});
const INVALID_DATETIME_FORMAT = "Invalid DateTime Format";
const INVALID_TIMEZONE_NAME = "Invalid IANA Timezone Name";
const INVALID_VIEW_TYPE = "Invalid View Type";
const MESSAGE_PREFIX = "@toast-ui/calendar: ";
class InvalidTimezoneNameError extends Error {
constructor(timezoneName) {
super(`${MESSAGE_PREFIX}${INVALID_TIMEZONE_NAME} - ${timezoneName}`);
this.name = "InvalidTimezoneNameError";
}
}
class InvalidDateTimeFormatError extends Error {
constructor(dateTimeString) {
super(`${MESSAGE_PREFIX}${INVALID_DATETIME_FORMAT} - ${dateTimeString}`);
this.name = "InvalidDateTimeFormatError";
}
}
class InvalidViewTypeError extends Error {
constructor(viewType) {
super(`${MESSAGE_PREFIX}${INVALID_VIEW_TYPE} - ${viewType}`);
this.name = "InvalidViewTypeError";
}
}
const logger = {
error: (firstArg, ...restArgs) => {
console.error(`${MESSAGE_PREFIX}${firstArg}`, ...restArgs);
},
warn: (firstArg, ...restArgs) => {
console.warn(`${MESSAGE_PREFIX}${firstArg}`, ...restArgs);
}
};
let Constructor = LocalDate;
function date(...args) {
return new Constructor(...args);
}
function getLocalTimezoneOffset() {
return -(/* @__PURE__ */ new Date()).getTimezoneOffset();
}
function calculateTimezoneOffset(timezoneName, targetDate = new TZDate()) {
if (!isIntlDateTimeFormatSupported()) {
logger.warn("Intl.DateTimeFormat is not fully supported. So It will return the local timezone offset only.\nYou can use a polyfill to fix this issue.");
return -targetDate.toDate().getTimezoneOffset();
}
validateIANATimezoneName(timezoneName);
const token = tokenizeTZDate(targetDate, timezoneName);
const utcDate = tokenToUtcDate(token);
return Math.round((utcDate.getTime() - targetDate.getTime()) / 60 / 1e3);
}
function isUsingDST(targetDate, timezoneName) {
const jan = new TZDate(targetDate.getFullYear(), 0, 1);
const jul = new TZDate(targetDate.getFullYear(), 6, 1);
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()) !== targetDate.toDate().getTimezoneOffset();
}
const dtfCache = {};
const timezoneNameValidationCache = {};
function isIntlDateTimeFormatSupported() {
var _a, _b;
return isFunction$2((_b = (_a = Intl == null ? void 0 : Intl.DateTimeFormat) == null ? void 0 : _a.prototype) == null ? void 0 : _b.formatToParts);
}
function validateIANATimezoneName(timezoneName) {
if (timezoneNameValidationCache[timezoneName]) {
return true;
}
try {
Intl.DateTimeFormat("en-US", { timeZone: timezoneName });
timezoneNameValidationCache[timezoneName] = true;
return true;
} catch (e2) {
throw new InvalidTimezoneNameError(timezoneName);
}
}
function getDateTimeFormat(timezoneName) {
if (dtfCache[timezoneName]) {
return dtfCache[timezoneName];
}
const dtf = new Intl.DateTimeFormat("en-US", {
timeZone: timezoneName,
hourCycle: "h23",
hour12: false,
year: "numeric",
month: "numeric",
day: "numeric",
hour: "numeric",
minute: "numeric",
second: "numeric"
});
dtfCache[timezoneName] = dtf;
return dtf;
}
const typeToPos = {
year: 0,
month: 1,
day: 2,
hour: 3,
minute: 4,
second: 5
};
function tokenizeTZDate(tzDate, timezoneName) {
const dtf = getDateTimeFormat(timezoneName);
const formatted = dtf.formatToParts(tzDate.toDate());
return formatted.reduce((result, cur) => {
const pos = typeToPos[cur.type];
if (isPresent(pos)) {
result[pos] = parseInt(cur.value, 10);
}
return result;
}, []);
}
function tokenToUtcDate(token) {
const [year, monthPlusOne, day, hour, minute, second] = token;
const month = monthPlusOne - 1;
return new Date(Date.UTC(year, month, day, hour % 24, minute, second));
}
function getTZOffsetMSDifference(offset) {
return (getLocalTimezoneOffset() - offset) * MS_PER_MINUTES;
}
class TZDate {
constructor(...args) {
this.tzOffset = null;
if (args[0] instanceof TZDate) {
this.d = date(args[0].getTime());
} else {
this.d = date(...args);
}
}
toString() {
return this.d.toString();
}
addFullYear(y2) {
this.setFullYear(this.getFullYear() + y2);
return this;
}
addMonth(m2) {
this.setMonth(this.getMonth() + m2);
return this;
}
addDate(d2) {
this.setDate(this.getDate() + d2);
return this;
}
addHours(h2) {
this.setHours(this.getHours() + h2);
return this;
}
addMinutes(M2) {
this.setMinutes(this.getMinutes() + M2);
return this;
}
addSeconds(s2) {
this.setSeconds(this.getSeconds() + s2);
return this;
}
addMilliseconds(ms) {
this.setMilliseconds(this.getMilliseconds() + ms);
return this;
}
setWithRaw(y2, m2, d2, h2, M2, s2, ms) {
this.setFullYear(y2, m2, d2);
this.setHours(h2, M2, s2, ms);
return this;
}
toDate() {
return this.d.toDate();
}
valueOf() {
return this.getTime();
}
getTimezoneOffset() {
var _a;
return (_a = this.tzOffset) != null ? _a : this.d.getTimezoneOffset();
}
getTime() {
return this.d.getTime();
}
getFullYear() {
return this.d.getFullYear();
}
getMonth() {
return this.d.getMonth();
}
getDate() {
return this.d.getDate();
}
getHours() {
return this.d.getHours();
}
getMinutes() {
return this.d.getMinutes();
}
getSeconds() {
return this.d.getSeconds();
}
getMilliseconds() {
return this.d.getMilliseconds();
}
getDay() {
return this.d.getDay();
}
setTime(t2) {
return this.d.setTime(t2);
}
setFullYear(y2, m2 = this.getMonth(), d2 = this.getDate()) {
return this.d.setFullYear(y2, m2, d2);
}
setMonth(m2, d2 = this.getDate()) {
return this.d.setMonth(m2, d2);
}
setDate(d2) {
return this.d.setDate(d2);
}
setHours(h2, M2 = this.getMinutes(), s2 = this.getSeconds(), ms = this.getMilliseconds()) {
return this.d.setHours(h2, M2, s2, ms);
}
setMinutes(M2, s2 = this.getSeconds(), ms = this.getMilliseconds()) {
return this.d.setMinutes(M2, s2, ms);
}
setSeconds(s2, ms = this.getMilliseconds()) {
return this.d.setSeconds(s2, ms);
}
setMilliseconds(ms) {
return this.d.setMilliseconds(ms);
}
tz(tzValue) {
if (tzValue === "Local") {
return new TZDate(this.getTime());
}
const tzOffset = isString_1(tzValue) ? calculateTimezoneOffset(tzValue, this) : tzValue;
const newTZDate = new TZDate(this.getTime() - getTZOffsetMSDifference(tzOffset));
newTZDate.tzOffset = tzOffset;
return newTZDate;
}
local(tzValue) {
if (isPresent(tzValue)) {
const tzOffset = isString_1(tzValue) ? calculateTimezoneOffset(tzValue, this) : tzValue;
return new TZDate(this.getTime() + getTZOffsetMSDifference(tzOffset));
}
return new TZDate(this.getTime() + (isPresent(this.tzOffset) ? getTZOffsetMSDifference(this.tzOffset) : 0));
}
}
function pick(obj, ...propNames) {
return propNames.reduce((acc, key) => {
if (obj.hasOwnProperty(key)) {
acc[key] = obj[key];
}
return acc;
}, {});
}
function clone$1(source) {
return Object.assign(Object.create(Object.getPrototypeOf(source)), source);
}
function mergeObject(target, source = {}) {
if (!isObject_1(source)) {
return target;
}
Object.keys(source).forEach((k2) => {
const targetKey = k2;
const sourceKey = k2;
if (!Array.isArray(source[sourceKey]) && isObject_1(target[targetKey]) && isObject_1(source[sourceKey]) && !(source[sourceKey] instanceof TZDate)) {
target[targetKey] = mergeObject(target[targetKey], source[sourceKey]);
} else {
target[targetKey] = source[sourceKey];
}
});
return target;
}
const eventUIPropsKey = [
"top",
"left",
"width",
"height",
"exceedLeft",
"exceedRight",
"croppedStart",
"croppedEnd",
"goingDurationHeight",
"modelDurationHeight",
"comingDurationHeight",
"duplicateEvents",
"duplicateEventIndex",
"duplicateStarts",
"duplicateEnds",
"duplicateLeft",
"duplicateWidth",
"collapse",
"isMain"
];
class EventUIModel {
constructor(event) {
this.top = 0;
this.left = 0;
this.width = 0;
this.height = 0;
this.exceedLeft = false;
this.exceedRight = false;
this.croppedStart = false;
this.croppedEnd = false;
this.goingDurationHeight = 0;
this.modelDurationHeight = 100;
this.comingDurationHeight = 0;
this.duplicateEvents = [];
this.duplicateEventIndex = -1;
this.duplicateLeft = "";
this.duplicateWidth = "";
this.collapse = false;
this.isMain = false;
this.model = event;
}
getUIProps() {
return pick(this, ...eventUIPropsKey);
}
setUIProps(props) {
Object.assign(this, props);
}
getStarts() {
if (this.renderStarts) {
return this.renderStarts;
}
return this.model.getStarts();
}
getEnds() {
if (this.renderEnds) {
return this.renderEnds;
}
return this.model.getEnds();
}
cid() {
return this.model.cid();
}
valueOf() {
return this.model;
}
duration() {
return this.model.duration();
}
collidesWith(uiModel, usingTravelTime = true) {
const infos = [];
[this, uiModel].forEach((event) => {
const isDuplicateEvent = event instanceof EventUIModel && event.duplicateEvents.length > 0;
if (isDuplicateEvent) {
infos.push({
start: event.duplicateStarts,
end: event.duplicateEnds,
goingDuration: 0,
comingDuration: 0
});
} else {
infos.push({
start: event.getStarts(),
end: event.getEnds(),
goingDuration: event.valueOf().goingDuration,
comingDuration: event.valueOf().comingDuration
});
}
});
const [thisInfo, targetInfo] = infos;
return collidesWith({
start: thisInfo.start.getTime(),
end: thisInfo.end.getTime(),
targetStart: targetInfo.start.getTime(),
targetEnd: targetInfo.end.getTime(),
goingDuration: thisInfo.goingDuration,
comingDuration: thisInfo.comingDuration,
targetGoingDuration: targetInfo.goingDuration,
targetComingDuration: targetInfo.comingDuration,
usingTravelTime
});
}
clone() {
const eventUIModelProps = this.getUIProps();
const clonedEventUIModel = new EventUIModel(this.model);
clonedEventUIModel.setUIProps(eventUIModelProps);
if (this.renderStarts) {
clonedEventUIModel.renderStarts = new TZDate(this.renderStarts);
}
if (this.renderEnds) {
clonedEventUIModel.renderEnds = new TZDate(this.renderEnds);
}
return clonedEventUIModel;
}
}
function compareBooleansASC(a2, b2) {
if (a2 !== b2) {
return a2 ? -1 : 1;
}
return 0;
}
function compareEventsASC(a2, b2) {
const modelA = a2 instanceof EventUIModel ? a2.model : a2;
const modelB = b2 instanceof EventUIModel ? b2.model : b2;
const alldayCompare = compareBooleansASC(modelA.isAllday || modelA.hasMultiDates, modelB.isAllday || modelB.hasMultiDates);
if (alldayCompare) {
return alldayCompare;
}
const startsCompare = compare(a2.getStarts(), b2.getStarts());
if (startsCompare) {
return startsCompare;
}
const durationA = a2.duration();
const durationB = b2.duration();
if (durationA < durationB) {
return 1;
}
if (durationA > durationB) {
return -1;
}
return modelA.cid() - modelB.cid();
}
var array = {
compare: {
event: {
asc: compareEventsASC
}
}
};
function first(array2) {
return array2[0];
}
function last(array2) {
return array2[array2.length - 1];
}
function findLastIndex(array2, predicate) {
for (let i2 = array2.length - 1; i2 >= 0; i2 -= 1) {
if (predicate(array2[i2])) {
return i2;
}
}
return -1;
}
function fill(length, value) {
if (length > 0) {
return Array.from({ length }, () => {
if (Array.isArray(value)) {
return value.slice();
}
return value;
});
}
return [];
}
var Day$2 = /* @__PURE__ */ ((Day2) => {
Day2[Day2["SUN"] = 0] = "SUN";
Day2[Day2["MON"] = 1] = "MON";
Day2[Day2["TUE"] = 2] = "TUE";
Day2[Day2["WED"] = 3] = "WED";
Day2[Day2["THU"] = 4] = "THU";
Day2[Day2["FRI"] = 5] = "FRI";
Day2[Day2["SAT"] = 6] = "SAT";
return Day2;
})(Day$2 || {});
const WEEK_DAYS = 7;
const dateFormatRx = /^(\d{4}[-|/]*\d{2}[-|/]*\d{2})\s?(\d{2}:\d{2}:\d{2})?$/;
const memo = {
millisecondsFrom: {}
};
const convByTimeUnit = [24, 60, 60, 1e3];
function leadingZero(number, length) {
let zero = "";
let i2 = 0;
if (String(number).length > length) {
return String(number);
}
for (; i2 < length - 1; i2 += 1) {
zero += "0";
}
return (zero + number).slice(length * -1);
}
function getHourForMeridiem(date2) {
let hour = date2.getHours();
if (hour === 0) {
hour = 12;
}
if (hour > 12) {
hour = hour % 12;
}
return hour;
}
const tokenFunc = {
YYYYMMDD(date2) {
return [
date2.getFullYear(),
leadingZero(date2.getMonth() + 1, 2),
leadingZero(date2.getDate(), 2)
].join("");
},
YYYY(date2) {
return String(date2.getFullYear());
},
MM(date2) {
return leadingZero(date2.getMonth() + 1, 2);
},
DD(date2) {
return leadingZero(date2.getDate(), 2);
},
"HH:mm": function(date2) {
const hour = date2.getHours();
const minutes = date2.getMinutes();
return `${leadingZero(hour, 2)}:${leadingZero(minutes, 2)}`;
},
"hh:mm": function(date2) {
const hour = getHourForMeridiem(date2);
const minutes = date2.getMinutes();
return `${leadingZero(hour, 2)}:${leadingZero(minutes, 2)}`;
},
hh(date2) {
const hour = getHourForMeridiem(date2);
return String(hour);
},
tt(date2) {
const hour = date2.getHours();
return hour < 12 ? "am" : "pm";
}
};
const MS_PER_DAY = 864e5;
const MS_PER_MINUTES = 6e4;
const MS_EVENT_MIN_DURATION = 20 * MS_PER_MINUTES;
const MS_PER_THIRTY_MINUTES = 30 * 60 * 1e3;
function toFormat(date2, strFormat) {
let result = strFormat;
Object.entries(tokenFunc).forEach(([token, converter]) => {
result = result.replace(token, converter(date2));
});
return result;
}
function convMilliseconds(type, value, iteratee) {
const index = {
date: 0,
hour: 1,
minute: 2,
second: 3
};
if (!(type in index) || isNaN(value)) {
return 0;
}
return [value].concat(convByTimeUnit.slice(index[type])).reduce(iteratee);
}
function millisecondsFrom(type, value) {
const cache = memo.millisecondsFrom;
const key = type + value;
if (cache[key]) {
return cache[key];
}
const result = convMilliseconds(type, value, (m2, v2) => m2 * v2);
if (!result) {
return 0;
}
cache[key] = result;
return cache[key];
}
function toStartOfDay(date2) {
const d2 = date2 ? new TZDate(date2) : new TZDate();
d2.setHours(0, 0, 0, 0);
return d2;
}
function makeDateRange(startDate, endDate, step) {
const startTime = startDate.getTime();
const endTime = endDate.getTime();
const date2 = new TZDate(startDate);
const result = [];
let cursor = startTime;
while (cursor <= endTime && endTime >= date2.getTime()) {
result.push(new TZDate(date2));
cursor = cursor + step;
date2.addMilliseconds(step);
}
return result;
}
function clone(date2) {
return new TZDate(date2);
}
function compare(d1, d2) {
const _d1 = d1.getTime();
const _d2 = d2.getTime();
if (_d1 < _d2) {
return -1;
}
if (_d1 > _d2) {
return 1;
}
return 0;
}
function isSameYear(d1, d2) {
return d1.getFullYear() === d2.getFullYear();
}
function isSameMonth(d1, d2) {
return isSameYear(d1, d2) && d1.getMonth() === d2.getMonth();
}
function isSameDate(d1, d2) {
return isSameMonth(d1, d2) && d1.getDate() === d2.getDate();
}
function max(d1, d2) {
return compare(d1, d2) === 1 ? d1 : d2;
}
function min(d1, d2) {
return compare(d1, d2) === -1 ? d1 : d2;
}
function parse(str, fixMonth = -1) {
const matches = str.match(dateFormatRx);
let separator;
let ymd;
let hms;
if (!matches) {
throw new InvalidDateTimeFormatError(str);
}
if (str.length > 8) {
separator = ~str.indexOf("/") ? "/" : "-";
const result = matches.splice(1);
ymd = result[0].split(separator);
hms = result[1] ? result[1].split(":") : [0, 0, 0];
} else {
const [result] = matches;
ymd = [result.substr(0, 4), result.substr(4, 2), result.substr(6, 2)];
hms = [0, 0, 0];
}
return new TZDate().setWithRaw(Number(ymd[0]), Number(ymd[1]) + fixMonth, Number(ymd[2]), Number(hms[0]), Number(hms[1]), Number(hms[2]), 0);
}
function toEndOfDay(date2) {
const d2 = date2 ? new TZDate(date2) : new TZDate();
d2.setHours(23, 59, 59, 999);
return d2;
}
function isWeekend(day) {
return day === 0 || day === 6;
}
function isSunday(day) {
return day === 0;
}
function isSaturday(day) {
return day === 6;
}
function toStartOfMonth(date2) {
const startDate = new TZDate(date2);
startDate.setDate(1);
startDate.setHours(0, 0, 0, 0);
return startDate;
}
function toEndOfMonth(date2) {
const endDate = toStartOfMonth(date2);
endDate.setMonth(endDate.getMonth() + 1);
endDate.setDate(endDate.getDate() - 1);
endDate.setHours(23, 59, 59, 999);
return endDate;
}
function getRowStyleInfo(days, narrowWeekend, startDayOfWeek, workweek) {
const limitDaysToApplyNarrowWeekend = 5;
const uniformWidth = 100 / days;
const wideWidth = days > limitDaysToApplyNarrowWeekend ? 100 / (days - 1) : uniformWidth;
let accumulatedWidth = 0;
const dates = range_1(startDayOfWeek, WEEK_DAYS).concat(range_1(days)).slice(0, WEEK_DAYS);
narrowWeekend = workweek ? false : narrowWeekend;
const rowStyleInfo = dates.map((day) => {
let width = narrowWeekend ? wideWidth : uniformWidth;
if (days > limitDaysToApplyNarrowWeekend && narrowWeekend && isWeekend(day)) {
width = wideWidth / 2;
}
const model = {
width,
left: accumulatedWidth
};
accumulatedWidth += width;
return model;
});
const { length } = rowStyleInfo;
const cellWidthMap = fill(length, fill(length, 0));
rowStyleInfo.forEach(({ width }, index) => {
for (let i2 = 0; i2 <= index; i2 += 1) {
for (let j2 = index; j2 < length; j2 += 1) {
cellWidthMap[i2][j2] += width;
}
}
});
cellWidthMap[0][length - 1] = 100;
return {
rowStyleInfo,
cellWidthMap: cellWidthMap.map((widthList) => widthList.map(toPercent))
};
}
function addMilliseconds(d2, step) {
const date2 = clone(d2);
date2.setMilliseconds(d2.getMilliseconds() + step);
return date2;
}
function addMinutes(d2, step) {
const date2 = clone(d2);
date2.setMinutes(d2.getMinutes() + step);
return date2;
}
function setTimeStrToDate(d2, timeStr) {
const date2 = clone(d2);
date2.setHours(...timeStr.split(":").map(Number));
return date2;
}
function addDate(d2, step) {
const date2 = clone(d2);
date2.setDate(d2.getDate() + step);
return date2;
}
function subtractDate(d2, steps) {
const date2 = clone(d2);
date2.setDate(d2.getDate() - steps);
return date2;
}
function addMonths(d2, step = 1) {
const date2 = clone(d2);
if (step !== 0) {
const dayOfMonth = date2.getDate();
const endOfDesiredMonth = new TZDate(date2.getTime());
endOfDesiredMonth.setMonth(date2.getMonth() + step + 1, 0);
const daysInMonth = endOfDesiredMonth.getDate();
if (dayOfMonth >= daysInMonth) {
return endOfDesiredMonth;
}
date2.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);
}
return date2;
}
function getDateDifference(d1, d2) {
const _d1 = new TZDate(d1.getFullYear(), d1.getMonth(), d1.getDate()).getTime();
const _d2 = new TZDate(d2.getFullYear(), d2.getMonth(), d2.getDate()).getTime();
return Math.round((_d1 - _d2) / MS_PER_DAY);
}
function hasCollision(start, end, targetStart, targetEnd) {
return targetStart > start && targetStart < end || targetEnd > start && targetEnd < end || targetStart <= start && targetEnd >= end;
}
function collidesWith({
start,
end,
targetStart,
targetEnd,
goingDuration,
comingDuration,
targetGoingDuration,
targetComingDuration,
usingTravelTime
}) {
if (Math.abs(end - start) < MS_EVENT_MIN_DURATION) {
end += MS_EVENT_MIN_DURATION;
}
if (Math.abs(end - start) < MS_EVENT_MIN_DURATION) {
end += MS_EVENT_MIN_DURATION;
}
if (usingTravelTime) {
start -= millisecondsFrom("minute", goingDuration);
end += millisecondsFrom("minute", comingDuration);
targetStart -= millisecondsFrom("minute", targetGoingDuration);
targetEnd += millisecondsFrom("minute", targetComingDuration);
}
return hasCollision(start, end, targetStart, targetEnd);
}
function isSameEvent(event, eventId, calendarId) {
return event.id === eventId && event.calendarId === calendarId;
}
function idGenerator() {
let id = 0;
return {
next() {
id += 1;
return id;
}
};
}
const getId = function() {
const generator = idGenerator();
return () => generator.next();
}();
function stamp(obj) {
if (!obj.__fe_id) {
obj.__fe_id = getId();
}
return obj.__fe_id;
}
class EventModel {
constructor(event = {}) {
this.id = "";
this.calendarId = "";
this.title = "";
this.body = "";
this.isAllday = false;
this.start = new TZDate();
this.end = new TZDate();
this.goingDuration = 0;
this.comingDuration = 0;
this.location = "";
this.attendees = [];
this.category = "time";
this.dueDateClass = "";
this.recurrenceRule = "";
this.state = "Busy";
this.isVisible = true;
this.isPending = false;
this.isFocused = false;
this.isReadOnly = false;
this.isPrivate = false;
this.customStyle = {};
this.raw = null;
this.hasMultiDates = false;
stamp(this);
this.init(event);
}
init({
id = "",
calendarId = "",
title = "",
body = "",
isAllday: isAllday2 = false,
start = new TZDate(),
end = new TZDate(),
goingDuration = 0,
comingDuration = 0,
location: location2 = "",
attendees = [],
category = "time",
dueDateClass = "",
recurrenceRule = "",
state = "Busy",
isVisible = true,
isPending = false,
isFocused = false,
isReadOnly = false,
isPrivate = false,
color,
backgroundColor,
dragBackgroundColor,
borderColor,
customStyle = {},
raw = null
} = {}) {
this.id = id;
this.calendarId = calendarId;
this.title = title;
this.body = body;
this.isAllday = category === "allday" ? true : isAllday2;
this.goingDuration = goingDuration;
this.comingDuration = comingDuration;
this.location = location2;
this.attendees = attendees;
this.category = category;
this.dueDateClass = dueDateClass;
this.recurrenceRule = recurrenceRule;
this.state = state;
this.isVisible = isVisible;
this.isPending = isPending;
this.isFocused = isFocused;
this.isReadOnly = isReadOnly;
this.isPrivate = isPrivate;
this.color = color;
this.backgroundColor = backgroundColor;
this.dragBackgroundColor = dragBackgroundColor;
this.borderColor = borderColor;
this.customStyle = customStyle;
this.raw = raw;
if (this.isAllday) {
this.setAlldayPeriod(start, end);
} else {
this.setTimePeriod(start, end);
}
if (category === "milestone" || category === "task") {
this.start = new TZDate(this.end);
}
}
setAlldayPeriod(start, end) {
let startedAt;
let endedAt;
if (isString_1(start)) {
startedAt = parse(start.substring(0, 10));
} else {
startedAt = new TZDate(start || Date.now());
}
if (isString_1(end)) {
endedAt = parse(end.substring(0, 10));
} else {
endedAt = new TZDate(end || this.start);
}
this.start = startedAt;
this.start.setHours(0, 0, 0);
this.end = endedAt || new TZDate(this.start);
this.end.setHours(23, 59, 59);
}
setTimePeriod(start, end) {
this.start = new TZDate(start || Date.now());
this.end = new TZDate(end || this.start);
if (!end) {
this.end.setMinutes(this.end.getMinutes() + 30);
}
this.hasMultiDates = this.end.getTime() - this.start.getTime() > MS_PER_DAY;
}
getStarts() {
return this.start;
}
getEnds() {
return this.end;
}
cid() {
return stamp(this);
}
equals(event) {
if (this.id !== event.id) {
return false;
}
if (this.title !== event.title) {
return false;
}
if (this.body !== event.body) {
return false;
}
if (this.isAllday !== event.isAllday) {
return false;
}
if (compare(this.getStarts(), event.getStarts()) !== 0) {
return false;
}
if (compare(this.getEnds(), event.getEnds()) !== 0) {
return false;
}
if (this.color !== event.color) {
return false;
}
if (this.backgroundColor !== event.backgroundColor) {
return false;
}
if (this.dragBackgroundColor !== event.dragBackgroundColor) {
return false;
}
if (this.borderColor !== event.borderColor) {
return false;
}
return true;
}
duration() {
const start = Number(this.getStarts());
const end = Number(this.getEnds());
let duration;
if (this.isAllday) {
duration = Number(toEndOfDay(end)) - Number(toStartOfDay(start));
} else {
duration = end - start;
}
return duration;
}
valueOf() {
return this;
}
collidesWith(event, usingTravelTime = true) {
event = event instanceof EventUIModel ? event.model : event;
return collidesWith({
start: Number(this.getStarts()),
end: Number(this.getEnds()),
targetStart: Number(event.getStarts()),
targetEnd: Number(event.getEnds()),
goingDuration: this.goingDuration,
comingDuration: this.comingDuration,
targetGoingDuration: event.goingDuration,
targetComingDuration: event.comingDuration,
usingTravelTime
});
}
toEventObject() {
return {
id: this.id,
calendarId: this.calendarId,
__cid: this.cid(),
title: this.title,
body: this.body,
isAllday: this.isAllday,
start: this.start,
end: this.end,
goingDuration: this.goingDuration,
comingDuration: this.comingDuration,
location: this.location,
attendees: this.attendees,
category: this.category,
dueDateClass: this.dueDateClass,
recurrenceRule: this.recurrenceRule,
state: this.state,
isVisible: this.isVisible,
isPending: this.isPending,
isFocused: this.isFocused,
isReadOnly: this.isReadOnly,
isPrivate: this.isPrivate,
color: this.color,
backgroundColor: this.backgroundColor,
dragBackgroundColor: this.dragBackgroundColor,
borderColor: this.borderColor,
customStyle: this.customStyle,
raw: this.raw
};
}
getColors() {
return {
color: this.color,
backgroundColor: this.backgroundColor,
dragBackgroundColor: this.dragBackgroundColor,
borderColor: this.borderColor
};
}
}
EventModel.schema = {
required: ["title"],
dateRange: ["start", "end"]
};
function isTimeEvent({ model }) {
const { category, isAllday: isAllday2, hasMultiDates } = model;
return category === "time" && !isAllday2 && !hasMultiDates;
}
class Collection {
constructor(getItemIDFn) {
this.internalMap = /* @__PURE__ */ new Map();
if (isFunction$2(getItemIDFn)) {
this.getItemID = getItemIDFn;
}
}
static and(...filterFns) {
const { length } = filterFns;
return (item) => {
for (let i2 = 0; i2 < length; i2 += 1) {
if (!filterFns[i2].call(null, item)) {
return false;
}
}
return true;
};
}
static or(...filterFns) {
const { length } = filterFns;
if (!length) {
return () => false;
}
return (item) => {
let result = filterFns[0].call(null, item);
for (let i2 = 1; i2 < length; i2 += 1) {
result = result || filterFns[i2].call(null, item);
}
return result;
};
}
getItemID(item) {
var _a;
return (_a = item == null ? void 0 : item._id) != null ? _a : "";
}
getFirstItem() {
const iterator = this.internalMap.values();
return iterator.next().value;
}
add(...items) {
items.forEach((item) => {
const id = this.getItemID(item);
this.internalMap.set(id, item);
});
return this;
}
remove(...items) {
const removeResult = [];
items.forEach((item) => {
const id = isString_1(item) || isNumber_1(item) ? item : this.getItemID(item);
if (!this.internalMap.has(id)) {
return;
}
removeResult.push(this.internalMap.get(id));
this.internalMap["delete"](id);
});
return removeResult.length === 1 ? removeResult[0] : removeResult;
}
has(item) {
const id = isString_1(item) || isNumber_1(item) ? item : this.getItemID(item);
return this.internalMap.has(id);
}
get(item) {
var _a;
const id = isString_1(item) || isNumber_1(item) ? item : this.getItemID(item);
return (_a = this.internalMap.get(id)) != null ? _a : null;
}
doWhenHas(id, callback) {
const item = this.internalMap.get(id);
if (isNil(item)) {
return;
}
callback(item);
}
filter(filterFn) {
const result = new Collection();
if (this.hasOwnProperty("getItemID")) {
result.getItemID = this.getItemID;
}
this.internalMap.forEach((item) => {
if (filterFn(item) === true) {
result.add(item);
}
});
return result;
}
groupBy(groupByFn) {
const result = {};
this.internalMap.forEach((item) => {
var _a;
let key = isFunction$2(groupByFn) ? groupByFn(item) : item[groupByFn];
if (isFunction$2(key)) {
key = key.call(item);
}
(_a = result[key]) != null ? _a : result[key] = new Collection(this.getItemID);
result[key].add(item);
});
return result;
}
find(findFn) {
let result = null;
const items = this.internalMap.values();
let next = items.next();
while (next.done === false) {
if (findFn(next.value)) {
result = next.value;
break;
}
next = items.next();
}
return result;
}
sort(compareFn) {
return this.toArray().sort(compareFn);
}
each(iteratee) {
const entries = this.internalMap.entries();
let next = entries.next();
while (next.done === false) {
const [key, value] = next.value;
if (iteratee(value, key) === false) {
break;
}
next = entries.next();
}
}
clear() {
this.internalMap.clear();
}
toArray() {
return Array.from(this.internalMap.values());
}
get size() {
return this.internalMap.size;
}
}
function createEventCollection(...initItems) {
const collection = new Collection((event) => event.cid());
if (initItems.length) {
collection.add(...initItems);
}
return collection;
}
function getDateRange(start, end) {
return makeDateRange(toStartOfDay(start), toEndOfDay(end), MS_PER_DAY);
}
function isAllday(event) {
return event.isAllday || event.category === "time" && Number(event.end) - Number(event.start) > MS_PER_DAY;
}
function filterByCategory(uiModel) {
const { model } = uiModel;
if (isAllday(model)) {
return "allday";
}
return model.category;
}
function addToMatrix(idsOfDay, event) {
const containDates = getDateRange(event.getStarts(), event.getEnds());
containDates.forEach((date2) => {
const ymd = toFormat(date2, "YYYYMMDD");
const matrix = idsOfDay[ymd] = idsOfDay[ymd] || [];
matrix.push(event.cid());
});
}
function removeFromMatrix(idsOfDay, event) {
const modelID = event.cid();
Object.values(idsOfDay).forEach((ids) => {
const index = ids.indexOf(modelID);
if (~index) {
ids.splice(index, 1);
}
});
}
function addEvent(calendarData, event) {
calendarData.events.add(event);
addToMatrix(calendarData.idsOfDay, event);
return event;
}
function createEvent(calendarData, eventData) {
const event = new EventModel(eventData);
return addEvent(calendarData, event);
}
function createEvents(calendarData, events = []) {
return events.map((eventData) => createEvent(calendarData, eventData));
}
function updateEvent(calendarData, eventId, calendarId, eventData) {
const { idsOfDay } = calendarData;
const event = calendarData.events.find((item) => isSameEvent(item, eventId, calendarId));
if (!event) {
return false;
}
event.init(__spreadValues(__spreadValues({}, event), eventData));
removeFromMatrix(idsOfDay, event);
addToMatrix(idsOfDay, event);
return true;
}
function deleteEvent(calendarData, event) {
removeFromMatrix(calendarData.idsOfDay, event);
calendarData.events.remove(event);
return event;
}
function clearEvents(calendarData) {
calendarData.idsOfDay = {};
calendarData.events.clear();
}
function createCalendarSlice(calendars = []) {
return {
calendar: {
calendars,
events: createEventCollection(),
idsOfDay: {}
}
};
}
function createCalendarDispatchers(set) {
return {
createEvents: (events) => set(produce((state) => {
createEvents(state.calendar, events);
})),
updateEvent: ({ event, eventData }) => set(produce((state) => {
updateEvent(state.calendar, event.id, event.calendarId, eventData);
})),
deleteEvent: (event) => set(produce((state) => {
deleteEvent(state.calendar, event);
})),
clearEvents: () => set(produce((state) => {
clearEvents(state.calendar);
})),
setCalendars: (calendars) => set(produce((state) => {
state.calendar.calendars = calendars;
})),
setCalendarColor: (calendarId, colorOptions) => set(produce((state) => {
const calendars = state.calendar.calendars.map((calendar) => {
if (calendar.id === calendarId) {
return __spreadValues(__spreadValues({}, calendar), colorOptions);
}
return calendar;
});
const events = state.calendar.events.toArray().map((event) => {
var _a, _b, _c, _d;
if (event.calendarId === calendarId) {
event.color = (_a = colorOptions.color) != null ? _a : event.color;
event.backgroundColor = (_b = colorOptions.backgroundColor) != null ? _b : event.backgroundColor;
event.borderColor = (_c = colorOptions.borderColor) != null ? _c : event.borderColor;
event.dragBackgroundColor = (_d = colorOptions.dragBackgroundColor) != null ? _d : event.dragBackgroundColor;
}
return event;
});
const collection = createEventCollection(...events);
state.calendar.calendars = calendars;
state.calendar.events = collection;
})),
setCalendarVisibility: (calendarIds, isVisible) => set(produce((state) => {
const events = state.calendar.events.toArray();
state.calendar.events = createEventCollection(...events.map((event) => {
if (calendarIds.includes(event.calendarId)) {
event.isVisible = isVisible;
}
return event;
}));
}))
};
}
var DraggingState = /* @__PURE__ */ ((DraggingState2) => {
DraggingState2[DraggingState2["IDLE"] = 0] = "IDLE";
DraggingState2[DraggingState2["INIT"] = 1] = "INIT";
DraggingState2[DraggingState2["DRAGGING"] = 2] = "DRAGGING";
DraggingState2[DraggingState2["CANCELED"] = 3] = "CANCELED";
return DraggingState2;
})(DraggingState || {});
function createDndSlice() {
return {
dnd: {
draggingItemType: null,
draggingState: 0,
initX: null,
initY: null,
x: null,
y: null,
draggingEventUIModel: null
}
};
}
function createDndDispatchers(set) {
return {
initDrag: (initState) => {
set(produce((state) => {
state.dnd = __spreadProps(__spreadValues(__spreadValues({}, state.dnd), initState), {
draggingState: 1
});
}));
},
setDragging: (newState) => {
set(produce((state) => {
state.dnd = __spreadProps(__spreadValues(__spreadValues({}, state.dnd), newState), {
draggingState: 2
});
}));
},
cancelDrag: () => {
set(produce((state) => {
state.dnd = createDndSlice().dnd;
state.dnd.draggingState = 3;
}));
},
reset: () => {
set(produce((state) => {
state.dnd = createDndSlice().dnd;
}));
},
setDraggingEventUIModel: (eventUIModel) => {
set(produce((state) => {
var _a;
state.dnd.draggingEventUIModel = (_a = eventUIModel == null ? void 0 : eventUIModel.clone()) != null ? _a : null;
}));
}
};
}
function createGridSelectionSlice() {
return {
gridSelection: {
dayGridMonth: null,
dayGridWeek: null,
timeGrid: null,
accumulated: {
dayGridMonth: []
}
}
};
}
function createGridSelectionDispatchers(set) {
return {
setGridSelection: (type, gridSelection) => {
set(produce((state) => {
state.gridSelection[type] = gridSelection;
}));
},
addGridSelection: (type, gridSelection) => {
set(produce((state) => {
if (type === "dayGridMonth" && gridSelection) {
state.gridSelection.accumulated[type] = [
...state.gridSelection.accumulated[type],
gridSelection
];
state.gridSelection.dayGridMonth = null;
}
}));
},
clearAll: () => set(produce((state) => {
state.gridSelection = createGridSelectionSlice().gridSelection;
}))
};
}
const DEFAULT_RESIZER_LENGTH = 3;
const DEFAULT_DUPLICATE_EVENT_CID = -1;
function getRestPanelHeight(dayGridRowsState, lastPanelType, initHeight) {
return Object.keys(dayGridRowsState).reduce((acc, rowName) => {
if (rowName === lastPanelType) {
return acc;
}
return acc - dayGridRowsState[rowName].height - DEFAULT_RESIZER_LENGTH;
}, initHeight);
}
function createWeekViewLayoutSlice() {
return {
layout: 500,
weekViewLayout: {
lastPanelType: null,
dayGridRows: {},
selectedDuplicateEventCid: DEFAULT_DUPLICATE_EVENT_CID
}
};
}
function createWeekViewLayoutDispatchers(set) {
return {
setLastPanelType: (type) => {
set(produce((state) => {
state.weekViewLayout.lastPanelType = type;
if (type) {
state.weekViewLayout.dayGridRows[type].height = getRestPanelHeight(state.weekViewLayout.dayGridRows, type, state.layout);
}
}));
},
updateLayoutHeight: (height) => set(produce((state) => {
const { lastPanelType } = state.weekViewLayout;
state.layout = height;
if (lastPanelType) {
state.weekViewLayout.dayGridRows[lastPanelType].height = getRestPanelHeight(state.weekViewLayout.dayGridRows, lastPanelType, height);
}
})),
updateDayGridRowHeight: ({ rowName, height }) => set(produce((state) => {
const { lastPanelType } = state.weekViewLayout;
state.weekViewLayout.dayGridRows[rowName] = { height };
if (lastPanelType) {
state.weekViewLayout.dayGridRows[lastPanelType].height = getRestPanelHeight(state.weekViewLayout.dayGridRows, lastPanelType, state.layout);
}
})),
updateDayGridRowHeightByDiff: ({ rowName, diff }) => set(produce((state) => {
var _a, _b, _c;
const { lastPanelType } = state.weekViewLayout;
const height = (_c = (_b = (_a = state.weekViewLayout.dayGridRows) == null ? void 0 : _a[rowName]) == null ? void 0 : _b.height) != null ? _c : DEFAULT_PANEL_HEIGHT;
state.weekViewLayout.dayGridRows[rowName] = { height: height + diff };
if (lastPanelType) {
state.weekViewLayout.dayGridRows[lastPanelType].height = getRestPanelHeight(state.weekViewLayout.dayGridRows, lastPanelType, state.layout);
}
})),
setSelectedDuplicateEventCid: (cid) => set(produce((state) => {
state.weekViewLayout.selectedDuplicateEventCid = cid != null ? cid : DEFAULT_DUPLICATE_EVENT_CID;
}))
};
}
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
const DEFAULT_DAY_NAMES = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
const getDayName = (dayIndex) => {
return DEFAULT_DAY_NAMES[dayIndex];
};
function getDayNames(days, weekDayNamesOption) {
return days.map((day) => {
const dayIndex = day.getDay();
const dayName = weekDayNamesOption.length > 0 ? weekDayNamesOption[dayIndex] : capitalize(getDayName(dayIndex));
return {
date: day.getDate(),
day: day.getDay(),
dayName,
isToday: true,
renderDate: "date",
dateInstance: day
};
});
}
function initializeCollapseDuplicateEvents(options) {
if (!options) {
return false;
}
const initialCollapseDuplicateEvents = {
getDuplicateEvents: (targetEvent, events) => events.filter((event) => event.title === targetEvent.title && compare(event.start, targetEvent.start) === 0 && compare(event.end, targetEvent.end) === 0).sort((a2, b2) => a2.calendarId > b2.calendarId ? 1 : -1),
getMainEvent: (events) => last(events)
};
if (isBoolean_1(options)) {
return initialCollapseDuplicateEvents;
}
return __spreadValues(__spreadValues({}, initialCollapseDuplicateEvents), options);
}
function initializeWeekOptions(weekOptions = {}) {
const week = __spreadValues({
startDayOfWeek: Day$2.SUN,
dayNames: [],
narrowWeekend: false,
workweek: false,
showNowIndicator: true,
showTimezoneCollapseButton: false,
timezonesCollapsed: false,
hourStart: 0,
hourEnd: 24,
eventView: true,
taskView: true,
collapseDuplicateEvents: false
}, weekOptions);
week.collapseDuplicateEvents = initializeCollapseDuplicateEvents(week.collapseDuplicateEvents);
return week;
}
function initializeTimezoneOptions(timezoneOptions = {}) {
return __spreadValues({
zones: []
}, timezoneOptions);
}
function initializeMonthOptions(monthOptions = {}) {
const month = __spreadValues({
dayNames: [],
visibleWeeksCount: 0,
workweek: false,
narrowWeekend: false,
startDayOfWeek: Day$2.SUN,
isAlways6Weeks: true,
visibleEventCount: 6
}, monthOptions);
if (month.dayNames.length === 0) {
month.dayNames = DEFAULT_DAY_NAMES.slice();
}
return month;
}
function initializeGridSelectionOptions(options) {
if (isBoolean_1(options)) {
return {
enableDblClick: options,
enableClick: options
};
}
return __spreadValues({
enableDblClick: true,
enableClick: true
}, options);
}
const initialEventFilter = (event) => !!event.isVisible;
function createOptionsSlice(options = {}) {
var _a, _b, _c, _d, _e, _f;
return {
options: {
defaultView: (_a = options.defaultView) != null ? _a : "week",
useFormPopup: (_b = options.useFormPopup) != null ? _b : false,
useDetailPopup: (_c = options.useDetailPopup) != null ? _c : false,
isReadOnly: (_d = options.isReadOnly) != null ? _d : false,
week: initializeWeekOptions(options.week),
month: initializeMonthOptions(options.month),
gridSelection: initializeGridSelectionOptions(options.gridSelection),
usageStatistics: (_e = options.usageStatistics) != null ? _e : true,
eventFilter: (_f = options.eventFilter) != null ? _f : initialEventFilter,
timezone: initializeTimezoneOptions(options.timezone)
}
};
}
function createOptionsDispatchers(set) {
return {
setOptions: (newOptions = {}) => set(produce((state) => {
var _a;
if (newOptions.gridSelection) {
newOptions.gridSelection = initializeGridSelectionOptions(newOptions.gridSelection);
}
if ((_a = newOptions.week) == null ? void 0 : _a.collapseDuplicateEvents) {
newOptions.week.collapseDuplicateEvents = initializeCollapseDuplicateEvents(newOptions.week.collapseDuplicateEvents);
}
mergeObject(state.options, newOptions);
}))
};
}
var PopupType = /* @__PURE__ */ ((PopupType2) => {
PopupType2["SeeMore"] = "seeMore";
PopupType2["Form"] = "form";
PopupType2["Detail"] = "detail";
return PopupType2;
})(PopupType || {});
function createPopupSlice() {
return {
popup: {
["seeMore"]: null,
["form"]: null,
["detail"]: null
}
};
}
function createPopupDispatchers(set) {
return {
showSeeMorePopup: (param) => set(produce((state) => {
state.popup["seeMore"] = param;
state.popup["form"] = null;
state.popup["detail"] = null;
})),
showFormPopup: (param) => set(produce((state) => {
state.popup["form"] = param;
state.popup["seeMore"] = null;
state.popup["detail"] = null;
})),
showDetailPopup: (param, isOpenedInSeeMorePopup) => set(produce((state) => {
state.popup["detail"] = param;
state.popup["form"] = null;
if (!isOpenedInSeeMorePopup) {
state.popup["seeMore"] = null;
}
})),
hideSeeMorePopup: () => set(produce((state) => {
state.popup["seeMore"] = null;
})),
hideFormPopup: () => set(produce((state) => {
state.popup["form"] = null;
})),
hideDetailPopup: () => set(produce((state) => {
state.popup["detail"] = null;
})),
hideAllPopup: () => set(produce((state) => {
state.popup["seeMore"] = null;
state.popup["form"] = null;
state.popup["detail"] = null;
}))
};
}
const noop = () => {
};
const CSS_AUTO_REGEX = /^auto$|^$|%/;
function getStyle(el, style) {
let value = el.style[style];
if ((!value || value === "auto") && document.defaultView) {
const css = document.defaultView.getComputedStyle(el, null);
value = css ? css[style] : null;
}
return value === "auto" ? null : value;
}
function invalidateSizeValue(value) {
if (isString_1(value)) {
return CSS_AUTO_REGEX.test(value);
}
return value === null;
}
function getSize(el) {
const w2 = getStyle(el, "width");
const h2 = getStyle(el, "height");
if ((invalidateSizeValue(w2) || invalidateSizeValue(h2)) && el.getBoundingClientRect) {
const { width, height } = el.getBoundingClientRect();
return {
width: width || el.offsetWidth,
height: height || el.offsetHeight
};
}
return {
width: parseFloat(w2 != null ? w2 : "0"),
height: parseFloat(h2 != null ? h2 : "0")
};
}
const ElementClass = typeof Element === "undefined" ? noop : Element;
const elProto = ElementClass.prototype;
elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector || function(selector) {
return Array.from(document.querySelectorAll(selector)).includes(this);
};
function stripTags(str) {
return str.replace(/<([^>]+)>/gi, "");
}
const SIXTY_MINUTES = 60;
const templates = {
milestone(model) {
const classNames2 = cls("icon", "ic-milestone");
return /* @__PURE__ */ h$3(p$3, null, /* @__PURE__ */ h$3("span", {
className: classNames2
}), /* @__PURE__ */ h$3("span", {
style: {
backgroundColor: model.backgroundColor
}
}, stripTags(model.title)));
},
milestoneTitle() {
return /* @__PURE__ */ h$3("span", {
className: cls("left-content")
}, "Milestone");
},
task(model) {
return `#${model.title}`;
},
taskTitle() {
return /* @__PURE__ */ h$3("span", {
className: cls("left-content")
}, "Task");
},
alldayTitle() {
return /* @__PURE__ */ h$3("span", {
className: cls("left-content")
}, "All Day");
},
allday(model) {
return stripTags(model.title);
},
time(model) {
const { start, title } = model;
if (start) {
return /* @__PURE__ */ h$3("span", null, /* @__PURE__ */ h$3("strong", null, toFormat(start, "HH:mm")), " ", /* @__PURE__ */ h$3("span", null, stripTags(title)));
}
return stripTags(title);
},
goingDuration(model) {
const { goingDuration } = model;
const hour = Math.floor(goingDuration / SIXTY_MINUTES);
const minutes = goingDuration % SIXTY_MINUTES;
return `GoingTime ${leadingZero(hour, 2)}:${leadingZero(minutes, 2)}`;
},
comingDuration(model) {
const { comingDuration } = model;
const hour = Math.floor(comingDuration / SIXTY_MINUTES);
const minutes = comingDuration % SIXTY_MINUTES;
return `ComingTime ${leadingZero(hour, 2)}:${leadingZero(minutes, 2)}`;
},
monthMoreTitleDate(moreTitle) {
const { date: date2, day } = moreTitle;
const classNameDay = cls("more-title-date");
const classNameDayLabel = cls("more-title-day");
const dayName = capitalize(getDayName(day));
return /* @__PURE__ */ h$3(p$3, null, /* @__PURE__ */ h$3("span", {
className: classNameDay
}, date2), /* @__PURE__ */ h$3("span", {
className: classNameDayLabel
}, dayName));
},
monthMoreClose() {
return "";
},
monthGridHeader(model) {
const date2 = parseInt(model.date.split("-")[2], 10);
const classNames2 = cls("weekday-grid-date", { "weekday-grid-date-decorator": model.isToday });
return /* @__PURE__ */ h$3("span", {
className: classNames2
}, date2);
},
monthGridHeaderExceed(hiddenEvents) {
const className2 = cls("weekday-grid-more-events");
return /* @__PURE__ */ h$3("span", {
className: className2
}, hiddenEvents, " more");
},
monthGridFooter(_model) {
return "";
},
monthGridFooterExceed(_hiddenEvents) {
return "";
},
monthDayName(model) {
return model.label;
},
weekDayName(model) {
const classDate = cls("day-name__date");
const className2 = cls("day-name__name");
return /* @__PURE__ */ h$3(p$3, null, /* @__PURE__ */ h$3("span", {
className: classDate
}, model.date), " ", /* @__PURE__ */ h$3("span", {
className: className2
}, model.dayName));
},
weekGridFooterExceed(hiddenEvents) {
return `+${hiddenEvents}`;
},
collapseBtnTitle() {
const className2 = cls("collapse-btn-icon");
return /* @__PURE__ */ h$3("span", {
className: className2
});
},
timezoneDisplayLabel({ displayLabel, timezoneOffset }) {
if (isNil(displayLabel) && isPresent(timezoneOffset)) {
const sign = timezoneOffset < 0 ? "-" : "+";
const hours = Math.abs(timezoneOffset / SIXTY_MINUTES);
const minutes = Math.abs(timezoneOffset % SIXTY_MINUTES);
return `GMT${sign}${leadingZero(hours, 2)}:${leadingZero(minutes, 2)}`;
}
return displayLabel;
},
timegridDisplayPrimaryTime(props) {
const { time } = props;
return toFormat(time, "hh tt");
},
timegridDisplayTime(props) {
const { time } = props;
return toFormat(time, "HH:mm");
},
timegridNowIndicatorLabel(timezone) {
const { time, format = "HH:mm" } = timezone;
return toFormat(time, format);
},
popupIsAllday() {
return "All day";
},
popupStateFree() {
return "Free";
},
popupStateBusy() {
return "Busy";
},
titlePlaceholder() {
return "Subject";
},
locationPlaceholder() {
return "Location";
},
startDatePlaceholder() {
return "Start date";
},
endDatePlaceholder() {
return "End date";
},
popupSave() {
return "Save";
},
popupUpdate() {
return "Update";
},
popupEdit() {
return "Edit";
},
popupDelete() {
return "Delete";
},
popupDetailTitle({ title }) {
return title;
},
popupDetailDate({ isAllday: isAllday2, start, end }) {
const dayFormat = "YYYY.MM.DD";
const timeFormat = "hh:mm tt";
const detailFormat = `${dayFormat} ${timeFormat}`;
const startDate = toFormat(start, isAllday2 ? dayFormat : timeFormat);
const endDateFormat = isSameDate(start, end) ? timeFormat : detailFormat;
if (isAllday2) {
return `${startDate}${isSameDate(start, end) ? "" : ` - ${toFormat(end, dayFormat)}`}`;
}
return `${toFormat(start, detailFormat)} - ${toFormat(end, endDateFormat)}`;
},
popupDetailLocation({ location: location2 }) {
return location2;
},
popupDetailAttendees({ attendees = [] }) {
return attendees.join(", ");
},
popupDetailState({ state }) {
return state || "Busy";
},
popupDetailRecurrenceRule({ recurrenceRule }) {
return recurrenceRule;
},
popupDetailBody({ body }) {
return body;
}
};
function createTemplateSlice(templateConfig = {}) {
return {
template: __spreadValues(__spreadValues({}, templates), templateConfig)
};
}
function createTemplateDispatchers(set) {
return {
setTemplate: (template) => set(produce((state) => {
state.template = __spreadValues(__spreadValues({}, state.template), template);
}))
};
}
function createViewSlice(initialView = "week") {
const renderDate = new TZDate();
renderDate.setHours(0, 0, 0, 0);
return {
view: {
currentView: initialView,
renderDate
}
};
}
function createViewDispatchers(set) {
return {
changeView: (nextView) => set(produce((state) => {
state.view.currentView = nextView;
})),
setRenderDate: (date2) => set(produce((state) => {
state.view.renderDate = toStartOfDay(date2);
}))
};
}
const isSSR = isUndefined_1(window) || !window.navigator;
const useIsomorphicLayoutEffect = isSSR ? _$2 : h$2;
function createStoreContext() {
const StoreContext = B$1(null);
function StoreProvider2({
children,
store
}) {
return h$3(StoreContext.Provider, { value: store, children });
}
const useStore2 = (selector, equalityFn = Object.is) => {
const storeCtx = q$2(StoreContext);
if (isNil(storeCtx)) {
throw new Error("StoreProvider is not found");
}
const [, notify] = d$2((notifyCount) => notifyCount + 1, 0);
const state = storeCtx.getState();
const stateRef = s$2(state);
const selectorRef = s$2(selector);
const equalityFnRef = s$2(equalityFn);
const hasErrorRef = s$2(false);
const currentSliceRef = s$2();
if (isUndefined_1(currentSliceRef.current)) {
currentSliceRef.current = selector(state);
}
let newStateSlice;
let hasNewStateSlice = false;
const shouldGetNewSlice = stateRef.current !== state || selectorRef.current !== selector || equalityFnRef.current !== equalityFn || hasErrorRef.current;
if (shouldGetNewSlice) {
newStateSlice = selector(state);
hasNewStateSlice = !equalityFn(currentSliceRef.current, newStateSlice);
}
useIsomorphicLayoutEffect(() => {
if (hasNewStateSlice) {
currentSliceRef.current = newStateSlice;
}
stateRef.current = state;
selectorRef.current = selector;
equalityFnRef.current = equalityFn;
hasErrorRef.current = false;
});
const stateBeforeSubscriptionRef = s$2(state);
useIsomorphicLayoutEffect(() => {
const listener = () => {
try {
const nextState = storeCtx.getState();
const nextStateSlice = selectorRef.current(nextState);
const shouldUpdateState = !equalityFnRef.current(currentSliceRef.current, nextStateSlice);
if (shouldUpdateState) {
stateRef.current = nextState;
currentSliceRef.current = newStateSlice;
notify();
}
} catch (e2) {
console.error("[toastui-calendar] failed to update state", e2 == null ? void 0 : e2.message);
hasErrorRef.current = true;
notify();
}
};
const unsubscribe = storeCtx.subscribe(listener);
if (storeCtx.getState() !== stateBeforeSubscriptionRef.current) {
listener();
}
return unsubscribe;
}, []);
return hasNewStateSlice ? newStateSlice : currentSliceRef.current;
};
const useInternalStore2 = () => {
const storeCtx = q$2(StoreContext);
if (isNil(storeCtx)) {
throw new Error("StoreProvider is not found");
}
return F$2(() => storeCtx, [storeCtx]);
};
return {
StoreProvider: StoreProvider2,
useStore: useStore2,
useInternalStore: useInternalStore2
};
}
function createStore(storeCreator2) {
let state;
const listeners = /* @__PURE__ */ new Set();
const setState = (partialStateCreator) => {
const nextState = partialStateCreator(state);
if (nextState !== state) {
const previousState = state;
state = __spreadValues(__spreadValues({}, state), nextState);
listeners.forEach((listener) => listener(state, previousState));
}
};
const getState = () => state;
const subscribe = (listener, selector, equalityFn) => {
let _listener = listener;
if (selector) {
let currentSlice = selector(state);
const _equalityFn = equalityFn != null ? equalityFn : Object.is;
_listener = () => {
const nextSlice = selector(state);
if (!_equalityFn(currentSlice, nextSlice)) {
const previousSlice = currentSlice;
currentSlice = nextSlice;
listener(currentSlice, previousSlice);
}
};
}
listeners.add(_listener);
return () => listeners.delete(_listener);
};
const clearListeners = () => listeners.clear();
const internal = { setState, getState, subscribe, clearListeners };
state = storeCreator2(setState, getState, internal);
return internal;
}
const storeCreator = (options) => (set) => {
return __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, createOptionsSlice(options)), createTemplateSlice(options.template)), createPopupSlice()), createWeekViewLayoutSlice()), createCalendarSlice(options.calendars)), createViewSlice(options.defaultView)), createDndSlice()), createGridSelectionSlice()), {
dispatch: {
options: createOptionsDispatchers(set),
popup: createPopupDispatchers(set),
weekViewLayout: createWeekViewLayoutDispatchers(set),
calendar: createCalendarDispatchers(set),
view: createViewDispatchers(set),
dnd: createDndDispatchers(set),
gridSelection: createGridSelectionDispatchers(set),
template: createTemplateDispatchers(set)
}
});
};
const initCalendarStore = (options = {}) => createStore(storeCreator(options));
const { StoreProvider, useStore, useInternalStore } = createStoreContext();
function useDispatch(group) {
return useStore(T$1((state) => {
if (!group) {
return state.dispatch;
}
return state.dispatch[group];
}, [group]));
}
function topLevelStateSelector(group) {
return (state) => state[group];
}
const calendarSelector = topLevelStateSelector("calendar");
const weekViewLayoutSelector = topLevelStateSelector("weekViewLayout");
const templateSelector = topLevelStateSelector("template");
const viewSelector = topLevelStateSelector("view");
const optionsSelector = topLevelStateSelector("options");
const dndSelector = topLevelStateSelector("dnd");
var purify = { exports: {} };
/*! @license DOMPurify 2.3.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.8/LICENSE */
(function(module, exports) {
(function(global2, factory) {
module.exports = factory();
})(commonjsGlobal, function() {
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) {
return typeof obj2;
} : function(obj2) {
return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
}, _typeof(obj);
}
function _setPrototypeOf(o2, p2) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o3, p3) {
o3.__proto__ = p3;
return o3;
};
return _setPrototypeOf(o2, p2);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct)
return false;
if (Reflect.construct.sham)
return false;
if (typeof Proxy === "function")
return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
}));
return true;
} catch (e2) {
return false;
}
}
function _construct(Parent, args, Class) {
if (_isNativeReflectConstruct()) {
_construct = Reflect.construct;
} else {
_construct = function _construct2(Parent2, args2, Class2) {
var a2 = [null];
a2.push.apply(a2, args2);
var Constructor2 = Function.bind.apply(Parent2, a2);
var instance = new Constructor2();
if (Class2)
_setPrototypeOf(instance, Class2.prototype);
return instance;
};
}
return _construct.apply(null, arguments);
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr))
return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null)
return Array.from(iter);
}
function _unsupportedIterableToArray(o2, minLen) {
if (!o2)
return;
if (typeof o2 === "string")
return _arrayLikeToArray(o2, minLen);
var n2 = Object.prototype.toString.call(o2).slice(8, -1);
if (n2 === "Object" && o2.constructor)
n2 = o2.constructor.name;
if (n2 === "Map" || n2 === "Set")
return Array.from(o2);
if (n2 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n2))
return _arrayLikeToArray(o2, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length)
len = arr.length;
for (var i2 = 0, arr2 = new Array(len); i2 < len; i2++)
arr2[i2] = arr[i2];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var freeze = Object.freeze, seal = Object.seal, create = Object.create;
var _ref = typeof Reflect !== "undefined" && Reflect, apply = _ref.apply, construct = _ref.construct;
if (!apply) {
apply = function apply2(fun, thisValue, args) {
return fun.apply(thisValue, args);
};
}
if (!freeze) {
freeze = function freeze2(x2) {
return x2;
};
}
if (!seal) {
seal = function seal2(x2) {
return x2;
};
}
if (!construct) {
construct = function construct2(Func, args) {
return _construct(Func, _toConsumableArray(args));
};
}
var arrayForEach = unapply(Array.prototype.forEach);
var arrayPop = unapply(Array.prototype.pop);
var arrayPush = unapply(Array.prototype.push);
var stringToLowerCase = unapply(String.prototype.toLowerCase);
var stringMatch = unapply(String.prototype.match);
var stringReplace = unapply(String.prototype.replace);
var stringIndexOf = unapply(String.prototype.indexOf);
var stringTrim = unapply(String.prototype.trim);
var regExpTest = unapply(RegExp.prototype.test);
var typeErrorCreate = unconstruct(TypeError);
function unapply(func) {
return function(thisArg) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
return apply(func, thisArg, args);
};
}
function unconstruct(func) {
return function() {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return construct(func, args);
};
}
function addToSet(set, array2) {
if (setPrototypeOf) {
setPrototypeOf(set, null);
}
var l2 = array2.length;
while (l2--) {
var element = array2[l2];
if (typeof element === "string") {
var lcElement = stringToLowerCase(element);
if (lcElement !== element) {
if (!isFrozen(array2)) {
array2[l2] = lcElement;
}
element = lcElement;
}
}
set[element] = true;
}
return set;
}
function clone2(object) {
var newObject = create(null);
var property;
for (property in object) {
if (apply(hasOwnProperty, object, [property])) {
newObject[property] = object[property];
}
}
return newObject;
}
function lookupGetter(object, prop) {
while (object !== null) {
var desc = getOwnPropertyDescriptor(object, prop);
if (desc) {
if (desc.get) {
return unapply(desc.get);
}
if (typeof desc.value === "function") {
return unapply(desc.value);
}
}
object = getPrototypeOf(object);
}
function fallbackValue(element) {
console.warn("fallback value for", element);
return null;
}
return fallbackValue;
}
var html$1 = freeze(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]);
var svg$1 = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
var svgFilters = freeze(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]);
var svgDisallowed = freeze(["animate", "color-profile", "cursor", "discard", "fedropshadow", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]);
var mathMl$1 = freeze(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover"]);
var mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
var text = freeze(["#text"]);
var html = freeze(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "xmlns", "slot"]);
var svg = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]);
var mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]);
var xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/);
var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
var DOCTYPE_NAME = seal(/^html$/i);
var getGlobal = function getGlobal2() {
return typeof window === "undefined" ? null : window;
};
var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, document2) {
if (_typeof(trustedTypes) !== "object" || typeof trustedTypes.createPolicy !== "function") {
return null;
}
var suffix = null;
var ATTR_NAME = "data-tt-policy-suffix";
if (document2.currentScript && document2.currentScript.hasAttribute(ATTR_NAME)) {
suffix = document2.currentScript.getAttribute(ATTR_NAME);
}
var policyName = "dompurify" + (suffix ? "#" + suffix : "");
try {
return trustedTypes.createPolicy(policyName, {
createHTML: function createHTML(html2) {
return html2;
}
});
} catch (_2) {
console.warn("TrustedTypes policy " + policyName + " could not be created.");
return null;
}
};
function createDOMPurify() {
var window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
var DOMPurify = function DOMPurify2(root) {
return createDOMPurify(root);
};
DOMPurify.version = "2.3.8";
DOMPurify.removed = [];
if (!window2 || !window2.document || window2.document.nodeType !== 9) {
DOMPurify.isSupported = false;
return DOMPurify;
}
var originalDocument = window2.document;
var document2 = window2.document;
var DocumentFragment = window2.DocumentFragment, HTMLTemplateElement = window2.HTMLTemplateElement, Node = window2.Node, Element2 = window2.Element, NodeFilter = window2.NodeFilter, _window$NamedNodeMap = window2.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window2.NamedNodeMap || window2.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window2.HTMLFormElement, DOMParser = window2.DOMParser, trustedTypes = window2.trustedTypes;
var ElementPrototype = Element2.prototype;
var cloneNode = lookupGetter(ElementPrototype, "cloneNode");
var getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
var getChildNodes = lookupGetter(ElementPrototype, "childNodes");
var getParentNode = lookupGetter(ElementPrototype, "parentNode");
if (typeof HTMLTemplateElement === "function") {
var template = document2.createElement("template");
if (template.content && template.content.ownerDocument) {
document2 = template.content.ownerDocument;
}
}
var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);
var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML("") : "";
var _document = document2, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;
var importNode = originalDocument.importNode;
var documentMode = {};
try {
documentMode = clone2(document2).documentMode ? document2.documentMode : {};
} catch (_2) {
}
var hooks = {};
DOMPurify.isSupported = typeof getParentNode === "function" && implementation && typeof implementation.createHTMLDocument !== "undefined" && documentMode !== 9;
var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE;
var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;
var ALLOWED_TAGS = null;
var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));
var ALLOWED_ATTR = null;
var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));
var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {
tagNameCheck: {
writable: true,
configurable: false,
enumerable: true,
value: null
},
attributeNameCheck: {
writable: true,
configurable: false,
enumerable: true,
value: null
},
allowCustomizedBuiltInElements: {
writable: true,
configurable: false,
enumerable: true,
value: false
}
}));
var FORBID_TAGS = null;
var FORBID_ATTR = null;
var ALLOW_ARIA_ATTR = true;
var ALLOW_DATA_ATTR = true;
var ALLOW_UNKNOWN_PROTOCOLS = false;
var SAFE_FOR_TEMPLATES = false;
var WHOLE_DOCUMENT = false;
var SET_CONFIG = false;
var FORCE_BODY = false;
var RETURN_DOM = false;
var RETURN_DOM_FRAGMENT = false;
var RETURN_TRUSTED_TYPE = false;
var SANITIZE_DOM = true;
var KEEP_CONTENT = true;
var IN_PLACE = false;
var USE_PROFILES = {};
var FORBID_CONTENTS = null;
var DEFAULT_FORBID_CONTENTS = addToSet({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]);
var DATA_URI_TAGS = null;
var DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]);
var URI_SAFE_ATTRIBUTES = null;
var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]);
var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
var SVG_NAMESPACE = "http://www.w3.org/2000/svg";
var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
var NAMESPACE = HTML_NAMESPACE;
var IS_EMPTY_INPUT = false;
var PARSER_MEDIA_TYPE;
var SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
var DEFAULT_PARSER_MEDIA_TYPE = "text/html";
var transformCaseFunc;
var CONFIG = null;
var formElement = document2.createElement("form");
var isRegexOrFunction = function isRegexOrFunction2(testValue) {
return testValue instanceof RegExp || testValue instanceof Function;
};
var _parseConfig = function _parseConfig2(cfg) {
if (CONFIG && CONFIG === cfg) {
return;
}
if (!cfg || _typeof(cfg) !== "object") {
cfg = {};
}
cfg = clone2(cfg);
ALLOWED_TAGS = "ALLOWED_TAGS" in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;
ALLOWED_ATTR = "ALLOWED_ATTR" in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;
URI_SAFE_ATTRIBUTES = "ADD_URI_SAFE_ATTR" in cfg ? addToSet(clone2(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;
DATA_URI_TAGS = "ADD_DATA_URI_TAGS" in cfg ? addToSet(clone2(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;
FORBID_CONTENTS = "FORBID_CONTENTS" in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;
FORBID_TAGS = "FORBID_TAGS" in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};
FORBID_ATTR = "FORBID_ATTR" in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};
USE_PROFILES = "USE_PROFILES" in cfg ? cfg.USE_PROFILES : false;
ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
RETURN_DOM = cfg.RETURN_DOM || false;
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
FORCE_BODY = cfg.FORCE_BODY || false;
SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
IN_PLACE = cfg.IN_PLACE || false;
IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;
NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
}
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
}
if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") {
CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
}
PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;
transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? function(x2) {
return x2;
} : stringToLowerCase;
if (SAFE_FOR_TEMPLATES) {
ALLOW_DATA_ATTR = false;
}
if (RETURN_DOM_FRAGMENT) {
RETURN_DOM = true;
}
if (USE_PROFILES) {
ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));
ALLOWED_ATTR = [];
if (USE_PROFILES.html === true) {
addToSet(ALLOWED_TAGS, html$1);
addToSet(ALLOWED_ATTR, html);
}
if (USE_PROFILES.svg === true) {
addToSet(ALLOWED_TAGS, svg$1);
addToSet(ALLOWED_ATTR, svg);
addToSet(ALLOWED_ATTR, xml);
}
if (USE_PROFILES.svgFilters === true) {
addToSet(ALLOWED_TAGS, svgFilters);
addToSet(ALLOWED_ATTR, svg);
addToSet(ALLOWED_ATTR, xml);
}
if (USE_PROFILES.mathMl === true) {
addToSet(ALLOWED_TAGS, mathMl$1);
addToSet(ALLOWED_ATTR, mathMl);
addToSet(ALLOWED_ATTR, xml);
}
}
if (cfg.ADD_TAGS) {
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
ALLOWED_TAGS = clone2(ALLOWED_TAGS);
}
addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);
}
if (cfg.ADD_ATTR) {
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
ALLOWED_ATTR = clone2(ALLOWED_ATTR);
}
addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);
}
if (cfg.ADD_URI_SAFE_ATTR) {
addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);
}
if (cfg.FORBID_CONTENTS) {
if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
FORBID_CONTENTS = clone2(FORBID_CONTENTS);
}
addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);
}
if (KEEP_CONTENT) {
ALLOWED_TAGS["#text"] = true;
}
if (WHOLE_DOCUMENT) {
addToSet(ALLOWED_TAGS, ["html", "head", "body"]);
}
if (ALLOWED_TAGS.table) {
addToSet(ALLOWED_TAGS, ["tbody"]);
delete FORBID_TAGS.tbody;
}
if (freeze) {
freeze(cfg);
}
CONFIG = cfg;
};
var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
var HTML_INTEGRATION_POINTS = addToSet({}, ["foreignobject", "desc", "title", "annotation-xml"]);
var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]);
var ALL_SVG_TAGS = addToSet({}, svg$1);
addToSet(ALL_SVG_TAGS, svgFilters);
addToSet(ALL_SVG_TAGS, svgDisallowed);
var ALL_MATHML_TAGS = addToSet({}, mathMl$1);
addToSet(ALL_MATHML_TAGS, mathMlDisallowed);
var _checkValidNamespace = function _checkValidNamespace2(element) {
var parent = getParentNode(element);
if (!parent || !parent.tagName) {
parent = {
namespaceURI: HTML_NAMESPACE,
tagName: "template"
};
}
var tagName = stringToLowerCase(element.tagName);
var parentTagName = stringToLowerCase(parent.tagName);
if (element.namespaceURI === SVG_NAMESPACE) {
if (parent.namespaceURI === HTML_NAMESPACE) {
return tagName === "svg";
}
if (parent.namespaceURI === MATHML_NAMESPACE) {
return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
}
return Boolean(ALL_SVG_TAGS[tagName]);
}
if (element.namespaceURI === MATHML_NAMESPACE) {
if (parent.namespaceURI === HTML_NAMESPACE) {
return tagName === "math";
}
if (parent.namespaceURI === SVG_NAMESPACE) {
return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
}
return Boolean(ALL_MATHML_TAGS[tagName]);
}
if (element.namespaceURI === HTML_NAMESPACE) {
if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
return false;
}
if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
return false;
}
return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
}
return false;
};
var _forceRemove = function _forceRemove2(node) {
arrayPush(DOMPurify.removed, {
element: node
});
try {
node.parentNode.removeChild(node);
} catch (_2) {
try {
node.outerHTML = emptyHTML;
} catch (_3) {
node.remove();
}
}
};
var _removeAttribute = function _removeAttribute2(name, node) {
try {
arrayPush(DOMPurify.removed, {
attribute: node.getAttributeNode(name),
from: node
});
} catch (_2) {
arrayPush(DOMPurify.removed, {
attribute: null,
from: node
});
}
node.removeAttribute(name);
if (name === "is" && !ALLOWED_ATTR[name]) {
if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
try {
_forceRemove(node);
} catch (_2) {
}
} else {
try {
node.setAttribute(name, "");
} catch (_2) {
}
}
}
};
var _initDocument = function _initDocument2(dirty) {
var doc;
var leadingWhitespace;
if (FORCE_BODY) {
dirty = "<remove></remove>" + dirty;
} else {
var matches = stringMatch(dirty, /^[\r\n\t ]+/);
leadingWhitespace = matches && matches[0];
}
if (PARSER_MEDIA_TYPE === "application/xhtml+xml") {
dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
}
var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
if (NAMESPACE === HTML_NAMESPACE) {
try {
doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
} catch (_2) {
}
}
if (!doc || !doc.documentElement) {
doc = implementation.createDocument(NAMESPACE, "template", null);
try {
doc.documentElement.innerHTML = IS_EMPTY_INPUT ? "" : dirtyPayload;
} catch (_2) {
}
}
var body = doc.body || doc.documentElement;
if (dirty && leadingWhitespace) {
body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
}
if (NAMESPACE === HTML_NAMESPACE) {
return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
}
return WHOLE_DOCUMENT ? doc.documentElement : body;
};
var _createIterator = function _createIterator2(root) {
return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);
};
var _isClobbered = function _isClobbered2(elm) {
return elm instanceof HTMLFormElement && (typeof elm.nodeName !== "string" || typeof elm.textContent !== "string" || typeof elm.removeChild !== "function" || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== "function" || typeof elm.setAttribute !== "function" || typeof elm.namespaceURI !== "string" || typeof elm.insertBefore !== "function");
};
var _isNode = function _isNode2(object) {
return _typeof(Node) === "object" ? object instanceof Node : object && _typeof(object) === "object" && typeof object.nodeType === "number" && typeof object.nodeName === "string";
};
var _executeHook = function _executeHook2(entryPoint, currentNode, data) {
if (!hooks[entryPoint]) {
return;
}
arrayForEach(hooks[entryPoint], function(hook) {
hook.call(DOMPurify, currentNode, data, CONFIG);
});
};
var _sanitizeElements = function _sanitizeElements2(currentNode) {
var content;
_executeHook("beforeSanitizeElements", currentNode, null);
if (_isClobbered(currentNode)) {
_forceRemove(currentNode);
return true;
}
if (regExpTest(/[\u0080-\uFFFF]/, currentNode.nodeName)) {
_forceRemove(currentNode);
return true;
}
var tagName = transformCaseFunc(currentNode.nodeName);
_executeHook("uponSanitizeElement", currentNode, {
tagName,
allowedTags: ALLOWED_TAGS
});
if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
_forceRemove(currentNode);
return true;
}
if (tagName === "select" && regExpTest(/<template/i, currentNode.innerHTML)) {
_forceRemove(currentNode);
return true;
}
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))
return false;
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName))
return false;
}
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
var parentNode = getParentNode(currentNode) || currentNode.parentNode;
var childNodes = getChildNodes(currentNode) || currentNode.childNodes;
if (childNodes && parentNode) {
var childCount = childNodes.length;
for (var i2 = childCount - 1; i2 >= 0; --i2) {
parentNode.insertBefore(cloneNode(childNodes[i2], true), getNextSibling(currentNode));
}
}
}
_forceRemove(currentNode);
return true;
}
if (currentNode instanceof Element2 && !_checkValidNamespace(currentNode)) {
_forceRemove(currentNode);
return true;
}
if ((tagName === "noscript" || tagName === "noembed") && regExpTest(/<\/no(script|embed)/i, currentNode.innerHTML)) {
_forceRemove(currentNode);
return true;
}
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
content = currentNode.textContent;
content = stringReplace(content, MUSTACHE_EXPR$1, " ");
content = stringReplace(content, ERB_EXPR$1, " ");
if (currentNode.textContent !== content) {
arrayPush(DOMPurify.removed, {
element: currentNode.cloneNode()
});
currentNode.textContent = content;
}
}
_executeHook("afterSanitizeElements", currentNode, null);
return false;
};
var _isValidAttribute = function _isValidAttribute2(lcTag, lcName, value) {
if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document2 || value in formElement)) {
return false;
}
if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName))
;
else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName))
;
else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
if (_basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)))
;
else {
return false;
}
} else if (URI_SAFE_ATTRIBUTES[lcName])
;
else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, "")))
;
else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag])
;
else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, "")))
;
else if (!value)
;
else {
return false;
}
return true;
};
var _basicCustomElementTest = function _basicCustomElementTest2(tagName) {
return tagName.indexOf("-") > 0;
};
var _sanitizeAttributes = function _sanitizeAttributes2(currentNode) {
var attr;
var value;
var lcName;
var l2;
_executeHook("beforeSanitizeAttributes", currentNode, null);
var attributes = currentNode.attributes;
if (!attributes) {
return;
}
var hookEvent = {
attrName: "",
attrValue: "",
keepAttr: true,
allowedAttributes: ALLOWED_ATTR
};
l2 = attributes.length;
while (l2--) {
attr = attributes[l2];
var _attr = attr, name = _attr.name, namespaceURI = _attr.namespaceURI;
value = name === "value" ? attr.value : stringTrim(attr.value);
lcName = transformCaseFunc(name);
hookEvent.attrName = lcName;
hookEvent.attrValue = value;
hookEvent.keepAttr = true;
hookEvent.forceKeepAttr = void 0;
_executeHook("uponSanitizeAttribute", currentNode, hookEvent);
value = hookEvent.attrValue;
if (hookEvent.forceKeepAttr) {
continue;
}
_removeAttribute(name, currentNode);
if (!hookEvent.keepAttr) {
continue;
}
if (regExpTest(/\/>/i, value)) {
_removeAttribute(name, currentNode);
continue;
}
if (SAFE_FOR_TEMPLATES) {
value = stringReplace(value, MUSTACHE_EXPR$1, " ");
value = stringReplace(value, ERB_EXPR$1, " ");
}
var lcTag = transformCaseFunc(currentNode.nodeName);
if (!_isValidAttribute(lcTag, lcName, value)) {
continue;
}
try {
if (namespaceURI) {
currentNode.setAttributeNS(namespaceURI, name, value);
} else {
currentNode.setAttribute(name, value);
}
arrayPop(DOMPurify.removed);
} catch (_2) {
}
}
_executeHook("afterSanitizeAttributes", currentNode, null);
};
var _sanitizeShadowDOM = function _sanitizeShadowDOM2(fragment) {
var shadowNode;
var shadowIterator = _createIterator(fragment);
_executeHook("beforeSanitizeShadowDOM", fragment, null);
while (shadowNode = shadowIterator.nextNode()) {
_executeHook("uponSanitizeShadowNode", shadowNode, null);
if (_sanitizeElements(shadowNode)) {
continue;
}
if (shadowNode.content instanceof DocumentFragment) {
_sanitizeShadowDOM2(shadowNode.content);
}
_sanitizeAttributes(shadowNode);
}
_executeHook("afterSanitizeShadowDOM", fragment, null);
};
DOMPurify.sanitize = function(dirty, cfg) {
var body;
var importedNode;
var currentNode;
var oldNode;
var returnNode;
IS_EMPTY_INPUT = !dirty;
if (IS_EMPTY_INPUT) {
dirty = "<!-->";
}
if (typeof dirty !== "string" && !_isNode(dirty)) {
if (typeof dirty.toString !== "function") {
throw typeErrorCreate("toString is not a function");
} else {
dirty = dirty.toString();
if (typeof dirty !== "string") {
throw typeErrorCreate("dirty is not a string, aborting");
}
}
}
if (!DOMPurify.isSupported) {
if (_typeof(window2.toStaticHTML) === "object" || typeof window2.toStaticHTML === "function") {
if (typeof dirty === "string") {
return window2.toStaticHTML(dirty);
}
if (_isNode(dirty)) {
return window2.toStaticHTML(dirty.outerHTML);
}
}
return dirty;
}
if (!SET_CONFIG) {
_parseConfig(cfg);
}
DOMPurify.removed = [];
if (typeof dirty === "string") {
IN_PLACE = false;
}
if (IN_PLACE) {
if (dirty.nodeName) {
var tagName = transformCaseFunc(dirty.nodeName);
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
}
}
} else if (dirty instanceof Node) {
body = _initDocument("<!---->");
importedNode = body.ownerDocument.importNode(dirty, true);
if (importedNode.nodeType === 1 && importedNode.nodeName === "BODY") {
body = importedNode;
} else if (importedNode.nodeName === "HTML") {
body = importedNode;
} else {
body.appendChild(importedNode);
}
} else {
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) {
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
}
body = _initDocument(dirty);
if (!body) {
return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
}
}
if (body && FORCE_BODY) {
_forceRemove(body.firstChild);
}
var nodeIterator = _createIterator(IN_PLACE ? dirty : body);
while (currentNode = nodeIterator.nextNode()) {
if (currentNode.nodeType === 3 && currentNode === oldNode) {
continue;
}
if (_sanitizeElements(currentNode)) {
continue;
}
if (currentNode.content instanceof DocumentFragment) {
_sanitizeShadowDOM(currentNode.content);
}
_sanitizeAttributes(currentNode);
oldNode = currentNode;
}
oldNode = null;
if (IN_PLACE) {
return dirty;
}
if (RETURN_DOM) {
if (RETURN_DOM_FRAGMENT) {
returnNode = createDocumentFragment.call(body.ownerDocument);
while (body.firstChild) {
returnNode.appendChild(body.firstChild);
}
} else {
returnNode = body;
}
if (ALLOWED_ATTR.shadowroot) {
returnNode = importNode.call(originalDocument, returnNode, true);
}
return returnNode;
}
var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
}
if (SAFE_FOR_TEMPLATES) {
serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, " ");
serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, " ");
}
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
};
DOMPurify.setConfig = function(cfg) {
_parseConfig(cfg);
SET_CONFIG = true;
};
DOMPurify.clearConfig = function() {
CONFIG = null;
SET_CONFIG = false;
};
DOMPurify.isValidAttribute = function(tag, attr, value) {
if (!CONFIG) {
_parseConfig({});
}
var lcTag = transformCaseFunc(tag);
var lcName = transformCaseFunc(attr);
return _isValidAttribute(lcTag, lcName, value);
};
DOMPurify.addHook = function(entryPoint, hookFunction) {
if (typeof hookFunction !== "function") {
return;
}
hooks[entryPoint] = hooks[entryPoint] || [];
arrayPush(hooks[entryPoint], hookFunction);
};
DOMPurify.removeHook = function(entryPoint) {
if (hooks[entryPoint]) {
return arrayPop(hooks[entryPoint]);
}
};
DOMPurify.removeHooks = function(entryPoint) {
if (hooks[entryPoint]) {
hooks[entryPoint] = [];
}
};
DOMPurify.removeAllHooks = function() {
hooks = {};
};
return DOMPurify;
}
var purify2 = createDOMPurify();
return purify2;
});
})(purify);
var browser = window.DOMPurify || (window.DOMPurify = purify.exports.default || purify.exports);
const TEMP_TARGET_ATTRIBUTE = "data-target-temp";
function addAttributeHooks() {
browser.addHook("beforeSanitizeAttributes", (node) => {
if (node.tagName === "A") {
const targetValue = node.getAttribute("target");
if (targetValue) {
node.setAttribute(TEMP_TARGET_ATTRIBUTE, targetValue);
} else {
node.setAttribute("target", "_self");
}
}
});
browser.addHook("afterSanitizeAttributes", (node) => {
if (node.tagName === "A" && node.hasAttribute(TEMP_TARGET_ATTRIBUTE)) {
node.setAttribute("target", node.getAttribute(TEMP_TARGET_ATTRIBUTE));
node.removeAttribute(TEMP_TARGET_ATTRIBUTE);
if (node.getAttribute("target") === "_blank") {
node.setAttribute("rel", "noopener");
}
}
});
}
function removeAttributeHooks() {
browser.removeAllHooks();
}
function sanitize(str) {
return browser.sanitize(str);
}
function Template({ template, param, as: tagName = "div" }) {
var _a;
const templates2 = useStore(templateSelector);
const templateFunc = templates2[template];
if (isNil(templateFunc)) {
return null;
}
const htmlOrVnode = templateFunc(param);
return isString_1(htmlOrVnode) ? h$3(tagName, {
className: cls(`template-${template}`),
dangerouslySetInnerHTML: {
__html: sanitize(htmlOrVnode)
}
}) : q$3(htmlOrVnode, {
className: `${(_a = htmlOrVnode.props.className) != null ? _a : ""} ${cls(`template-${template}`)}`
});
}
const EventBusContext = B$1(null);
const EventBusProvider = EventBusContext.Provider;
const useEventBus = () => {
const eventBus = q$2(EventBusContext);
if (!eventBus) {
throw new Error("useEventBus must be used within a EventBusProvider");
}
return eventBus;
};
const primaryTimezoneSelector = (state) => {
var _a, _b, _c, _d, _e;
return (_e = (_d = (_c = (_b = (_a = state.options) == null ? void 0 : _a.timezone) == null ? void 0 : _b.zones) == null ? void 0 : _c[0]) == null ? void 0 : _d.timezoneName) != null ? _e : "Local";
};
const customOffsetCalculatorSelector = (state) => {
var _a, _b;
return (_b = (_a = state.options) == null ? void 0 : _a.timezone) == null ? void 0 : _b.customOffsetCalculator;
};
const timezonesSelector = (state) => {
var _a;
return (_a = state.options.timezone.zones) != null ? _a : [];
};
function useTZConverter() {
const customOffsetCalculator = useStore(customOffsetCalculatorSelector);
const hasCustomOffsetCalculator = isPresent(customOffsetCalculator);
return T$1((timezoneName, tzDate = new TZDate()) => tzDate.tz(hasCustomOffsetCalculator ? customOffsetCalculator(timezoneName, tzDate.getTime()) : timezoneName), [customOffsetCalculator, hasCustomOffsetCalculator]);
}
function usePrimaryTimezone() {
const primaryTimezoneName = useStore(primaryTimezoneSelector);
const tzConverter = useTZConverter();
const getNow = T$1(() => tzConverter(primaryTimezoneName), [primaryTimezoneName, tzConverter]);
return [primaryTimezoneName, getNow];
}
function isWeekDayName(type, dayName) {
return type === "week";
}
function getWeekDayNameColor({
dayName,
theme,
today
}) {
var _a, _b;
const { day, dateInstance } = dayName;
const isToday = isSameDate(today, dateInstance);
const isPastDay = !isToday && dateInstance < today;
if (isSunday(day)) {
return theme.common.holiday.color;
}
if (isPastDay) {
return (_a = theme.week) == null ? void 0 : _a.pastDay.color;
}
if (isSaturday(day)) {
return theme.common.saturday.color;
}
if (isToday) {
return (_b = theme.week) == null ? void 0 : _b.today.color;
}
return theme.common.dayName.color;
}
function getMonthDayNameColor({
dayName,
theme
}) {
const { day } = dayName;
if (isSunday(day)) {
return theme.common.holiday.color;
}
if (isSaturday(day)) {
return theme.common.saturday.color;
}
return theme.common.dayName.color;
}
function DayName({ dayName, style, type, theme }) {
const eventBus = useEventBus();
const [, getNow] = usePrimaryTimezone();
const today = getNow();
const { day } = dayName;
const color = type === "week" ? getWeekDayNameColor({ dayName, theme, today }) : getMonthDayNameColor({ dayName, theme });
const templateType = `${type}DayName`;
const handleClick = () => {
if (isWeekDayName(type)) {
eventBus.fire("clickDayName", { date: toFormat(dayName.dateInstance, "YYYY-MM-DD") });
}
};
return /* @__PURE__ */ h$3("div", {
className: cls("day-name-item", type),
style
}, /* @__PURE__ */ h$3("span", {
className: cls({ [`holiday-${getDayName(day)}`]: isWeekend(day) }),
style: { color },
onClick: handleClick,
"data-testid": `dayName-${type}-${getDayName(day)}`
}, /* @__PURE__ */ h$3(Template, {
template: templateType,
param: dayName
})));
}
const commonThemeSelector = topLevelStateSelector("common");
const monthThemeSelector = topLevelStateSelector("month");
const weekDayGridLeftSelector = (theme) => theme.week.dayGridLeft;
const weekTimeGridLeftSelector = (theme) => theme.week.timeGridLeft;
const monthMoreViewSelector = (theme) => theme.month.moreView;
const monthGridCellSelector = (theme) => theme.month.gridCell;
const DEFAULT_COMMON_THEME = {
border: "1px solid #e5e5e5",
backgroundColor: "white",
holiday: {
color: "#ff4040"
},
saturday: {
color: "#333"
},
dayName: {
color: "#333"
},
today: {
color: "#fff"
},
gridSelection: {
backgroundColor: "rgba(81, 92, 230, 0.05)",
border: "1px solid #515ce6"
}
};
const DEFAULT_WEEK_THEME = {
dayName: {
borderLeft: "none",
borderTop: "1px solid #e5e5e5",
borderBottom: "1px solid #e5e5e5",
backgroundColor: "inherit"
},
weekend: {
backgroundColor: "inherit"
},
today: {
color: "inherit",
backgroundColor: "rgba(81, 92, 230, 0.05)"
},
pastDay: {
color: "#bbb"
},
panelResizer: {
border: "1px solid #e5e5e5"
},
dayGrid: {
borderRight: "1px solid #e5e5e5",
backgroundColor: "inherit"
},
dayGridLeft: {
borderRight: "1px solid #e5e5e5",
backgroundColor: "inherit",
width: "72px"
},
timeGrid: {
borderRight: "1px solid #e5e5e5"
},
timeGridLeft: {
backgroundColor: "inherit",
borderRight: "1px solid #e5e5e5",
width: "72px"
},
timeGridLeftAdditionalTimezone: {
backgroundColor: "white"
},
timeGridHalfHourLine: {
borderBottom: "none"
},
timeGridHourLine: {
borderBottom: "1px solid #e5e5e5"
},
nowIndicatorLabel: {
color: "#515ce6"
},
nowIndicatorPast: {
border: "1px dashed #515ce6"
},
nowIndicatorBullet: {
backgroundColor: "#515ce6"
},
nowIndicatorToday: {
border: "1px solid #515ce6"
},
nowIndicatorFuture: {
border: "none"
},
pastTime: {
color: "#bbb"
},
futureTime: {
color: "#333"
},
gridSelection: {
color: "#515ce6"
}
};
const DEFAULT_MONTH_THEME = {
dayName: {
borderLeft: "none",
backgroundColor: "inherit"
},
holidayExceptThisMonth: {
color: "rgba(255, 64, 64, 0.4)"
},
dayExceptThisMonth: {
color: "rgba(51, 51, 51, 0.4)"
},
weekend: {
backgroundColor: "inherit"
},
moreView: {
border: "1px solid #d5d5d5",
boxShadow: "0 2px 6px 0 rgba(0, 0, 0, 0.1)",
backgroundColor: "white",
width: null,
height: null
},
gridCell: {
headerHeight: 31,
footerHeight: null
},
moreViewTitle: {
backgroundColor: "inherit"
}
};
function createCommonTheme(commonTheme = {}) {
return {
common: mergeObject(DEFAULT_COMMON_THEME, commonTheme)
};
}
function createThemeDispatch(set) {
return {
setTheme: (theme) => {
set(produce((state) => {
state.common = mergeObject(state.common, theme.common);
state.week = mergeObject(state.week, theme.week);
state.month = mergeObject(state.month, theme.month);
}));
},
setCommonTheme: (commonTheme) => {
set(produce((state) => {
state.common = mergeObject(state.common, commonTheme);
}));
},
setWeekTheme: (weekTheme) => {
set(produce((state) => {
state.week = mergeObject(state.week, weekTheme);
}));
},
setMonthTheme: (monthTheme) => {
set(produce((state) => {
state.month = mergeObject(state.month, monthTheme);
}));
}
};
}
function createMonthTheme(monthTheme = {}) {
return {
month: mergeObject(DEFAULT_MONTH_THEME, monthTheme)
};
}
function createWeekTheme(weekTheme = {}) {
return {
week: mergeObject(DEFAULT_WEEK_THEME, weekTheme)
};
}
const themeStoreCreator = (themeOptions = {}) => (set) => {
return __spreadProps(__spreadValues(__spreadValues(__spreadValues({}, createCommonTheme(themeOptions == null ? void 0 : themeOptions.common)), createWeekTheme(themeOptions == null ? void 0 : themeOptions.week)), createMonthTheme(themeOptions == null ? void 0 : themeOptions.month)), {
dispatch: __spreadValues({}, createThemeDispatch(set))
});
};
const initThemeStore = (themeOptions = {}) => createStore(themeStoreCreator(themeOptions));
const {
StoreProvider: ThemeProvider,
useStore: useTheme
} = createStoreContext();
function useCommonTheme() {
return useTheme(commonThemeSelector);
}
function useMonthTheme() {
return useTheme(monthThemeSelector);
}
function weekDayNameSelector(theme) {
return {
common: {
saturday: theme.common.saturday,
holiday: theme.common.holiday,
today: theme.common.today,
dayName: theme.common.dayName
},
week: {
pastDay: theme.week.pastDay,
today: theme.week.today,
dayName: theme.week.dayName
}
};
}
function monthDayNameSelector(theme) {
return {
common: {
saturday: theme.common.saturday,
holiday: theme.common.holiday,
today: theme.common.today,
dayName: theme.common.dayName
},
month: {
dayName: theme.month.dayName
}
};
}
function GridHeader({
dayNames,
marginLeft = DEFAULT_DAY_NAME_MARGIN_LEFT,
rowStyleInfo,
type = "month"
}) {
var _a, _b;
const theme = useTheme(type === "month" ? monthDayNameSelector : weekDayNameSelector);
const _c = (_b = (_a = theme[type]) == null ? void 0 : _a.dayName) != null ? _b : {}, { backgroundColor = "white", borderLeft = null } = _c, rest = __objRest(_c, ["backgroundColor", "borderLeft"]);
const { borderTop = null, borderBottom = null } = rest;
return /* @__PURE__ */ h$3("div", {
"data-testid": `grid-header-${type}`,
className: cls("day-names", type),
style: {
backgroundColor,
borderTop,
borderBottom
}
}, /* @__PURE__ */ h$3("div", {
className: cls("day-name-container"),
style: { marginLeft }
}, dayNames.map((dayName, index) => /* @__PURE__ */ h$3(DayName, {
type,
key: `dayNames-${dayName.day}`,
dayName,
style: {
width: toPercent(rowStyleInfo[index].width),
left: toPercent(rowStyleInfo[index].left),
borderLeft
},
theme
}))));
}
const DEFAULT_VISIBLE_WEEKS = 6;
var CellBarType = /* @__PURE__ */ ((CellBarType2) => {
CellBarType2["header"] = "header";
CellBarType2["footer"] = "footer";
return CellBarType2;
})(CellBarType || {});
function getCollisionGroup(events, usingTravelTime = true) {
const collisionGroups = [];
let previousEventList;
if (!events.length) {
return collisionGroups;
}
collisionGroups[0] = [events[0].cid()];
events.slice(1).forEach((event, index) => {
previousEventList = events.slice(0, index + 1).reverse();
const found = previousEventList.find((previous) => event.collidesWith(previous, usingTravelTime));
if (!found) {
collisionGroups.push([event.cid()]);
} else {
collisionGroups.slice().reverse().some((group) => {
if (~group.indexOf(found.cid())) {
group.push(event.cid());
return true;
}
return false;
});
}
});
return collisionGroups;
}
function getLastRowInColumn(matrix, col) {
let { length: row } = matrix;
while (row > 0) {
row -= 1;
if (!isUndefined_1(matrix[row][col])) {
return row;
}
}
return -1;
}
function getMatrices(collection, collisionGroups, usingTravelTime = true) {
const result = [];
collisionGroups.forEach((group) => {
const matrix = [[]];
group.forEach((eventID) => {
const event = collection.get(eventID);
let col = 0;
let found = false;
let nextRow;
let lastRowInColumn;
while (!found) {
lastRowInColumn = getLastRowInColumn(matrix, col);
if (lastRowInColumn === -1) {
matrix[0].push(event);
found = true;
} else if (!event.collidesWith(matrix[lastRowInColumn][col], usingTravelTime)) {
nextRow = lastRowInColumn + 1;
if (isUndefined_1(matrix[nextRow])) {
matrix[nextRow] = [];
}
matrix[nextRow][col] = event;
found = true;
}
col += 1;
}
});
result.push(matrix);
});
return result;
}
function getEventInDateRangeFilter(start, end) {
return (model) => {
const ownStarts = model.getStarts();
const ownEnds = model.getEnds();
return !(ownEnds < start || ownStarts > end);
};
}
function positionUIModels(start, end, matrices, iteratee) {
const ymdListToRender = makeDateRange(start, end, MS_PER_DAY).map((date2) => toFormat(date2, "YYYYMMDD"));
matrices.forEach((matrix) => {
matrix.forEach((column) => {
column.forEach((uiModel, index) => {
if (!uiModel) {
return;
}
const ymd = toFormat(uiModel.getStarts(), "YYYYMMDD");
const dateLength = makeDateRange(toStartOfDay(uiModel.getStarts()), toEndOfDay(uiModel.getEnds()), MS_PER_DAY).length;
uiModel.top = index;
uiModel.left = ymdListToRender.indexOf(ymd);
uiModel.width = dateLength;
iteratee == null ? void 0 : iteratee(uiModel);
});
});
});
}
function limit$1(start, end, uiModel) {
if (uiModel.getStarts() < start) {
uiModel.exceedLeft = true;
uiModel.renderStarts = new TZDate(start);
}
if (uiModel.getEnds() > end) {
uiModel.exceedRight = true;
uiModel.renderEnds = new TZDate(end);
}
return uiModel;
}
function limitRenderRange(start, end, uiModelColl) {
if (uiModelColl instanceof Collection) {
uiModelColl.each((uiModel) => {
limit$1(start, end, uiModel);
return true;
});
return null;
}
return limit$1(start, end, uiModelColl);
}
function convertToUIModel(eventCollection) {
const uiModelColl = new Collection((uiModel) => {
return uiModel.cid();
});
eventCollection.each(function(event) {
uiModelColl.add(new EventUIModel(event));
});
return uiModelColl;
}
function _isAllday({ model }) {
return model.isAllday || model.hasMultiDates;
}
function _isNotAllday(uiModel) {
return !_isAllday(uiModel);
}
function _weightTopValue(uiModel) {
uiModel.top = uiModel.top || 0;
uiModel.top += 1;
}
function _adjustRenderRange(start, end, uiModelColl) {
uiModelColl.each((uiModel) => {
if (uiModel.model.isAllday || uiModel.model.hasMultiDates) {
limitRenderRange(toStartOfDay(start), toEndOfDay(end), uiModel);
}
});
}
function _getAlldayMaxTopIndexAtYMD(idsOfDay, ymd, uiModelAlldayColl) {
const topIndexesInDate = [];
idsOfDay[ymd].forEach((cid) => {
uiModelAlldayColl.doWhenHas(cid, (uiModel) => {
topIndexesInDate.push(uiModel.top);
});
});
if (topIndexesInDate.length > 0) {
return Math.max(...topIndexesInDate);
}
return 0;
}
function _adjustTimeTopIndex(idsOfDay, uiModelColl) {
const vAlldayColl = uiModelColl.filter(_isAllday);
const sortedTimeEvents = uiModelColl.filter(_isNotAllday).sort(array.compare.event.asc);
const maxIndexInYMD = {};
sortedTimeEvents.forEach((timeUIModel) => {
const eventYMD = toFormat(timeUIModel.getStarts(), "YYYYMMDD");
let alldayMaxTopInYMD = maxIndexInYMD[eventYMD];
if (isUndefined_1(alldayMaxTopInYMD)) {
alldayMaxTopInYMD = maxIndexInYMD[eventYMD] = _getAlldayMaxTopIndexAtYMD(idsOfDay, eventYMD, vAlldayColl);
}
maxIndexInYMD[eventYMD] = timeUIModel.top = alldayMaxTopInYMD + 1;
});
}
function _stackTimeFromTop(idsOfDay, uiModelColl) {
const uiModelAlldayColl = uiModelColl.filter(_isAllday);
const sortedTimeEvents = uiModelColl.filter(_isNotAllday).sort(array.compare.event.asc);
const indiceInYMD = {};
sortedTimeEvents.forEach((timeUIModel) => {
const eventYMD = toFormat(timeUIModel.getStarts(), "YYYYMMDD");
let topArrayInYMD = indiceInYMD[eventYMD];
if (isUndefined_1(topArrayInYMD)) {
topArrayInYMD = indiceInYMD[eventYMD] = [];
idsOfDay[eventYMD].forEach((cid) => {
uiModelAlldayColl.doWhenHas(cid, (uiModel) => {
topArrayInYMD.push(uiModel.top);
});
});
}
if (topArrayInYMD.indexOf(timeUIModel.top) >= 0) {
const maxTopInYMD = Math.max(...topArrayInYMD) + 1;
for (let i2 = 1; i2 <= maxTopInYMD; i2 += 1) {
timeUIModel.top = i2;
if (topArrayInYMD.indexOf(timeUIModel.top) < 0) {
break;
}
}
}
topArrayInYMD.push(timeUIModel.top);
});
}
function _addMultiDatesInfo$1(uiModelColl) {
uiModelColl.each((uiModel) => {
const { model } = uiModel;
const start = model.getStarts();
const end = model.getEnds();
model.hasMultiDates = !isSameDate(start, end);
if (!model.isAllday && model.hasMultiDates) {
uiModel.renderStarts = toStartOfDay(start);
uiModel.renderEnds = toEndOfDay(end);
}
});
}
function findByDateRange$1(calendarData, condition) {
const { start, end, andFilters = [], alldayFirstMode = false } = condition;
const { events, idsOfDay } = calendarData;
const filterFn = Collection.and(...[getEventInDateRangeFilter(start, end)].concat(andFilters));
const coll = events.filter(filterFn);
const uiModelColl = convertToUIModel(coll);
_addMultiDatesInfo$1(uiModelColl);
_adjustRenderRange(start, end, uiModelColl);
const vList = uiModelColl.sort(array.compare.event.asc);
const usingTravelTime = false;
const collisionGroup = getCollisionGroup(vList, usingTravelTime);
const matrices = getMatrices(uiModelColl, collisionGroup, usingTravelTime);
positionUIModels(start, end, matrices, _weightTopValue);
if (alldayFirstMode) {
_adjustTimeTopIndex(idsOfDay, uiModelColl);
} else {
_stackTimeFromTop(idsOfDay, uiModelColl);
}
return matrices;
}
function _makeHourRangeFilter(hStart, hEnd) {
return (uiModel) => {
const ownHourStart = uiModel.getStarts();
const ownHourEnd = uiModel.getEnds();
const ownHourStartTime = ownHourStart.getTime();
const ownHourEndTime = ownHourEnd.getTime();
const yyyy = ownHourStart.getFullYear();
const mm = ownHourStart.getMonth();
const dd = ownHourStart.getDate();
const hourStart = new TZDate(yyyy, mm, dd).setHours(hStart);
const hourEnd = new TZDate(yyyy, mm, dd).setHours(hEnd);
return ownHourStartTime >= hourStart && ownHourStartTime < hourEnd || ownHourEndTime > hourStart && ownHourEndTime <= hourEnd || ownHourStartTime < hourStart && ownHourEndTime > hourStart || ownHourEndTime > hourEnd && ownHourStartTime < hourEnd;
};
}
function _makeGetUIModelFuncForTimeView(hourStart, hourEnd) {
if (hourStart === 0 && hourEnd === 24) {
return (uiModelColl) => {
return uiModelColl.sort(array.compare.event.asc);
};
}
return (uiModelColl) => {
return uiModelColl.filter(_makeHourRangeFilter(hourStart, hourEnd)).sort(array.compare.event.asc);
};
}
function splitEventByDateRange(idsOfDay, start, end, uiModelColl) {
const result = {};
const range2 = getDateRange(start, end);
range2.forEach((date2) => {
const ymd = toFormat(date2, "YYYYMMDD");
const ids = idsOfDay[ymd];
const collection = result[ymd] = new Collection((event) => {
return event.cid();
});
if (ids && ids.length) {
ids.forEach((id) => {
uiModelColl.doWhenHas(id, (event) => {
collection.add(event);
});
});
}
}, {});
return result;
}
function getUIModelForTimeView(idsOfDay, condition) {
const { start, end, uiModelTimeColl, hourStart, hourEnd } = condition;
const ymdSplitted = splitEventByDateRange(idsOfDay, start, end, uiModelTimeColl);
const result = {};
const _getUIModel = _makeGetUIModelFuncForTimeView(hourStart, hourEnd);
const usingTravelTime = true;
Object.entries(ymdSplitted).forEach(([ymd, uiModelColl]) => {
const uiModels = _getUIModel(uiModelColl);
const collisionGroups = getCollisionGroup(uiModels, usingTravelTime);
const matrices = getMatrices(uiModelColl, collisionGroups, usingTravelTime);
result[ymd] = matrices;
});
return result;
}
function _addMultiDatesInfo(uiModelColl) {
uiModelColl.each((uiModel) => {
const { model } = uiModel;
model.hasMultiDates = true;
uiModel.renderStarts = toStartOfDay(model.getStarts());
uiModel.renderEnds = toEndOfDay(model.getEnds());
});
}
function getUIModelForAlldayView(start, end, uiModelColl) {
if (!uiModelColl || !uiModelColl.size) {
return [];
}
_addMultiDatesInfo(uiModelColl);
limitRenderRange(start, end, uiModelColl);
const uiModels = uiModelColl.sort(array.compare.event.asc);
const usingTravelTime = true;
const collisionGroups = getCollisionGroup(uiModels, usingTravelTime);
const matrices = getMatrices(uiModelColl, collisionGroups, usingTravelTime);
positionUIModels(start, end, matrices);
return matrices;
}
function findByDateRange(calendarData, condition) {
var _a, _b;
const { start, end, panels, andFilters = [], options } = condition;
const { events, idsOfDay } = calendarData;
const hourStart = (_a = options == null ? void 0 : options.hourStart) != null ? _a : 0;
const hourEnd = (_b = options == null ? void 0 : options.hourEnd) != null ? _b : 24;
const filterFn = Collection.and(...[getEventInDateRangeFilter(start, end)].concat(andFilters));
const uiModelColl = convertToUIModel(events.filter(filterFn));
const group = uiModelColl.groupBy(filterByCategory);
return panels.reduce((acc, cur) => {
const { name, type } = cur;
if (isNil(group[name])) {
return acc;
}
return __spreadProps(__spreadValues({}, acc), {
[name]: type === "daygrid" ? getUIModelForAlldayView(start, end, group[name]) : getUIModelForTimeView(idsOfDay, {
start,
end,
uiModelTimeColl: group[name],
hourStart,
hourEnd
})
});
}, {
milestone: [],
task: [],
allday: [],
time: {}
});
}
function limit(value, minArr, maxArr) {
const v2 = Math.max(value, ...minArr);
return Math.min(v2, ...maxArr);
}
function ratio(a2, b2, y2) {
return b2 * y2 / a2;
}
function isBetween$1(value, min2, max2) {
return min2 <= value && value <= max2;
}
const EVENT_HEIGHT = 22;
const TOTAL_WIDTH = 100;
function forEachMatrix3d(matrices, iteratee) {
matrices.forEach((matrix) => {
matrix.forEach((row) => {
row.forEach((value, index) => {
iteratee(value, index);
});
});
});
}
function isWithinHeight(containerHeight, eventHeight) {
return ({ top }) => containerHeight >= top * eventHeight;
}
function isExceededHeight(containerHeight, eventHeight) {
return ({ top }) => containerHeight < top * eventHeight;
}
function getExceedCount(uiModel, containerHeight, eventHeight) {
return uiModel.filter(isExceededHeight(containerHeight, eventHeight)).length;
}
const getWeekendCount = (row) => row.filter((cell) => isWeekend(cell.getDay())).length;
function getGridWidthAndLeftPercentValues(row, narrowWeekend, totalWidth) {
const weekendCount = getWeekendCount(row);
const gridCellCount = row.length;
const isAllWeekend = weekendCount === gridCellCount;
const widthPerDay = totalWidth / (narrowWeekend && !isAllWeekend ? gridCellCount * 2 - weekendCount : gridCellCount);
const widthList = row.map((cell) => {
const day = cell.getDay();
if (!narrowWeekend || isAllWeekend) {
return widthPerDay;
}
return isWeekend(day) ? widthPerDay : widthPerDay * 2;
});
const leftList = widthList.reduce((acc, _2, index) => index ? [...acc, acc[index - 1] + widthList[index - 1]] : [0], []);
return {
widthList,
leftList
};
}
function getWidth(widthList, start, end) {
return widthList.reduce((acc, width, index) => {
if (start <= index && index <= end) {
return acc + width;
}
return acc;
}, 0);
}
const isInGrid = (gridDate) => {
return (uiModel) => {
const eventStart = toStartOfDay(uiModel.getStarts());
const eventEnd = toStartOfDay(uiModel.getEnds());
return eventStart <= gridDate && gridDate <= eventEnd;
};
};
function getGridDateIndex(date2, row) {
return row.findIndex((cell) => date2 >= toStartOfDay(cell) && date2 <= toEndOfDay(cell));
}
const getLeftAndWidth = (startIndex, endIndex, row, narrowWeekend) => {
const { widthList } = getGridWidthAndLeftPercentValues(row, narrowWeekend, TOTAL_WIDTH);
return {
left: !startIndex ? 0 : getWidth(widthList, 0, startIndex - 1),
width: getWidth(widthList, startIndex != null ? startIndex : 0, endIndex < 0 ? row.length - 1 : endIndex)
};
};
const getEventLeftAndWidth = (start, end, row, narrowWeekend) => {
const { widthList } = getGridWidthAndLeftPercentValues(row, narrowWeekend, TOTAL_WIDTH);
let gridStartIndex = 0;
let gridEndIndex = row.length - 1;
row.forEach((cell, index) => {
if (cell <= start) {
gridStartIndex = index;
}
if (cell <= end) {
gridEndIndex = index;
}
});
return {
width: getWidth(widthList, gridStartIndex, gridEndIndex),
left: !gridStartIndex ? 0 : getWidth(widthList, 0, gridStartIndex - 1)
};
};
function getEventUIModelWithPosition(uiModel, row, narrowWeekend = false) {
const modelStart = uiModel.getStarts();
const modelEnd = uiModel.getEnds();
const { width, left } = getEventLeftAndWidth(modelStart, modelEnd, row, narrowWeekend);
uiModel.width = width;
uiModel.left = left;
return uiModel;
}
function getRenderedEventUIModels(row, calendarData, narrowWeekend) {
const { idsOfDay } = calendarData;
const eventUIModels = findByDateRange$1(calendarData, {
start: row[0],
end: toEndOfDay(row[row.length - 1])
});
const idEventModelMap = [];
forEachMatrix3d(eventUIModels, (uiModel) => {
const cid = uiModel.model.cid();
idEventModelMap[cid] = getEventUIModelWithPosition(uiModel, row, narrowWeekend);
});
const gridDateEventModelMap = Object.keys(idsOfDay).reduce((acc, ymd) => {
const ids = idsOfDay[ymd];
acc[ymd] = ids.map((cid) => idEventModelMap[cid]).filter((vm) => !!vm);
return acc;
}, {});
return {
uiModels: Object.values(idEventModelMap),
gridDateEventModelMap
};
}
const getDayGridEventModels = (eventModels, row, narrowWeekend = false) => {
forEachMatrix3d(eventModels, (uiModel) => {
const modelStart = uiModel.getStarts();
const modelEnd = uiModel.getEnds();
const { width, left } = getEventLeftAndWidth(modelStart, modelEnd, row, narrowWeekend);
uiModel.width = width;
uiModel.left = left;
uiModel.top += 1;
});
return flattenMatrix3d(eventModels);
};
const getModels = (models) => models.filter((model) => !!model);
function flattenMatrix3d(matrices) {
return matrices.flatMap((matrix) => matrix.flatMap((models) => getModels(models)));
}
const getTimeGridEventModels = (eventMatrix) => Array.from(new Set(Object.values(eventMatrix).reduce((result, matrix3d) => result.concat(...flattenMatrix3d(matrix3d)), [])));
const getWeekViewEvents = (row, calendarData, {
narrowWeekend,
hourStart,
hourEnd,
weekStartDate,
weekEndDate
}) => {
const panels = [
{
name: "milestone",
type: "daygrid",
show: true
},
{
name: "task",
type: "daygrid",
show: true
},
{
name: "allday",
type: "daygrid",
show: true
},
{
name: "time",
type: "timegrid",
show: true
}
];
const eventModels = findByDateRange(calendarData, {
start: weekStartDate,
end: weekEndDate,
panels,
andFilters: [],
options: {
hourStart,
hourEnd
}
});
return Object.keys(eventModels).reduce((acc, cur) => {
const events = eventModels[cur];
return __spreadProps(__spreadValues({}, acc), {
[cur]: Array.isArray(events) ? getDayGridEventModels(events, row, narrowWeekend) : getTimeGridEventModels(events)
});
}, {
milestone: [],
allday: [],
task: [],
time: []
});
};
function createDateMatrixOfMonth(renderTargetDate, {
workweek = false,
visibleWeeksCount = 0,
startDayOfWeek = 0,
isAlways6Weeks = true
}) {
const targetDate = new TZDate(renderTargetDate);
const shouldApplyVisibleWeeksCount = visibleWeeksCount > 0;
const baseDate = shouldApplyVisibleWeeksCount ? targetDate : toStartOfMonth(targetDate);
const firstDateOfMatrix = subtractDate(baseDate, baseDate.getDay() - startDayOfWeek + (baseDate.getDay() < startDayOfWeek ? WEEK_DAYS : 0));
const dayOfFirstDateOfMatrix = firstDateOfMatrix.getDay();
const totalDatesCountOfMonth = toEndOfMonth(targetDate).getDate();
const initialDifference = getDateDifference(firstDateOfMatrix, baseDate);
const totalDatesOfMatrix = totalDatesCountOfMonth + Math.abs(initialDifference);
let totalWeeksOfMatrix = DEFAULT_VISIBLE_WEEKS;
if (shouldApplyVisibleWeeksCount) {
totalWeeksOfMatrix = visibleWeeksCount;
} else if (isAlways6Weeks === false) {
totalWeeksOfMatrix = Math.ceil(totalDatesOfMatrix / WEEK_DAYS);
}
return range_1(0, totalWeeksOfMatrix).map((weekIndex) => range_1(0, WEEK_DAYS).reduce((weekRow, dayOfWeek) => {
const steps = weekIndex * WEEK_DAYS + dayOfWeek;
const currentDay = (steps + dayOfFirstDateOfMatrix) % WEEK_DAYS;
if (!workweek || workweek && !isWeekend(currentDay)) {
const date2 = addDate(firstDateOfMatrix, steps);
weekRow.push(date2);
}
return weekRow;
}, []));
}
function getWeekDates(renderDate, { startDayOfWeek = Day$2.SUN, workweek }) {
const now = toStartOfDay(renderDate);
const nowDay = now.getDay();
const prevDateCount = nowDay - startDayOfWeek;
const weekDayList = prevDateCount >= 0 ? range_1(-prevDateCount, WEEK_DAYS - prevDateCount) : range_1(-7 - prevDateCount, -prevDateCount);
return weekDayList.reduce((acc, day) => {
const date2 = addDate(now, day);
if (workweek && isWeekend(date2.getDay())) {
return acc;
}
acc.push(date2);
return acc;
}, []);
}
function getColumnsData(datesOfWeek, narrowWeekend = false) {
const datesCount = datesOfWeek.length;
const shouldApplyNarrowWeekend = datesCount > 5 && narrowWeekend;
const defaultWidthByColumns = shouldApplyNarrowWeekend ? 100 / (datesCount - 1) : 100 / datesCount;
return datesOfWeek.map((date2) => {
const width = shouldApplyNarrowWeekend && isWeekend(date2.getDay()) ? defaultWidthByColumns / 2 : defaultWidthByColumns;
return {
date: date2,
width
};
}).reduce((result, currentDateAndWidth, index) => {
const prev = result[index - 1];
result.push(__spreadProps(__spreadValues({}, currentDateAndWidth), {
left: index === 0 ? 0 : prev.left + prev.width
}));
return result;
}, []);
}
function createTimeGridData(datesOfWeek, options) {
var _a;
const columns = getColumnsData(datesOfWeek, (_a = options.narrowWeekend) != null ? _a : false);
const steps = (options.hourEnd - options.hourStart) * 2;
const baseHeight = 100 / steps;
const rows = range_1(steps).map((step, index) => {
const isOdd = index % 2 === 1;
const hour = options.hourStart + Math.floor(step / 2);
const startTime = `${hour}:${isOdd ? "30" : "00"}`.padStart(5, "0");
const endTime = (isOdd ? `${hour + 1}:00` : `${hour}:30`).padStart(5, "0");
return {
top: baseHeight * index,
height: baseHeight,
startTime,
endTime
};
});
return {
columns,
rows
};
}
function getRelativeMousePosition({ clientX, clientY }, { left, top, clientLeft, clientTop }) {
return [clientX - left - clientLeft, clientY - top - clientTop];
}
function getIndexFromPosition(arrayLength, maxRange, currentPosition) {
const calculatedIndex = Math.floor(ratio(maxRange, arrayLength, currentPosition));
return limit(calculatedIndex, [0], [arrayLength - 1]);
}
function createGridPositionFinder({
rowsCount,
columnsCount,
container,
narrowWeekend = false,
startDayOfWeek = Day$2.SUN
}) {
if (isNil(container)) {
return () => null;
}
const dayRange = range_1(startDayOfWeek, startDayOfWeek + columnsCount).map((day) => day % WEEK_DAYS);
const narrowColumnCount = narrowWeekend ? dayRange.filter((day) => isWeekend(day)).length : 0;
return function gridPositionFinder(mousePosition) {
const {
left: containerLeft,
top: containerTop,
width: containerWidth,
height: containerHeight
} = container.getBoundingClientRect();
const [left, top] = getRelativeMousePosition(mousePosition, {
left: containerLeft,
top: containerTop,
clientLeft: container.clientLeft,
clientTop: container.clientTop
});
if (left < 0 || top < 0 || left > containerWidth || top > containerHeight) {
return null;
}
const unitWidth = narrowWeekend ? containerWidth / (columnsCount - narrowColumnCount + 1) : containerWidth / columnsCount;
const columnWidthList = dayRange.map((dayOfWeek) => narrowWeekend && isWeekend(dayOfWeek) ? unitWidth / 2 : unitWidth);
const columnLeftList = [];
columnWidthList.forEach((width, index) => {
if (index === 0) {
columnLeftList.push(0);
} else {
columnLeftList.push(columnLeftList[index - 1] + columnWidthList[index - 1]);
}
});
const columnIndex = findLastIndex(columnLeftList, (columnLeft) => left >= columnLeft);
return {
columnIndex,
rowIndex: getIndexFromPosition(rowsCount, containerHeight, top)
};
};
}
function commonGridSelectionSelector(theme) {
return theme.common.gridSelection;
}
function GridSelection$1({ type, gridSelectionData, weekDates, narrowWeekend }) {
const { backgroundColor, border } = useTheme(commonGridSelectionSelector);
const { startCellIndex, endCellIndex } = gridSelectionData;
const { left, width } = getLeftAndWidth(Math.min(startCellIndex, endCellIndex), Math.max(startCellIndex, endCellIndex), weekDates, narrowWeekend);
const style = {
left: toPercent(left),
width: toPercent(width),
height: toPercent(100),
backgroundColor,
border
};
return width > 0 ? /* @__PURE__ */ h$3("div", {
className: cls(type, "grid-selection"),
style
}) : null;
}
function createSortedGridSelection(initPos, currentPos, isReversed) {
return {
startColumnIndex: isReversed ? currentPos.columnIndex : initPos.columnIndex,
startRowIndex: isReversed ? currentPos.rowIndex : initPos.rowIndex,
endColumnIndex: isReversed ? initPos.columnIndex : currentPos.columnIndex,
endRowIndex: isReversed ? initPos.rowIndex : currentPos.rowIndex
};
}
function calculateTimeGridSelectionByCurrentIndex(timeGridSelection, columnIndex, maxRowIndex) {
if (isNil(timeGridSelection)) {
return null;
}
const { startColumnIndex, endColumnIndex, endRowIndex, startRowIndex } = timeGridSelection;
if (!isBetween$1(columnIndex, startColumnIndex, endColumnIndex)) {
return null;
}
const hasMultipleColumns = startColumnIndex !== endColumnIndex;
const isStartingColumn = columnIndex === startColumnIndex;
const resultGridSelection = {
startRowIndex,
endRowIndex,
isSelectingMultipleColumns: hasMultipleColumns,
isStartingColumn
};
if (startColumnIndex < columnIndex && columnIndex < endColumnIndex) {
resultGridSelection.startRowIndex = 0;
resultGridSelection.endRowIndex = maxRowIndex;
} else if (startColumnIndex !== endColumnIndex) {
if (startColumnIndex === columnIndex) {
resultGridSelection.endRowIndex = maxRowIndex;
} else if (endColumnIndex === columnIndex) {
resultGridSelection.startRowIndex = 0;
}
}
return resultGridSelection;
}
const timeGridSelectionHelper = {
sortSelection: (initPos, currentPos) => {
const isReversed = initPos.columnIndex > currentPos.columnIndex || initPos.columnIndex === currentPos.columnIndex && initPos.rowIndex > currentPos.rowIndex;
return createSortedGridSelection(initPos, currentPos, isReversed);
},
getDateFromCollection: (dateCollection, gridSelection) => {
const timeGridData = dateCollection;
const startDate = setTimeStrToDate(timeGridData.columns[gridSelection.startColumnIndex].date, timeGridData.rows[gridSelection.startRowIndex].startTime);
const endDate = setTimeStrToDate(timeGridData.columns[gridSelection.endColumnIndex].date, timeGridData.rows[gridSelection.endRowIndex].endTime);
return [startDate, endDate];
},
calculateSelection: calculateTimeGridSelectionByCurrentIndex
};
function calculateDayGridMonthSelectionByCurrentIndex(gridSelection, currentIndex, weekLength) {
if (!(isPresent(gridSelection) && isPresent(currentIndex) && isPresent(weekLength))) {
return null;
}
const { startRowIndex, startColumnIndex, endRowIndex, endColumnIndex } = gridSelection;
if (!isBetween$1(currentIndex, Math.min(startRowIndex, endRowIndex), Math.max(startRowIndex, endRowIndex))) {
return null;
}
let startCellIndex = startColumnIndex;
let endCellIndex = endColumnIndex;
if (startRowIndex < currentIndex) {
startCellIndex = 0;
}
if (endRowIndex > currentIndex) {
endCellIndex = weekLength - 1;
}
return { startCellIndex, endCellIndex };
}
const dayGridMonthSelectionHelper = {
sortSelection: (initPos, currentPos) => {
const isReversed = initPos.rowIndex > currentPos.rowIndex || initPos.rowIndex === currentPos.rowIndex && initPos.columnIndex > currentPos.columnIndex;
return createSortedGridSelection(initPos, currentPos, isReversed);
},
getDateFromCollection: (dateCollection, gridSelection) => {
const dateMatrix = dateCollection;
return [
dateMatrix[gridSelection.startRowIndex][gridSelection.startColumnIndex],
dateMatrix[gridSelection.endRowIndex][gridSelection.endColumnIndex]
];
},
calculateSelection: calculateDayGridMonthSelectionByCurrentIndex
};
function calculateAlldayGridRowSelectionByCurrentIndex(gridSelection) {
return isPresent(gridSelection) ? {
startCellIndex: gridSelection.startColumnIndex,
endCellIndex: gridSelection.endColumnIndex
} : null;
}
const alldayGridRowSelectionHelper = {
sortSelection: (initPos, currentPos) => {
const isReversed = initPos.columnIndex > currentPos.columnIndex;
return createSortedGridSelection(initPos, currentPos, isReversed);
},
getDateFromCollection: (dateCollection, gridSelection) => {
const weekDates = dateCollection;
return [weekDates[gridSelection.startColumnIndex], weekDates[gridSelection.endColumnIndex]];
},
calculateSelection: calculateAlldayGridRowSelectionByCurrentIndex
};
function dayGridWeekSelectionSelector(state) {
return alldayGridRowSelectionHelper.calculateSelection(state.gridSelection.dayGridWeek);
}
function AlldayGridSelection({ weekDates, narrowWeekend }) {
const calculatedGridSelection = useStore(dayGridWeekSelectionSelector);
if (isNil(calculatedGridSelection)) {
return null;
}
return /* @__PURE__ */ h$3(GridSelection$1, {
type: "allday",
gridSelectionData: calculatedGridSelection,
weekDates,
narrowWeekend
});
}
function S(n2, t2) {
for (var e2 in t2)
n2[e2] = t2[e2];
return n2;
}
function C(n2, t2) {
for (var e2 in n2)
if (e2 !== "__source" && !(e2 in t2))
return true;
for (var r2 in t2)
if (r2 !== "__source" && n2[r2] !== t2[r2])
return true;
return false;
}
function E(n2) {
this.props = n2;
}
function g$1(n2, t2) {
function e2(n3) {
var e3 = this.props.ref, r3 = e3 == n3.ref;
return !r3 && e3 && (e3.call ? e3(null) : e3.current = null), C(this.props, n3);
}
function r2(t3) {
return this.shouldComponentUpdate = e2, h$3(n2, t3);
}
return r2.displayName = "Memo(" + (n2.displayName || n2.name) + ")", r2.prototype.isReactComponent = true, r2.__f = true, r2;
}
(E.prototype = new d$3()).isPureReactComponent = true, E.prototype.shouldComponentUpdate = function(n2, t2) {
return C(this.props, n2) || C(this.state, t2);
};
var w = l$3.__b;
l$3.__b = function(n2) {
n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), w && w(n2);
};
var x$1 = typeof Symbol != "undefined" && Symbol.for && Symbol.for("react.forward_ref") || 3911;
function R(n2) {
function t2(t3) {
var e2 = S({}, t3);
return delete e2.ref, n2(e2, t3.ref || null);
}
return t2.$$typeof = x$1, t2.render = t2, t2.prototype.isReactComponent = t2.__f = true, t2.displayName = "ForwardRef(" + (n2.displayName || n2.name) + ")", t2;
}
var A = l$3.__e;
l$3.__e = function(n2, t2, e2, r2) {
if (n2.then) {
for (var u2, o2 = t2; o2 = o2.__; )
if ((u2 = o2.__c) && u2.__c)
return t2.__e == null && (t2.__e = e2.__e, t2.__k = e2.__k), u2.__c(n2, t2);
}
A(n2, t2, e2, r2);
};
var O = l$3.unmount;
function T() {
this.__u = 0, this.t = null, this.__b = null;
}
function L(n2) {
var t2 = n2.__.__c;
return t2 && t2.__a && t2.__a(n2);
}
function D() {
this.u = null, this.o = null;
}
l$3.unmount = function(n2) {
var t2 = n2.__c;
t2 && t2.__R && t2.__R(), t2 && n2.__h === true && (n2.type = null), O && O(n2);
}, (T.prototype = new d$3()).__c = function(n2, t2) {
var e2 = t2.__c, r2 = this;
r2.t == null && (r2.t = []), r2.t.push(e2);
var u2 = L(r2.__v), o2 = false, i2 = function() {
o2 || (o2 = true, e2.__R = null, u2 ? u2(l2) : l2());
};
e2.__R = i2;
var l2 = function() {
if (!--r2.__u) {
if (r2.state.__a) {
var n3 = r2.state.__a;
r2.__v.__k[0] = function n4(t4, e3, r3) {
return t4 && (t4.__v = null, t4.__k = t4.__k && t4.__k.map(function(t5) {
return n4(t5, e3, r3);
}), t4.__c && t4.__c.__P === e3 && (t4.__e && r3.insertBefore(t4.__e, t4.__d), t4.__c.__e = true, t4.__c.__P = r3)), t4;
}(n3, n3.__c.__P, n3.__c.__O);
}
var t3;
for (r2.setState({ __a: r2.__b = null }); t3 = r2.t.pop(); )
t3.forceUpdate();
}
}, f2 = t2.__h === true;
r2.__u++ || f2 || r2.setState({ __a: r2.__b = r2.__v.__k[0] }), n2.then(i2, i2);
}, T.prototype.componentWillUnmount = function() {
this.t = [];
}, T.prototype.render = function(n2, t2) {
if (this.__b) {
if (this.__v.__k) {
var e2 = document.createElement("div"), r2 = this.__v.__k[0].__c;
this.__v.__k[0] = function n3(t3, e3, r3) {
return t3 && (t3.__c && t3.__c.__H && (t3.__c.__H.__.forEach(function(n4) {
typeof n4.__c == "function" && n4.__c();
}), t3.__c.__H = null), (t3 = S({}, t3)).__c != null && (t3.__c.__P === r3 && (t3.__c.__P = e3), t3.__c = null), t3.__k = t3.__k && t3.__k.map(function(t4) {
return n3(t4, e3, r3);
})), t3;
}(this.__b, e2, r2.__O = r2.__P);
}
this.__b = null;
}
var u2 = t2.__a && h$3(p$3, null, n2.fallback);
return u2 && (u2.__h = null), [h$3(p$3, null, t2.__a ? null : n2.children), u2];
};
var F = function(n2, t2, e2) {
if (++e2[1] === e2[0] && n2.o.delete(t2), n2.props.revealOrder && (n2.props.revealOrder[0] !== "t" || !n2.o.size))
for (e2 = n2.u; e2; ) {
for (; e2.length > 3; )
e2.pop()();
if (e2[1] < e2[0])
break;
n2.u = e2 = e2[2];
}
};
function I(n2) {
return this.getChildContext = function() {
return n2.context;
}, n2.children;
}
function M(n2) {
var t2 = this, e2 = n2.i;
t2.componentWillUnmount = function() {
P$2(null, t2.l), t2.l = null, t2.i = null;
}, t2.i && t2.i !== e2 && t2.componentWillUnmount(), n2.__v ? (t2.l || (t2.i = e2, t2.l = { nodeType: 1, parentNode: e2, childNodes: [], appendChild: function(n3) {
this.childNodes.push(n3), t2.i.appendChild(n3);
}, insertBefore: function(n3, e3) {
this.childNodes.push(n3), t2.i.appendChild(n3);
}, removeChild: function(n3) {
this.childNodes.splice(this.childNodes.indexOf(n3) >>> 1, 1), t2.i.removeChild(n3);
} }), P$2(h$3(I, { context: t2.context }, n2.__v), t2.l)) : t2.l && t2.componentWillUnmount();
}
function V(n2, t2) {
var e2 = h$3(M, { __v: n2, i: t2 });
return e2.containerInfo = t2, e2;
}
(D.prototype = new d$3()).__a = function(n2) {
var t2 = this, e2 = L(t2.__v), r2 = t2.o.get(n2);
return r2[0]++, function(u2) {
var o2 = function() {
t2.props.revealOrder ? (r2.push(u2), F(t2, n2, r2)) : u2();
};
e2 ? e2(o2) : o2();
};
}, D.prototype.render = function(n2) {
this.u = null, this.o = /* @__PURE__ */ new Map();
var t2 = x$3(n2.children);
n2.revealOrder && n2.revealOrder[0] === "b" && t2.reverse();
for (var e2 = t2.length; e2--; )
this.o.set(t2[e2], this.u = [1, 0, this.u]);
return n2.children;
}, D.prototype.componentDidUpdate = D.prototype.componentDidMount = function() {
var n2 = this;
this.o.forEach(function(t2, e2) {
F(n2, e2, t2);
});
};
var W = typeof Symbol != "undefined" && Symbol.for && Symbol.for("react.element") || 60103, P = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|shape|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, $ = typeof document != "undefined", j = function(n2) {
return (typeof Symbol != "undefined" && typeof Symbol() == "symbol" ? /fil|che|rad/i : /fil|che|ra/i).test(n2);
};
d$3.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(n2) {
Object.defineProperty(d$3.prototype, n2, { configurable: true, get: function() {
return this["UNSAFE_" + n2];
}, set: function(t2) {
Object.defineProperty(this, n2, { configurable: true, writable: true, value: t2 });
} });
});
var H = l$3.event;
function Z() {
}
function Y() {
return this.cancelBubble;
}
function q() {
return this.defaultPrevented;
}
l$3.event = function(n2) {
return H && (n2 = H(n2)), n2.persist = Z, n2.isPropagationStopped = Y, n2.isDefaultPrevented = q, n2.nativeEvent = n2;
};
var J = { configurable: true, get: function() {
return this.class;
} }, K = l$3.vnode;
l$3.vnode = function(n2) {
var t2 = n2.type, e2 = n2.props, r2 = e2;
if (typeof t2 == "string") {
var u2 = t2.indexOf("-") === -1;
for (var o2 in r2 = {}, e2) {
var i2 = e2[o2];
$ && o2 === "children" && t2 === "noscript" || o2 === "value" && "defaultValue" in e2 && i2 == null || (o2 === "defaultValue" && "value" in e2 && e2.value == null ? o2 = "value" : o2 === "download" && i2 === true ? i2 = "" : /ondoubleclick/i.test(o2) ? o2 = "ondblclick" : /^onchange(textarea|input)/i.test(o2 + t2) && !j(e2.type) ? o2 = "oninput" : /^onfocus$/i.test(o2) ? o2 = "onfocusin" : /^onblur$/i.test(o2) ? o2 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(o2) ? o2 = o2.toLowerCase() : u2 && P.test(o2) ? o2 = o2.replace(/[A-Z0-9]/, "-$&").toLowerCase() : i2 === null && (i2 = void 0), /^oninput$/i.test(o2) && (o2 = o2.toLowerCase(), r2[o2] && (o2 = "oninputCapture")), r2[o2] = i2);
}
t2 == "select" && r2.multiple && Array.isArray(r2.value) && (r2.value = x$3(e2.children).forEach(function(n3) {
n3.props.selected = r2.value.indexOf(n3.props.value) != -1;
})), t2 == "select" && r2.defaultValue != null && (r2.value = x$3(e2.children).forEach(function(n3) {
n3.props.selected = r2.multiple ? r2.defaultValue.indexOf(n3.props.value) != -1 : r2.defaultValue == n3.props.value;
})), n2.props = r2, e2.class != e2.className && (J.enumerable = "className" in e2, e2.className != null && (r2.class = e2.className), Object.defineProperty(r2, "className", J));
}
n2.$$typeof = W, K && K(n2);
};
var Q = l$3.__r;
l$3.__r = function(n2) {
Q && Q(n2), n2.__c;
};
function un(n2) {
return !!n2.__k && (P$2(null, n2), true);
}
function ExceedCount({ index, exceedCount, isClicked, onClickExceedCount }) {
const clickExceedCount = () => onClickExceedCount(index);
const style = { display: isClicked ? "none" : "" };
return exceedCount && !isClicked ? /* @__PURE__ */ h$3("span", {
className: cls("weekday-exceed-in-week"),
onClick: clickExceedCount,
style
}, /* @__PURE__ */ h$3(Template, {
template: "weekGridFooterExceed",
param: exceedCount
})) : null;
}
function CollapseButton({ isClicked, isClickedIndex, onClickCollapseButton }) {
return isClicked && isClickedIndex ? /* @__PURE__ */ h$3("span", {
className: cls("weekday-exceed-in-week"),
onClick: onClickCollapseButton
}, /* @__PURE__ */ h$3(Template, {
template: "collapseBtnTitle"
})) : null;
}
function GridCell$1({
width,
left,
index,
exceedCount,
isClicked,
onClickExceedCount,
isClickedIndex,
onClickCollapseButton,
isLastCell
}) {
const { borderRight, backgroundColor } = useTheme(T$1((theme) => theme.week.dayGrid, []));
const style = {
width,
left,
borderRight: isLastCell ? "none" : borderRight,
backgroundColor
};
return /* @__PURE__ */ h$3("div", {
className: cls("panel-grid"),
style
}, /* @__PURE__ */ h$3(ExceedCount, {
index,
exceedCount,
isClicked,
onClickExceedCount
}), /* @__PURE__ */ h$3(CollapseButton, {
isClickedIndex,
isClicked,
onClickCollapseButton
}));
}
const GridCells = g$1(function GridCells2({
uiModels,
weekDates,
narrowWeekend,
height,
clickedIndex,
isClickedCount,
onClickExceedCount,
onClickCollapseButton
}) {
const eventTopMargin = 2;
const { widthList, leftList } = getGridWidthAndLeftPercentValues(weekDates, narrowWeekend, TOTAL_WIDTH);
const lastCellIndex = weekDates.length - 1;
return /* @__PURE__ */ h$3(p$3, null, weekDates.map((cell, index) => {
const width = toPercent(widthList[index]);
const left = toPercent(leftList[index]);
const uiModelsInCell = uiModels.filter(isInGrid(cell));
const exceedCount = getExceedCount(uiModelsInCell, height, EVENT_HEIGHT + eventTopMargin);
const isClickedIndex = index === clickedIndex;
const isLastCell = index === lastCellIndex;
return /* @__PURE__ */ h$3(GridCell$1, {
key: `panel-grid-${cell.getDate()}`,
width,
left,
index,
exceedCount,
isClicked: isClickedCount,
onClickExceedCount,
isClickedIndex,
onClickCollapseButton,
isLastCell
});
}));
});
function HorizontalEventResizeIcon({ onMouseDown }) {
return /* @__PURE__ */ h$3("span", {
className: `${cls("weekday-resize-handle")} ${cls("handle-y")}`,
onMouseDown,
"data-testid": "horizontal-event-resize-icon"
}, /* @__PURE__ */ h$3("i", {
className: `${cls("icon")} ${cls("ic-handle-y")}`
}));
}
const LayoutContainerContext = B$1(null);
const LayoutContainerProvider = LayoutContainerContext.Provider;
const useLayoutContainer = () => {
const ref2 = q$2(LayoutContainerContext);
if (isUndefined_1(ref2)) {
throw new Error("LayoutContainerProvider is not found");
}
return ref2;
};
const DRAGGING_TYPE_CONSTANTS = {
panelResizer: "panelResizer"
};
const DRAGGING_TYPE_CREATORS = {
resizeEvent: (area, id) => `event/${area}/resize/${id}`,
moveEvent: (area, id) => `event/${area}/move/${id}`,
gridSelection: (type) => `gridSelection/${type}`
};
function useCalendarById(calendarId) {
return useStore(T$1((state) => state.calendar.calendars.find((cal) => cal.id === calendarId), [calendarId]));
}
function useCalendarColor(model) {
var _a;
const calendar = useCalendarById((_a = model == null ? void 0 : model.calendarId) != null ? _a : null);
return F$2(() => ({
color: calendar == null ? void 0 : calendar.color,
borderColor: calendar == null ? void 0 : calendar.borderColor,
backgroundColor: calendar == null ? void 0 : calendar.backgroundColor,
dragBackgroundColor: calendar == null ? void 0 : calendar.dragBackgroundColor
}), [calendar]);
}
var KEY = /* @__PURE__ */ ((KEY2) => {
KEY2["ESCAPE"] = "Escape";
return KEY2;
})(KEY || {});
const KEYCODE = {
["Escape"]: 27
};
const MINIMUM_DRAG_MOUSE_DISTANCE = 3;
function useTransientUpdate(selector, subscriber) {
const store = useInternalStore();
const selectorRef = s$2(selector);
const subscriberRef = s$2(subscriber);
_$2(() => {
selectorRef.current = selector;
subscriberRef.current = subscriber;
}, [selector, subscriber]);
_$2(() => store.subscribe((slice) => subscriberRef.current(slice), (state) => selectorRef.current(state)), [selector, store]);
}
function isKeyPressed(e2, key) {
return e2.key ? e2.key === key : e2.keyCode === KEYCODE[key];
}
function isLeftClick(buttonNum) {
return buttonNum === 0;
}
function isMouseMoved(initX, initY, x2, y2) {
return Math.abs(initX - x2) >= MINIMUM_DRAG_MOUSE_DISTANCE || Math.abs(initY - y2) >= MINIMUM_DRAG_MOUSE_DISTANCE;
}
function useDrag(draggingItemType, { onInit, onDragStart, onDrag, onMouseUp, onPressESCKey } = {}) {
const { initDrag, setDragging, cancelDrag, reset } = useDispatch("dnd");
const store = useInternalStore();
const dndSliceRef = s$2(store.getState().dnd);
useTransientUpdate(dndSelector, (dndState) => {
dndSliceRef.current = dndState;
});
const [isStarted, setStarted] = y$1(false);
const handleMouseMoveRef = s$2(null);
const handleMouseUpRef = s$2(null);
const handleKeyDownRef = s$2(null);
const handleMouseDown = T$1((e2) => {
if (!isLeftClick(e2.button)) {
return;
}
if (e2.currentTarget) {
e2.currentTarget.ondragstart = function() {
return false;
};
}
e2.preventDefault();
setStarted(true);
initDrag({
draggingItemType,
initX: e2.clientX,
initY: e2.clientY
});
onInit == null ? void 0 : onInit(e2, dndSliceRef.current);
}, [onInit, draggingItemType, initDrag]);
const handleMouseMove = T$1((e2) => {
const {
initX,
initY,
draggingState,
draggingItemType: currentDraggingItemType
} = dndSliceRef.current;
if (currentDraggingItemType !== draggingItemType) {
setStarted(false);
reset();
return;
}
if (isPresent(initX) && isPresent(initY) && !isMouseMoved(initX, initY, e2.clientX, e2.clientY)) {
return;
}
if (draggingState <= DraggingState.INIT) {
setDragging({ x: e2.clientX, y: e2.clientY });
onDragStart == null ? void 0 : onDragStart(e2, dndSliceRef.current);
return;
}
setDragging({ x: e2.clientX, y: e2.clientY });
onDrag == null ? void 0 : onDrag(e2, dndSliceRef.current);
}, [draggingItemType, onDrag, onDragStart, setDragging, reset]);
const handleMouseUp = T$1((e2) => {
e2.stopPropagation();
if (isStarted) {
onMouseUp == null ? void 0 : onMouseUp(e2, dndSliceRef.current);
setStarted(false);
reset();
}
}, [isStarted, onMouseUp, reset]);
const handleKeyDown = T$1((e2) => {
if (isKeyPressed(e2, KEY.ESCAPE)) {
setStarted(false);
cancelDrag();
onPressESCKey == null ? void 0 : onPressESCKey(e2, dndSliceRef.current);
}
}, [onPressESCKey, cancelDrag]);
_$2(() => {
handleMouseMoveRef.current = handleMouseMove;
handleMouseUpRef.current = handleMouseUp;
handleKeyDownRef.current = handleKeyDown;
}, [handleKeyDown, handleMouseMove, handleMouseUp]);
_$2(() => {
const wrappedHandleMouseMove = (e2) => {
var _a;
return (_a = handleMouseMoveRef.current) == null ? void 0 : _a.call(handleMouseMoveRef, e2);
};
const wrappedHandleMouseUp = (e2) => {
var _a;
return (_a = handleMouseUpRef.current) == null ? void 0 : _a.call(handleMouseUpRef, e2);
};
const wrappedHandleKeyDown = (e2) => {
var _a;
return (_a = handleKeyDownRef.current) == null ? void 0 : _a.call(handleKeyDownRef, e2);
};
if (isStarted) {
document.addEventListener("mousemove", wrappedHandleMouseMove);
document.addEventListener("mouseup", wrappedHandleMouseUp);
document.addEventListener("keydown", wrappedHandleKeyDown);
return () => {
document.removeEventListener("mousemove", wrappedHandleMouseMove);
document.removeEventListener("mouseup", wrappedHandleMouseUp);
document.removeEventListener("keydown", wrappedHandleKeyDown);
};
}
return noop;
}, [isStarted, reset]);
return handleMouseDown;
}
function passConditionalProp(condition, prop) {
return condition ? prop : void 0;
}
function getMargins(flat) {
return {
vertical: flat ? 5 : 2,
horizontal: 8
};
}
function getBorderRadius(exceedLeft, exceedRight) {
const leftBorderRadius = exceedLeft ? 0 : "2px";
const rightBorderRadius = exceedRight ? 0 : "2px";
return `${leftBorderRadius} ${rightBorderRadius} ${rightBorderRadius} ${leftBorderRadius}`;
}
function getEventItemStyle({
uiModel,
flat,
eventHeight,
isDraggingTarget,
calendarColor
}) {
const { exceedLeft, exceedRight } = uiModel;
const { color, backgroundColor, dragBackgroundColor, borderColor } = getEventColors(uiModel, calendarColor);
const defaultItemStyle = {
color,
backgroundColor: isDraggingTarget ? dragBackgroundColor : backgroundColor,
borderLeft: exceedLeft ? "none" : `3px solid ${borderColor}`,
borderRadius: getBorderRadius(exceedLeft, exceedRight),
overflow: "hidden",
height: eventHeight,
lineHeight: toPx(eventHeight),
opacity: isDraggingTarget ? 0.5 : 1
};
const margins = getMargins(flat);
return flat ? __spreadValues({
marginTop: margins.vertical
}, defaultItemStyle) : __spreadValues({
marginLeft: exceedLeft ? 0 : margins.horizontal,
marginRight: exceedRight ? 0 : margins.horizontal
}, defaultItemStyle);
}
function getContainerStyle({
flat,
uiModel,
resizingWidth,
movingLeft,
eventHeight,
headerHeight
}) {
const { top, left, width, model } = uiModel;
const margins = getMargins(flat);
const baseStyle = flat ? {} : {
width: resizingWidth || toPercent(width),
left: toPercent(movingLeft != null ? movingLeft : left),
top: (top - 1) * (eventHeight + margins.vertical) + headerHeight,
position: "absolute"
};
return Object.assign(baseStyle, model.customStyle);
}
function getTestId({ model }) {
const calendarId = model.calendarId ? `${model.calendarId}-` : "";
const id = model.id ? `${model.id}-` : "";
return `${calendarId}${id}${model.title}`;
}
const classNames$k = {
eventBody: cls("weekday-event"),
eventTitle: cls("weekday-event-title"),
eventDot: cls("weekday-event-dot"),
moveEvent: cls("dragging--move-event"),
resizeEvent: cls("dragging--resize-horizontal-event")
};
function HorizontalEvent({
flat = false,
uiModel,
eventHeight,
headerHeight,
resizingWidth = null,
movingLeft = null
}) {
const { currentView } = useStore(viewSelector);
const { useDetailPopup, isReadOnly: isReadOnlyCalendar } = useStore(optionsSelector);
const { setDraggingEventUIModel } = useDispatch("dnd");
const { showDetailPopup } = useDispatch("popup");
const layoutContainer = useLayoutContainer();
const eventBus = useEventBus();
const calendarColor = useCalendarColor(uiModel.model);
const [isDraggingTarget, setIsDraggingTarget] = y$1(false);
const eventContainerRef = s$2(null);
const { isReadOnly, id, calendarId } = uiModel.model;
const isDraggableEvent2 = !isReadOnlyCalendar && !isReadOnly && isNil(resizingWidth) && isNil(movingLeft);
const startDragEvent = (className2) => {
setDraggingEventUIModel(uiModel);
layoutContainer == null ? void 0 : layoutContainer.classList.add(className2);
};
const endDragEvent = (className2) => {
setIsDraggingTarget(false);
layoutContainer == null ? void 0 : layoutContainer.classList.remove(className2);
};
useTransientUpdate(dndSelector, ({ draggingEventUIModel, draggingState }) => {
if (draggingState === DraggingState.DRAGGING && (draggingEventUIModel == null ? void 0 : draggingEventUIModel.cid()) === uiModel.cid() && isNil(resizingWidth) && isNil(movingLeft)) {
setIsDraggingTarget(true);
} else {
setIsDraggingTarget(false);
}
});
_$2(() => {
if (isDraggableEvent2) {
eventBus.fire("afterRenderEvent", uiModel.model.toEventObject());
}
}, []);
const onResizeStart = useDrag(DRAGGING_TYPE_CREATORS.resizeEvent("dayGrid", `${uiModel.cid()}`), {
onDragStart: () => startDragEvent(classNames$k.resizeEvent),
onMouseUp: () => endDragEvent(classNames$k.resizeEvent),
onPressESCKey: () => endDragEvent(classNames$k.resizeEvent)
});
const onMoveStart = useDrag(DRAGGING_TYPE_CREATORS.moveEvent("dayGrid", `${uiModel.cid()}`), {
onDragStart: () => {
if (isDraggableEvent2) {
startDragEvent(classNames$k.moveEvent);
}
},
onMouseUp: (e2, { draggingState }) => {
endDragEvent(classNames$k.moveEvent);
const isClick = draggingState <= DraggingState.INIT;
if (isClick && useDetailPopup && eventContainerRef.current) {
showDetailPopup({
event: uiModel.model,
eventRect: eventContainerRef.current.getBoundingClientRect()
}, flat);
}
if (isClick) {
eventBus.fire("clickEvent", { event: uiModel.model.toEventObject(), nativeEvent: e2 });
}
},
onPressESCKey: () => endDragEvent(classNames$k.moveEvent)
});
const handleResizeStart = (e2) => {
e2.stopPropagation();
if (isDraggableEvent2) {
onResizeStart(e2);
}
};
const handleMoveStart = (e2) => {
e2.stopPropagation();
onMoveStart(e2);
};
const isDotEvent = !isDraggingTarget && currentView === "month" && uiModel.model.category === "time" && isSameDate(uiModel.model.start, uiModel.model.end);
const shouldHideResizeHandler = !isDraggableEvent2 || flat || isDraggingTarget || uiModel.exceedRight;
const containerStyle = getContainerStyle({
uiModel,
eventHeight,
headerHeight,
flat,
movingLeft,
resizingWidth
});
const eventItemStyle = getEventItemStyle({
uiModel,
flat,
eventHeight,
isDraggingTarget,
calendarColor
});
return /* @__PURE__ */ h$3("div", {
className: cls("weekday-event-block", {
"weekday-exceed-left": uiModel.exceedLeft,
"weekday-exceed-right": uiModel.exceedRight
}),
style: containerStyle,
"data-testid": passConditionalProp(isDraggableEvent2, getTestId(uiModel)),
"data-calendar-id": calendarId,
"data-event-id": id,
ref: eventContainerRef
}, /* @__PURE__ */ h$3("div", {
className: classNames$k.eventBody,
style: __spreadProps(__spreadValues({}, eventItemStyle), {
backgroundColor: isDotEvent ? null : eventItemStyle.backgroundColor,
borderLeft: isDotEvent ? null : eventItemStyle.borderLeft
}),
onMouseDown: handleMoveStart
}, isDotEvent ? /* @__PURE__ */ h$3("span", {
className: classNames$k.eventDot,
style: { backgroundColor: eventItemStyle.backgroundColor }
}) : null, /* @__PURE__ */ h$3("span", {
className: classNames$k.eventTitle
}, /* @__PURE__ */ h$3(Template, {
template: uiModel.model.category,
param: uiModel.model
})), !shouldHideResizeHandler ? /* @__PURE__ */ h$3(HorizontalEventResizeIcon, {
onMouseDown: handleResizeStart
}) : null));
}
function useWhen(callback, condition) {
const callbackRef = s$2(callback);
_$2(() => {
callbackRef.current = callback;
}, [callback]);
_$2(() => {
const invoke = () => callbackRef.current();
if (condition) {
invoke();
}
}, [condition]);
}
function useCurrentPointerPositionInGrid(gridPositionFinder) {
const [currentGridPos, setCurrentGridPos] = y$1(null);
useTransientUpdate(dndSelector, (dndState) => {
if (isPresent(dndState.x) && isPresent(dndState.y)) {
const gridPosition = gridPositionFinder({
clientX: dndState.x,
clientY: dndState.y
});
if (gridPosition) {
setCurrentGridPos(gridPosition);
}
}
});
const clearCurrentGridPos = T$1(() => setCurrentGridPos(null), []);
return [currentGridPos, clearCurrentGridPos];
}
const getTargetEventId = (itemType, area, behavior) => {
function isEventDraggingType(_itemType) {
return new RegExp(`^event/${area}/${behavior}/\\d+$`).test(_itemType);
}
if (isNil(itemType)) {
return null;
}
return isEventDraggingType(itemType) ? last(itemType.split("/")) : null;
};
function useDraggingEvent(area, behavior) {
const [isDraggingEnd, setIsDraggingEnd] = y$1(false);
const [isDraggingCanceled, setIsDraggingCanceled] = y$1(false);
const [draggingEvent, setDraggingEvent] = y$1(null);
useTransientUpdate(dndSelector, ({ draggingItemType, draggingEventUIModel, draggingState }) => {
const targetEventId = getTargetEventId(draggingItemType, area, behavior);
const hasMatchingTargetEvent = Number(targetEventId) === (draggingEventUIModel == null ? void 0 : draggingEventUIModel.cid());
const isIdle = draggingState === DraggingState.IDLE;
const isCanceled = draggingState === DraggingState.CANCELED;
if (isNil(draggingEvent) && hasMatchingTargetEvent) {
setDraggingEvent(draggingEventUIModel);
}
if (isPresent(draggingEvent) && (isIdle || isCanceled)) {
setIsDraggingEnd(true);
setIsDraggingCanceled(isCanceled);
}
});
const clearDraggingEvent = () => {
setDraggingEvent(null);
setIsDraggingEnd(false);
setIsDraggingCanceled(false);
};
return {
isDraggingEnd,
isDraggingCanceled,
draggingEvent,
clearDraggingEvent
};
}
function useAlldayGridRowEventMove({ rowStyleInfo, gridPositionFinder }) {
const eventBus = useEventBus();
const {
isDraggingEnd,
isDraggingCanceled,
draggingEvent: movingEvent,
clearDraggingEvent
} = useDraggingEvent("dayGrid", "move");
const startGridXRef = s$2(null);
const [currentGridPos, clearCurrentGridPos] = useCurrentPointerPositionInGrid(gridPositionFinder);
const { columnIndex } = currentGridPos != null ? currentGridPos : {};
const targetEventStartGridX = F$2(() => isNil(movingEvent) ? null : rowStyleInfo.findIndex(({ left }) => left === movingEvent.left), [rowStyleInfo, movingEvent]);
const currentMovingLeft = F$2(() => {
if (isNil(columnIndex) || isNil(startGridXRef.current) || isNil(targetEventStartGridX)) {
return null;
}
const newColumnIndex = targetEventStartGridX + columnIndex - startGridXRef.current;
return newColumnIndex < 0 ? -rowStyleInfo[-newColumnIndex].left : rowStyleInfo[newColumnIndex].left;
}, [columnIndex, rowStyleInfo, targetEventStartGridX]);
_$2(() => {
if (isNil(startGridXRef.current) && isPresent(columnIndex)) {
startGridXRef.current = columnIndex;
}
}, [columnIndex]);
useWhen(() => {
const shouldUpdate = !isDraggingCanceled && isPresent(movingEvent) && isPresent(columnIndex) && isPresent(currentMovingLeft) && columnIndex !== startGridXRef.current;
if (shouldUpdate && isPresent(startGridXRef.current)) {
const dateOffset = columnIndex - startGridXRef.current;
const newStartDate = new TZDate(movingEvent.model.getStarts());
const newEndDate = new TZDate(movingEvent.model.getEnds());
newStartDate.addDate(dateOffset);
newEndDate.addDate(dateOffset);
eventBus.fire("beforeUpdateEvent", {
event: movingEvent.model.toEventObject(),
changes: {
start: newStartDate,
end: newEndDate
}
});
}
clearDraggingEvent();
clearCurrentGridPos();
startGridXRef.current = null;
}, isDraggingEnd);
return F$2(() => ({
movingEvent,
movingLeft: currentMovingLeft
}), [currentMovingLeft, movingEvent]);
}
function MovingEventShadow$2({
rowStyleInfo,
gridPositionFinder
}) {
const { movingEvent, movingLeft } = useAlldayGridRowEventMove({
rowStyleInfo,
gridPositionFinder
});
if (isNil(movingEvent)) {
return null;
}
return /* @__PURE__ */ h$3(HorizontalEvent, {
uiModel: movingEvent,
eventHeight: EVENT_HEIGHT,
headerHeight: 0,
movingLeft
});
}
function getEventColIndex(uiModel, row) {
const start = getGridDateIndex(uiModel.getStarts(), row);
const end = getGridDateIndex(uiModel.getEnds(), row);
return { start, end };
}
function useAlldayGridRowEventResize({
weekDates,
gridColWidthMap,
gridPositionFinder
}) {
const eventBus = useEventBus();
const {
isDraggingEnd,
isDraggingCanceled,
draggingEvent: resizingEvent,
clearDraggingEvent
} = useDraggingEvent("dayGrid", "resize");
const [currentGridPos, clearCurrentGridPos] = useCurrentPointerPositionInGrid(gridPositionFinder);
const { columnIndex } = currentGridPos != null ? currentGridPos : {};
const targetEventGridIndices = F$2(() => {
if (resizingEvent) {
return getEventColIndex(resizingEvent, weekDates);
}
return { start: -1, end: -1 };
}, [weekDates, resizingEvent]);
const resizingWidth = F$2(() => {
if (targetEventGridIndices.start > -1 && isPresent(columnIndex)) {
return gridColWidthMap[targetEventGridIndices.start][columnIndex];
}
return null;
}, [columnIndex, gridColWidthMap, targetEventGridIndices.start]);
useWhen(() => {
const shouldUpdateEvent = !isDraggingCanceled && isPresent(resizingEvent) && isPresent(columnIndex) && targetEventGridIndices.start <= columnIndex && targetEventGridIndices.end !== columnIndex;
if (shouldUpdateEvent) {
const targetDate = weekDates[columnIndex];
eventBus.fire("beforeUpdateEvent", {
event: resizingEvent.model.toEventObject(),
changes: { end: targetDate }
});
}
clearCurrentGridPos();
clearDraggingEvent();
}, isDraggingEnd);
return F$2(() => ({
resizingEvent,
resizingWidth
}), [resizingWidth, resizingEvent]);
}
function ResizingEventShadow({ weekDates, gridColWidthMap, gridPositionFinder }) {
const { resizingEvent, resizingWidth } = useAlldayGridRowEventResize({
weekDates,
gridColWidthMap,
gridPositionFinder
});
if (isNil(resizingEvent)) {
return null;
}
return /* @__PURE__ */ h$3(HorizontalEvent, {
uiModel: resizingEvent,
eventHeight: EVENT_HEIGHT,
headerHeight: 0,
resizingWidth
});
}
function useDOMNode() {
const [node, setNode] = y$1(null);
const setNodeRef = T$1((ref2) => {
if (ref2) {
setNode(ref2);
}
}, []);
return [node, setNodeRef];
}
function useGridRowHeightController(maxTop, category) {
const [clickedIndex, setClickedIndex] = y$1(0);
const [isClickedCount, setClickedCount] = y$1(false);
const { updateDayGridRowHeight } = useDispatch("weekViewLayout");
const onClickExceedCount = T$1((index) => {
setClickedCount(true);
setClickedIndex(index);
updateDayGridRowHeight({
rowName: category,
height: (maxTop + 1) * EVENT_HEIGHT
});
}, [category, maxTop, updateDayGridRowHeight]);
const onClickCollapseButton = T$1(() => {
setClickedCount(false);
updateDayGridRowHeight({
rowName: category,
height: DEFAULT_PANEL_HEIGHT
});
}, [category, updateDayGridRowHeight]);
return {
clickedIndex,
isClickedCount,
onClickExceedCount,
onClickCollapseButton
};
}
function requestTimeout(fn2, delay, registerCancel) {
let start;
const loop = (timestamp) => {
if (!start) {
start = timestamp;
}
const elapsed = timestamp - start;
if (elapsed >= delay) {
fn2();
registerCancel(noop);
return;
}
const raf2 = requestAnimationFrame(loop);
registerCancel(() => cancelAnimationFrame(raf2));
};
const raf = requestAnimationFrame(loop);
registerCancel(() => cancelAnimationFrame(raf));
}
function useClickPrevention({
onClick,
onDblClick,
delay = 300
}) {
const cancelCallback = s$2(noop);
const registerCancel = (fn2) => {
cancelCallback.current = fn2;
};
const cancelScheduledWork = () => {
cancelCallback.current();
};
_$2(() => cancelScheduledWork, []);
const handleClick = (e2) => {
cancelScheduledWork();
requestTimeout(onClick.bind(null, e2), delay, registerCancel);
};
const handleDblClick = (e2) => {
cancelScheduledWork();
onDblClick(e2);
};
return [handleClick, handleDblClick];
}
const GRID_SELECTION_TYPE_MAP = {
dayGridMonth: "month",
dayGridWeek: "allday",
timeGrid: "time"
};
function sortDates(a2, b2) {
const isIncreased = a2 < b2;
return isIncreased ? [a2, b2] : [b2, a2];
}
function useGridSelection({
type,
selectionSorter,
dateGetter,
dateCollection,
gridPositionFinder
}) {
const { useFormPopup, gridSelection: gridSelectionOptions } = useStore(optionsSelector);
const { enableDblClick, enableClick } = gridSelectionOptions;
const { setGridSelection, addGridSelection, clearAll } = useDispatch("gridSelection");
const { hideAllPopup, showFormPopup } = useDispatch("popup");
const eventBus = useEventBus();
const layoutContainer = useLayoutContainer();
const [initMousePosition, setInitMousePosition] = y$1(null);
const [initGridPosition, setInitGridPosition] = y$1(null);
const isSelectingGridRef = s$2(false);
const gridSelectionRef = s$2(null);
useTransientUpdate(T$1((state) => state.gridSelection[type], [type]), (gridSelection) => {
gridSelectionRef.current = gridSelection;
});
useTransientUpdate(dndSelector, ({ draggingState, draggingItemType }) => {
isSelectingGridRef.current = draggingItemType === currentGridSelectionType && draggingState >= DraggingState.INIT;
});
const currentGridSelectionType = DRAGGING_TYPE_CREATORS.gridSelection(type);
const setGridSelectionByPosition = (e2) => {
const gridPosition = gridPositionFinder(e2);
if (isPresent(initGridPosition) && isPresent(gridPosition)) {
setGridSelection(type, selectionSorter(initGridPosition, gridPosition));
}
};
const [handleClickWithDebounce, handleDblClickPreventingClick] = useClickPrevention({
onClick: (e2) => {
if (enableClick) {
onMouseUp(e2, true);
}
},
onDblClick: (e2) => {
if (enableDblClick) {
onMouseUp(e2, true);
}
},
delay: 250
});
const onMouseUpWithClick = (e2) => {
const isClick = e2.detail <= 1;
if (!enableClick && (!enableDblClick || isClick)) {
return;
}
if (enableClick) {
if (isClick) {
handleClickWithDebounce(e2);
} else {
handleDblClickPreventingClick(e2);
}
return;
}
onMouseUp(e2, true);
};
const onMouseUp = (e2, isClickEvent) => {
var _a;
if (isClickEvent) {
setGridSelectionByPosition(e2);
}
if (isPresent(gridSelectionRef.current)) {
const [startDate, endDate] = sortDates(...dateGetter(dateCollection, gridSelectionRef.current));
if (useFormPopup && isPresent(initMousePosition)) {
const popupArrowPointPosition = {
top: (e2.clientY + initMousePosition.y) / 2,
left: (e2.clientX + initMousePosition.x) / 2
};
showFormPopup({
isCreationPopup: true,
title: "",
location: "",
start: startDate,
end: endDate,
isAllday: type !== "timeGrid",
isPrivate: false,
popupArrowPointPosition,
close: clearAll
});
}
const gridSelectionSelector = `.${cls(GRID_SELECTION_TYPE_MAP[type])}.${cls("grid-selection")}`;
const gridSelectionElements = Array.from((_a = layoutContainer == null ? void 0 : layoutContainer.querySelectorAll(gridSelectionSelector)) != null ? _a : []);
eventBus.fire("selectDateTime", {
start: startDate.toDate(),
end: endDate.toDate(),
isAllday: type !== "timeGrid",
nativeEvent: e2,
gridSelectionElements
});
}
};
const clearGridSelection = T$1(() => {
setInitMousePosition(null);
setInitGridPosition(null);
setGridSelection(type, null);
}, [setGridSelection, type]);
const onMouseDown = useDrag(currentGridSelectionType, {
onInit: (e2) => {
if (useFormPopup) {
setInitMousePosition({
x: e2.clientX,
y: e2.clientY
});
hideAllPopup();
}
const gridPosition = gridPositionFinder(e2);
if (isPresent(gridPosition)) {
setInitGridPosition(gridPosition);
}
if (!useFormPopup) {
addGridSelection(type, gridSelectionRef.current);
}
},
onDragStart: (e2) => {
setGridSelectionByPosition(e2);
},
onDrag: (e2) => {
if (isSelectingGridRef.current) {
setGridSelectionByPosition(e2);
}
},
onMouseUp: (e2, { draggingState }) => {
e2.stopPropagation();
const isClickEvent = draggingState <= DraggingState.INIT;
if (isClickEvent) {
onMouseUpWithClick(e2);
} else {
onMouseUp(e2, isClickEvent);
}
},
onPressESCKey: clearGridSelection
});
_$2(() => clearGridSelection, [clearGridSelection]);
return onMouseDown;
}
const rowTitleTemplate = `alldayTitle`;
function AlldayGridRow({
events,
weekDates,
height = DEFAULT_PANEL_HEIGHT,
options = {},
rowStyleInfo,
gridColWidthMap
}) {
const { isReadOnly } = useStore(optionsSelector);
const dayGridLeftTheme = useTheme(weekDayGridLeftSelector);
const [panelContainer, setPanelContainerRef] = useDOMNode();
const { narrowWeekend = false, startDayOfWeek = Day$2.SUN } = options;
const maxTop = F$2(() => Math.max(0, ...events.map(({ top }) => top)), [events]);
const gridPositionFinder = F$2(() => createGridPositionFinder({
container: panelContainer,
rowsCount: 1,
columnsCount: weekDates.length,
narrowWeekend,
startDayOfWeek
}), [panelContainer, weekDates.length, narrowWeekend, startDayOfWeek]);
const { clickedIndex, isClickedCount, onClickExceedCount, onClickCollapseButton } = useGridRowHeightController(maxTop, "allday");
const horizontalEvents = F$2(() => events.filter(isWithinHeight(height, EVENT_HEIGHT + WEEK_EVENT_MARGIN_TOP)).map((uiModel) => /* @__PURE__ */ h$3(HorizontalEvent, {
key: `allday-DayEvent-${uiModel.cid()}`,
uiModel,
eventHeight: EVENT_HEIGHT,
headerHeight: 0
})), [events, height]);
const startGridSelection = useGridSelection({
type: "dayGridWeek",
gridPositionFinder,
dateCollection: weekDates,
selectionSorter: alldayGridRowSelectionHelper.sortSelection,
dateGetter: alldayGridRowSelectionHelper.getDateFromCollection
});
const onMouseDown = (e2) => {
const target = e2.target;
if (isReadOnly || !target.classList.contains(cls("panel-grid"))) {
return;
}
startGridSelection(e2);
};
return /* @__PURE__ */ h$3(p$3, null, /* @__PURE__ */ h$3("div", {
className: cls("panel-title"),
style: dayGridLeftTheme
}, /* @__PURE__ */ h$3(Template, {
template: rowTitleTemplate,
param: "alldayTitle"
})), /* @__PURE__ */ h$3("div", {
className: cls("allday-panel"),
ref: setPanelContainerRef,
onMouseDown
}, /* @__PURE__ */ h$3("div", {
className: cls("panel-grid-wrapper")
}, /* @__PURE__ */ h$3(GridCells, {
uiModels: events,
weekDates,
narrowWeekend,
height,
clickedIndex,
isClickedCount,
onClickExceedCount,
onClickCollapseButton
})), /* @__PURE__ */ h$3("div", {
className: cls(`panel-allday-events`)
}, horizontalEvents), /* @__PURE__ */ h$3(ResizingEventShadow, {
weekDates,
gridPositionFinder,
gridColWidthMap
}), /* @__PURE__ */ h$3(MovingEventShadow$2, {
rowStyleInfo,
gridPositionFinder
}), /* @__PURE__ */ h$3(AlldayGridSelection, {
weekDates,
narrowWeekend
})));
}
function OtherGridRow({
events,
weekDates,
category,
height = DEFAULT_PANEL_HEIGHT,
options = {}
}) {
const dayGridLeftTheme = useTheme(weekDayGridLeftSelector);
const maxTop = F$2(() => Math.max(0, ...events.map(({ top }) => top)), [events]);
const { narrowWeekend = false } = options;
const rowTitleTemplate2 = `${category}Title`;
const { clickedIndex, isClickedCount, onClickExceedCount, onClickCollapseButton } = useGridRowHeightController(maxTop, category);
const horizontalEvents = F$2(() => events.filter(isWithinHeight(height, EVENT_HEIGHT + WEEK_EVENT_MARGIN_TOP)).map((uiModel) => /* @__PURE__ */ h$3(HorizontalEvent, {
key: `${category}-DayEvent-${uiModel.cid()}`,
uiModel,
eventHeight: EVENT_HEIGHT,
headerHeight: 0
})), [category, events, height]);
return /* @__PURE__ */ h$3(p$3, null, /* @__PURE__ */ h$3("div", {
className: cls("panel-title"),
style: dayGridLeftTheme
}, /* @__PURE__ */ h$3(Template, {
template: rowTitleTemplate2,
param: category
})), /* @__PURE__ */ h$3("div", {
className: cls("allday-panel")
}, /* @__PURE__ */ h$3("div", {
className: cls("panel-grid-wrapper")
}, /* @__PURE__ */ h$3(GridCells, {
uiModels: events,
weekDates,
narrowWeekend,
height,
clickedIndex,
isClickedCount,
onClickExceedCount,
onClickCollapseButton
})), /* @__PURE__ */ h$3("div", {
className: cls(`panel-${category}-events`)
}, horizontalEvents)));
}
const classNames$j = {
detailItem: cls("detail-item"),
detailItemIndent: cls("detail-item", "detail-item-indent"),
detailItemSeparate: cls("detail-item", "detail-item-separate"),
sectionDetail: cls("popup-section", "section-detail"),
content: cls("content"),
locationIcon: cls("icon", "ic-location-b"),
repeatIcon: cls("icon", "ic-repeat-b"),
userIcon: cls("icon", "ic-user-b"),
stateIcon: cls("icon", "ic-state-b"),
calendarDotIcon: cls("icon", "calendar-dot")
};
function EventDetailSectionDetail({ event }) {
var _a, _b;
const { location: location2, recurrenceRule, attendees, state, calendarId, body } = event;
const calendar = useCalendarById(calendarId);
return /* @__PURE__ */ h$3("div", {
className: classNames$j.sectionDetail
}, location2 && /* @__PURE__ */ h$3("div", {
className: classNames$j.detailItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$j.locationIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$j.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailLocation",
param: event,
as: "span"
}))), recurrenceRule && /* @__PURE__ */ h$3("div", {
className: classNames$j.detailItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$j.repeatIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$j.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailRecurrenceRule",
param: event,
as: "span"
}))), attendees && /* @__PURE__ */ h$3("div", {
className: classNames$j.detailItemIndent
}, /* @__PURE__ */ h$3("span", {
className: classNames$j.userIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$j.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailAttendees",
param: event,
as: "span"
}))), state && /* @__PURE__ */ h$3("div", {
className: classNames$j.detailItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$j.stateIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$j.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailState",
param: event,
as: "span"
}))), calendar && /* @__PURE__ */ h$3("div", {
className: classNames$j.detailItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$j.calendarDotIcon,
style: {
backgroundColor: (_a = calendar == null ? void 0 : calendar.backgroundColor) != null ? _a : ""
}
}), /* @__PURE__ */ h$3("span", {
className: classNames$j.content
}, (_b = calendar == null ? void 0 : calendar.name) != null ? _b : "")), body && /* @__PURE__ */ h$3("div", {
className: classNames$j.detailItemSeparate
}, /* @__PURE__ */ h$3("span", {
className: classNames$j.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailBody",
param: event,
as: "span"
}))));
}
const classNames$i = {
sectionHeader: cls("popup-section", "section-header"),
content: cls("content"),
eventTitle: cls("event-title")
};
function EventDetailSectionHeader({ event }) {
return /* @__PURE__ */ h$3("div", {
className: classNames$i.sectionHeader
}, /* @__PURE__ */ h$3("div", {
className: classNames$i.eventTitle
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailTitle",
param: event,
as: "span"
})), /* @__PURE__ */ h$3("div", {
className: classNames$i.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDetailDate",
param: event,
as: "span"
})));
}
const SEE_MORE_POPUP_SLOT_CLASS_NAME = cls("see-more-popup-slot");
const EVENT_FORM_POPUP_SLOT_CLASS_NAME = cls("event-form-popup-slot");
const EVENT_DETAIL_POPUP_SLOT_CLASS_NAME = cls("event-detail-popup-slot");
const HALF_OF_POPUP_ARROW_HEIGHT = 8;
const BOOLEAN_KEYS_OF_EVENT_MODEL_DATA = [
"isPrivate",
"isAllday",
"isPending",
"isFocused",
"isVisible",
"isReadOnly"
];
var DetailPopupArrowDirection = /* @__PURE__ */ ((DetailPopupArrowDirection2) => {
DetailPopupArrowDirection2["right"] = "right";
DetailPopupArrowDirection2["left"] = "left";
return DetailPopupArrowDirection2;
})(DetailPopupArrowDirection || {});
var FormPopupArrowDirection = /* @__PURE__ */ ((FormPopupArrowDirection2) => {
FormPopupArrowDirection2["top"] = "top";
FormPopupArrowDirection2["bottom"] = "bottom";
return FormPopupArrowDirection2;
})(FormPopupArrowDirection || {});
const FloatingLayerContext = B$1(null);
function FloatingLayerProvider({ children }) {
const [containerRef, containerRefCallback] = useDOMNode();
const [seeMorePopupSlotRef, seeMorePopupSlotRefCallback] = useDOMNode();
const [formPopupSlotRef, formPopupSlotRefCallback] = useDOMNode();
const [detailPopupSlotRef, detailPopupSlotRefCallback] = useDOMNode();
const floatingLayer = {
container: containerRef,
seeMorePopupSlot: seeMorePopupSlotRef,
formPopupSlot: formPopupSlotRef,
detailPopupSlot: detailPopupSlotRef
};
return /* @__PURE__ */ h$3(FloatingLayerContext.Provider, {
value: floatingLayer
}, children, /* @__PURE__ */ h$3("div", {
ref: containerRefCallback,
className: cls("floating-layer")
}, /* @__PURE__ */ h$3("div", {
ref: seeMorePopupSlotRefCallback,
className: SEE_MORE_POPUP_SLOT_CLASS_NAME
}), /* @__PURE__ */ h$3("div", {
ref: formPopupSlotRefCallback,
className: EVENT_FORM_POPUP_SLOT_CLASS_NAME
}), /* @__PURE__ */ h$3("div", {
ref: detailPopupSlotRefCallback,
className: EVENT_DETAIL_POPUP_SLOT_CLASS_NAME
})));
}
const useFloatingLayer = (floatingLayerType) => {
var _a;
const floatingLayers = q$2(FloatingLayerContext);
if (isUndefined_1(floatingLayers)) {
throw new Error("FloatingLayerProvider is not found");
}
return (_a = floatingLayers == null ? void 0 : floatingLayers[floatingLayerType]) != null ? _a : null;
};
function isTopOutOfLayout(top, layoutRect, popupRect) {
return top + popupRect.height > layoutRect.top + layoutRect.height;
}
function isLeftOutOfLayout(left, layoutRect, popupRect) {
return left + popupRect.width > layoutRect.left + layoutRect.width;
}
const eventFormPopupParamSelector = (state) => {
return state.popup[PopupType.Form];
};
const eventDetailPopupParamSelector = (state) => {
return state.popup[PopupType.Detail];
};
const seeMorePopupParamSelector = (state) => {
return state.popup[PopupType.SeeMore];
};
const classNames$h = {
popupContainer: cls("popup-container"),
detailContainer: cls("detail-container"),
topLine: cls("popup-top-line"),
border: cls("popup-arrow-border"),
fill: cls("popup-arrow-fill"),
sectionButton: cls("popup-section", "section-button"),
content: cls("content"),
editIcon: cls("icon", "ic-edit"),
deleteIcon: cls("icon", "ic-delete"),
editButton: cls("edit-button"),
deleteButton: cls("delete-button"),
verticalLine: cls("vertical-line")
};
function calculatePopupPosition$1(eventRect, layoutRect, popupRect) {
let top = eventRect.top + eventRect.height / 2 - popupRect.height / 2;
let left = eventRect.left + eventRect.width;
if (isTopOutOfLayout(top, layoutRect, popupRect)) {
top = layoutRect.top + layoutRect.height - popupRect.height;
}
if (isLeftOutOfLayout(left, layoutRect, popupRect)) {
left = eventRect.left - popupRect.width;
}
return [
Math.max(top, layoutRect.top) + window.scrollY,
Math.max(left, layoutRect.left) + window.scrollX
];
}
function calculatePopupArrowPosition(eventRect, layoutRect, popupRect) {
const top = eventRect.top + eventRect.height / 2 + window.scrollY;
const popupLeft = eventRect.left + eventRect.width;
const isOutOfLayout = popupLeft + popupRect.width > layoutRect.left + layoutRect.width;
const direction = isOutOfLayout ? DetailPopupArrowDirection.right : DetailPopupArrowDirection.left;
return { top, direction };
}
function EventDetailPopup() {
const { useFormPopup } = useStore(optionsSelector);
const popupParams = useStore(eventDetailPopupParamSelector);
const { event, eventRect } = popupParams != null ? popupParams : {};
const { showFormPopup, hideDetailPopup } = useDispatch("popup");
const calendarColor = useCalendarColor(event);
const layoutContainer = useLayoutContainer();
const detailPopupSlot = useFloatingLayer("detailPopupSlot");
const eventBus = useEventBus();
const popupContainerRef = s$2(null);
const [style, setStyle] = y$1({});
const [arrowTop, setArrowTop] = y$1(0);
const [arrowDirection, setArrowDirection] = y$1(DetailPopupArrowDirection.left);
const popupArrowClassName = F$2(() => {
const right = arrowDirection === DetailPopupArrowDirection.right;
const left = arrowDirection === DetailPopupArrowDirection.left;
return cls("popup-arrow", { right, left });
}, [arrowDirection]);
h$2(() => {
if (popupContainerRef.current && eventRect && layoutContainer) {
const layoutRect = layoutContainer.getBoundingClientRect();
const popupRect = popupContainerRef.current.getBoundingClientRect();
const [top, left] = calculatePopupPosition$1(eventRect, layoutRect, popupRect);
const { top: arrowTopPosition, direction } = calculatePopupArrowPosition(eventRect, layoutRect, popupRect);
setStyle({ top, left });
setArrowTop(arrowTopPosition - top - HALF_OF_POPUP_ARROW_HEIGHT);
setArrowDirection(direction);
}
}, [eventRect, layoutContainer]);
if (isNil(event) || isNil(eventRect) || isNil(detailPopupSlot)) {
return null;
}
const {
title = "",
isAllday: isAllday2 = false,
start = new TZDate(),
end = new TZDate(),
location: location2,
state,
isReadOnly,
isPrivate
} = event;
const popupArrowPointPosition = {
top: eventRect.top + eventRect.height / 2,
left: eventRect.left + eventRect.width / 2
};
const onClickEditButton = () => {
if (useFormPopup) {
showFormPopup({
isCreationPopup: false,
event,
title,
location: location2,
start,
end,
isAllday: isAllday2,
isPrivate,
eventState: state,
popupArrowPointPosition
});
} else {
eventBus.fire("beforeUpdateEvent", { event: event.toEventObject(), changes: {} });
}
};
const onClickDeleteButton = () => {
eventBus.fire("beforeDeleteEvent", event.toEventObject());
hideDetailPopup();
};
return V(/* @__PURE__ */ h$3("div", {
role: "dialog",
className: classNames$h.popupContainer,
ref: popupContainerRef,
style
}, /* @__PURE__ */ h$3("div", {
className: classNames$h.detailContainer
}, /* @__PURE__ */ h$3(EventDetailSectionHeader, {
event
}), /* @__PURE__ */ h$3(EventDetailSectionDetail, {
event
}), !isReadOnly && /* @__PURE__ */ h$3("div", {
className: classNames$h.sectionButton
}, /* @__PURE__ */ h$3("button", {
type: "button",
className: classNames$h.editButton,
onClick: onClickEditButton
}, /* @__PURE__ */ h$3("span", {
className: classNames$h.editIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$h.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupEdit",
as: "span"
}))), /* @__PURE__ */ h$3("div", {
className: classNames$h.verticalLine
}), /* @__PURE__ */ h$3("button", {
type: "button",
className: classNames$h.deleteButton,
onClick: onClickDeleteButton
}, /* @__PURE__ */ h$3("span", {
className: classNames$h.deleteIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$h.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupDelete",
as: "span"
}))))), /* @__PURE__ */ h$3("div", {
className: classNames$h.topLine,
style: { backgroundColor: calendarColor.backgroundColor }
}), /* @__PURE__ */ h$3("div", {
className: popupArrowClassName
}, /* @__PURE__ */ h$3("div", {
className: classNames$h.border,
style: { top: arrowTop }
}, /* @__PURE__ */ h$3("div", {
className: classNames$h.fill
})))), detailPopupSlot);
}
const classNames$g = {
dropdownMenu: cls("dropdown-menu"),
dropdownMenuItem: cls("dropdown-menu-item"),
dotIcon: cls("icon", "dot"),
content: cls("content")
};
function DropdownMenuItem({ index, name, backgroundColor, onClick }) {
return /* @__PURE__ */ h$3("li", {
className: classNames$g.dropdownMenuItem,
onClick: (e2) => onClick(e2, index)
}, /* @__PURE__ */ h$3("span", {
className: classNames$g.dotIcon,
style: { backgroundColor }
}), /* @__PURE__ */ h$3("span", {
className: classNames$g.content
}, name));
}
function CalendarDropdownMenu({ calendars, setOpened, onChangeIndex }) {
const handleDropdownMenuItemClick = (e2, index) => {
e2.stopPropagation();
setOpened(false);
onChangeIndex(index);
};
return /* @__PURE__ */ h$3("ul", {
className: classNames$g.dropdownMenu
}, calendars.map(({ name, backgroundColor = "000" }, index) => /* @__PURE__ */ h$3(DropdownMenuItem, {
key: `dropdown-${name}-${index}`,
index,
name,
backgroundColor,
onClick: handleDropdownMenuItemClick
})));
}
function PopupSection({
children,
classNames: classNames2 = [],
onClick = noop
}) {
return /* @__PURE__ */ h$3("div", {
className: cls("popup-section", ...classNames2),
onClick
}, children);
}
function useDropdownState() {
const [isOpened, setOpened] = y$1(false);
const toggleDropdown = () => setOpened((prev) => !prev);
return { isOpened, setOpened, toggleDropdown };
}
var FormStateActionType = /* @__PURE__ */ ((FormStateActionType2) => {
FormStateActionType2["init"] = "init";
FormStateActionType2["setCalendarId"] = "setCalendarId";
FormStateActionType2["setTitle"] = "setTitle";
FormStateActionType2["setLocation"] = "setLocation";
FormStateActionType2["setPrivate"] = "setPrivate";
FormStateActionType2["setAllday"] = "setAllday";
FormStateActionType2["setState"] = "setState";
FormStateActionType2["reset"] = "reset";
return FormStateActionType2;
})(FormStateActionType || {});
const defaultFormState = {
title: "",
location: "",
isAllday: false,
isPrivate: false,
state: "Busy"
};
function formStateReducer(state, action) {
switch (action.type) {
case "init":
return __spreadValues(__spreadValues({}, defaultFormState), action.event);
case "setCalendarId":
return __spreadProps(__spreadValues({}, state), { calendarId: action.calendarId });
case "setTitle":
return __spreadProps(__spreadValues({}, state), { title: action.title });
case "setLocation":
return __spreadProps(__spreadValues({}, state), { location: action.location });
case "setPrivate":
return __spreadProps(__spreadValues({}, state), { isPrivate: action.isPrivate });
case "setAllday":
return __spreadProps(__spreadValues({}, state), { isAllday: action.isAllday });
case "setState":
return __spreadProps(__spreadValues({}, state), { state: action.state });
case "reset":
return __spreadValues(__spreadValues({}, state), defaultFormState);
default:
return state;
}
}
function useFormState(initCalendarId) {
return d$2(formStateReducer, __spreadValues({ calendarId: initCalendarId }, defaultFormState));
}
const classNames$f = {
popupSection: ["dropdown-section", "calendar-section"],
popupSectionItem: cls("popup-section-item", "popup-button"),
dotIcon: cls("icon", "dot"),
content: cls("content", "event-calendar")
};
function CalendarSelector({ calendars, selectedCalendarId, formStateDispatch }) {
const { isOpened, setOpened, toggleDropdown } = useDropdownState();
const selectedCalendar = calendars.find((calendar) => calendar.id === selectedCalendarId);
const { backgroundColor = "", name = "" } = selectedCalendar != null ? selectedCalendar : {};
const changeIndex = (index) => formStateDispatch({ type: FormStateActionType.setCalendarId, calendarId: calendars[index].id });
return /* @__PURE__ */ h$3(PopupSection, {
onClick: toggleDropdown,
classNames: classNames$f.popupSection
}, /* @__PURE__ */ h$3("button", {
type: "button",
className: classNames$f.popupSectionItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$f.dotIcon,
style: { backgroundColor }
}), /* @__PURE__ */ h$3("span", {
className: classNames$f.content
}, name), /* @__PURE__ */ h$3("span", {
className: cls("icon", "ic-dropdown-arrow", { open: isOpened })
})), isOpened && /* @__PURE__ */ h$3(CalendarDropdownMenu, {
calendars,
setOpened,
onChangeIndex: changeIndex
}));
}
const classNames$e = {
closeButton: cls("popup-button", "popup-close"),
closeIcon: cls("icon", "ic-close")
};
function ClosePopupButton({ type, close }) {
const { hideAllPopup } = useDispatch("popup");
const onClickHandler = () => {
hideAllPopup();
if (isFunction$2(close)) {
close();
}
};
return /* @__PURE__ */ h$3("button", {
type: "button",
className: classNames$e.closeButton,
onClick: onClickHandler
}, type === "moreEvents" ? /* @__PURE__ */ h$3(Template, {
template: "monthMoreClose"
}) : /* @__PURE__ */ h$3("i", {
className: classNames$e.closeIcon
}));
}
const classNames$d = {
confirmButton: cls("popup-button", "popup-confirm")
};
function ConfirmPopupButton({ children }) {
return /* @__PURE__ */ h$3("button", {
type: "submit",
className: classNames$d.confirmButton
}, /* @__PURE__ */ h$3("span", null, children));
}
function useStringOnlyTemplate({
template,
model,
defaultValue = ""
}) {
const templates2 = useStore(templateSelector);
const templateFunc = templates2[template];
if (isNil(templateFunc)) {
return defaultValue;
}
let result = templateFunc(model);
if (!isString_1(result)) {
result = defaultValue;
}
return result;
}
const classNames$c = {
datePickerContainer: cls("datepicker-container"),
datePicker: cls("popup-section-item", "popup-date-picker"),
allday: cls("popup-section-item", "popup-section-allday"),
dateIcon: cls("icon", "ic-date"),
dateDash: cls("popup-date-dash"),
content: cls("content")
};
const DateSelector = R(function DateSelector2({ start, end, isAllday: isAllday2 = false, formStateDispatch }, ref2) {
const { usageStatistics } = useStore(optionsSelector);
const startPickerContainerRef = s$2(null);
const startPickerInputRef = s$2(null);
const endPickerContainerRef = s$2(null);
const endPickerInputRef = s$2(null);
const startDatePlaceholder = useStringOnlyTemplate({
template: "startDatePlaceholder",
defaultValue: "Start Date"
});
const endDatePlaceholder = useStringOnlyTemplate({
template: "endDatePlaceholder",
defaultValue: "End Date"
});
const toggleAllday = () => formStateDispatch({ type: FormStateActionType.setAllday, isAllday: !isAllday2 });
_$2(() => {
if (startPickerContainerRef.current && startPickerInputRef.current && endPickerContainerRef.current && endPickerInputRef.current) {
const startDate = new TZDate(start);
const endDate = new TZDate(end);
if (isAllday2) {
startDate.setHours(12, 0, 0);
endDate.setHours(13, 0, 0);
}
ref2.current = DatePicker.createRangePicker({
startpicker: {
date: startDate.toDate(),
input: startPickerInputRef.current,
container: startPickerContainerRef.current
},
endpicker: {
date: endDate.toDate(),
input: endPickerInputRef.current,
container: endPickerContainerRef.current
},
format: isAllday2 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm",
timePicker: isAllday2 ? false : {
showMeridiem: false,
usageStatistics
},
usageStatistics
});
}
}, [start, end, isAllday2, usageStatistics, ref2]);
return /* @__PURE__ */ h$3(PopupSection, null, /* @__PURE__ */ h$3("div", {
className: classNames$c.datePicker
}, /* @__PURE__ */ h$3("span", {
className: classNames$c.dateIcon
}), /* @__PURE__ */ h$3("input", {
name: "start",
className: classNames$c.content,
placeholder: startDatePlaceholder,
ref: startPickerInputRef
}), /* @__PURE__ */ h$3("div", {
className: classNames$c.datePickerContainer,
ref: startPickerContainerRef
})), /* @__PURE__ */ h$3("span", {
className: classNames$c.dateDash
}, "-"), /* @__PURE__ */ h$3("div", {
className: classNames$c.datePicker
}, /* @__PURE__ */ h$3("span", {
className: classNames$c.dateIcon
}), /* @__PURE__ */ h$3("input", {
name: "end",
className: classNames$c.content,
placeholder: endDatePlaceholder,
ref: endPickerInputRef
}), /* @__PURE__ */ h$3("div", {
className: classNames$c.datePickerContainer,
ref: endPickerContainerRef
})), /* @__PURE__ */ h$3("div", {
className: classNames$c.allday,
onClick: toggleAllday
}, /* @__PURE__ */ h$3("span", {
className: cls("icon", {
"ic-checkbox-normal": !isAllday2,
"ic-checkbox-checked": isAllday2
})
}), /* @__PURE__ */ h$3("span", {
className: classNames$c.content
}, /* @__PURE__ */ h$3(Template, {
template: "popupIsAllday"
})), /* @__PURE__ */ h$3("input", {
name: "isAllday",
type: "checkbox",
className: cls("hidden-input"),
value: isAllday2 ? "true" : "false",
checked: isAllday2
})));
});
const EVENT_STATES = ["Busy", "Free"];
const classNames$b = {
popupSectionItem: cls("popup-section-item", "dropdown-menu-item"),
dropdownMenu: cls("dropdown-menu"),
icon: cls("icon"),
content: cls("content")
};
function StateDropdownMenu({ setOpened, setEventState }) {
const onClickDropdown = (e2, state) => {
e2.stopPropagation();
setOpened(false);
setEventState(state);
};
return /* @__PURE__ */ h$3("ul", {
className: classNames$b.dropdownMenu
}, EVENT_STATES.map((state) => /* @__PURE__ */ h$3("li", {
key: state,
className: classNames$b.popupSectionItem,
onClick: (e2) => onClickDropdown(e2, state)
}, /* @__PURE__ */ h$3("span", {
className: classNames$b.icon
}), /* @__PURE__ */ h$3("span", {
className: classNames$b.content
}, state === "Busy" ? /* @__PURE__ */ h$3(Template, {
template: "popupStateBusy"
}) : /* @__PURE__ */ h$3(Template, {
template: "popupStateFree"
})))));
}
const classNames$a = {
popupSection: ["dropdown-section", "state-section"],
popupSectionItem: cls("popup-section-item", "popup-button"),
stateIcon: cls("icon", "ic-state"),
arrowIcon: cls("icon", "ic-dropdown-arrow"),
content: cls("content", "event-state")
};
function EventStateSelector({ eventState = "Busy", formStateDispatch }) {
const { isOpened, setOpened, toggleDropdown } = useDropdownState();
const handleChangeEventState = (state) => formStateDispatch({ type: FormStateActionType.setState, state });
return /* @__PURE__ */ h$3(PopupSection, {
onClick: toggleDropdown,
classNames: classNames$a.popupSection
}, /* @__PURE__ */ h$3("button", {
type: "button",
className: classNames$a.popupSectionItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$a.stateIcon
}), /* @__PURE__ */ h$3("span", {
className: classNames$a.content
}, eventState === "Busy" ? /* @__PURE__ */ h$3(Template, {
template: "popupStateBusy"
}) : /* @__PURE__ */ h$3(Template, {
template: "popupStateFree"
})), /* @__PURE__ */ h$3("span", {
className: classNames$a.arrowIcon
})), isOpened && /* @__PURE__ */ h$3(StateDropdownMenu, {
setOpened,
setEventState: handleChangeEventState
}));
}
const classNames$9 = {
popupSectionItem: cls("popup-section-item", "popup-section-location"),
locationIcon: cls("icon", "ic-location"),
content: cls("content")
};
function LocationInputBox({ location: location2, formStateDispatch }) {
const locationPlaceholder = useStringOnlyTemplate({
template: "locationPlaceholder",
defaultValue: "Location"
});
const handleLocationChange = (e2) => {
formStateDispatch({ type: FormStateActionType.setLocation, location: e2.currentTarget.value });
};
return /* @__PURE__ */ h$3(PopupSection, null, /* @__PURE__ */ h$3("div", {
className: classNames$9.popupSectionItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$9.locationIcon
}), /* @__PURE__ */ h$3("input", {
name: "location",
className: classNames$9.content,
placeholder: locationPlaceholder,
value: location2,
onChange: handleLocationChange
})));
}
const classNames$8 = {
popupSectionItem: cls("popup-section-item", "popup-section-title"),
privateButton: cls("popup-section-item", "popup-section-private", "popup-button"),
titleIcon: cls("icon", "ic-title"),
content: cls("content")
};
function TitleInputBox({ title, isPrivate = false, formStateDispatch }) {
const titlePlaceholder = useStringOnlyTemplate({
template: "titlePlaceholder",
defaultValue: "Subject"
});
const togglePrivate = () => formStateDispatch({ type: FormStateActionType.setPrivate, isPrivate: !isPrivate });
const handleInputChange = (e2) => {
formStateDispatch({ type: FormStateActionType.setTitle, title: e2.currentTarget.value });
};
return /* @__PURE__ */ h$3(PopupSection, null, /* @__PURE__ */ h$3("div", {
className: classNames$8.popupSectionItem
}, /* @__PURE__ */ h$3("span", {
className: classNames$8.titleIcon
}), /* @__PURE__ */ h$3("input", {
name: "title",
className: classNames$8.content,
placeholder: titlePlaceholder,
value: title,
onChange: handleInputChange,
required: true
})), /* @__PURE__ */ h$3("button", {
type: "button",
className: classNames$8.privateButton,
onClick: togglePrivate
}, /* @__PURE__ */ h$3("span", {
className: cls("icon", { "ic-private": isPrivate, "ic-public": !isPrivate })
}), /* @__PURE__ */ h$3("input", {
name: "isPrivate",
type: "checkbox",
className: cls("hidden-input"),
value: isPrivate ? "true" : "false",
checked: isPrivate
})));
}
const classNames$7 = {
popupContainer: cls("popup-container"),
formContainer: cls("form-container"),
popupArrowBorder: cls("popup-arrow-border"),
popupArrowFill: cls("popup-arrow-fill")
};
function calculatePopupPosition(popupArrowPointPosition, layoutRect, popupRect) {
let top = popupArrowPointPosition.top - popupRect.height - HALF_OF_POPUP_ARROW_HEIGHT;
let left = popupArrowPointPosition.left - popupRect.width / 2;
let direction = FormPopupArrowDirection.bottom;
if (top < layoutRect.top) {
direction = FormPopupArrowDirection.top;
top = popupArrowPointPosition.top + HALF_OF_POPUP_ARROW_HEIGHT;
}
if (isTopOutOfLayout(top, layoutRect, popupRect)) {
top = layoutRect.top + layoutRect.height - popupRect.height;
}
if (isLeftOutOfLayout(left, layoutRect, popupRect)) {
left = layoutRect.left + layoutRect.width - popupRect.width;
}
return {
top: top + window.scrollY,
left: Math.max(left, layoutRect.left) + window.scrollX,
direction
};
}
function isBooleanKey(key) {
return BOOLEAN_KEYS_OF_EVENT_MODEL_DATA.indexOf(key) !== -1;
}
function getChanges(event, eventObject) {
return Object.entries(eventObject).reduce((changes, [key, value]) => {
const eventObjectKey = key;
if (event[eventObjectKey] instanceof TZDate) {
if (compare(event[eventObjectKey], value) !== 0) {
changes[eventObjectKey] = value;
}
} else if (event[eventObjectKey] !== value) {
changes[eventObjectKey] = value;
}
return changes;
}, {});
}
function EventFormPopup() {
var _a;
const { calendars } = useStore(calendarSelector);
const { hideAllPopup } = useDispatch("popup");
const popupParams = useStore(eventFormPopupParamSelector);
const { start, end, popupArrowPointPosition, close, isCreationPopup, event } = popupParams != null ? popupParams : {};
const eventBus = useEventBus();
const formPopupSlot = useFloatingLayer("formPopupSlot");
const [formState, formStateDispatch] = useFormState((_a = calendars[0]) == null ? void 0 : _a.id);
const datePickerRef = s$2(null);
const popupContainerRef = s$2(null);
const [style, setStyle] = y$1({});
const [arrowLeft, setArrowLeft] = y$1(0);
const [arrowDirection, setArrowDirection] = y$1(FormPopupArrowDirection.bottom);
const layoutContainer = useLayoutContainer();
const popupArrowClassName = F$2(() => {
const top = arrowDirection === FormPopupArrowDirection.top;
const bottom = arrowDirection === FormPopupArrowDirection.bottom;
return cls("popup-arrow", { top, bottom });
}, [arrowDirection]);
h$2(() => {
if (popupContainerRef.current && popupArrowPointPosition && layoutContainer) {
const layoutRect = layoutContainer.getBoundingClientRect();
const popupRect = popupContainerRef.current.getBoundingClientRect();
const { top, left, direction } = calculatePopupPosition(popupArrowPointPosition, layoutRect, popupRect);
const arrowLeftPosition = popupArrowPointPosition.left - left;
setStyle({ left, top });
setArrowLeft(arrowLeftPosition);
setArrowDirection(direction);
}
}, [layoutContainer, popupArrowPointPosition]);
_$2(() => {
if (isPresent(popupParams) && isPresent(event)) {
formStateDispatch({
type: FormStateActionType.init,
event: {
title: popupParams.title,
location: popupParams.location,
isAllday: popupParams.isAllday,
isPrivate: popupParams.isPrivate,
calendarId: event.calendarId,
state: popupParams.eventState
}
});
}
}, [calendars, event, formStateDispatch, popupParams]);
_$2(() => {
if (isNil(popupParams)) {
formStateDispatch({ type: FormStateActionType.reset });
}
}, [formStateDispatch, popupParams]);
if (isNil(start) || isNil(end) || isNil(formPopupSlot)) {
return null;
}
const onSubmit = (e2) => {
var _a2, _b;
e2.preventDefault();
const formData = new FormData(e2.target);
const eventData = __spreadValues({}, formState);
formData.forEach((data, key) => {
eventData[key] = isBooleanKey(key) ? data === "true" : data;
});
eventData.start = new TZDate((_a2 = datePickerRef.current) == null ? void 0 : _a2.getStartDate());
eventData.end = new TZDate((_b = datePickerRef.current) == null ? void 0 : _b.getEndDate());
if (isCreationPopup) {
eventBus.fire("beforeCreateEvent", eventData);
} else if (event) {
const changes = getChanges(event, eventData);
eventBus.fire("beforeUpdateEvent", { event: event.toEventObject(), changes });
}
hideAllPopup();
};
return V(/* @__PURE__ */ h$3("div", {
role: "dialog",
className: classNames$7.popupContainer,
ref: popupContainerRef,
style
}, /* @__PURE__ */ h$3("form", {
onSubmit
}, /* @__PURE__ */ h$3("div", {
className: classNames$7.formContainer
}, (calendars == null ? void 0 : calendars.length) ? /* @__PURE__ */ h$3(CalendarSelector, {
selectedCalendarId: formState.calendarId,
calendars,
formStateDispatch
}) : /* @__PURE__ */ h$3(PopupSection, null), /* @__PURE__ */ h$3(TitleInputBox, {
title: formState.title,
isPrivate: formState.isPrivate,
formStateDispatch
}), /* @__PURE__ */ h$3(LocationInputBox, {
location: formState.location,
formStateDispatch
}), /* @__PURE__ */ h$3(DateSelector, {
start,
end,
isAllday: formState.isAllday,
formStateDispatch,
ref: datePickerRef
}), /* @__PURE__ */ h$3(EventStateSelector, {
eventState: formState.state,
formStateDispatch
}), /* @__PURE__ */ h$3(ClosePopupButton, {
type: "form",
close
}), /* @__PURE__ */ h$3(PopupSection, null, /* @__PURE__ */ h$3(ConfirmPopupButton, null, isCreationPopup ? /* @__PURE__ */ h$3(Template, {
template: "popupSave"
}) : /* @__PURE__ */ h$3(Template, {
template: "popupUpdate"
})))), /* @__PURE__ */ h$3("div", {
className: popupArrowClassName
}, /* @__PURE__ */ h$3("div", {
className: classNames$7.popupArrowBorder,
style: { left: arrowLeft }
}, /* @__PURE__ */ h$3("div", {
className: classNames$7.popupArrowFill
}))))), formPopupSlot);
}
function shownPopupParamSelector(state) {
return Object.values(state.popup).find((popup) => isPresent(popup));
}
function PopupOverlay() {
const shownPopupParam = useStore(shownPopupParamSelector);
const { hideAllPopup } = useDispatch("popup");
const isPopupShown = isPresent(shownPopupParam);
const onClick = (ev) => {
var _a;
ev.stopPropagation();
(_a = shownPopupParam == null ? void 0 : shownPopupParam.close) == null ? void 0 : _a.call(shownPopupParam);
hideAllPopup();
};
return /* @__PURE__ */ h$3("div", {
className: cls("popup-overlay"),
style: { display: isPopupShown ? "block" : "none" },
onClick
});
}
const classNames$6 = {
container: cls("see-more-container"),
seeMore: cls("see-more"),
header: cls("see-more-header"),
list: cls("month-more-list")
};
function SeeMoreEventsPopup() {
const popupParams = useStore(seeMorePopupParamSelector);
const { date: date2, events = [], popupPosition } = popupParams != null ? popupParams : {};
const { moreView, moreViewTitle } = useMonthTheme();
const seeMorePopupSlot = useFloatingLayer("seeMorePopupSlot");
const eventBus = useEventBus();
const moreEventsPopupContainerRef = s$2(null);
const isHidden = isNil(date2) || isNil(popupPosition) || isNil(seeMorePopupSlot);
_$2(() => {
if (!isHidden && moreEventsPopupContainerRef.current) {
eventBus.fire("clickMoreEventsBtn", {
date: date2.toDate(),
target: moreEventsPopupContainerRef.current
});
}
}, [date2, eventBus, isHidden]);
if (isHidden) {
return null;
}
const style = {
height: MONTH_MORE_VIEW_HEADER_HEIGHT,
marginBottom: MONTH_MORE_VIEW_HEADER_MARGIN_BOTTOM,
padding: MONTH_MORE_VIEW_HEADER_PADDING,
backgroundColor: moreViewTitle.backgroundColor
};
const moreTitle = {
ymd: toFormat(date2, "YYYY-MM-DD"),
day: date2.getDay(),
date: date2.getDate().toString().padStart(2, "0")
};
const moreViewListStyle = {
height: `calc(100% - ${MONTH_MORE_VIEW_HEADER_HEIGHT + MONTH_MORE_VIEW_HEADER_MARGIN_BOTTOM + MONTH_MORE_VIEW_HEADER_PADDING_TOP}px)`
};
return V(/* @__PURE__ */ h$3("div", {
role: "dialog",
className: classNames$6.container,
style: popupPosition,
ref: moreEventsPopupContainerRef
}, /* @__PURE__ */ h$3("div", {
className: classNames$6.seeMore,
style: moreView
}, /* @__PURE__ */ h$3("div", {
className: classNames$6.header,
style
}, /* @__PURE__ */ h$3(Template, {
template: "monthMoreTitleDate",
param: moreTitle
}), /* @__PURE__ */ h$3(ClosePopupButton, {
type: "moreEvents"
})), /* @__PURE__ */ h$3("div", {
className: classNames$6.list,
style: moreViewListStyle
}, events.map((uiModel) => /* @__PURE__ */ h$3(HorizontalEvent, {
key: `see-more-event-item-${uiModel.cid()}`,
uiModel,
eventHeight: MONTH_EVENT_HEIGHT,
headerHeight: MONTH_MORE_VIEW_HEADER_HEIGHT,
flat: true
}))))), seeMorePopupSlot);
}
function getLayoutStylesFromInfo(width, height) {
const styles = { height: toPercent(100) };
if (width) {
styles.width = width;
}
if (height) {
styles.height = height;
}
return styles;
}
function Layout({
children,
width,
height,
className: className2 = "",
autoAdjustPanels = false
}) {
const { backgroundColor } = useTheme(commonThemeSelector);
const [container, containerRefCallback] = useDOMNode();
const { setLastPanelType, updateLayoutHeight } = useDispatch("weekViewLayout");
const layoutClassName = F$2(() => `${cls("layout")} ${className2}`, [className2]);
h$2(() => {
if (container) {
const onResizeWindow = () => updateLayoutHeight(container.offsetHeight);
onResizeWindow();
window.addEventListener("resize", onResizeWindow);
return () => window.removeEventListener("resize", onResizeWindow);
}
return noop;
}, [container, updateLayoutHeight]);
h$2(() => {
if (container && autoAdjustPanels) {
const childArray = x$3(children);
const lastChild = childArray[childArray.length - 1];
if (!isString_1(lastChild) && !isNumber_1(lastChild) && !isNil(lastChild)) {
setLastPanelType(lastChild.props.name);
}
}
}, [children, setLastPanelType, autoAdjustPanels, container]);
return /* @__PURE__ */ h$3(LayoutContainerProvider, {
value: container
}, /* @__PURE__ */ h$3("div", {
ref: containerRefCallback,
className: layoutClassName,
style: __spreadProps(__spreadValues({}, getLayoutStylesFromInfo(width, height)), { backgroundColor })
}, container ? children : null), /* @__PURE__ */ h$3(EventFormPopup, null), /* @__PURE__ */ h$3(EventDetailPopup, null), /* @__PURE__ */ h$3(SeeMoreEventsPopup, null), /* @__PURE__ */ h$3(PopupOverlay, null));
}
function getDefaultStyle(height, border) {
return {
height,
width: "100%",
cursor: "row-resize",
borderTop: border,
borderBottom: border
};
}
function PanelResizer({ name, height }) {
const border = useTheme(T$1((theme) => theme.week.panelResizer.border, []));
const style = getDefaultStyle(height, border);
const defaultGuideStyle = __spreadProps(__spreadValues({}, style), {
display: "none",
border: "none",
backgroundColor: "#999"
});
const [guideStyle, setGuideStyle] = y$1(defaultGuideStyle);
const startPos = s$2(null);
const { updateDayGridRowHeightByDiff } = useDispatch("weekViewLayout");
const onMouseDown = useDrag(DRAGGING_TYPE_CONSTANTS.panelResizer, {
onDragStart: (e2) => {
startPos.current = { left: e2.pageX, top: e2.pageY };
},
onDrag: (e2) => {
if (startPos.current) {
const top = e2.pageY - startPos.current.top;
setGuideStyle((prev) => __spreadProps(__spreadValues({}, prev), { top, display: null }));
}
},
onMouseUp: (e2) => {
if (startPos.current) {
const diff = e2.pageY - startPos.current.top;
startPos.current = null;
setGuideStyle(defaultGuideStyle);
updateDayGridRowHeightByDiff({ rowName: name, diff });
}
}
});
return /* @__PURE__ */ h$3("div", {
style: { position: "relative" }
}, /* @__PURE__ */ h$3("div", {
className: cls("panel-resizer"),
style,
onMouseDown
}), /* @__PURE__ */ h$3("div", {
className: cls("panel-resizer-guide"),
style: guideStyle
}));
}
function getPanelSide(side, maxExpandableSide) {
return maxExpandableSide ? Math.min(maxExpandableSide, side) : side;
}
function getPanelStyle({
initialHeight,
initialWidth,
overflowX,
overflowY,
maxExpandableWidth,
maxExpandableHeight,
minHeight,
maxHeight,
minWidth,
maxWidth
}) {
const style = {};
if (initialWidth) {
style.width = getPanelSide(initialWidth, maxExpandableWidth);
style.height = "100%";
}
if (initialHeight) {
style.width = "100%";
style.height = getPanelSide(initialHeight, maxExpandableHeight);
}
if (overflowX) {
style.overflowX = "auto";
}
if (overflowY) {
style.overflowY = "auto";
}
return __spreadProps(__spreadValues({}, style), { minHeight, maxHeight, minWidth, maxWidth });
}
const Panel = R(function Panel2({
name,
initialWidth = DEFAULT_PANEL_HEIGHT,
initialHeight = DEFAULT_PANEL_HEIGHT,
overflowX,
overflowY,
maxExpandableWidth,
maxExpandableHeight,
minHeight,
maxHeight,
minWidth,
maxWidth,
resizerWidth = DEFAULT_RESIZER_LENGTH,
resizerHeight = DEFAULT_RESIZER_LENGTH,
resizable,
children
}, ref2) {
const { updateDayGridRowHeight } = useDispatch("weekViewLayout");
const { height: dayGridRowHeight } = useStore(T$1((state) => {
var _a;
return (_a = state.weekViewLayout.dayGridRows[name]) != null ? _a : {};
}, [name]));
const height = dayGridRowHeight != null ? dayGridRowHeight : initialHeight;
h$2(() => {
updateDayGridRowHeight({ rowName: name, height: initialHeight });
}, [initialHeight, name, updateDayGridRowHeight]);
const styles = getPanelStyle({
initialWidth,
initialHeight: height,
overflowX,
overflowY,
maxExpandableWidth,
maxExpandableHeight,
minHeight,
maxHeight,
minWidth,
maxWidth
});
const isResizable = F$2(() => {
if (isNil(resizable) || isBoolean_1(resizable)) {
return !!resizable;
}
return resizable.includes(name);
}, [resizable, name]);
return /* @__PURE__ */ h$3(p$3, null, /* @__PURE__ */ h$3("div", {
className: cls("panel", name),
style: styles,
ref: ref2
}, children), isResizable ? /* @__PURE__ */ h$3(PanelResizer, {
name,
width: resizerWidth,
height: resizerHeight
}) : null);
});
const className = "timegrid";
const addTimeGridPrefix = (selector) => `${className}-${selector}`;
const timeFormats = {
second: "HH:mm:ss",
minute: "HH:mm",
hour: "HH:mm",
date: "HH:mm",
month: "MM.DD",
year: "YYYY.MM.DD"
};
const classNames$5 = {
time: cls("event-time"),
content: cls("event-time-content"),
travelTime: cls("travel-time"),
resizeHandleX: cls("resize-handler-x"),
moveEvent: cls("dragging--move-event"),
resizeEvent: cls("dragging--resize-vertical-event")
};
function getMarginLeft(left) {
const { percent, px } = extractPercentPx(`${left}`);
return left > 0 || percent > 0 || px > 0 ? TIME_EVENT_CONTAINER_MARGIN_LEFT : 0;
}
function getContainerWidth(width, marginLeft) {
if (isString_1(width)) {
return width;
}
if (width >= 0) {
return `calc(${toPercent(width)} - ${marginLeft}px)`;
}
return "";
}
function getStyles({
uiModel,
isDraggingTarget,
hasNextStartTime,
calendarColor,
minHeight
}) {
const {
top,
left,
height,
width,
duplicateLeft,
duplicateWidth,
goingDurationHeight,
modelDurationHeight,
comingDurationHeight,
croppedStart,
croppedEnd
} = uiModel;
const travelBorderColor = "white";
const borderRadius = 2;
const defaultMarginBottom = 2;
const marginLeft = getMarginLeft(left);
const { color, backgroundColor, borderColor, dragBackgroundColor } = getEventColors(uiModel, calendarColor);
const containerStyle = {
width: getContainerWidth(duplicateWidth || width, marginLeft),
height: `calc(${toPercent(Math.max(height, minHeight))} - ${defaultMarginBottom}px)`,
top: toPercent(top),
left: duplicateLeft || toPercent(left),
borderRadius,
borderLeft: `3px solid ${borderColor}`,
marginLeft,
color,
backgroundColor: isDraggingTarget ? dragBackgroundColor : backgroundColor,
opacity: isDraggingTarget ? 0.5 : 1,
zIndex: hasNextStartTime ? 1 : 0
};
const goingDurationStyle = {
height: toPercent(goingDurationHeight),
borderBottom: `1px dashed ${travelBorderColor}`
};
const modelDurationStyle = {
height: toPercent(modelDurationHeight)
};
const comingDurationStyle = {
height: toPercent(comingDurationHeight),
borderTop: `1px dashed ${travelBorderColor}`
};
if (croppedStart) {
containerStyle.borderTopLeftRadius = 0;
containerStyle.borderTopRightRadius = 0;
}
if (croppedEnd) {
containerStyle.borderBottomLeftRadius = 0;
containerStyle.borderBottomRightRadius = 0;
}
return {
containerStyle,
goingDurationStyle,
modelDurationStyle,
comingDurationStyle
};
}
function isDraggableEvent({
uiModel,
isReadOnlyCalendar,
isDraggingTarget,
hasNextStartTime
}) {
const { model } = uiModel;
return !isReadOnlyCalendar && !model.isReadOnly && !isDraggingTarget && !hasNextStartTime;
}
function TimeEvent({
uiModel,
nextStartTime,
isResizingGuide = false,
minHeight = 0
}) {
const {
useDetailPopup,
isReadOnly: isReadOnlyCalendar,
week: weekOptions
} = useStore(optionsSelector);
const calendarColor = useCalendarColor(uiModel.model);
const { collapseDuplicateEvents } = weekOptions;
const layoutContainer = useLayoutContainer();
const { showDetailPopup } = useDispatch("popup");
const { setDraggingEventUIModel } = useDispatch("dnd");
const { setSelectedDuplicateEventCid } = useDispatch("weekViewLayout");
const eventBus = useEventBus();
const eventContainerRef = s$2(null);
const [isDraggingTarget, setIsDraggingTarget] = y$1(false);
const { model, goingDurationHeight, modelDurationHeight, comingDurationHeight, croppedEnd } = uiModel;
const { id, calendarId, customStyle } = model;
const hasNextStartTime = isPresent(nextStartTime);
const { containerStyle, goingDurationStyle, modelDurationStyle, comingDurationStyle } = getStyles({ uiModel, isDraggingTarget, hasNextStartTime, calendarColor, minHeight });
const isGuide = hasNextStartTime || isResizingGuide;
useTransientUpdate(dndSelector, ({ draggingEventUIModel, draggingState }) => {
if (draggingState === DraggingState.DRAGGING && (draggingEventUIModel == null ? void 0 : draggingEventUIModel.cid()) === uiModel.cid() && !hasNextStartTime && !isResizingGuide) {
setIsDraggingTarget(true);
} else {
setIsDraggingTarget(false);
}
});
_$2(() => {
if (!isResizingGuide) {
eventBus.fire("afterRenderEvent", uiModel.model.toEventObject());
}
}, []);
const startDragEvent = (className2) => {
setDraggingEventUIModel(uiModel);
layoutContainer == null ? void 0 : layoutContainer.classList.add(className2);
};
const endDragEvent = (className2) => {
setIsDraggingTarget(false);
layoutContainer == null ? void 0 : layoutContainer.classList.remove(className2);
};
const onMoveStart = useDrag(DRAGGING_TYPE_CREATORS.moveEvent("timeGrid", `${uiModel.cid()}`), {
onDragStart: () => {
if (isDraggable) {
startDragEvent(classNames$5.moveEvent);
}
},
onMouseUp: (e2, { draggingState }) => {
endDragEvent(classNames$5.moveEvent);
const isClick = draggingState <= DraggingState.INIT;
if (isClick && collapseDuplicateEvents) {
const selectedDuplicateEventCid = uiModel.duplicateEvents.length > 0 ? uiModel.cid() : DEFAULT_DUPLICATE_EVENT_CID;
setSelectedDuplicateEventCid(selectedDuplicateEventCid);
}
if (isClick && useDetailPopup && eventContainerRef.current) {
showDetailPopup({
event: uiModel.model,
eventRect: eventContainerRef.current.getBoundingClientRect()
}, false);
}
if (isClick) {
eventBus.fire("clickEvent", { event: uiModel.model.toEventObject(), nativeEvent: e2 });
}
},
onPressESCKey: () => endDragEvent(classNames$5.moveEvent)
});
const handleMoveStart = (e2) => {
e2.stopPropagation();
onMoveStart(e2);
};
const onResizeStart = useDrag(DRAGGING_TYPE_CREATORS.resizeEvent("timeGrid", `${uiModel.cid()}`), {
onDragStart: () => startDragEvent(classNames$5.resizeEvent),
onMouseUp: () => endDragEvent(classNames$5.resizeEvent),
onPressESCKey: () => endDragEvent(classNames$5.resizeEvent)
});
const handleResizeStart = (e2) => {
e2.stopPropagation();
onResizeStart(e2);
};
const isDraggable = isDraggableEvent({
uiModel,
isReadOnlyCalendar,
isDraggingTarget,
hasNextStartTime
});
const shouldShowResizeHandle = isDraggable && !croppedEnd;
return /* @__PURE__ */ h$3("div", {
"data-testid": `${isGuide ? "guide-" : ""}time-event-${model.title}-${uiModel.cid()}`,
"data-calendar-id": calendarId,
"data-event-id": id,
className: classNames$5.time,
style: __spreadValues(__spreadValues({}, containerStyle), customStyle),
onMouseDown: handleMoveStart,
ref: eventContainerRef
}, goingDurationHeight ? /* @__PURE__ */ h$3("div", {
className: classNames$5.travelTime,
style: goingDurationStyle
}, /* @__PURE__ */ h$3(Template, {
template: "goingDuration",
param: model
})) : null, modelDurationHeight ? /* @__PURE__ */ h$3("div", {
className: classNames$5.content,
style: modelDurationStyle
}, /* @__PURE__ */ h$3(Template, {
template: "time",
param: __spreadProps(__spreadValues({}, model.toEventObject()), {
start: hasNextStartTime ? nextStartTime : model.start
})
})) : null, comingDurationHeight ? /* @__PURE__ */ h$3("div", {
className: classNames$5.travelTime,
style: comingDurationStyle
}, /* @__PURE__ */ h$3(Template, {
template: "comingDuration",
param: model
})) : null, shouldShowResizeHandle ? /* @__PURE__ */ h$3("div", {
className: classNames$5.resizeHandleX,
onMouseDown: handleResizeStart
}) : null);
}
function GridSelection({ top, height, text }) {
const { backgroundColor, border } = useTheme(T$1((theme) => theme.common.gridSelection, []));
const color = useTheme(T$1((theme) => theme.week.gridSelection.color, []));
const style = {
top: toPercent(top),
height: toPercent(height),
backgroundColor,
border
};
return /* @__PURE__ */ h$3("div", {
className: cls("time", "grid-selection"),
style,
"data-testid": `time-grid-selection-${top}-${height}`
}, text.length > 0 ? /* @__PURE__ */ h$3("span", {
className: cls("grid-selection-label"),
style: { color }
}, text) : null);
}
function GridSelectionByColumn({ columnIndex, timeGridRows }) {
const gridSelectionData = useStore(T$1((state) => timeGridSelectionHelper.calculateSelection(state.gridSelection.timeGrid, columnIndex, timeGridRows.length - 1), [columnIndex, timeGridRows]));
const gridSelectionProps = F$2(() => {
if (!gridSelectionData) {
return null;
}
const { startRowIndex, endRowIndex, isStartingColumn, isSelectingMultipleColumns } = gridSelectionData;
const { top: startRowTop, startTime: startRowStartTime } = timeGridRows[startRowIndex];
const {
top: endRowTop,
height: endRowHeight,
endTime: endRowEndTime
} = timeGridRows[endRowIndex];
const gridSelectionHeight = endRowTop + endRowHeight - startRowTop;
let text = `${startRowStartTime} - ${endRowEndTime}`;
if (isSelectingMultipleColumns) {
text = isStartingColumn ? startRowStartTime : "";
}
return {
top: startRowTop,
height: gridSelectionHeight,
text
};
}, [gridSelectionData, timeGridRows]);
if (isNil(gridSelectionProps)) {
return null;
}
return /* @__PURE__ */ h$3(GridSelection, __spreadValues({}, gridSelectionProps));
}
function useTimeGridEventResize({
gridPositionFinder,
totalUIModels,
columnIndex,
timeGridData
}) {
const eventBus = useEventBus();
const {
isDraggingEnd,
isDraggingCanceled,
draggingEvent: resizingStartUIModel,
clearDraggingEvent
} = useDraggingEvent("timeGrid", "resize");
const [currentGridPos, clearCurrentGridPos] = useCurrentPointerPositionInGrid(gridPositionFinder);
const [guideUIModel, setGuideUIModel] = y$1(null);
const clearStates = T$1(() => {
setGuideUIModel(null);
clearDraggingEvent();
clearCurrentGridPos();
}, [clearCurrentGridPos, clearDraggingEvent]);
const baseResizingInfo = F$2(() => {
if (isNil(resizingStartUIModel)) {
return null;
}
const { columns, rows } = timeGridData;
const resizeTargetUIModelColumns = totalUIModels.map((uiModels) => uiModels.filter((uiModel) => uiModel.cid() === resizingStartUIModel.cid()));
const findRowIndexOf = (targetDate, targetColumnIndex) => (row) => {
const rowStartTZDate = setTimeStrToDate(columns[targetColumnIndex].date, row.startTime);
const rowEndTZDate = setTimeStrToDate(timeGridData.columns[targetColumnIndex].date, row.endTime);
return rowStartTZDate <= targetDate && targetDate < rowEndTZDate;
};
const eventStartDateColumnIndex = resizeTargetUIModelColumns.findIndex((row) => row.length > 0);
const resizingStartEventUIModel = resizeTargetUIModelColumns[eventStartDateColumnIndex][0];
const { goingDuration = 0 } = resizingStartEventUIModel.model;
const renderStart = addMinutes(resizingStartEventUIModel.getStarts(), -goingDuration);
const eventStartDateRowIndex = Math.max(rows.findIndex(findRowIndexOf(renderStart, eventStartDateColumnIndex)), 0);
const eventEndDateColumnIndex = findLastIndex(resizeTargetUIModelColumns, (row) => row.length > 0);
const resizingEndEventUIModel = resizeTargetUIModelColumns[eventEndDateColumnIndex][0];
const { comingDuration = 0 } = resizingEndEventUIModel.model;
const renderEnd = addMinutes(resizingEndEventUIModel.getStarts(), comingDuration);
let eventEndDateRowIndex = rows.findIndex(findRowIndexOf(renderEnd, eventEndDateColumnIndex));
eventEndDateRowIndex = eventEndDateRowIndex >= 0 ? eventEndDateRowIndex : rows.length - 1;
return {
eventStartDateColumnIndex,
eventStartDateRowIndex,
eventEndDateColumnIndex,
eventEndDateRowIndex,
resizeTargetUIModelColumns
};
}, [resizingStartUIModel, timeGridData, totalUIModels]);
const canCalculateGuideUIModel = isPresent(baseResizingInfo) && isPresent(resizingStartUIModel) && isPresent(currentGridPos);
const oneRowHeight = F$2(() => baseResizingInfo ? timeGridData.rows[0].height : 0, [baseResizingInfo, timeGridData.rows]);
_$2(() => {
if (canCalculateGuideUIModel) {
const { eventStartDateRowIndex, eventStartDateColumnIndex, eventEndDateColumnIndex } = baseResizingInfo;
if (columnIndex === eventEndDateColumnIndex && eventStartDateColumnIndex === eventEndDateColumnIndex) {
const clonedUIModel = resizingStartUIModel.clone();
const { height, goingDurationHeight, comingDurationHeight } = clonedUIModel;
const newHeight = Math.max(oneRowHeight + goingDurationHeight * height / 100 + comingDurationHeight * height / 100, timeGridData.rows[currentGridPos.rowIndex].top - timeGridData.rows[eventStartDateRowIndex].top + oneRowHeight);
const newGoingDurationHeight = goingDurationHeight * height / newHeight;
const newComingDurationHeight = comingDurationHeight * height / newHeight;
clonedUIModel.setUIProps({
height: newHeight,
goingDurationHeight: newGoingDurationHeight,
comingDurationHeight: newComingDurationHeight,
modelDurationHeight: 100 - (newGoingDurationHeight + newComingDurationHeight)
});
setGuideUIModel(clonedUIModel);
}
}
}, [
baseResizingInfo,
canCalculateGuideUIModel,
columnIndex,
currentGridPos,
resizingStartUIModel,
timeGridData.rows,
oneRowHeight
]);
_$2(() => {
if (canCalculateGuideUIModel) {
const { resizeTargetUIModelColumns, eventStartDateColumnIndex, eventEndDateColumnIndex } = baseResizingInfo;
if ((columnIndex === eventStartDateColumnIndex || columnIndex === eventEndDateColumnIndex) && eventStartDateColumnIndex !== eventEndDateColumnIndex) {
let clonedUIModel;
if (columnIndex === eventStartDateColumnIndex) {
clonedUIModel = resizeTargetUIModelColumns[columnIndex][0].clone();
} else {
clonedUIModel = resizingStartUIModel.clone();
clonedUIModel.setUIProps({
height: timeGridData.rows[currentGridPos.rowIndex].top + oneRowHeight
});
}
setGuideUIModel(clonedUIModel);
}
}
}, [
baseResizingInfo,
canCalculateGuideUIModel,
columnIndex,
currentGridPos,
resizingStartUIModel,
timeGridData.rows,
oneRowHeight
]);
useWhen(() => {
const shouldUpdate = !isDraggingCanceled && isPresent(baseResizingInfo) && isPresent(currentGridPos) && isPresent(resizingStartUIModel) && baseResizingInfo.eventEndDateColumnIndex === columnIndex;
if (shouldUpdate) {
const { comingDuration = 0 } = resizingStartUIModel.model;
const targetEndDate = addMinutes(setTimeStrToDate(timeGridData.columns[columnIndex].date, timeGridData.rows[currentGridPos.rowIndex].endTime), -comingDuration);
const minEndDate = addMinutes(resizingStartUIModel.getStarts(), 30);
eventBus.fire("beforeUpdateEvent", {
event: resizingStartUIModel.model.toEventObject(),
changes: {
end: max(minEndDate, targetEndDate)
}
});
}
clearStates();
}, isDraggingEnd);
return guideUIModel;
}
function ResizingGuideByColumn({
gridPositionFinder,
totalUIModels,
columnIndex,
timeGridData
}) {
const guideUIModel = useTimeGridEventResize({
gridPositionFinder,
totalUIModels,
columnIndex,
timeGridData
});
if (isNil(guideUIModel)) {
return null;
}
return /* @__PURE__ */ h$3(TimeEvent, {
uiModel: guideUIModel,
isResizingGuide: true
});
}
const classNames$4 = {
column: cls("column"),
backgrounds: cls("background-events"),
events: cls("events")
};
function VerticalEvents({
eventUIModels,
minEventHeight
}) {
const style = { marginRight: 8 };
return /* @__PURE__ */ h$3("div", {
className: classNames$4.events,
style
}, eventUIModels.map((eventUIModel) => /* @__PURE__ */ h$3(TimeEvent, {
key: `${eventUIModel.valueOf()}-${eventUIModel.cid()}`,
uiModel: eventUIModel,
minHeight: minEventHeight
})));
}
function backgroundColorSelector$1(theme) {
return {
defaultBackgroundColor: theme.week.dayGrid.backgroundColor,
todayBackgroundColor: theme.week.today.backgroundColor,
weekendBackgroundColor: theme.week.weekend.backgroundColor
};
}
function getBackgroundColor({
today,
columnDate,
defaultBackgroundColor,
todayBackgroundColor,
weekendBackgroundColor
}) {
const isTodayColumn = isSameDate(today, columnDate);
const isWeekendColumn = isWeekend(columnDate.getDay());
if (isTodayColumn) {
return todayBackgroundColor;
}
if (isWeekendColumn) {
return weekendBackgroundColor;
}
return defaultBackgroundColor;
}
const Column = g$1(function Column2({
columnDate,
columnWidth,
columnIndex,
totalUIModels,
gridPositionFinder,
timeGridData,
isLastColumn
}) {
const { rows: timeGridRows } = timeGridData;
const borderRight = useTheme(T$1((theme) => theme.week.timeGrid.borderRight, []));
const backgroundColorTheme = useTheme(backgroundColorSelector$1);
const [, getNow] = usePrimaryTimezone();
const today = getNow();
const backgroundColor = getBackgroundColor(__spreadValues({ today, columnDate }, backgroundColorTheme));
const style = {
width: columnWidth,
backgroundColor,
borderRight: isLastColumn ? "none" : borderRight
};
const uiModelsByColumn = totalUIModels[columnIndex];
const minEventHeight = timeGridRows[0].height;
return /* @__PURE__ */ h$3("div", {
className: classNames$4.column,
style,
"data-testid": `timegrid-column-${columnDate.getDay()}`
}, /* @__PURE__ */ h$3(VerticalEvents, {
eventUIModels: uiModelsByColumn,
minEventHeight
}), /* @__PURE__ */ h$3(ResizingGuideByColumn, {
gridPositionFinder,
totalUIModels,
columnIndex,
timeGridData
}), /* @__PURE__ */ h$3(GridSelectionByColumn, {
columnIndex,
timeGridRows
}));
});
function gridLineBorderSelector(theme) {
return {
halfHourLineBorder: theme.week.timeGridHalfHourLine.borderBottom,
hourLineBorder: theme.week.timeGridHourLine.borderBottom
};
}
const GridLines = g$1(function GridLines2({
timeGridRows
}) {
const { halfHourLineBorder, hourLineBorder } = useTheme(gridLineBorderSelector);
return /* @__PURE__ */ h$3("div", {
className: cls("gridlines")
}, timeGridRows.map((time, index) => {
const isUpperLine = index % 2 === 0;
return /* @__PURE__ */ h$3("div", {
key: `gridline-${time.startTime}-${time.endTime}`,
className: cls("gridline-half"),
style: {
top: toPercent(time.top),
height: toPercent(time.height),
borderBottom: isUpperLine ? halfHourLineBorder : hourLineBorder
},
"data-testid": `gridline-${time.startTime}-${time.endTime}`
});
}));
});
const THIRTY_MINUTES = 30;
function getCurrentIndexByTime(time, hourStart) {
const hour = time.getHours() - hourStart;
const minutes = time.getMinutes();
return hour * 2 + Math.floor(minutes / THIRTY_MINUTES);
}
function getMovingEventPosition({
draggingEvent,
columnDiff,
rowDiff,
timeGridDataRows,
currentDate
}) {
const rowHeight = timeGridDataRows[0].height;
const maxHeight = rowHeight * timeGridDataRows.length;
const millisecondsDiff = rowDiff * MS_PER_THIRTY_MINUTES + columnDiff * MS_PER_DAY;
const hourStart = Number(timeGridDataRows[0].startTime.split(":")[0]);
const { goingDuration = 0, comingDuration = 0 } = draggingEvent.model;
const goingStart = addMinutes(draggingEvent.getStarts(), -goingDuration);
const comingEnd = addMinutes(draggingEvent.getEnds(), comingDuration);
const nextStart = addMilliseconds(goingStart, millisecondsDiff);
const nextEnd = addMilliseconds(comingEnd, millisecondsDiff);
const startIndex = Math.max(getCurrentIndexByTime(nextStart, hourStart), 0);
const endIndex = Math.min(getCurrentIndexByTime(nextEnd, hourStart), timeGridDataRows.length - 1);
const isStartAtPrevDate = nextStart.getFullYear() < currentDate.getFullYear() || nextStart.getMonth() < currentDate.getMonth() || nextStart.getDate() < currentDate.getDate();
const isEndAtNextDate = nextEnd.getFullYear() > currentDate.getFullYear() || nextEnd.getMonth() > currentDate.getMonth() || nextEnd.getDate() > currentDate.getDate();
const indexDiff = endIndex - (isStartAtPrevDate ? 0 : startIndex);
const top = isStartAtPrevDate ? 0 : timeGridDataRows[startIndex].top;
const height = isEndAtNextDate ? maxHeight : Math.max(indexDiff, 1) * rowHeight;
return { top, height };
}
const initXSelector = (state) => state.dnd.initX;
const initYSelector = (state) => state.dnd.initY;
function useTimeGridEventMove({
gridPositionFinder,
timeGridData
}) {
const initX = useStore(initXSelector);
const initY = useStore(initYSelector);
const eventBus = useEventBus();
const { isDraggingEnd, isDraggingCanceled, draggingEvent, clearDraggingEvent } = useDraggingEvent("timeGrid", "move");
const [currentGridPos, clearCurrentGridPos] = useCurrentPointerPositionInGrid(gridPositionFinder);
const initGridPosRef = s$2(null);
_$2(() => {
if (isPresent(initX) && isPresent(initY)) {
initGridPosRef.current = gridPositionFinder({
clientX: initX,
clientY: initY
});
}
}, [gridPositionFinder, initX, initY]);
const gridDiff = F$2(() => {
if (isNil(initGridPosRef.current) || isNil(currentGridPos)) {
return null;
}
return {
columnDiff: currentGridPos.columnIndex - initGridPosRef.current.columnIndex,
rowDiff: currentGridPos.rowIndex - initGridPosRef.current.rowIndex
};
}, [currentGridPos]);
const startDateTime = F$2(() => {
if (isNil(draggingEvent)) {
return null;
}
return draggingEvent.getStarts();
}, [draggingEvent]);
const clearState = T$1(() => {
clearCurrentGridPos();
clearDraggingEvent();
initGridPosRef.current = null;
}, [clearCurrentGridPos, clearDraggingEvent]);
const nextStartTime = F$2(() => {
if (isNil(gridDiff) || isNil(startDateTime)) {
return null;
}
return addMilliseconds(startDateTime, gridDiff.rowDiff * MS_PER_THIRTY_MINUTES + gridDiff.columnDiff * MS_PER_DAY);
}, [gridDiff, startDateTime]);
const movingEvent = F$2(() => {
if (isNil(draggingEvent) || isNil(currentGridPos) || isNil(gridDiff)) {
return null;
}
const clonedEvent = draggingEvent.clone();
const { top, height } = getMovingEventPosition({
draggingEvent: clonedEvent,
columnDiff: gridDiff.columnDiff,
rowDiff: gridDiff.rowDiff,
timeGridDataRows: timeGridData.rows,
currentDate: timeGridData.columns[currentGridPos.columnIndex].date
});
clonedEvent.setUIProps({
left: timeGridData.columns[currentGridPos.columnIndex].left,
width: timeGridData.columns[currentGridPos.columnIndex].width,
top,
height
});
return clonedEvent;
}, [currentGridPos, draggingEvent, gridDiff, timeGridData.columns, timeGridData.rows]);
useWhen(() => {
const shouldUpdate = !isDraggingCanceled && isPresent(draggingEvent) && isPresent(currentGridPos) && isPresent(gridDiff) && isPresent(nextStartTime) && (gridDiff.rowDiff !== 0 || gridDiff.columnDiff !== 0);
if (shouldUpdate) {
const duration = draggingEvent.duration();
const nextEndTime = addMilliseconds(nextStartTime, duration);
eventBus.fire("beforeUpdateEvent", {
event: draggingEvent.model.toEventObject(),
changes: {
start: nextStartTime,
end: nextEndTime
}
});
}
clearState();
}, isDraggingEnd);
return {
movingEvent,
nextStartTime
};
}
function MovingEventShadow$1({
gridPositionFinder,
timeGridData
}) {
const { movingEvent, nextStartTime } = useTimeGridEventMove({
gridPositionFinder,
timeGridData
});
if (isNil(movingEvent)) {
return null;
}
return /* @__PURE__ */ h$3(TimeEvent, {
uiModel: movingEvent,
nextStartTime
});
}
const TEST_IDS = {
NOW_INDICATOR: "timegrid-now-indicator",
NOW_INDICATOR_LABEL: "timegrid-now-indicator-label"
};
const classNames$3 = {
line: cls(addTimeGridPrefix("now-indicator")),
left: cls(addTimeGridPrefix("now-indicator-left")),
marker: cls(addTimeGridPrefix("now-indicator-marker")),
today: cls(addTimeGridPrefix("now-indicator-today")),
right: cls(addTimeGridPrefix("now-indicator-right"))
};
function nowIndicatorTheme(theme) {
return {
pastBorder: theme.week.nowIndicatorPast.border,
todayBorder: theme.week.nowIndicatorToday.border,
futureBorder: theme.week.nowIndicatorFuture.border,
bulletBackgroundColor: theme.week.nowIndicatorBullet.backgroundColor
};
}
function NowIndicator({ top, columnWidth, columnCount, columnIndex }) {
const { pastBorder, todayBorder, futureBorder, bulletBackgroundColor } = useTheme(nowIndicatorTheme);
const layoutContainer = useLayoutContainer();
const eventBus = useEventBus();
const indicatorRef = s$2(null);
const leftLine = {
left: toPercent(columnWidth * columnIndex),
width: toPercent(columnWidth * columnIndex)
};
const rightLine = {
left: toPercent(columnWidth * (columnIndex + 1))
};
_$2(() => {
const scrollToNow = (behavior) => {
var _a;
const scrollArea = (_a = layoutContainer == null ? void 0 : layoutContainer.querySelector(`.${cls("panel")}.${cls("time")}`)) != null ? _a : null;
if (scrollArea && indicatorRef.current) {
const { offsetHeight: scrollAreaOffsetHeight } = scrollArea;
const { offsetTop: targetOffsetTop } = indicatorRef.current;
const newScrollTop = targetOffsetTop - scrollAreaOffsetHeight / 2;
if (scrollArea.scrollTo) {
scrollArea.scrollTo({ top: newScrollTop, behavior });
} else {
scrollArea.scrollTop = newScrollTop;
}
}
};
eventBus.on("scrollToNow", scrollToNow);
return () => eventBus.off("scrollToNow", scrollToNow);
}, [eventBus, layoutContainer]);
_$2(() => {
eventBus.fire("scrollToNow", "smooth");
}, [eventBus]);
return /* @__PURE__ */ h$3("div", {
ref: indicatorRef,
className: classNames$3.line,
style: { top: toPercent(top) },
"data-testid": TEST_IDS.NOW_INDICATOR
}, /* @__PURE__ */ h$3("div", {
className: classNames$3.left,
style: { width: leftLine.width, borderTop: pastBorder }
}), /* @__PURE__ */ h$3("div", {
className: classNames$3.marker,
style: { left: leftLine.left, backgroundColor: bulletBackgroundColor }
}), /* @__PURE__ */ h$3("div", {
className: classNames$3.today,
style: {
left: leftLine.left,
width: toPercent(columnWidth),
borderTop: todayBorder
}
}), /* @__PURE__ */ h$3("div", {
className: classNames$3.right,
style: {
left: rightLine.left,
borderTop: futureBorder
}
}));
}
const classNames$2 = {
now: addTimeGridPrefix("current-time"),
dayDifference: addTimeGridPrefix("day-difference")
};
function NowIndicatorLabel({ unit, top, now, zonedNow }) {
const color = useTheme(T$1((theme) => theme.week.nowIndicatorLabel.color, []));
const dateDifference = F$2(() => {
return getDateDifference(zonedNow, now);
}, [zonedNow, now]);
const model = {
unit,
time: zonedNow,
format: timeFormats[unit]
};
return /* @__PURE__ */ h$3("div", {
className: cls(classNames$2.now),
style: { top: toPercent(top), color },
"data-testid": TEST_IDS.NOW_INDICATOR_LABEL
}, dateDifference !== 0 && /* @__PURE__ */ h$3("span", {
className: cls(classNames$2.dayDifference)
}, `[${dateDifference > 0 ? "+" : "-"}${Math.abs(dateDifference)}]`), /* @__PURE__ */ h$3(Template, {
template: "timegridNowIndicatorLabel",
param: model,
as: "span"
}));
}
const monthVisibleEventCountSelector = (state) => {
var _a;
return (_a = state.options.month.visibleEventCount) != null ? _a : 6;
};
const showNowIndicatorOptionSelector = (state) => state.options.week.showNowIndicator;
const showTimezoneCollapseButtonOptionSelector = (state) => {
var _a;
return (_a = state.options.week.showTimezoneCollapseButton) != null ? _a : false;
};
const timezonesCollapsedOptionSelector = (state) => {
var _a;
return (_a = state.options.week.timezonesCollapsed) != null ? _a : false;
};
const classNames$1 = {
timeColumn: addTimeGridPrefix("time-column"),
hourRows: addTimeGridPrefix("hour-rows"),
time: addTimeGridPrefix("time"),
first: addTimeGridPrefix("time-first"),
last: addTimeGridPrefix("time-last"),
hidden: addTimeGridPrefix("time-hidden")
};
function backgroundColorSelector(theme) {
return {
primaryTimezoneBackgroundColor: theme.week.timeGridLeft.backgroundColor,
subTimezoneBackgroundColor: theme.week.timeGridLeftAdditionalTimezone.backgroundColor
};
}
function timeColorSelector(theme) {
return {
pastTimeColor: theme.week.pastTime.color,
futureTimeColor: theme.week.futureTime.color
};
}
function HourRows({ rowsInfo, isPrimary, borderRight, width, nowIndicatorState }) {
var _a;
const showNowIndicator = useStore(showNowIndicatorOptionSelector);
const { primaryTimezoneBackgroundColor, subTimezoneBackgroundColor } = useTheme(backgroundColorSelector);
const { pastTimeColor, futureTimeColor } = useTheme(timeColorSelector);
const zonedNow = isPresent(nowIndicatorState) ? addMinutes(nowIndicatorState.now, (_a = rowsInfo[0].diffFromPrimaryTimezone) != null ? _a : 0) : null;
const backgroundColor = isPrimary ? primaryTimezoneBackgroundColor : subTimezoneBackgroundColor;
return /* @__PURE__ */ h$3("div", {
role: "rowgroup",
className: cls(classNames$1.hourRows),
style: { width: toPercent(width), borderRight, backgroundColor }
}, rowsInfo.map(({ date: date2, top, className: className2 }) => {
const isPast = isPresent(zonedNow) && date2 < zonedNow;
const color = isPast ? pastTimeColor : futureTimeColor;
return /* @__PURE__ */ h$3("div", {
key: date2.getTime(),
className: className2,
style: {
top: toPercent(top),
color
},
role: "row"
}, /* @__PURE__ */ h$3(Template, {
template: `timegridDisplay${isPrimary ? "Primary" : ""}Time`,
param: { time: date2 },
as: "span"
}));
}), showNowIndicator && isPresent(nowIndicatorState) && isPresent(zonedNow) && /* @__PURE__ */ h$3(NowIndicatorLabel, {
unit: "hour",
top: nowIndicatorState.top,
now: nowIndicatorState.now,
zonedNow
}));
}
const TimeColumn = g$1(function TimeColumn2({ timeGridRows, nowIndicatorState }) {
const showNowIndicator = useStore(showNowIndicatorOptionSelector);
const timezones = useStore(timezonesSelector);
const timezonesCollapsed = useStore(timezonesCollapsedOptionSelector);
const tzConverter = useTZConverter();
const { width, borderRight } = useTheme(weekTimeGridLeftSelector);
const rowsByHour = F$2(() => timeGridRows.filter((_2, index) => index % 2 === 0 || index === timeGridRows.length - 1), [timeGridRows]);
const hourRowsPropsMapper = T$1((row, index, diffFromPrimaryTimezone) => {
const shouldHideRow = ({ top: rowTop, height: rowHeight }) => {
if (!showNowIndicator || isNil(nowIndicatorState)) {
return false;
}
const indicatorTop = nowIndicatorState.top;
return rowTop - rowHeight <= indicatorTop && indicatorTop <= rowTop + rowHeight;
};
const isFirst = index === 0;
const isLast = index === rowsByHour.length - 1;
const className2 = cls(classNames$1.time, {
[classNames$1.first]: isFirst,
[classNames$1.last]: isLast,
[classNames$1.hidden]: shouldHideRow(row)
});
let date2 = setTimeStrToDate(new TZDate(), isLast ? row.endTime : row.startTime);
if (isPresent(diffFromPrimaryTimezone)) {
date2 = addMinutes(date2, diffFromPrimaryTimezone);
}
return {
date: date2,
top: row.top,
className: className2,
diffFromPrimaryTimezone
};
}, [rowsByHour, nowIndicatorState, showNowIndicator]);
const [primaryTimezone, ...otherTimezones] = timezones;
const hourRowsWidth = otherTimezones.length > 0 ? 100 / (otherTimezones.length + 1) : 100;
const primaryTimezoneHourRowsProps = rowsByHour.map((row, index) => hourRowsPropsMapper(row, index));
const otherTimezoneHourRowsProps = F$2(() => {
if (otherTimezones.length === 0) {
return [];
}
return otherTimezones.reverse().map((timezone) => {
const { timezoneName } = timezone;
const primaryTimezoneOffset = tzConverter(primaryTimezone.timezoneName).getTimezoneOffset();
const currentTimezoneOffset = tzConverter(timezoneName).getTimezoneOffset();
const diffFromPrimaryTimezone = currentTimezoneOffset - primaryTimezoneOffset;
return rowsByHour.map((row, index) => hourRowsPropsMapper(row, index, diffFromPrimaryTimezone));
});
}, [hourRowsPropsMapper, otherTimezones, primaryTimezone, rowsByHour, tzConverter]);
return /* @__PURE__ */ h$3("div", {
className: cls(classNames$1.timeColumn),
style: { width },
"data-testid": "timegrid-time-column"
}, !timezonesCollapsed && otherTimezoneHourRowsProps.map((rowsInfo) => /* @__PURE__ */ h$3(HourRows, {
key: rowsInfo[0].diffFromPrimaryTimezone,
rowsInfo,
isPrimary: false,
borderRight,
width: hourRowsWidth,
nowIndicatorState
})), /* @__PURE__ */ h$3(HourRows, {
rowsInfo: primaryTimezoneHourRowsProps,
isPrimary: true,
borderRight,
width: timezonesCollapsed ? 100 : hourRowsWidth,
nowIndicatorState
}));
});
function getTopPercentByTime(date2, start, end) {
const startTime = start.getTime();
const endTime = end.getTime();
const time = limit(date2.getTime(), [startTime], [endTime]) - startTime;
const max2 = endTime - startTime;
const topPercent = ratio(max2, 100, time);
return limit(topPercent, [0], [100]);
}
function getTopHeightByTime(start, end, minTime, maxTime) {
const top = getTopPercentByTime(start, minTime, maxTime);
const bottom = getTopPercentByTime(end, minTime, maxTime);
const height = bottom - top;
return {
top,
height
};
}
const MIN_HEIGHT_PERCENT = 1;
function isBetween(startColumnTime, endColumnTime) {
return (uiModel) => {
const { goingDuration = 0, comingDuration = 0 } = uiModel.model;
const ownStarts = addMinutes(uiModel.getStarts(), -goingDuration);
const ownEnds = addMinutes(uiModel.getEnds(), comingDuration);
return !(ownEnds <= startColumnTime || ownStarts >= endColumnTime);
};
}
function setInnerHeights(uiModel, options) {
const { renderStart, renderEnd, modelStart, modelEnd } = options;
const { goingDuration = 0, comingDuration = 0 } = uiModel.model;
let modelDurationHeight = 100;
if (goingDuration > 0) {
const { height: goingDurationHeight } = getTopHeightByTime(renderStart, modelStart, renderStart, renderEnd);
uiModel.goingDurationHeight = goingDurationHeight;
modelDurationHeight -= goingDurationHeight;
}
if (comingDuration > 0) {
const { height: comingDurationHeight } = getTopHeightByTime(modelEnd, renderEnd, renderStart, renderEnd);
uiModel.comingDurationHeight = comingDurationHeight;
modelDurationHeight -= comingDurationHeight;
}
uiModel.modelDurationHeight = modelDurationHeight;
}
function setCroppedEdges(uiModel, options) {
const { goingStart, comingEnd, startColumnTime, endColumnTime } = options;
if (goingStart < startColumnTime) {
uiModel.croppedStart = true;
}
if (comingEnd > endColumnTime) {
uiModel.croppedEnd = true;
}
}
function getDuplicateLeft(uiModel, baseLeft) {
const { duplicateEvents, duplicateEventIndex } = uiModel;
const prevEvent = duplicateEvents[duplicateEventIndex - 1];
let left = baseLeft;
if (prevEvent) {
const { percent: leftPercent, px: leftPx } = extractPercentPx(`${prevEvent.duplicateLeft}`);
const { percent: widthPercent, px: widthPx } = extractPercentPx(`${prevEvent.duplicateWidth}`);
const percent = leftPercent + widthPercent;
const px = leftPx + widthPx + TIME_EVENT_CONTAINER_MARGIN_LEFT;
if (percent !== 0) {
left = `calc(${toPercent(percent)} ${px > 0 ? "+" : "-"} ${toPx(Math.abs(px))})`;
} else {
left = toPx(px);
}
} else {
left = toPercent(left);
}
return left;
}
function getDuplicateWidth(uiModel, baseWidth) {
const { collapse } = uiModel;
return collapse ? `${COLLAPSED_DUPLICATE_EVENT_WIDTH_PX}px` : `calc(${toPercent(baseWidth)} - ${toPx((COLLAPSED_DUPLICATE_EVENT_WIDTH_PX + TIME_EVENT_CONTAINER_MARGIN_LEFT) * (uiModel.duplicateEvents.length - 1) + TIME_EVENT_CONTAINER_MARGIN_LEFT)})`;
}
function setDimension(uiModel, options) {
const { startColumnTime, endColumnTime, baseWidth, columnIndex, renderStart, renderEnd } = options;
const { duplicateEvents } = uiModel;
const { top, height } = getTopHeightByTime(renderStart, renderEnd, startColumnTime, endColumnTime);
const dimension = {
top,
left: baseWidth * columnIndex,
width: baseWidth,
height: Math.max(MIN_HEIGHT_PERCENT, height),
duplicateLeft: "",
duplicateWidth: ""
};
if (duplicateEvents.length > 0) {
dimension.duplicateLeft = getDuplicateLeft(uiModel, dimension.left);
dimension.duplicateWidth = getDuplicateWidth(uiModel, dimension.width);
}
uiModel.setUIProps(dimension);
}
function getRenderInfoOptions(uiModel, columnIndex, baseWidth, startColumnTime, endColumnTime) {
const { goingDuration = 0, comingDuration = 0 } = uiModel.model;
const modelStart = uiModel.getStarts();
const modelEnd = uiModel.getEnds();
const goingStart = addMinutes(modelStart, -goingDuration);
const comingEnd = addMinutes(modelEnd, comingDuration);
const renderStart = max(goingStart, startColumnTime);
const renderEnd = min(comingEnd, endColumnTime);
return {
baseWidth,
columnIndex,
modelStart,
modelEnd,
renderStart,
renderEnd,
goingStart,
comingEnd,
startColumnTime,
endColumnTime,
duplicateEvents: uiModel.duplicateEvents
};
}
function setRenderInfo({
uiModel,
columnIndex,
baseWidth,
startColumnTime,
endColumnTime,
isDuplicateEvent = false
}) {
if (!isDuplicateEvent && uiModel.duplicateEvents.length > 0) {
uiModel.duplicateEvents.forEach((event) => {
setRenderInfo({
uiModel: event,
columnIndex,
baseWidth,
startColumnTime,
endColumnTime,
isDuplicateEvent: true
});
});
return;
}
const renderInfoOptions = getRenderInfoOptions(uiModel, columnIndex, baseWidth, startColumnTime, endColumnTime);
setDimension(uiModel, renderInfoOptions);
setInnerHeights(uiModel, renderInfoOptions);
setCroppedEdges(uiModel, renderInfoOptions);
}
function setDuplicateEvents(uiModels, options, selectedDuplicateEventCid) {
const { getDuplicateEvents, getMainEvent } = options;
const eventObjects = uiModels.map((uiModel) => uiModel.model.toEventObject());
uiModels.forEach((targetUIModel) => {
if (targetUIModel.collapse || targetUIModel.duplicateEvents.length > 0) {
return;
}
const duplicateEvents = getDuplicateEvents(targetUIModel.model.toEventObject(), eventObjects);
if (duplicateEvents.length <= 1) {
return;
}
const mainEvent = getMainEvent(duplicateEvents);
const duplicateEventUIModels = duplicateEvents.map((event) => uiModels.find((uiModel) => uiModel.cid() === event.__cid));
const isSelectedGroup = !!(selectedDuplicateEventCid > DEFAULT_DUPLICATE_EVENT_CID && duplicateEvents.find((event) => event.__cid === selectedDuplicateEventCid));
const duplicateStarts = duplicateEvents.reduce((acc, { start, goingDuration }) => {
const renderStart = addMinutes(start, -goingDuration);
return min(acc, renderStart);
}, duplicateEvents[0].start);
const duplicateEnds = duplicateEvents.reduce((acc, { end, comingDuration }) => {
const renderEnd = addMinutes(end, comingDuration);
return max(acc, renderEnd);
}, duplicateEvents[0].end);
duplicateEventUIModels.forEach((event, index) => {
const isMain = event.cid() === mainEvent.__cid;
const collapse = !(isSelectedGroup && event.cid() === selectedDuplicateEventCid || !isSelectedGroup && isMain);
event.setUIProps({
duplicateEvents: duplicateEventUIModels,
duplicateEventIndex: index,
collapse,
isMain,
duplicateStarts,
duplicateEnds
});
});
});
return uiModels;
}
function setRenderInfoOfUIModels(events, startColumnTime, endColumnTime, selectedDuplicateEventCid, collapseDuplicateEventsOptions) {
const uiModels = events.filter(isTimeEvent).filter(isBetween(startColumnTime, endColumnTime)).sort(array.compare.event.asc);
if (collapseDuplicateEventsOptions) {
setDuplicateEvents(uiModels, collapseDuplicateEventsOptions, selectedDuplicateEventCid);
}
const expandedEvents = uiModels.filter((uiModel) => !uiModel.collapse);
const uiModelColl = createEventCollection(...expandedEvents);
const usingTravelTime = true;
const collisionGroups = getCollisionGroup(expandedEvents, usingTravelTime);
const matrices = getMatrices(uiModelColl, collisionGroups, usingTravelTime);
matrices.forEach((matrix) => {
const maxRowLength = Math.max(...matrix.map((row) => row.length));
const baseWidth = Math.round(100 / maxRowLength);
matrix.forEach((row) => {
row.forEach((uiModel, columnIndex) => {
setRenderInfo({ uiModel, columnIndex, baseWidth, startColumnTime, endColumnTime });
});
});
});
return uiModels;
}
function useInterval(callback, delay) {
const savedCallback = s$2(callback);
_$2(() => {
savedCallback.current = callback;
}, [callback]);
_$2(() => {
const tick = () => savedCallback.current();
const intervalDelay = delay != null ? delay : -1;
if (intervalDelay > 0) {
const id = setInterval(tick, intervalDelay);
return () => clearInterval(id);
}
}, [delay]);
}
function useIsMounted() {
const isMountedRef = s$2(true);
_$2(() => {
return () => {
isMountedRef.current = false;
};
}, []);
return T$1(() => isMountedRef.current, []);
}
const classNames = {
timegrid: cls(className),
scrollArea: cls(addTimeGridPrefix("scroll-area"))
};
function TimeGrid({ timeGridData, events }) {
const {
isReadOnly,
week: { narrowWeekend, startDayOfWeek, collapseDuplicateEvents }
} = useStore(optionsSelector);
const showNowIndicator = useStore(showNowIndicatorOptionSelector);
const selectedDuplicateEventCid = useStore((state) => state.weekViewLayout.selectedDuplicateEventCid);
const [, getNow] = usePrimaryTimezone();
const isMounted = useIsMounted();
const { width: timeGridLeftWidth } = useTheme(weekTimeGridLeftSelector);
const [nowIndicatorState, setNowIndicatorState] = y$1(null);
const { columns, rows } = timeGridData;
const lastColumnIndex = columns.length - 1;
const totalUIModels = F$2(() => columns.map(({ date: date2 }) => events.filter(isBetween(toStartOfDay(date2), toEndOfDay(date2))).map((uiModel) => uiModel.clone())).map((uiModelsByColumn, columnIndex) => setRenderInfoOfUIModels(uiModelsByColumn, setTimeStrToDate(columns[columnIndex].date, first(rows).startTime), setTimeStrToDate(columns[columnIndex].date, last(rows).endTime), selectedDuplicateEventCid, collapseDuplicateEvents)), [columns, rows, events, selectedDuplicateEventCid, collapseDuplicateEvents]);
const currentDateData = F$2(() => {
const now = getNow();
const currentDateIndexInColumns = columns.findIndex((column) => isSameDate(column.date, now));
if (currentDateIndexInColumns < 0) {
return null;
}
const startTime = setTimeStrToDate(columns[currentDateIndexInColumns].date, timeGridData.rows[0].startTime);
const endTime = setTimeStrToDate(columns[currentDateIndexInColumns].date, last(timeGridData.rows).endTime);
return {
startTime,
endTime,
currentDateIndex: currentDateIndexInColumns
};
}, [columns, getNow, timeGridData.rows]);
const [columnsContainer, setColumnsContainer] = useDOMNode();
const gridPositionFinder = F$2(() => createGridPositionFinder({
rowsCount: rows.length,
columnsCount: columns.length,
container: columnsContainer,
narrowWeekend,
startDayOfWeek
}), [columns.length, columnsContainer, narrowWeekend, rows.length, startDayOfWeek]);
const onMouseDown = useGridSelection({
type: "timeGrid",
gridPositionFinder,
selectionSorter: timeGridSelectionHelper.sortSelection,
dateGetter: timeGridSelectionHelper.getDateFromCollection,
dateCollection: timeGridData
});
const updateTimeGridIndicator = T$1(() => {
if (isPresent(currentDateData)) {
const { startTime, endTime } = currentDateData;
const now = getNow();
if (startTime <= now && now <= endTime) {
setNowIndicatorState({
top: getTopPercentByTime(now, startTime, endTime),
now
});
}
}
}, [currentDateData, getNow]);
h$2(() => {
var _a;
if (isMounted()) {
if (((_a = currentDateData == null ? void 0 : currentDateData.currentDateIndex) != null ? _a : -1) >= 0) {
updateTimeGridIndicator();
} else {
setNowIndicatorState(null);
}
}
}, [currentDateData, isMounted, updateTimeGridIndicator]);
useInterval(updateTimeGridIndicator, isPresent(currentDateData) ? MS_PER_MINUTES : null);
return /* @__PURE__ */ h$3("div", {
className: classNames.timegrid
}, /* @__PURE__ */ h$3("div", {
className: classNames.scrollArea
}, /* @__PURE__ */ h$3(TimeColumn, {
timeGridRows: rows,
nowIndicatorState
}), /* @__PURE__ */ h$3("div", {
className: cls("columns"),
style: { left: timeGridLeftWidth },
ref: setColumnsContainer,
onMouseDown: passConditionalProp(!isReadOnly, onMouseDown)
}, /* @__PURE__ */ h$3(GridLines, {
timeGridRows: rows
}), /* @__PURE__ */ h$3(MovingEventShadow$1, {
gridPositionFinder,
timeGridData
}), columns.map((column, index) => /* @__PURE__ */ h$3(Column, {
key: column.date.toString(),
timeGridData,
columnDate: column.date,
columnWidth: toPercent(column.width),
columnIndex: index,
totalUIModels,
gridPositionFinder,
isLastColumn: index === lastColumnIndex
})), showNowIndicator && isPresent(currentDateData) && isPresent(nowIndicatorState) ? /* @__PURE__ */ h$3(NowIndicator, {
top: nowIndicatorState.top,
columnWidth: columns[0].width,
columnCount: columns.length,
columnIndex: currentDateData.currentDateIndex
}) : null)));
}
function TimezoneCollapseButton({ isCollapsed }) {
const eventBus = useEventBus();
const iconClassName = cls("icon", {
"ic-arrow-right": isCollapsed,
"ic-arrow-left": !isCollapsed
});
return /* @__PURE__ */ h$3("button", {
className: cls(addTimeGridPrefix("timezone-collapse-button")),
"aria-expanded": !isCollapsed,
onClick: () => eventBus.fire("clickTimezonesCollapseBtn", isCollapsed)
}, /* @__PURE__ */ h$3("span", {
className: iconClassName,
role: "img"
}));
}
function TimezoneLabel({ label, offset, tooltip, width = 100, left }) {
return /* @__PURE__ */ h$3("div", {
title: tooltip,
className: cls(addTimeGridPrefix("timezone-label")),
style: {
width: toPercent(width),
height: toPercent(100),
left: toPercent(left)
},
role: "gridcell"
}, /* @__PURE__ */ h$3(Template, {
template: "timezoneDisplayLabel",
param: { displayLabel: label, timezoneOffset: offset },
as: "span"
}));
}
function useTimezoneCollapseOptions() {
const showTimezoneCollapseButton = useStore(showTimezoneCollapseButtonOptionSelector);
const timezonesCollapsed = useStore(timezonesCollapsedOptionSelector);
return F$2(() => {
return {
showTimezoneCollapseButton,
timezonesCollapsed
};
}, [showTimezoneCollapseButton, timezonesCollapsed]);
}
function TimezoneLabels({ top }) {
const timezones = useStore(timezonesSelector);
const { width } = useTheme(weekTimeGridLeftSelector);
const tzConverter = useTZConverter();
const { showTimezoneCollapseButton, timezonesCollapsed } = useTimezoneCollapseOptions();
if (timezones.length <= 1) {
return null;
}
const timezoneLabelProps = timezones.map(({ displayLabel, timezoneName, tooltip }) => {
return !isUndefined_1(displayLabel) ? { label: displayLabel, offset: null, tooltip: tooltip != null ? tooltip : timezoneName } : {
label: null,
offset: tzConverter(timezoneName).getTimezoneOffset(),
tooltip: tooltip != null ? tooltip : timezoneName
};
});
const [primaryTimezone, ...restTimezones] = timezoneLabelProps;
const subTimezones = restTimezones.reverse();
const timezonesCount = timezonesCollapsed ? 1 : timezones.length;
const timezoneLabelWidth = 100 / timezonesCount;
return /* @__PURE__ */ h$3("div", {
style: {
top,
width
},
role: "columnheader",
className: cls("timezone-labels-slot")
}, !timezonesCollapsed && subTimezones.map((subTimezone, index) => {
var _a;
return /* @__PURE__ */ h$3(TimezoneLabel, __spreadValues({
key: `subTimezone-${(_a = subTimezone.label) != null ? _a : subTimezone.offset}`,
width: timezoneLabelWidth,
left: timezoneLabelWidth * index
}, subTimezone));
}), showTimezoneCollapseButton && /* @__PURE__ */ h$3(TimezoneCollapseButton, {
isCollapsed: timezonesCollapsed
}), /* @__PURE__ */ h$3(TimezoneLabel, __spreadValues({
width: timezoneLabelWidth,
left: timezoneLabelWidth * subTimezones.length
}, primaryTimezone)));
}
const VIEW_TYPE = {
MONTH: "month",
WEEK: "week",
DAY: "day"
};
const DEFAULT_TASK_PANEL = ["milestone", "task"];
const DEFAULT_EVENT_PANEL = ["allday", "time"];
function getActivePanels(taskView, eventView) {
const activePanels = [];
if (taskView === true) {
activePanels.push(...DEFAULT_TASK_PANEL);
} else if (Array.isArray(taskView)) {
activePanels.push(...taskView);
}
if (eventView === true) {
activePanels.push(...DEFAULT_EVENT_PANEL);
} else if (Array.isArray(eventView)) {
activePanels.push(...eventView);
}
return activePanels;
}
function useEventsWithTimezone(events) {
const primaryTimezoneName = useStore(primaryTimezoneSelector);
const tzConverter = useTZConverter();
return F$2(() => {
if (primaryTimezoneName === "Local") {
return events;
}
const isSystemUsingDST = isUsingDST(new TZDate());
const {
timedEvents = createEventCollection(),
totalEvents = createEventCollection()
} = events.groupBy((eventModel) => eventModel.category === "time" ? "timedEvents" : "totalEvents");
timedEvents.each((eventModel) => {
const clonedEventModel = clone$1(eventModel);
let zonedStart = tzConverter(primaryTimezoneName, clonedEventModel.start);
let zonedEnd = tzConverter(primaryTimezoneName, clonedEventModel.end);
if (isSystemUsingDST) {
if (!isUsingDST(zonedStart)) {
zonedStart = zonedStart.addHours(1);
}
if (!isUsingDST(zonedEnd)) {
zonedEnd = zonedEnd.addHours(1);
}
} else {
if (isUsingDST(zonedStart)) {
zonedStart = zonedStart.addHours(-1);
}
if (isUsingDST(zonedEnd)) {
zonedEnd = zonedEnd.addHours(-1);
}
}
clonedEventModel.start = zonedStart;
clonedEventModel.end = zonedEnd;
totalEvents.add(clonedEventModel);
});
return totalEvents;
}, [events, primaryTimezoneName, tzConverter]);
}
function useCalendarData(calendar, ...filters) {
const filteredEvents = F$2(() => calendar.events.filter(Collection.and(...filters)), [calendar.events, filters]);
const filteredEventsWithTimezone = useEventsWithTimezone(filteredEvents);
return F$2(() => __spreadProps(__spreadValues({}, calendar), {
events: filteredEventsWithTimezone
}), [calendar, filteredEventsWithTimezone]);
}
function isTimeGridDraggingType(draggingItemType) {
return /^(event|gridSelection)\/timeGrid/.test(draggingItemType != null ? draggingItemType : "");
}
function useTimeGridScrollSync(scrollArea, rowCount) {
useTransientUpdate(dndSelector, ({ y: y2, draggingItemType, draggingState }) => {
if (isPresent(scrollArea) && isTimeGridDraggingType(draggingItemType) && draggingState === DraggingState.DRAGGING && isPresent(y2)) {
const { offsetTop, offsetHeight, scrollHeight } = scrollArea;
const scrollBoundary = Math.floor(scrollHeight / rowCount);
const layoutHeight = offsetTop + offsetHeight;
if (y2 < offsetTop + scrollBoundary) {
const scrollDiff = y2 - (offsetTop + scrollBoundary);
scrollArea.scrollTop = Math.max(0, scrollArea.scrollTop + scrollDiff);
} else if (y2 > layoutHeight - scrollBoundary) {
const scrollDiff = y2 - (layoutHeight - scrollBoundary);
scrollArea.scrollTop = Math.min(offsetHeight, scrollArea.scrollTop + scrollDiff);
}
}
});
}
function timegridHeightSelector(state) {
var _a, _b, _c;
return (_c = (_b = (_a = state.weekViewLayout) == null ? void 0 : _a.dayGridRows) == null ? void 0 : _b.time) == null ? void 0 : _c.height;
}
function useTimezoneLabelsTop(timePanel) {
const timeGridPanelHeight = useStore(timegridHeightSelector);
const [stickyTop, setStickyTop] = y$1(null);
h$2(() => {
if (isPresent(timeGridPanelHeight) && timePanel) {
setStickyTop(timePanel.offsetTop);
}
}, [timeGridPanelHeight, timePanel]);
return stickyTop;
}
function useDayViewState() {
const calendar = useStore(calendarSelector);
const options = useStore(optionsSelector);
const { dayGridRows: gridRowLayout, lastPanelType } = useStore(weekViewLayoutSelector);
const { renderDate } = useStore(viewSelector);
return F$2(() => ({
calendar,
options,
gridRowLayout,
lastPanelType,
renderDate
}), [calendar, options, gridRowLayout, lastPanelType, renderDate]);
}
function Day$1() {
var _a, _b;
const { calendar, options, gridRowLayout, lastPanelType, renderDate } = useDayViewState();
const primaryTimezoneName = useStore(primaryTimezoneSelector);
const gridHeaderMarginLeft = useTheme(T$1((theme) => theme.week.dayGridLeft.width, []));
const [timePanel, setTimePanelRef] = useDOMNode();
const weekOptions = options.week;
const { narrowWeekend, startDayOfWeek, workweek, hourStart, hourEnd, eventView, taskView } = weekOptions;
const days = F$2(() => [renderDate], [renderDate]);
const dayNames = getDayNames(days, (_b = (_a = options.week) == null ? void 0 : _a.dayNames) != null ? _b : []);
const { rowStyleInfo, cellWidthMap } = getRowStyleInfo(days.length, narrowWeekend, startDayOfWeek, workweek);
const calendarData = useCalendarData(calendar, options.eventFilter);
const dayGridEvents = F$2(() => {
const getFilterRange = () => {
if (primaryTimezoneName === "Local") {
return [toStartOfDay(days[0]), toEndOfDay(days[0])];
}
return [toStartOfDay(addDate(days[0], -1)), toEndOfDay(addDate(days[0], 1))];
};
const [weekStartDate, weekEndDate] = getFilterRange();
return getWeekViewEvents(days, calendarData, {
narrowWeekend,
hourStart,
hourEnd,
weekStartDate,
weekEndDate
});
}, [calendarData, days, hourEnd, hourStart, narrowWeekend, primaryTimezoneName]);
const timeGridData = F$2(() => createTimeGridData(days, {
hourStart,
hourEnd,
narrowWeekend
}), [days, hourEnd, hourStart, narrowWeekend]);
const activePanels = getActivePanels(taskView, eventView);
const gridRows = activePanels.map((key) => {
var _a2, _b2;
if (key === "time") {
return null;
}
const rowType = key;
return /* @__PURE__ */ h$3(Panel, {
key: rowType,
name: rowType,
resizable: rowType !== lastPanelType
}, rowType === "allday" ? /* @__PURE__ */ h$3(AlldayGridRow, {
events: dayGridEvents[rowType],
rowStyleInfo,
gridColWidthMap: cellWidthMap,
weekDates: days,
height: (_a2 = gridRowLayout[rowType]) == null ? void 0 : _a2.height,
options: weekOptions
}) : /* @__PURE__ */ h$3(OtherGridRow, {
category: rowType,
events: dayGridEvents[rowType],
weekDates: days,
height: (_b2 = gridRowLayout[rowType]) == null ? void 0 : _b2.height,
options: weekOptions,
gridColWidthMap: cellWidthMap
}));
});
useTimeGridScrollSync(timePanel, timeGridData.rows.length);
const stickyTop = useTimezoneLabelsTop(timePanel);
return /* @__PURE__ */ h$3(Layout, {
className: cls("day-view"),
autoAdjustPanels: true
}, /* @__PURE__ */ h$3(Panel, {
name: "day-view-day-names",
initialHeight: WEEK_DAY_NAME_HEIGHT + WEEK_DAY_NAME_BORDER
}, /* @__PURE__ */ h$3(GridHeader, {
type: "week",
dayNames,
marginLeft: gridHeaderMarginLeft,
rowStyleInfo
})), gridRows, activePanels.includes("time") ? /* @__PURE__ */ h$3(Panel, {
name: "time",
autoSize: 1,
ref: setTimePanelRef
}, /* @__PURE__ */ h$3(TimeGrid, {
events: dayGridEvents.time,
timeGridData
}), /* @__PURE__ */ h$3(TimezoneLabels, {
top: stickyTop
})) : null);
}
function AccumulatedGridSelection({ rowIndex, weekDates, narrowWeekend }) {
const gridSelectionDataByRow = useStore(T$1((state) => state.gridSelection.accumulated.dayGridMonth.map((gridSelection) => dayGridMonthSelectionHelper.calculateSelection(gridSelection, rowIndex, weekDates.length)), [rowIndex, weekDates]));
return /* @__PURE__ */ h$3("div", {
className: cls("accumulated-grid-selection")
}, gridSelectionDataByRow.map((gridSelectionData) => gridSelectionData ? /* @__PURE__ */ h$3(GridSelection$1, {
type: "accumulated",
gridSelectionData,
weekDates,
narrowWeekend
}) : null));
}
function MoreEventsButton({ type, number, onClickButton, className: className2 }) {
const { reset } = useDispatch("dnd");
const handleMouseDown = (e2) => {
e2.stopPropagation();
};
const handleClick = () => {
reset();
onClickButton();
};
const exceedButtonTemplate = `monthGrid${type === CellBarType.header ? "Header" : "Footer"}Exceed`;
return /* @__PURE__ */ h$3("button", {
type: "button",
onMouseDown: handleMouseDown,
onClick: handleClick,
className: className2
}, /* @__PURE__ */ h$3(Template, {
template: exceedButtonTemplate,
param: number
}));
}
function getDateColor({
date: date2,
theme,
renderDate,
isToday
}) {
const dayIndex = date2.getDay();
const thisMonth = renderDate.getMonth();
const isSameMonth2 = thisMonth === date2.getMonth();
const {
common: { holiday, saturday, today, dayName },
month: { dayExceptThisMonth, holidayExceptThisMonth }
} = theme;
if (isToday) {
return today.color;
}
if (isSunday(dayIndex)) {
return isSameMonth2 ? holiday.color : holidayExceptThisMonth.color;
}
if (isSaturday(dayIndex)) {
return isSameMonth2 ? saturday.color : dayExceptThisMonth.color;
}
if (!isSameMonth2) {
return dayExceptThisMonth.color;
}
return dayName.color;
}
function useCellHeaderTheme() {
const common = useCommonTheme();
const month = useMonthTheme();
return F$2(() => ({ common, month }), [common, month]);
}
function CellHeader({
type = CellBarType.header,
exceedCount = 0,
date: date2,
onClickExceedCount
}) {
const { renderDate } = useStore(viewSelector);
const [, getNow] = usePrimaryTimezone();
const theme = useCellHeaderTheme();
const height = theme.month.gridCell[`${type}Height`];
const ymd = toFormat(date2, "YYYYMMDD");
const todayYmd = toFormat(getNow(), "YYYYMMDD");
const isToday = ymd === todayYmd;
const templateParam = {
date: toFormat(date2, "YYYY-MM-DD"),
day: date2.getDay(),
hiddenEventCount: exceedCount,
isOtherMonth: date2.getMonth() !== renderDate.getMonth(),
isToday: ymd === todayYmd,
month: date2.getMonth(),
ymd
};
const gridCellDateStyle = { color: getDateColor({ date: date2, theme, isToday, renderDate }) };
const monthGridTemplate = `monthGrid${capitalize(type)}`;
if (isNil(height)) {
return null;
}
return /* @__PURE__ */ h$3("div", {
className: cls(`grid-cell-${type}`),
style: { height }
}, /* @__PURE__ */ h$3("span", {
className: cls("grid-cell-date"),
style: gridCellDateStyle
}, /* @__PURE__ */ h$3(Template, {
template: monthGridTemplate,
param: templateParam
})), exceedCount ? /* @__PURE__ */ h$3(MoreEventsButton, {
type,
number: exceedCount,
onClickButton: onClickExceedCount,
className: cls("grid-cell-more-events")
}) : null);
}
function getSeeMorePopupSize({
grid,
offsetWidth,
eventLength,
layerSize
}) {
const minHeight = getSize(grid).height + MONTH_MORE_VIEW_PADDING * 2;
let width = offsetWidth + MONTH_MORE_VIEW_PADDING * 2;
const { width: moreViewWidth, height: moreViewHeight } = layerSize;
const MAX_DISPLAY_EVENT_COUNT = 10;
width = Math.max(width, MONTH_MORE_VIEW_MIN_WIDTH);
let height = MONTH_MORE_VIEW_HEADER_HEIGHT + MONTH_MORE_VIEW_HEADER_MARGIN_BOTTOM + MONTH_MORE_VIEW_PADDING;
const eventHeight = MONTH_EVENT_HEIGHT + MONTH_EVENT_MARGIN_TOP;
if (eventLength <= MAX_DISPLAY_EVENT_COUNT) {
height += eventHeight * eventLength;
} else {
height += eventHeight * MAX_DISPLAY_EVENT_COUNT;
}
if (moreViewWidth) {
width = moreViewWidth;
}
if (moreViewHeight) {
height = moreViewHeight;
}
if (isNaN(height) || height < minHeight) {
height = minHeight;
}
return { width, height };
}
function getSeeMorePopupPosition(popupSize, appContainerSize, cellRect) {
const {
width: containerWidth,
height: containerHeight,
left: containerLeft,
top: containerTop
} = appContainerSize;
const { width: popupWidth, height: popupHeight } = popupSize;
const containerRight = containerLeft + containerWidth;
const containerBottom = containerTop + containerHeight;
let left = cellRect.left + cellRect.width / 2 - popupWidth / 2;
let { top } = cellRect;
const isLeftOutOfContainer = left < containerLeft;
const isRightOutOfContainer = left + popupWidth > containerRight;
const isUpperOutOfContainer = top < containerTop;
const isLowerOutOfContainer = top + popupHeight > containerBottom;
if (isLeftOutOfContainer) {
left = containerLeft;
}
if (isRightOutOfContainer) {
left = containerRight - popupWidth;
}
if (isUpperOutOfContainer) {
top = containerTop;
}
if (isLowerOutOfContainer) {
top = containerBottom - popupHeight;
}
return { top: top + window.scrollY, left: left + window.scrollX };
}
function getSeeMorePopupRect({
layoutContainer,
cell,
popupSize
}) {
const containerRect = layoutContainer.getBoundingClientRect();
const cellRect = cell.getBoundingClientRect();
const popupPosition = getSeeMorePopupPosition(popupSize, containerRect, cellRect);
return __spreadValues(__spreadValues({}, popupSize), popupPosition);
}
function usePopupPosition(eventLength, parentContainer, layoutContainer) {
const { width: moreViewWidth, height: moreViewHeight } = useTheme(monthMoreViewSelector);
const [container, containerRefCallback] = useDOMNode();
const [popupPosition, setPopupPosition] = y$1(null);
_$2(() => {
if (layoutContainer && parentContainer && container) {
const popupSize = getSeeMorePopupSize({
grid: parentContainer,
offsetWidth: container.offsetWidth,
eventLength,
layerSize: {
width: moreViewWidth,
height: moreViewHeight
}
});
const rect = getSeeMorePopupRect({
cell: container,
layoutContainer,
popupSize
});
setPopupPosition(rect);
}
}, [layoutContainer, container, eventLength, parentContainer, moreViewWidth, moreViewHeight]);
return { popupPosition, containerRefCallback };
}
function weekendBackgroundColorSelector(theme) {
return theme.month.weekend.backgroundColor;
}
function GridCell({ date: date2, events = [], style, parentContainer, contentAreaHeight }) {
const layoutContainer = useLayoutContainer();
const { showSeeMorePopup } = useDispatch("popup");
const backgroundColor = useTheme(weekendBackgroundColorSelector);
const { popupPosition, containerRefCallback } = usePopupPosition(events.length, parentContainer, layoutContainer);
const onOpenSeeMorePopup = T$1(() => {
if (popupPosition) {
showSeeMorePopup({
date: date2,
popupPosition,
events
});
}
}, [date2, events, popupPosition, showSeeMorePopup]);
const exceedCount = getExceedCount(events, contentAreaHeight, MONTH_EVENT_HEIGHT + MONTH_EVENT_MARGIN_TOP);
return /* @__PURE__ */ h$3("div", {
className: cls("daygrid-cell"),
style: __spreadProps(__spreadValues({}, style), { backgroundColor: isWeekend(date2.getDay()) ? backgroundColor : "inherit" }),
ref: containerRefCallback
}, /* @__PURE__ */ h$3(CellHeader, {
type: CellBarType.header,
exceedCount,
date: date2,
onClickExceedCount: onOpenSeeMorePopup
}), /* @__PURE__ */ h$3(CellHeader, {
type: CellBarType.footer,
exceedCount,
date: date2,
onClickExceedCount: onOpenSeeMorePopup
}));
}
const GridRow = g$1(function GridRow2({
week,
rowInfo,
gridDateEventModelMap = {},
contentAreaHeight
}) {
const [container, containerRefCallback] = useDOMNode();
const border = useTheme(T$1((theme) => theme.common.border, []));
return /* @__PURE__ */ h$3("div", {
className: cls("weekday-grid"),
style: { borderTop: border },
ref: containerRefCallback
}, week.map((date2, columnIndex) => {
const dayIndex = date2.getDay();
const { width, left } = rowInfo[columnIndex];
const ymd = toFormat(toStartOfDay(date2), "YYYYMMDD");
return /* @__PURE__ */ h$3(GridCell, {
key: `daygrid-cell-${dayIndex}`,
date: date2,
style: {
width: toPercent(width),
left: toPercent(left)
},
parentContainer: container,
events: gridDateEventModelMap[ymd],
contentAreaHeight
});
}));
});
function GridSelectionByRow({ weekDates, narrowWeekend, rowIndex }) {
const gridSelectionDataByRow = useStore(T$1((state) => dayGridMonthSelectionHelper.calculateSelection(state.gridSelection.dayGridMonth, rowIndex, weekDates.length), [rowIndex, weekDates.length]));
if (isNil(gridSelectionDataByRow)) {
return null;
}
return /* @__PURE__ */ h$3(GridSelection$1, {
type: "month",
gridSelectionData: gridSelectionDataByRow,
weekDates,
narrowWeekend
});
}
const MonthEvents = g$1(function MonthEvents2({
contentAreaHeight,
eventHeight = EVENT_HEIGHT,
events,
name,
className: className2
}) {
const { headerHeight } = useTheme(monthGridCellSelector);
const dayEvents = events.filter(isWithinHeight(contentAreaHeight, eventHeight + MONTH_EVENT_MARGIN_TOP)).map((uiModel) => /* @__PURE__ */ h$3(HorizontalEvent, {
key: `${name}-DayEvent-${uiModel.cid()}`,
uiModel,
eventHeight,
headerHeight: headerHeight != null ? headerHeight : MONTH_CELL_BAR_HEIGHT
}));
return /* @__PURE__ */ h$3("div", {
className: className2
}, dayEvents);
});
function useDayGridMonthEventMove({
dateMatrix,
rowInfo,
gridPositionFinder,
rowIndex
}) {
const eventBus = useEventBus();
const {
isDraggingEnd,
isDraggingCanceled,
draggingEvent: movingEvent,
clearDraggingEvent
} = useDraggingEvent("dayGrid", "move");
const [currentGridPos, clearCurrentGridPos] = useCurrentPointerPositionInGrid(gridPositionFinder);
const movingEventUIModel = F$2(() => {
var _a, _b;
let shadowEventUIModel = null;
if (movingEvent && (currentGridPos == null ? void 0 : currentGridPos.rowIndex) === rowIndex) {
shadowEventUIModel = movingEvent;
shadowEventUIModel.left = rowInfo[(_a = currentGridPos == null ? void 0 : currentGridPos.columnIndex) != null ? _a : 0].left;
shadowEventUIModel.width = rowInfo[(_b = currentGridPos == null ? void 0 : currentGridPos.columnIndex) != null ? _b : 0].width;
}
return shadowEventUIModel;
}, [movingEvent, currentGridPos == null ? void 0 : currentGridPos.rowIndex, currentGridPos == null ? void 0 : currentGridPos.columnIndex, rowIndex, rowInfo]);
useWhen(() => {
const shouldUpdate = !isDraggingCanceled && isPresent(movingEventUIModel) && isPresent(currentGridPos);
if (shouldUpdate) {
const preStartDate = movingEventUIModel.model.getStarts();
const eventDuration = movingEventUIModel.duration();
const currentDate = dateMatrix[currentGridPos.rowIndex][currentGridPos.columnIndex];
const timeOffsetPerDay = getDateDifference(currentDate, preStartDate) * MS_PER_DAY;
const newStartDate = new TZDate(preStartDate.getTime() + timeOffsetPerDay);
const newEndDate = new TZDate(newStartDate.getTime() + eventDuration);
eventBus.fire("beforeUpdateEvent", {
event: movingEventUIModel.model.toEventObject(),
changes: {
start: newStartDate,
end: newEndDate
}
});
}
clearDraggingEvent();
clearCurrentGridPos();
}, isDraggingEnd);
return movingEventUIModel;
}
function MovingEventShadow({ dateMatrix, gridPositionFinder, rowInfo, rowIndex }) {
const movingEvent = useDayGridMonthEventMove({
dateMatrix,
rowInfo,
gridPositionFinder,
rowIndex
});
if (isNil(movingEvent)) {
return null;
}
return /* @__PURE__ */ h$3(HorizontalEvent, {
uiModel: movingEvent,
movingLeft: movingEvent.left,
eventHeight: EVENT_HEIGHT,
headerHeight: MONTH_CELL_PADDING_TOP + MONTH_CELL_BAR_HEIGHT
});
}
function getRowPosOfUIModel(uiModel, dateRow) {
const startColumnIndex = Math.max(getGridDateIndex(uiModel.getStarts(), dateRow), 0);
const endColumnIndex = getGridDateIndex(uiModel.getEnds(), dateRow);
return {
startColumnIndex,
endColumnIndex
};
}
function useDayGridMonthEventResize({
dateMatrix,
gridPositionFinder,
renderedUIModels,
cellWidthMap,
rowIndex
}) {
const eventBus = useEventBus();
const {
isDraggingEnd,
isDraggingCanceled,
draggingEvent: resizingStartUIModel,
clearDraggingEvent
} = useDraggingEvent("dayGrid", "resize");
const [currentGridPos, clearCurrentGridPos] = useCurrentPointerPositionInGrid(gridPositionFinder);
const [guideProps, setGuideProps] = y$1(null);
const clearStates = T$1(() => {
setGuideProps(null);
clearCurrentGridPos();
clearDraggingEvent();
}, [clearCurrentGridPos, clearDraggingEvent]);
const baseResizingInfo = F$2(() => {
if (isNil(resizingStartUIModel)) {
return null;
}
const resizeTargetUIModelRows = renderedUIModels.map(({ uiModels }) => uiModels.filter((uiModel) => uiModel.cid() === resizingStartUIModel.cid()));
const eventStartDateRowIndex = resizeTargetUIModelRows.findIndex((row) => row.length > 0);
const eventEndDateRowIndex = findLastIndex(resizeTargetUIModelRows, (row) => row.length > 0);
const eventStartUIModelPos = getRowPosOfUIModel(resizeTargetUIModelRows[eventStartDateRowIndex][0], dateMatrix[eventStartDateRowIndex]);
const eventEndUIModelPos = getRowPosOfUIModel(resizeTargetUIModelRows[eventEndDateRowIndex][0], dateMatrix[eventEndDateRowIndex]);
return {
eventStartDateColumnIndex: eventStartUIModelPos.startColumnIndex,
eventStartDateRowIndex,
eventEndDateColumnIndex: eventEndUIModelPos.endColumnIndex,
eventEndDateRowIndex,
resizeTargetUIModelRows
};
}, [dateMatrix, renderedUIModels, resizingStartUIModel]);
const canCalculateProps = isPresent(baseResizingInfo) && isPresent(resizingStartUIModel) && isPresent(currentGridPos);
_$2(() => {
if (canCalculateProps && rowIndex === baseResizingInfo.eventStartDateRowIndex) {
const { eventStartDateRowIndex, eventStartDateColumnIndex } = baseResizingInfo;
const clonedUIModel = baseResizingInfo.resizeTargetUIModelRows[eventStartDateRowIndex][0].clone();
let height;
if (eventStartDateRowIndex === currentGridPos.rowIndex) {
height = cellWidthMap[eventStartDateColumnIndex][Math.max(eventStartDateColumnIndex, currentGridPos.columnIndex)];
} else if (eventStartDateRowIndex > currentGridPos.rowIndex) {
height = cellWidthMap[eventStartDateColumnIndex][eventStartDateColumnIndex];
} else {
height = cellWidthMap[eventStartDateColumnIndex][dateMatrix[rowIndex].length - 1];
clonedUIModel.setUIProps({ exceedRight: true });
}
setGuideProps([clonedUIModel, height]);
}
}, [baseResizingInfo, canCalculateProps, cellWidthMap, currentGridPos, dateMatrix, rowIndex]);
_$2(() => {
if (canCalculateProps && baseResizingInfo.eventStartDateRowIndex < rowIndex && rowIndex < currentGridPos.rowIndex) {
const clonedUIModel = resizingStartUIModel.clone();
clonedUIModel.setUIProps({ left: 0, exceedLeft: true, exceedRight: true });
setGuideProps([clonedUIModel, "100%"]);
}
}, [baseResizingInfo, canCalculateProps, currentGridPos, resizingStartUIModel, rowIndex]);
_$2(() => {
if (canCalculateProps && baseResizingInfo.eventStartDateRowIndex < currentGridPos.rowIndex && rowIndex === currentGridPos.rowIndex) {
const clonedUIModel = resizingStartUIModel.clone();
clonedUIModel.setUIProps({ left: 0, exceedLeft: true });
setGuideProps([clonedUIModel, cellWidthMap[0][currentGridPos.columnIndex]]);
}
}, [
baseResizingInfo,
canCalculateProps,
cellWidthMap,
currentGridPos,
resizingStartUIModel,
rowIndex
]);
_$2(() => {
if (canCalculateProps && rowIndex > baseResizingInfo.eventStartDateRowIndex && rowIndex > currentGridPos.rowIndex) {
setGuideProps(null);
}
}, [canCalculateProps, currentGridPos, baseResizingInfo, rowIndex]);
useWhen(() => {
if (canCalculateProps) {
const { eventStartDateColumnIndex, eventStartDateRowIndex } = baseResizingInfo;
const shouldUpdate = !isDraggingCanceled && (currentGridPos.rowIndex === eventStartDateRowIndex && currentGridPos.columnIndex >= eventStartDateColumnIndex || currentGridPos.rowIndex > eventStartDateRowIndex);
if (shouldUpdate) {
const targetEndDate = dateMatrix[currentGridPos.rowIndex][currentGridPos.columnIndex];
eventBus.fire("beforeUpdateEvent", {
event: resizingStartUIModel.model.toEventObject(),
changes: {
end: targetEndDate
}
});
}
}
clearStates();
}, isDraggingEnd);
return guideProps;
}
function ResizingGuideByRow({
dateMatrix,
cellWidthMap,
gridPositionFinder,
renderedUIModels,
rowIndex
}) {
const resizingGuideProps = useDayGridMonthEventResize({
dateMatrix,
gridPositionFinder,
cellWidthMap,
renderedUIModels,
rowIndex
});
if (isNil(resizingGuideProps)) {
return null;
}
const [uiModel, resizingWidth] = resizingGuideProps;
return /* @__PURE__ */ h$3("div", {
className: cls("weekday-events")
}, /* @__PURE__ */ h$3(HorizontalEvent, {
key: `resizing-event-${uiModel.cid()}`,
uiModel,
eventHeight: MONTH_EVENT_HEIGHT,
headerHeight: MONTH_CELL_PADDING_TOP + MONTH_CELL_BAR_HEIGHT,
resizingWidth
}));
}
const TOTAL_PERCENT_HEIGHT = 100;
function useCellContentAreaHeight(eventHeight) {
const visibleEventCount = useStore(monthVisibleEventCountSelector);
const { headerHeight: themeHeaderHeight, footerHeight: themeFooterHeight } = useTheme(monthGridCellSelector);
const ref2 = s$2(null);
const [cellContentAreaHeight, setCellContentAreaHeight] = y$1(0);
_$2(() => {
if (ref2.current) {
const rowHeight = getSize(ref2.current).height;
const headerHeight = MONTH_CELL_PADDING_TOP + (themeHeaderHeight != null ? themeHeaderHeight : MONTH_CELL_BAR_HEIGHT);
const footerHeight = themeFooterHeight != null ? themeFooterHeight : 0;
const baseContentAreaHeight = rowHeight - headerHeight - footerHeight;
const visibleEventCountHeight = visibleEventCount * (eventHeight + MONTH_EVENT_MARGIN_TOP);
setCellContentAreaHeight(Math.min(baseContentAreaHeight, visibleEventCountHeight));
}
}, [themeFooterHeight, themeHeaderHeight, eventHeight, visibleEventCount]);
return { ref: ref2, cellContentAreaHeight };
}
function DayGridMonth({ dateMatrix = [], rowInfo = [], cellWidthMap = [] }) {
const [gridContainer, setGridContainerRef] = useDOMNode();
const calendar = useStore(calendarSelector);
const { ref: ref2, cellContentAreaHeight } = useCellContentAreaHeight(MONTH_EVENT_HEIGHT);
const { eventFilter, month: monthOptions, isReadOnly } = useStore(optionsSelector);
const { narrowWeekend, startDayOfWeek } = monthOptions;
const rowHeight = TOTAL_PERCENT_HEIGHT / dateMatrix.length;
const gridPositionFinder = F$2(() => createGridPositionFinder({
container: gridContainer,
rowsCount: dateMatrix.length,
columnsCount: dateMatrix[0].length,
narrowWeekend,
startDayOfWeek
}), [dateMatrix, gridContainer, narrowWeekend, startDayOfWeek]);
const calendarData = useCalendarData(calendar, eventFilter);
const renderedEventUIModels = F$2(() => dateMatrix.map((week) => getRenderedEventUIModels(week, calendarData, narrowWeekend)), [calendarData, dateMatrix, narrowWeekend]);
const onMouseDown = useGridSelection({
type: "dayGridMonth",
gridPositionFinder,
dateCollection: dateMatrix,
dateGetter: dayGridMonthSelectionHelper.getDateFromCollection,
selectionSorter: dayGridMonthSelectionHelper.sortSelection
});
return /* @__PURE__ */ h$3("div", {
ref: setGridContainerRef,
onMouseDown: passConditionalProp(!isReadOnly, onMouseDown),
className: cls("month-daygrid")
}, dateMatrix.map((week, rowIndex) => {
const { uiModels, gridDateEventModelMap } = renderedEventUIModels[rowIndex];
return /* @__PURE__ */ h$3("div", {
key: `dayGrid-events-${rowIndex}`,
className: cls("month-week-item"),
style: { height: toPercent(rowHeight) },
ref: ref2
}, /* @__PURE__ */ h$3("div", {
className: cls("weekday")
}, /* @__PURE__ */ h$3(GridRow, {
gridDateEventModelMap,
week,
rowInfo,
contentAreaHeight: cellContentAreaHeight
}), /* @__PURE__ */ h$3(MonthEvents, {
name: "month",
events: uiModels,
contentAreaHeight: cellContentAreaHeight,
eventHeight: MONTH_EVENT_HEIGHT,
className: cls("weekday-events")
}), /* @__PURE__ */ h$3(GridSelectionByRow, {
weekDates: week,
narrowWeekend,
rowIndex
}), /* @__PURE__ */ h$3(AccumulatedGridSelection, {
rowIndex,
weekDates: week,
narrowWeekend
})), /* @__PURE__ */ h$3(ResizingGuideByRow, {
dateMatrix,
gridPositionFinder,
rowIndex,
cellWidthMap,
renderedUIModels: renderedEventUIModels
}), /* @__PURE__ */ h$3(MovingEventShadow, {
dateMatrix,
gridPositionFinder,
rowIndex,
rowInfo
}));
}));
}
function getMonthDayNames(options) {
const { dayNames, startDayOfWeek, workweek } = options.month;
const dayIndices = [...Array(7)].map((_2, i2) => (startDayOfWeek + i2) % 7);
const monthDayNames = dayIndices.map((i2) => ({
day: i2,
label: capitalize(dayNames[i2])
}));
return monthDayNames.filter((dayNameInfo) => workweek ? !isWeekend(dayNameInfo.day) : true);
}
function Month$1() {
const options = useStore(optionsSelector);
const { renderDate } = useStore(viewSelector);
const dayNames = getMonthDayNames(options);
const monthOptions = options.month;
const { narrowWeekend, startDayOfWeek, workweek } = monthOptions;
const dateMatrix = F$2(() => createDateMatrixOfMonth(renderDate, monthOptions), [monthOptions, renderDate]);
const { rowStyleInfo, cellWidthMap } = F$2(() => getRowStyleInfo(dayNames.length, narrowWeekend, startDayOfWeek, workweek), [dayNames.length, narrowWeekend, startDayOfWeek, workweek]);
const rowInfo = rowStyleInfo.map((cellStyleInfo, index) => __spreadProps(__spreadValues({}, cellStyleInfo), {
date: dateMatrix[0][index]
}));
return /* @__PURE__ */ h$3(Layout, {
className: cls("month")
}, /* @__PURE__ */ h$3(GridHeader, {
type: "month",
dayNames,
options: monthOptions,
rowStyleInfo
}), /* @__PURE__ */ h$3(DayGridMonth, {
dateMatrix,
rowInfo,
cellWidthMap
}));
}
function useWeekViewState() {
const options = useStore(optionsSelector);
const calendar = useStore(calendarSelector);
const { dayGridRows: gridRowLayout, lastPanelType } = useStore(weekViewLayoutSelector);
const { renderDate } = useStore(viewSelector);
return F$2(() => ({
options,
calendar,
gridRowLayout,
lastPanelType,
renderDate
}), [calendar, gridRowLayout, lastPanelType, options, renderDate]);
}
function Week$1() {
var _a, _b;
const { options, calendar, gridRowLayout, lastPanelType, renderDate } = useWeekViewState();
const gridHeaderMarginLeft = useTheme(T$1((theme) => theme.week.dayGridLeft.width, []));
const primaryTimezoneName = useStore(primaryTimezoneSelector);
const [timePanel, setTimePanelRef] = useDOMNode();
const weekOptions = options.week;
const { narrowWeekend, startDayOfWeek, workweek, hourStart, hourEnd, eventView, taskView } = weekOptions;
const weekDates = F$2(() => getWeekDates(renderDate, weekOptions), [renderDate, weekOptions]);
const dayNames = getDayNames(weekDates, (_b = (_a = options.week) == null ? void 0 : _a.dayNames) != null ? _b : []);
const { rowStyleInfo, cellWidthMap } = getRowStyleInfo(weekDates.length, narrowWeekend, startDayOfWeek, workweek);
const calendarData = useCalendarData(calendar, options.eventFilter);
const eventByPanel = F$2(() => {
const getFilterRange = () => {
if (primaryTimezoneName === "Local") {
return [toStartOfDay(first(weekDates)), toEndOfDay(last(weekDates))];
}
return [toStartOfDay(addDate(first(weekDates), -1)), toEndOfDay(addDate(last(weekDates), 1))];
};
const [weekStartDate, weekEndDate] = getFilterRange();
return getWeekViewEvents(weekDates, calendarData, {
narrowWeekend,
hourStart,
hourEnd,
weekStartDate,
weekEndDate
});
}, [calendarData, hourEnd, hourStart, narrowWeekend, primaryTimezoneName, weekDates]);
const timeGridData = F$2(() => createTimeGridData(weekDates, {
hourStart,
hourEnd,
narrowWeekend
}), [hourEnd, hourStart, narrowWeekend, weekDates]);
const activePanels = getActivePanels(taskView, eventView);
const dayGridRows = activePanels.map((key) => {
var _a2, _b2;
if (key === "time") {
return null;
}
const rowType = key;
return /* @__PURE__ */ h$3(Panel, {
name: rowType,
key: rowType,
resizable: rowType !== lastPanelType
}, rowType === "allday" ? /* @__PURE__ */ h$3(AlldayGridRow, {
events: eventByPanel[rowType],
rowStyleInfo,
gridColWidthMap: cellWidthMap,
weekDates,
height: (_a2 = gridRowLayout[rowType]) == null ? void 0 : _a2.height,
options: weekOptions
}) : /* @__PURE__ */ h$3(OtherGridRow, {
category: rowType,
events: eventByPanel[rowType],
weekDates,
height: (_b2 = gridRowLayout[rowType]) == null ? void 0 : _b2.height,
options: weekOptions,
gridColWidthMap: cellWidthMap
}));
});
const hasTimePanel = F$2(() => activePanels.includes("time"), [activePanels]);
useTimeGridScrollSync(timePanel, timeGridData.rows.length);
const stickyTop = useTimezoneLabelsTop(timePanel);
return /* @__PURE__ */ h$3(Layout, {
className: cls("week-view"),
autoAdjustPanels: true
}, /* @__PURE__ */ h$3(Panel, {
name: "week-view-day-names",
initialHeight: WEEK_DAY_NAME_HEIGHT + WEEK_DAY_NAME_BORDER * 2
}, /* @__PURE__ */ h$3(GridHeader, {
type: "week",
dayNames,
marginLeft: gridHeaderMarginLeft,
options: weekOptions,
rowStyleInfo
})), dayGridRows, hasTimePanel ? /* @__PURE__ */ h$3(Panel, {
name: "time",
autoSize: 1,
ref: setTimePanelRef
}, /* @__PURE__ */ h$3(TimeGrid, {
events: eventByPanel.time,
timeGridData
}), /* @__PURE__ */ h$3(TimezoneLabels, {
top: stickyTop
})) : null);
}
const views = {
month: Month$1,
week: Week$1,
day: Day$1
};
function Main() {
const { currentView } = useStore(viewSelector);
const CurrentViewComponent = F$2(() => views[currentView] || (() => null), [currentView]);
return /* @__PURE__ */ h$3(CurrentViewComponent, null);
}
var r = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i, n = /[&<>"]/;
function o(e2) {
var t2 = String(e2);
return n.test(t2) ? t2.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """) : t2;
}
var a = function(e2, t2) {
return String(e2).replace(/(\n+)/g, "$1" + (t2 || " "));
}, i = function(e2, t2, r2) {
return String(e2).length > 40 || String(e2).indexOf("\n") !== -1 || String(e2).indexOf("<") !== -1;
}, l = {};
function s(e2) {
var t2 = "";
for (var n2 in e2) {
var o2 = e2[n2];
o2 != null && o2 !== "" && (t2 && (t2 += " "), t2 += n2[0] == "-" ? n2 : l[n2] || (l[n2] = n2.replace(/([A-Z])/g, "-$1").toLowerCase()), t2 += ": ", t2 += o2, typeof o2 == "number" && r.test(n2) === false && (t2 += "px"), t2 += ";");
}
return t2 || void 0;
}
function f(e2, t2) {
for (var r2 in t2)
e2[r2] = t2[r2];
return e2;
}
function u(e2, t2) {
return Array.isArray(t2) ? t2.reduce(u, e2) : t2 != null && t2 !== false && e2.push(t2), e2;
}
var c = { shallow: true }, p = [], _ = /^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/, d = /[\s\n\\/='"\0<>]/;
function v() {
this.__d = true;
}
m.render = m;
var g = function(e2, t2) {
return m(e2, t2, c);
}, h = [];
function m(t2, r2, n2) {
r2 = r2 || {}, n2 = n2 || {};
var o2 = l$3.__s;
l$3.__s = true;
var a2 = x(t2, r2, n2);
return l$3.__c && l$3.__c(t2, h), h.length = 0, l$3.__s = o2, a2;
}
function x(r2, n2, l2, c2, g2, h2) {
if (r2 == null || typeof r2 == "boolean")
return "";
if (typeof r2 != "object")
return o(r2);
var m2 = l2.pretty, y2 = m2 && typeof m2 == "string" ? m2 : " ";
if (Array.isArray(r2)) {
for (var b2 = "", S2 = 0; S2 < r2.length; S2++)
m2 && S2 > 0 && (b2 += "\n"), b2 += x(r2[S2], n2, l2, c2, g2, h2);
return b2;
}
var k2, w2 = r2.type, O2 = r2.props, C2 = false;
if (typeof w2 == "function") {
if (C2 = true, !l2.shallow || !c2 && l2.renderRootComponent !== false) {
if (w2 === p$3) {
var A2 = [];
return u(A2, r2.props.children), x(A2, n2, l2, l2.shallowHighOrder !== false, g2, h2);
}
var H2, j2 = r2.__c = { __v: r2, context: n2, props: r2.props, setState: v, forceUpdate: v, __d: true, __h: [] };
l$3.__b && l$3.__b(r2);
var F2 = l$3.__r;
if (w2.prototype && typeof w2.prototype.render == "function") {
var M2 = w2.contextType, T2 = M2 && n2[M2.__c], $2 = M2 != null ? T2 ? T2.props.value : M2.__ : n2;
(j2 = r2.__c = new w2(O2, $2)).__v = r2, j2._dirty = j2.__d = true, j2.props = O2, j2.state == null && (j2.state = {}), j2._nextState == null && j2.__s == null && (j2._nextState = j2.__s = j2.state), j2.context = $2, w2.getDerivedStateFromProps ? j2.state = f(f({}, j2.state), w2.getDerivedStateFromProps(j2.props, j2.state)) : j2.componentWillMount && (j2.componentWillMount(), j2.state = j2._nextState !== j2.state ? j2._nextState : j2.__s !== j2.state ? j2.__s : j2.state), F2 && F2(r2), H2 = j2.render(j2.props, j2.state, j2.context);
} else
for (var L2 = w2.contextType, E2 = L2 && n2[L2.__c], D2 = L2 != null ? E2 ? E2.props.value : L2.__ : n2, N2 = 0; j2.__d && N2++ < 25; )
j2.__d = false, F2 && F2(r2), H2 = w2.call(r2.__c, O2, D2);
return j2.getChildContext && (n2 = f(f({}, n2), j2.getChildContext())), l$3.diffed && l$3.diffed(r2), x(H2, n2, l2, l2.shallowHighOrder !== false, g2, h2);
}
w2 = (k2 = w2).displayName || k2 !== Function && k2.name || function(e2) {
var t2 = (Function.prototype.toString.call(e2).match(/^\s*function\s+([^( ]+)/) || "")[1];
if (!t2) {
for (var r3 = -1, n3 = p.length; n3--; )
if (p[n3] === e2) {
r3 = n3;
break;
}
r3 < 0 && (r3 = p.push(e2) - 1), t2 = "UnnamedComponent" + r3;
}
return t2;
}(k2);
}
var P2, R2, U2 = "<" + w2;
if (O2) {
var W2 = Object.keys(O2);
l2 && l2.sortAttributes === true && W2.sort();
for (var q2 = 0; q2 < W2.length; q2++) {
var z2 = W2[q2], I2 = O2[z2];
if (z2 !== "children") {
if (!d.test(z2) && (l2 && l2.allAttributes || z2 !== "key" && z2 !== "ref" && z2 !== "__self" && z2 !== "__source")) {
if (z2 === "defaultValue")
z2 = "value";
else if (z2 === "defaultChecked")
z2 = "checked";
else if (z2 === "defaultSelected")
z2 = "selected";
else if (z2 === "className") {
if (O2.class !== void 0)
continue;
z2 = "class";
} else
g2 && /^xlink:?./.test(z2) && (z2 = z2.toLowerCase().replace(/^xlink:?/, "xlink:"));
if (z2 === "htmlFor") {
if (O2.for)
continue;
z2 = "for";
}
z2 === "style" && I2 && typeof I2 == "object" && (I2 = s(I2)), z2[0] === "a" && z2[1] === "r" && typeof I2 == "boolean" && (I2 = String(I2));
var V2 = l2.attributeHook && l2.attributeHook(z2, I2, n2, l2, C2);
if (V2 || V2 === "")
U2 += V2;
else if (z2 === "dangerouslySetInnerHTML")
R2 = I2 && I2.__html;
else if (w2 === "textarea" && z2 === "value")
P2 = I2;
else if ((I2 || I2 === 0 || I2 === "") && typeof I2 != "function") {
if (!(I2 !== true && I2 !== "" || (I2 = z2, l2 && l2.xml))) {
U2 = U2 + " " + z2;
continue;
}
if (z2 === "value") {
if (w2 === "select") {
h2 = I2;
continue;
}
w2 === "option" && h2 == I2 && O2.selected === void 0 && (U2 += " selected");
}
U2 = U2 + " " + z2 + '="' + o(I2) + '"';
}
}
} else
P2 = I2;
}
}
if (m2) {
var Z2 = U2.replace(/\n\s*/, " ");
Z2 === U2 || ~Z2.indexOf("\n") ? m2 && ~U2.indexOf("\n") && (U2 += "\n") : U2 = Z2;
}
if (U2 += ">", d.test(w2))
throw new Error(w2 + " is not a valid HTML tag name in " + U2);
var B2, G2 = _.test(w2) || l2.voidElements && l2.voidElements.test(w2), J2 = [];
if (R2)
m2 && i(R2) && (R2 = "\n" + y2 + a(R2, y2)), U2 += R2;
else if (P2 != null && u(B2 = [], P2).length) {
for (var K2 = m2 && ~U2.indexOf("\n"), Q2 = false, X2 = 0; X2 < B2.length; X2++) {
var Y2 = B2[X2];
if (Y2 != null && Y2 !== false) {
var ee = x(Y2, n2, l2, true, w2 === "svg" || w2 !== "foreignObject" && g2, h2);
if (m2 && !K2 && i(ee) && (K2 = true), ee)
if (m2) {
var te = ee.length > 0 && ee[0] != "<";
Q2 && te ? J2[J2.length - 1] += ee : J2.push(ee), Q2 = te;
} else
J2.push(ee);
}
}
if (m2 && K2)
for (var re = J2.length; re--; )
J2[re] = "\n" + y2 + a(J2[re], y2);
}
if (J2.length || R2)
U2 += J2.join("");
else if (l2 && l2.xml)
return U2.substring(0, U2.length - 1) + " />";
return !G2 || B2 || R2 ? (m2 && ~U2.indexOf("\n") && (U2 += "\n"), U2 = U2 + "</" + w2 + ">") : U2 = U2.replace(/>$/, " />"), U2;
}
m.shallowRender = g;
function forEachOwnProperties$2(obj, iteratee, context) {
var key;
context = context || null;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (iteratee.call(context, obj[key], key, obj) === false) {
break;
}
}
}
}
var forEachOwnProperties_1 = forEachOwnProperties$2;
var forEachOwnProperties$1 = forEachOwnProperties_1;
function imagePing$1(url, trackingInfo) {
var trackingElement = document.createElement("img");
var queryString = "";
forEachOwnProperties$1(trackingInfo, function(value, key) {
queryString += "&" + key + "=" + value;
});
queryString = queryString.substring(1);
trackingElement.src = url + "?" + queryString;
trackingElement.style.display = "none";
document.body.appendChild(trackingElement);
document.body.removeChild(trackingElement);
return trackingElement;
}
var imagePing_1 = imagePing$1;
var isUndefined$1 = isUndefined_1;
var imagePing = imagePing_1;
var ms7days = 7 * 24 * 60 * 60 * 1e3;
function isExpired(date2) {
var now = (/* @__PURE__ */ new Date()).getTime();
return now - date2 > ms7days;
}
function sendHostname(appName, trackingId) {
var url = "https://www.google-analytics.com/collect";
var hostname = location.hostname;
var hitType = "event";
var eventCategory = "use";
var applicationKeyForStorage = "TOAST UI " + appName + " for " + hostname + ": Statistics";
var date2 = window.localStorage.getItem(applicationKeyForStorage);
if (!isUndefined$1(window.tui) && window.tui.usageStatistics === false) {
return;
}
if (date2 && !isExpired(date2)) {
return;
}
window.localStorage.setItem(applicationKeyForStorage, (/* @__PURE__ */ new Date()).getTime());
setTimeout(function() {
if (document.readyState === "interactive" || document.readyState === "complete") {
imagePing(url, {
v: 1,
t: hitType,
tid: trackingId,
cid: hostname,
dp: hostname,
dh: appName,
el: appName,
ec: eventCategory
});
}
}, 1e3);
}
var sendHostname_1 = sendHostname;
function CalendarContainer({ theme, store, eventBus, children }) {
return /* @__PURE__ */ h$3(EventBusProvider, {
value: eventBus
}, /* @__PURE__ */ h$3(ThemeProvider, {
store: theme
}, /* @__PURE__ */ h$3(StoreProvider, {
store
}, /* @__PURE__ */ h$3(FloatingLayerProvider, null, children))));
}
const GA_TRACKING_ID = "UA-129951699-1";
function extend$1(target, objects) {
var hasOwnProp = Object.prototype.hasOwnProperty;
var source, prop, i2, len;
for (i2 = 1, len = arguments.length; i2 < len; i2 += 1) {
source = arguments[i2];
for (prop in source) {
if (hasOwnProp.call(source, prop)) {
target[prop] = source[prop];
}
}
}
return target;
}
var extend_1 = extend$1;
function isNull$1(obj) {
return obj === null;
}
var isNull_1 = isNull$1;
var isUndefined = isUndefined_1;
var isNull = isNull_1;
function isExisty$1(param) {
return !isUndefined(param) && !isNull(param);
}
var isExisty_1 = isExisty$1;
function isArray$2(obj) {
return obj instanceof Array;
}
var isArray_1 = isArray$2;
function isFunction$1(obj) {
return obj instanceof Function;
}
var isFunction_1 = isFunction$1;
function forEachArray$1(arr, iteratee, context) {
var index = 0;
var len = arr.length;
context = context || null;
for (; index < len; index += 1) {
if (iteratee.call(context, arr[index], index, arr) === false) {
break;
}
}
}
var forEachArray_1 = forEachArray$1;
var isArray$1 = isArray_1;
var forEachArray = forEachArray_1;
var forEachOwnProperties = forEachOwnProperties_1;
function forEach$1(obj, iteratee, context) {
if (isArray$1(obj)) {
forEachArray(obj, iteratee, context);
} else {
forEachOwnProperties(obj, iteratee, context);
}
}
var forEach_1 = forEach$1;
var extend = extend_1;
var isExisty = isExisty_1;
var isString = isString_1;
var isObject = isObject_1;
var isArray = isArray_1;
var isFunction = isFunction_1;
var forEach = forEach_1;
var R_EVENTNAME_SPLIT = /\s+/g;
function CustomEvents() {
this.events = null;
this.contexts = null;
}
CustomEvents.mixin = function(func) {
extend(func.prototype, CustomEvents.prototype);
};
CustomEvents.prototype._getHandlerItem = function(handler, context) {
var item = { handler };
if (context) {
item.context = context;
}
return item;
};
CustomEvents.prototype._safeEvent = function(eventName) {
var events = this.events;
var byName;
if (!events) {
events = this.events = {};
}
if (eventName) {
byName = events[eventName];
if (!byName) {
byName = [];
events[eventName] = byName;
}
events = byName;
}
return events;
};
CustomEvents.prototype._safeContext = function() {
var context = this.contexts;
if (!context) {
context = this.contexts = [];
}
return context;
};
CustomEvents.prototype._indexOfContext = function(ctx) {
var context = this._safeContext();
var index = 0;
while (context[index]) {
if (ctx === context[index][0]) {
return index;
}
index += 1;
}
return -1;
};
CustomEvents.prototype._memorizeContext = function(ctx) {
var context, index;
if (!isExisty(ctx)) {
return;
}
context = this._safeContext();
index = this._indexOfContext(ctx);
if (index > -1) {
context[index][1] += 1;
} else {
context.push([ctx, 1]);
}
};
CustomEvents.prototype._forgetContext = function(ctx) {
var context, contextIndex;
if (!isExisty(ctx)) {
return;
}
context = this._safeContext();
contextIndex = this._indexOfContext(ctx);
if (contextIndex > -1) {
context[contextIndex][1] -= 1;
if (context[contextIndex][1] <= 0) {
context.splice(contextIndex, 1);
}
}
};
CustomEvents.prototype._bindEvent = function(eventName, handler, context) {
var events = this._safeEvent(eventName);
this._memorizeContext(context);
events.push(this._getHandlerItem(handler, context));
};
CustomEvents.prototype.on = function(eventName, handler, context) {
var self2 = this;
if (isString(eventName)) {
eventName = eventName.split(R_EVENTNAME_SPLIT);
forEach(eventName, function(name) {
self2._bindEvent(name, handler, context);
});
} else if (isObject(eventName)) {
context = handler;
forEach(eventName, function(func, name) {
self2.on(name, func, context);
});
}
};
CustomEvents.prototype.once = function(eventName, handler, context) {
var self2 = this;
if (isObject(eventName)) {
context = handler;
forEach(eventName, function(func, name) {
self2.once(name, func, context);
});
return;
}
function onceHandler() {
handler.apply(context, arguments);
self2.off(eventName, onceHandler, context);
}
this.on(eventName, onceHandler, context);
};
CustomEvents.prototype._spliceMatches = function(arr, predicate) {
var i2 = 0;
var len;
if (!isArray(arr)) {
return;
}
for (len = arr.length; i2 < len; i2 += 1) {
if (predicate(arr[i2]) === true) {
arr.splice(i2, 1);
len -= 1;
i2 -= 1;
}
}
};
CustomEvents.prototype._matchHandler = function(handler) {
var self2 = this;
return function(item) {
var needRemove = handler === item.handler;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents.prototype._matchContext = function(context) {
var self2 = this;
return function(item) {
var needRemove = context === item.context;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents.prototype._matchHandlerAndContext = function(handler, context) {
var self2 = this;
return function(item) {
var matchHandler = handler === item.handler;
var matchContext = context === item.context;
var needRemove = matchHandler && matchContext;
if (needRemove) {
self2._forgetContext(item.context);
}
return needRemove;
};
};
CustomEvents.prototype._offByEventName = function(eventName, handler) {
var self2 = this;
var andByHandler = isFunction(handler);
var matchHandler = self2._matchHandler(handler);
eventName = eventName.split(R_EVENTNAME_SPLIT);
forEach(eventName, function(name) {
var handlerItems = self2._safeEvent(name);
if (andByHandler) {
self2._spliceMatches(handlerItems, matchHandler);
} else {
forEach(handlerItems, function(item) {
self2._forgetContext(item.context);
});
self2.events[name] = [];
}
});
};
CustomEvents.prototype._offByHandler = function(handler) {
var self2 = this;
var matchHandler = this._matchHandler(handler);
forEach(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchHandler);
});
};
CustomEvents.prototype._offByObject = function(obj, handler) {
var self2 = this;
var matchFunc;
if (this._indexOfContext(obj) < 0) {
forEach(obj, function(func, name) {
self2.off(name, func);
});
} else if (isString(handler)) {
matchFunc = this._matchContext(obj);
self2._spliceMatches(this._safeEvent(handler), matchFunc);
} else if (isFunction(handler)) {
matchFunc = this._matchHandlerAndContext(handler, obj);
forEach(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchFunc);
});
} else {
matchFunc = this._matchContext(obj);
forEach(this._safeEvent(), function(handlerItems) {
self2._spliceMatches(handlerItems, matchFunc);
});
}
};
CustomEvents.prototype.off = function(eventName, handler) {
if (isString(eventName)) {
this._offByEventName(eventName, handler);
} else if (!arguments.length) {
this.events = {};
this.contexts = [];
} else if (isFunction(eventName)) {
this._offByHandler(eventName);
} else if (isObject(eventName)) {
this._offByObject(eventName, handler);
}
};
CustomEvents.prototype.fire = function(eventName) {
this.invoke.apply(this, arguments);
};
CustomEvents.prototype.invoke = function(eventName) {
var events, args, index, item;
if (!this.hasListener(eventName)) {
return true;
}
events = this._safeEvent(eventName);
args = Array.prototype.slice.call(arguments, 1);
index = 0;
while (events[index]) {
item = events[index];
if (item.handler.apply(item.context, args) === false) {
return false;
}
index += 1;
}
return true;
};
CustomEvents.prototype.hasListener = function(eventName) {
return this.getListenerLength(eventName) > 0;
};
CustomEvents.prototype.getListenerLength = function(eventName) {
var events = this._safeEvent(eventName);
return events.length;
};
var customEvents = CustomEvents;
class EventBusImpl extends customEvents {
on(eventName, handler) {
super.on(eventName, handler);
return this;
}
off(eventName, handler) {
super.off(eventName, handler);
return this;
}
fire(eventName, ...args) {
super.fire(eventName, ...args);
return this;
}
once(eventName, handler) {
super.once(eventName, handler);
return this;
}
}
class CalendarCore {
constructor(container, options = {}) {
var _a;
this.container = isString_1(container) ? (_a = document == null ? void 0 : document.querySelector(container)) != null ? _a : null : container;
this.theme = initThemeStore(options.theme);
this.eventBus = new EventBusImpl();
this.store = initCalendarStore(options);
this.renderRange = this.calculateRenderRange(toStartOfDay());
addAttributeHooks();
if (this.getStoreState().options.usageStatistics === true) {
sendHostname_1("calendar", GA_TRACKING_ID);
}
}
getStoreState(group) {
const state = this.store.getState();
return group ? state[group] : state;
}
getStoreDispatchers(group) {
const dispatchers = this.store.getState().dispatch;
return group ? dispatchers[group] : dispatchers;
}
destroy() {
if (this.container) {
un(this.container);
}
this.store.clearListeners();
this.theme.clearListeners();
this.eventBus.off();
removeAttributeHooks();
for (const key in this) {
if (this.hasOwnProperty(key)) {
delete this[key];
}
}
}
calculateMonthRenderDate({
renderDate,
offset,
monthOptions
}) {
let newRenderDate = new TZDate(renderDate);
const { visibleWeeksCount } = monthOptions;
if (visibleWeeksCount > 0) {
newRenderDate = addDate(newRenderDate, offset * 7 * visibleWeeksCount);
} else {
newRenderDate = addMonths(newRenderDate, offset);
}
const dateMatrix = createDateMatrixOfMonth(newRenderDate, monthOptions);
const [[start]] = dateMatrix;
const end = last(last(dateMatrix));
return {
renderDate: newRenderDate,
renderRange: { start, end }
};
}
calculateWeekRenderDate({
renderDate,
offset,
weekOptions
}) {
const newRenderDate = new TZDate(renderDate);
newRenderDate.addDate(offset * 7);
const weekDates = getWeekDates(newRenderDate, weekOptions);
const [start] = weekDates;
const end = last(weekDates);
return {
renderDate: newRenderDate,
renderRange: { start, end }
};
}
calculateDayRenderDate({ renderDate, offset }) {
const newRenderDate = new TZDate(renderDate);
newRenderDate.addDate(offset);
const start = toStartOfDay(newRenderDate);
const end = toEndOfDay(newRenderDate);
return {
renderDate: newRenderDate,
renderRange: { start, end }
};
}
move(offset) {
if (isNil(offset)) {
return;
}
const { currentView, renderDate } = this.getStoreState().view;
const { options } = this.getStoreState();
const { setRenderDate } = this.getStoreDispatchers().view;
const newRenderDate = new TZDate(renderDate);
let calculatedRenderDate = {
renderDate: newRenderDate,
renderRange: { start: new TZDate(newRenderDate), end: new TZDate(newRenderDate) }
};
if (currentView === "month") {
calculatedRenderDate = this.calculateMonthRenderDate({
renderDate,
offset,
monthOptions: options.month
});
} else if (currentView === "week") {
calculatedRenderDate = this.calculateWeekRenderDate({
renderDate,
offset,
weekOptions: options.week
});
} else if (currentView === "day") {
calculatedRenderDate = this.calculateDayRenderDate({ renderDate, offset });
}
setRenderDate(calculatedRenderDate.renderDate);
this.renderRange = calculatedRenderDate.renderRange;
}
createEvents(events) {
const { createEvents: createEvents2 } = this.getStoreDispatchers("calendar");
createEvents2(events);
}
getEventModel(eventId, calendarId) {
const { events } = this.getStoreState("calendar");
return events.find(({ id, calendarId: eventCalendarId }) => id === eventId && eventCalendarId === calendarId);
}
getEvent(eventId, calendarId) {
var _a, _b;
return (_b = (_a = this.getEventModel(eventId, calendarId)) == null ? void 0 : _a.toEventObject()) != null ? _b : null;
}
updateEvent(eventId, calendarId, changes) {
const { updateEvent: updateEvent2 } = this.getStoreDispatchers("calendar");
const event = this.getEventModel(eventId, calendarId);
if (event) {
updateEvent2({ event, eventData: changes });
}
}
deleteEvent(eventId, calendarId) {
const { deleteEvent: deleteEvent2 } = this.getStoreDispatchers("calendar");
const event = this.getEventModel(eventId, calendarId);
if (event) {
deleteEvent2(event);
}
}
setCalendarVisibility(calendarId, isVisible) {
const { setCalendarVisibility } = this.getStoreDispatchers("calendar");
const calendarIds = Array.isArray(calendarId) ? calendarId : [calendarId];
setCalendarVisibility(calendarIds, isVisible);
}
render() {
if (isPresent(this.container)) {
P$2(/* @__PURE__ */ h$3(CalendarContainer, {
theme: this.theme,
store: this.store,
eventBus: this.eventBus
}, this.getComponent()), this.container);
}
return this;
}
renderToString() {
return m(/* @__PURE__ */ h$3(CalendarContainer, {
theme: this.theme,
store: this.store,
eventBus: this.eventBus
}, this.getComponent()));
}
clear() {
const { clearEvents: clearEvents2 } = this.getStoreDispatchers("calendar");
clearEvents2();
}
scrollToNow(scrollBehavior = "auto") {
this.eventBus.fire("scrollToNow", scrollBehavior);
}
calculateRenderRange(renderDate) {
const { currentView } = this.getStoreState().view;
const { options } = this.getStoreState();
const newRenderDate = new TZDate(renderDate);
let newRenderRange = { start: new TZDate(newRenderDate), end: new TZDate(newRenderDate) };
if (currentView === "month") {
newRenderRange = this.calculateMonthRenderDate({
renderDate,
offset: 0,
monthOptions: options.month
}).renderRange;
} else if (currentView === "week") {
newRenderRange = this.calculateWeekRenderDate({
renderDate,
offset: 0,
weekOptions: options.week
}).renderRange;
} else if (currentView === "day") {
newRenderRange = this.calculateDayRenderDate({ renderDate, offset: 0 }).renderRange;
}
return newRenderRange;
}
today() {
const { setRenderDate } = this.getStoreDispatchers().view;
const today = new TZDate();
setRenderDate(today);
this.renderRange = this.calculateRenderRange(today);
}
setDate(date2) {
const { setRenderDate } = this.getStoreDispatchers("view");
const dateToChange = new TZDate(date2);
setRenderDate(dateToChange);
this.renderRange = this.calculateRenderRange(dateToChange);
}
next() {
this.move(1);
}
prev() {
this.move(-1);
}
setCalendarColor(calendarId, colorOptions) {
const { setCalendarColor } = this.getStoreDispatchers().calendar;
setCalendarColor(calendarId, colorOptions);
}
changeView(viewName) {
const { changeView } = this.getStoreDispatchers("view");
changeView(viewName);
this.renderRange = this.calculateRenderRange(this.getDate());
}
getElement(eventId, calendarId) {
const event = this.getEvent(eventId, calendarId);
if (event && this.container) {
return this.container.querySelector(`[data-event-id="${eventId}"][data-calendar-id="${calendarId}"]`);
}
return null;
}
setTheme(theme) {
const { setTheme } = this.theme.getState().dispatch;
setTheme(theme);
}
getOptions() {
const { options, template } = this.getStoreState();
const _a = this.theme.getState(), { dispatch } = _a, theme = __objRest(_a, ["dispatch"]);
return __spreadProps(__spreadValues({}, options), {
template,
theme
});
}
setOptions(options) {
const _a = options, { theme, template } = _a, restOptions = __objRest(_a, ["theme", "template"]);
const { setTheme } = this.theme.getState().dispatch;
const {
options: { setOptions },
template: { setTemplate }
} = this.getStoreDispatchers();
if (isPresent(theme)) {
setTheme(theme);
}
if (isPresent(template)) {
setTemplate(template);
}
setOptions(restOptions);
}
getDate() {
const { renderDate } = this.getStoreState().view;
return renderDate;
}
getDateRangeStart() {
return this.renderRange.start;
}
getDateRangeEnd() {
return this.renderRange.end;
}
getViewName() {
const { currentView } = this.getStoreState("view");
return currentView;
}
setCalendars(calendars) {
const { setCalendars } = this.getStoreDispatchers().calendar;
setCalendars(calendars);
}
openFormPopup(event) {
const { showFormPopup } = this.getStoreDispatchers().popup;
const eventModel = new EventModel(event);
const { title, location: location2, start, end, isAllday: isAllday2, isPrivate, state: eventState } = eventModel;
showFormPopup({
isCreationPopup: true,
event: eventModel,
title,
location: location2,
start,
end,
isAllday: isAllday2,
isPrivate,
eventState
});
}
clearGridSelections() {
const { clearAll } = this.getStoreDispatchers().gridSelection;
clearAll();
}
fire(eventName, ...args) {
this.eventBus.fire(eventName, ...args);
return this;
}
off(eventName, handler) {
this.eventBus.off(eventName, handler);
return this;
}
on(eventName, handler) {
this.eventBus.on(eventName, handler);
return this;
}
once(eventName, handler) {
this.eventBus.once(eventName, handler);
return this;
}
}
function isValidViewType(viewType) {
return !!Object.values(VIEW_TYPE).find((type) => type === viewType);
}
class Calendar extends CalendarCore {
constructor(container, options = {}) {
super(container, options);
const { defaultView = "week" } = options;
if (!isValidViewType(defaultView)) {
throw new InvalidViewTypeError(defaultView);
}
this.render();
}
getComponent() {
return /* @__PURE__ */ h$3(Main, null);
}
}
class Day extends CalendarCore {
constructor(container, options = {}) {
super(container, options);
this.render();
}
getComponent() {
return /* @__PURE__ */ h$3(Day$1, null);
}
}
class Month extends CalendarCore {
constructor(container, options = {}) {
super(container, options);
this.render();
}
getComponent() {
return /* @__PURE__ */ h$3(Month$1, null);
}
hideMoreView() {
const { hideSeeMorePopup } = this.getStoreDispatchers().popup;
hideSeeMorePopup();
}
}
class Week extends CalendarCore {
constructor(container, options = {}) {
super(container, options);
this.render();
}
getComponent() {
return /* @__PURE__ */ h$3(Week$1, null);
}
}
function unrefElement(elRef) {
var _a;
const plain = toValue(elRef);
return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
}
var lodash$1 = { exports: {} };
/**
* @license
* Lodash <https://lodash.com/>
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
var lodash = lodash$1.exports;
var hasRequiredLodash;
function requireLodash() {
if (hasRequiredLodash) return lodash$1.exports;
hasRequiredLodash = 1;
(function(module, exports) {
(function() {
var undefined$1;
var VERSION = "4.17.21";
var LARGE_ARRAY_SIZE = 200;
var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
var HASH_UNDEFINED = "__lodash_hash_undefined__";
var MAX_MEMOIZE_SIZE = 500;
var PLACEHOLDER = "__lodash_placeholder__";
var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512;
var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...";
var HOT_COUNT = 800, HOT_SPAN = 16;
var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3;
var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN = 0 / 0;
var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
var wrapFlags = [
["ary", WRAP_ARY_FLAG],
["bind", WRAP_BIND_FLAG],
["bindKey", WRAP_BIND_KEY_FLAG],
["curry", WRAP_CURRY_FLAG],
["curryRight", WRAP_CURRY_RIGHT_FLAG],
["flip", WRAP_FLIP_FLAG],
["partial", WRAP_PARTIAL_FLAG],
["partialRight", WRAP_PARTIAL_RIGHT_FLAG],
["rearg", WRAP_REARG_FLAG]
];
var argsTag = "[object Arguments]", arrayTag = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag = "[object Boolean]", dateTag = "[object Date]", domExcTag = "[object DOMException]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", nullTag = "[object Null]", objectTag = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag = "[object WeakMap]", weakSetTag = "[object WeakSet]";
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g;
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source);
var reTrimStart = /^\s+/;
var reWhitespace = /\s/;
var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /;
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
var reEscapeChar = /\\(\\)?/g;
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
var reFlags = /\w*$/;
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
var reIsBinary = /^0b[01]+$/i;
var reIsHostCtor = /^\[object .+?Constructor\]$/;
var reIsOctal = /^0o[0-7]+$/i;
var reIsUint = /^(?:0|[1-9]\d*)$/;
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
var reNoMatch = /($^)/;
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
var rsApos = "['’]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d";
var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
var reApos = RegExp(rsApos, "g");
var reComboMark = RegExp(rsCombo, "g");
var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
var reUnicodeWord = RegExp([
rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")",
rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")",
rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower,
rsUpper + "+" + rsOptContrUpper,
rsOrdUpper,
rsOrdLower,
rsDigits,
rsEmoji
].join("|"), "g");
var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
var contextProps = [
"Array",
"Buffer",
"DataView",
"Date",
"Error",
"Float32Array",
"Float64Array",
"Function",
"Int8Array",
"Int16Array",
"Int32Array",
"Map",
"Math",
"Object",
"Promise",
"RegExp",
"Set",
"String",
"Symbol",
"TypeError",
"Uint8Array",
"Uint8ClampedArray",
"Uint16Array",
"Uint32Array",
"WeakMap",
"_",
"clearTimeout",
"isFinite",
"parseInt",
"setTimeout"
];
var templateCounter = -1;
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
var cloneableTags = {};
cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
var deburredLetters = {
// Latin-1 Supplement block.
"À": "A",
"Á": "A",
"Â": "A",
"Ã": "A",
"Ä": "A",
"Å": "A",
"à": "a",
"á": "a",
"â": "a",
"ã": "a",
"ä": "a",
"å": "a",
"Ç": "C",
"ç": "c",
"Ð": "D",
"ð": "d",
"È": "E",
"É": "E",
"Ê": "E",
"Ë": "E",
"è": "e",
"é": "e",
"ê": "e",
"ë": "e",
"Ì": "I",
"Í": "I",
"Î": "I",
"Ï": "I",
"ì": "i",
"í": "i",
"î": "i",
"ï": "i",
"Ñ": "N",
"ñ": "n",
"Ò": "O",
"Ó": "O",
"Ô": "O",
"Õ": "O",
"Ö": "O",
"Ø": "O",
"ò": "o",
"ó": "o",
"ô": "o",
"õ": "o",
"ö": "o",
"ø": "o",
"Ù": "U",
"Ú": "U",
"Û": "U",
"Ü": "U",
"ù": "u",
"ú": "u",
"û": "u",
"ü": "u",
"Ý": "Y",
"ý": "y",
"ÿ": "y",
"Æ": "Ae",
"æ": "ae",
"Þ": "Th",
"þ": "th",
"ß": "ss",
// Latin Extended-A block.
"Ā": "A",
"Ă": "A",
"Ą": "A",
"ā": "a",
"ă": "a",
"ą": "a",
"Ć": "C",
"Ĉ": "C",
"Ċ": "C",
"Č": "C",
"ć": "c",
"ĉ": "c",
"ċ": "c",
"č": "c",
"Ď": "D",
"Đ": "D",
"ď": "d",
"đ": "d",
"Ē": "E",
"Ĕ": "E",
"Ė": "E",
"Ę": "E",
"Ě": "E",
"ē": "e",
"ĕ": "e",
"ė": "e",
"ę": "e",
"ě": "e",
"Ĝ": "G",
"Ğ": "G",
"Ġ": "G",
"Ģ": "G",
"ĝ": "g",
"ğ": "g",
"ġ": "g",
"ģ": "g",
"Ĥ": "H",
"Ħ": "H",
"ĥ": "h",
"ħ": "h",
"Ĩ": "I",
"Ī": "I",
"Ĭ": "I",
"Į": "I",
"İ": "I",
"ĩ": "i",
"ī": "i",
"ĭ": "i",
"į": "i",
"ı": "i",
"Ĵ": "J",
"ĵ": "j",
"Ķ": "K",
"ķ": "k",
"ĸ": "k",
"Ĺ": "L",
"Ļ": "L",
"Ľ": "L",
"Ŀ": "L",
"Ł": "L",
"ĺ": "l",
"ļ": "l",
"ľ": "l",
"ŀ": "l",
"ł": "l",
"Ń": "N",
"Ņ": "N",
"Ň": "N",
"Ŋ": "N",
"ń": "n",
"ņ": "n",
"ň": "n",
"ŋ": "n",
"Ō": "O",
"Ŏ": "O",
"Ő": "O",
"ō": "o",
"ŏ": "o",
"ő": "o",
"Ŕ": "R",
"Ŗ": "R",
"Ř": "R",
"ŕ": "r",
"ŗ": "r",
"ř": "r",
"Ś": "S",
"Ŝ": "S",
"Ş": "S",
"Š": "S",
"ś": "s",
"ŝ": "s",
"ş": "s",
"š": "s",
"Ţ": "T",
"Ť": "T",
"Ŧ": "T",
"ţ": "t",
"ť": "t",
"ŧ": "t",
"Ũ": "U",
"Ū": "U",
"Ŭ": "U",
"Ů": "U",
"Ű": "U",
"Ų": "U",
"ũ": "u",
"ū": "u",
"ŭ": "u",
"ů": "u",
"ű": "u",
"ų": "u",
"Ŵ": "W",
"ŵ": "w",
"Ŷ": "Y",
"ŷ": "y",
"Ÿ": "Y",
"Ź": "Z",
"Ż": "Z",
"Ž": "Z",
"ź": "z",
"ż": "z",
"ž": "z",
"IJ": "IJ",
"ij": "ij",
"Œ": "Oe",
"œ": "oe",
"ʼn": "'n",
"ſ": "s"
};
var htmlEscapes = {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
};
var htmlUnescapes = {
"&": "&",
"<": "<",
">": ">",
""": '"',
"'": "'"
};
var stringEscapes = {
"\\": "\\",
"'": "'",
"\n": "n",
"\r": "r",
"\u2028": "u2028",
"\u2029": "u2029"
};
var freeParseFloat = parseFloat, freeParseInt = parseInt;
var freeGlobal = typeof commonjsGlobal$1 == "object" && commonjsGlobal$1 && commonjsGlobal$1.Object === Object && commonjsGlobal$1;
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
var root = freeGlobal || freeSelf || Function("return this")();
var freeExports = exports && !exports.nodeType && exports;
var freeModule = freeExports && true && module && !module.nodeType && module;
var moduleExports = freeModule && freeModule.exports === freeExports;
var freeProcess = moduleExports && freeGlobal.process;
var nodeUtil = function() {
try {
var types = freeModule && freeModule.require && freeModule.require("util").types;
if (types) {
return types;
}
return freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch (e2) {
}
}();
var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
function apply(func, thisArg, args) {
switch (args.length) {
case 0:
return func.call(thisArg);
case 1:
return func.call(thisArg, args[0]);
case 2:
return func.call(thisArg, args[0], args[1]);
case 3:
return func.call(thisArg, args[0], args[1], args[2]);
}
return func.apply(thisArg, args);
}
function arrayAggregator(array2, setter, iteratee, accumulator) {
var index = -1, length = array2 == null ? 0 : array2.length;
while (++index < length) {
var value = array2[index];
setter(accumulator, value, iteratee(value), array2);
}
return accumulator;
}
function arrayEach(array2, iteratee) {
var index = -1, length = array2 == null ? 0 : array2.length;
while (++index < length) {
if (iteratee(array2[index], index, array2) === false) {
break;
}
}
return array2;
}
function arrayEachRight(array2, iteratee) {
var length = array2 == null ? 0 : array2.length;
while (length--) {
if (iteratee(array2[length], length, array2) === false) {
break;
}
}
return array2;
}
function arrayEvery(array2, predicate) {
var index = -1, length = array2 == null ? 0 : array2.length;
while (++index < length) {
if (!predicate(array2[index], index, array2)) {
return false;
}
}
return true;
}
function arrayFilter(array2, predicate) {
var index = -1, length = array2 == null ? 0 : array2.length, resIndex = 0, result = [];
while (++index < length) {
var value = array2[index];
if (predicate(value, index, array2)) {
result[resIndex++] = value;
}
}
return result;
}
function arrayIncludes(array2, value) {
var length = array2 == null ? 0 : array2.length;
return !!length && baseIndexOf(array2, value, 0) > -1;
}
function arrayIncludesWith(array2, value, comparator) {
var index = -1, length = array2 == null ? 0 : array2.length;
while (++index < length) {
if (comparator(value, array2[index])) {
return true;
}
}
return false;
}
function arrayMap(array2, iteratee) {
var index = -1, length = array2 == null ? 0 : array2.length, result = Array(length);
while (++index < length) {
result[index] = iteratee(array2[index], index, array2);
}
return result;
}
function arrayPush(array2, values) {
var index = -1, length = values.length, offset = array2.length;
while (++index < length) {
array2[offset + index] = values[index];
}
return array2;
}
function arrayReduce(array2, iteratee, accumulator, initAccum) {
var index = -1, length = array2 == null ? 0 : array2.length;
if (initAccum && length) {
accumulator = array2[++index];
}
while (++index < length) {
accumulator = iteratee(accumulator, array2[index], index, array2);
}
return accumulator;
}
function arrayReduceRight(array2, iteratee, accumulator, initAccum) {
var length = array2 == null ? 0 : array2.length;
if (initAccum && length) {
accumulator = array2[--length];
}
while (length--) {
accumulator = iteratee(accumulator, array2[length], length, array2);
}
return accumulator;
}
function arraySome(array2, predicate) {
var index = -1, length = array2 == null ? 0 : array2.length;
while (++index < length) {
if (predicate(array2[index], index, array2)) {
return true;
}
}
return false;
}
var asciiSize = baseProperty("length");
function asciiToArray(string) {
return string.split("");
}
function asciiWords(string) {
return string.match(reAsciiWord) || [];
}
function baseFindKey(collection, predicate, eachFunc) {
var result;
eachFunc(collection, function(value, key, collection2) {
if (predicate(value, key, collection2)) {
result = key;
return false;
}
});
return result;
}
function baseFindIndex(array2, predicate, fromIndex, fromRight) {
var length = array2.length, index = fromIndex + (fromRight ? 1 : -1);
while (fromRight ? index-- : ++index < length) {
if (predicate(array2[index], index, array2)) {
return index;
}
}
return -1;
}
function baseIndexOf(array2, value, fromIndex) {
return value === value ? strictIndexOf(array2, value, fromIndex) : baseFindIndex(array2, baseIsNaN, fromIndex);
}
function baseIndexOfWith(array2, value, fromIndex, comparator) {
var index = fromIndex - 1, length = array2.length;
while (++index < length) {
if (comparator(array2[index], value)) {
return index;
}
}
return -1;
}
function baseIsNaN(value) {
return value !== value;
}
function baseMean(array2, iteratee) {
var length = array2 == null ? 0 : array2.length;
return length ? baseSum(array2, iteratee) / length : NAN;
}
function baseProperty(key) {
return function(object) {
return object == null ? undefined$1 : object[key];
};
}
function basePropertyOf(object) {
return function(key) {
return object == null ? undefined$1 : object[key];
};
}
function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
eachFunc(collection, function(value, index, collection2) {
accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2);
});
return accumulator;
}
function baseSortBy(array2, comparer) {
var length = array2.length;
array2.sort(comparer);
while (length--) {
array2[length] = array2[length].value;
}
return array2;
}
function baseSum(array2, iteratee) {
var result, index = -1, length = array2.length;
while (++index < length) {
var current = iteratee(array2[index]);
if (current !== undefined$1) {
result = result === undefined$1 ? current : result + current;
}
}
return result;
}
function baseTimes(n2, iteratee) {
var index = -1, result = Array(n2);
while (++index < n2) {
result[index] = iteratee(index);
}
return result;
}
function baseToPairs(object, props) {
return arrayMap(props, function(key) {
return [key, object[key]];
});
}
function baseTrim(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
}
function baseUnary(func) {
return function(value) {
return func(value);
};
}
function baseValues(object, props) {
return arrayMap(props, function(key) {
return object[key];
});
}
function cacheHas(cache, key) {
return cache.has(key);
}
function charsStartIndex(strSymbols, chrSymbols) {
var index = -1, length = strSymbols.length;
while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
}
return index;
}
function charsEndIndex(strSymbols, chrSymbols) {
var index = strSymbols.length;
while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
}
return index;
}
function countHolders(array2, placeholder) {
var length = array2.length, result = 0;
while (length--) {
if (array2[length] === placeholder) {
++result;
}
}
return result;
}
var deburrLetter = basePropertyOf(deburredLetters);
var escapeHtmlChar = basePropertyOf(htmlEscapes);
function escapeStringChar(chr) {
return "\\" + stringEscapes[chr];
}
function getValue(object, key) {
return object == null ? undefined$1 : object[key];
}
function hasUnicode(string) {
return reHasUnicode.test(string);
}
function hasUnicodeWord(string) {
return reHasUnicodeWord.test(string);
}
function iteratorToArray(iterator) {
var data, result = [];
while (!(data = iterator.next()).done) {
result.push(data.value);
}
return result;
}
function mapToArray(map) {
var index = -1, result = Array(map.size);
map.forEach(function(value, key) {
result[++index] = [key, value];
});
return result;
}
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
function replaceHolders(array2, placeholder) {
var index = -1, length = array2.length, resIndex = 0, result = [];
while (++index < length) {
var value = array2[index];
if (value === placeholder || value === PLACEHOLDER) {
array2[index] = PLACEHOLDER;
result[resIndex++] = index;
}
}
return result;
}
function setToArray(set) {
var index = -1, result = Array(set.size);
set.forEach(function(value) {
result[++index] = value;
});
return result;
}
function setToPairs(set) {
var index = -1, result = Array(set.size);
set.forEach(function(value) {
result[++index] = [value, value];
});
return result;
}
function strictIndexOf(array2, value, fromIndex) {
var index = fromIndex - 1, length = array2.length;
while (++index < length) {
if (array2[index] === value) {
return index;
}
}
return -1;
}
function strictLastIndexOf(array2, value, fromIndex) {
var index = fromIndex + 1;
while (index--) {
if (array2[index] === value) {
return index;
}
}
return index;
}
function stringSize(string) {
return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);
}
function stringToArray(string) {
return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
}
function trimmedEndIndex(string) {
var index = string.length;
while (index-- && reWhitespace.test(string.charAt(index))) {
}
return index;
}
var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
function unicodeSize(string) {
var result = reUnicode.lastIndex = 0;
while (reUnicode.test(string)) {
++result;
}
return result;
}
function unicodeToArray(string) {
return string.match(reUnicode) || [];
}
function unicodeWords(string) {
return string.match(reUnicodeWord) || [];
}
var runInContext = function runInContext2(context) {
context = context == null ? root : _2.defaults(root.Object(), context, _2.pick(root, contextProps));
var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError;
var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype;
var coreJsData = context["__core-js_shared__"];
var funcToString = funcProto.toString;
var hasOwnProperty = objectProto.hasOwnProperty;
var idCounter = 0;
var maskSrcKey = function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
}();
var nativeObjectToString = objectProto.toString;
var objectCtorString = funcToString.call(Object2);
var oldDash = root._;
var reIsNative = RegExp2(
"^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
);
var Buffer = moduleExports ? context.Buffer : undefined$1, Symbol2 = context.Symbol, Uint8Array = context.Uint8Array, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined$1, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined$1, symIterator = Symbol2 ? Symbol2.iterator : undefined$1, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined$1;
var defineProperty = function() {
try {
var func = getNative(Object2, "defineProperty");
func({}, "", {});
return func;
} catch (e2) {
}
}();
var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined$1, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse;
var DataView = getNative(context, "DataView"), Map2 = getNative(context, "Map"), Promise2 = getNative(context, "Promise"), Set2 = getNative(context, "Set"), WeakMap = getNative(context, "WeakMap"), nativeCreate = getNative(Object2, "create");
var metaMap = WeakMap && new WeakMap();
var realNames = {};
var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap);
var symbolProto = Symbol2 ? Symbol2.prototype : undefined$1, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined$1, symbolToString = symbolProto ? symbolProto.toString : undefined$1;
function lodash2(value) {
if (isObjectLike(value) && !isArray2(value) && !(value instanceof LazyWrapper)) {
if (value instanceof LodashWrapper) {
return value;
}
if (hasOwnProperty.call(value, "__wrapped__")) {
return wrapperClone(value);
}
}
return new LodashWrapper(value);
}
var baseCreate = /* @__PURE__ */ function() {
function object() {
}
return function(proto) {
if (!isObject2(proto)) {
return {};
}
if (objectCreate) {
return objectCreate(proto);
}
object.prototype = proto;
var result2 = new object();
object.prototype = undefined$1;
return result2;
};
}();
function baseLodash() {
}
function LodashWrapper(value, chainAll) {
this.__wrapped__ = value;
this.__actions__ = [];
this.__chain__ = !!chainAll;
this.__index__ = 0;
this.__values__ = undefined$1;
}
lodash2.templateSettings = {
/**
* Used to detect `data` property values to be HTML-escaped.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
"escape": reEscape,
/**
* Used to detect code to be evaluated.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
"evaluate": reEvaluate,
/**
* Used to detect `data` property values to inject.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
"interpolate": reInterpolate,
/**
* Used to reference the data object in the template text.
*
* @memberOf _.templateSettings
* @type {string}
*/
"variable": "",
/**
* Used to import variables into the compiled template.
*
* @memberOf _.templateSettings
* @type {Object}
*/
"imports": {
/**
* A reference to the `lodash` function.
*
* @memberOf _.templateSettings.imports
* @type {Function}
*/
"_": lodash2
}
};
lodash2.prototype = baseLodash.prototype;
lodash2.prototype.constructor = lodash2;
LodashWrapper.prototype = baseCreate(baseLodash.prototype);
LodashWrapper.prototype.constructor = LodashWrapper;
function LazyWrapper(value) {
this.__wrapped__ = value;
this.__actions__ = [];
this.__dir__ = 1;
this.__filtered__ = false;
this.__iteratees__ = [];
this.__takeCount__ = MAX_ARRAY_LENGTH;
this.__views__ = [];
}
function lazyClone() {
var result2 = new LazyWrapper(this.__wrapped__);
result2.__actions__ = copyArray(this.__actions__);
result2.__dir__ = this.__dir__;
result2.__filtered__ = this.__filtered__;
result2.__iteratees__ = copyArray(this.__iteratees__);
result2.__takeCount__ = this.__takeCount__;
result2.__views__ = copyArray(this.__views__);
return result2;
}
function lazyReverse() {
if (this.__filtered__) {
var result2 = new LazyWrapper(this);
result2.__dir__ = -1;
result2.__filtered__ = true;
} else {
result2 = this.clone();
result2.__dir__ *= -1;
}
return result2;
}
function lazyValue() {
var array2 = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array2), isRight = dir < 0, arrLength = isArr ? array2.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
if (!isArr || !isRight && arrLength == length && takeCount == length) {
return baseWrapperValue(array2, this.__actions__);
}
var result2 = [];
outer:
while (length-- && resIndex < takeCount) {
index += dir;
var iterIndex = -1, value = array2[index];
while (++iterIndex < iterLength) {
var data = iteratees[iterIndex], iteratee2 = data.iteratee, type = data.type, computed = iteratee2(value);
if (type == LAZY_MAP_FLAG) {
value = computed;
} else if (!computed) {
if (type == LAZY_FILTER_FLAG) {
continue outer;
} else {
break outer;
}
}
}
result2[resIndex++] = value;
}
return result2;
}
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
LazyWrapper.prototype.constructor = LazyWrapper;
function Hash(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
this.size = 0;
}
function hashDelete(key) {
var result2 = this.has(key) && delete this.__data__[key];
this.size -= result2 ? 1 : 0;
return result2;
}
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result2 = data[key];
return result2 === HASH_UNDEFINED ? undefined$1 : result2;
}
return hasOwnProperty.call(data, key) ? data[key] : undefined$1;
}
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== undefined$1 : hasOwnProperty.call(data, key);
}
function hashSet(key, value) {
var data = this.__data__;
this.size += this.has(key) ? 0 : 1;
data[key] = nativeCreate && value === undefined$1 ? HASH_UNDEFINED : value;
return this;
}
Hash.prototype.clear = hashClear;
Hash.prototype["delete"] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
function ListCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
function listCacheClear() {
this.__data__ = [];
this.size = 0;
}
function listCacheDelete(key) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
--this.size;
return true;
}
function listCacheGet(key) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? undefined$1 : data[index][1];
}
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
function listCacheSet(key, value) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0) {
++this.size;
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
ListCache.prototype.clear = listCacheClear;
ListCache.prototype["delete"] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
function MapCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
function mapCacheClear() {
this.size = 0;
this.__data__ = {
"hash": new Hash(),
"map": new (Map2 || ListCache)(),
"string": new Hash()
};
}
function mapCacheDelete(key) {
var result2 = getMapData(this, key)["delete"](key);
this.size -= result2 ? 1 : 0;
return result2;
}
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
function mapCacheSet(key, value) {
var data = getMapData(this, key), size2 = data.size;
data.set(key, value);
this.size += data.size == size2 ? 0 : 1;
return this;
}
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype["delete"] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
function SetCache(values2) {
var index = -1, length = values2 == null ? 0 : values2.length;
this.__data__ = new MapCache();
while (++index < length) {
this.add(values2[index]);
}
}
function setCacheAdd(value) {
this.__data__.set(value, HASH_UNDEFINED);
return this;
}
function setCacheHas(value) {
return this.__data__.has(value);
}
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;
function Stack(entries) {
var data = this.__data__ = new ListCache(entries);
this.size = data.size;
}
function stackClear() {
this.__data__ = new ListCache();
this.size = 0;
}
function stackDelete(key) {
var data = this.__data__, result2 = data["delete"](key);
this.size = data.size;
return result2;
}
function stackGet(key) {
return this.__data__.get(key);
}
function stackHas(key) {
return this.__data__.has(key);
}
function stackSet(key, value) {
var data = this.__data__;
if (data instanceof ListCache) {
var pairs = data.__data__;
if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
pairs.push([key, value]);
this.size = ++data.size;
return this;
}
data = this.__data__ = new MapCache(pairs);
}
data.set(key, value);
this.size = data.size;
return this;
}
Stack.prototype.clear = stackClear;
Stack.prototype["delete"] = stackDelete;
Stack.prototype.get = stackGet;
Stack.prototype.has = stackHas;
Stack.prototype.set = stackSet;
function arrayLikeKeys(value, inherited) {
var isArr = isArray2(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes(value.length, String2) : [], length = result2.length;
for (var key in value) {
if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
isIndex(key, length)))) {
result2.push(key);
}
}
return result2;
}
function arraySample(array2) {
var length = array2.length;
return length ? array2[baseRandom(0, length - 1)] : undefined$1;
}
function arraySampleSize(array2, n2) {
return shuffleSelf(copyArray(array2), baseClamp(n2, 0, array2.length));
}
function arrayShuffle(array2) {
return shuffleSelf(copyArray(array2));
}
function assignMergeValue(object, key, value) {
if (value !== undefined$1 && !eq(object[key], value) || value === undefined$1 && !(key in object)) {
baseAssignValue(object, key, value);
}
}
function assignValue(object, key, value) {
var objValue = object[key];
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined$1 && !(key in object)) {
baseAssignValue(object, key, value);
}
}
function assocIndexOf(array2, key) {
var length = array2.length;
while (length--) {
if (eq(array2[length][0], key)) {
return length;
}
}
return -1;
}
function baseAggregator(collection, setter, iteratee2, accumulator) {
baseEach(collection, function(value, key, collection2) {
setter(accumulator, value, iteratee2(value), collection2);
});
return accumulator;
}
function baseAssign(object, source) {
return object && copyObject(source, keys(source), object);
}
function baseAssignIn(object, source) {
return object && copyObject(source, keysIn(source), object);
}
function baseAssignValue(object, key, value) {
if (key == "__proto__" && defineProperty) {
defineProperty(object, key, {
"configurable": true,
"enumerable": true,
"value": value,
"writable": true
});
} else {
object[key] = value;
}
}
function baseAt(object, paths) {
var index = -1, length = paths.length, result2 = Array2(length), skip = object == null;
while (++index < length) {
result2[index] = skip ? undefined$1 : get(object, paths[index]);
}
return result2;
}
function baseClamp(number, lower, upper) {
if (number === number) {
if (upper !== undefined$1) {
number = number <= upper ? number : upper;
}
if (lower !== undefined$1) {
number = number >= lower ? number : lower;
}
}
return number;
}
function baseClone(value, bitmask, customizer, key, object, stack) {
var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
if (customizer) {
result2 = object ? customizer(value, key, object, stack) : customizer(value);
}
if (result2 !== undefined$1) {
return result2;
}
if (!isObject2(value)) {
return value;
}
var isArr = isArray2(value);
if (isArr) {
result2 = initCloneArray(value);
if (!isDeep) {
return copyArray(value, result2);
}
} else {
var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
if (isBuffer(value)) {
return cloneBuffer(value, isDeep);
}
if (tag == objectTag || tag == argsTag || isFunc && !object) {
result2 = isFlat || isFunc ? {} : initCloneObject(value);
if (!isDeep) {
return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value));
}
} else {
if (!cloneableTags[tag]) {
return object ? value : {};
}
result2 = initCloneByTag(value, tag, isDeep);
}
}
stack || (stack = new Stack());
var stacked = stack.get(value);
if (stacked) {
return stacked;
}
stack.set(value, result2);
if (isSet(value)) {
value.forEach(function(subValue) {
result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
});
} else if (isMap(value)) {
value.forEach(function(subValue, key2) {
result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
});
}
var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;
var props = isArr ? undefined$1 : keysFunc(value);
arrayEach(props || value, function(subValue, key2) {
if (props) {
key2 = subValue;
subValue = value[key2];
}
assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
});
return result2;
}
function baseConforms(source) {
var props = keys(source);
return function(object) {
return baseConformsTo(object, source, props);
};
}
function baseConformsTo(object, source, props) {
var length = props.length;
if (object == null) {
return !length;
}
object = Object2(object);
while (length--) {
var key = props[length], predicate = source[key], value = object[key];
if (value === undefined$1 && !(key in object) || !predicate(value)) {
return false;
}
}
return true;
}
function baseDelay(func, wait, args) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
return setTimeout2(function() {
func.apply(undefined$1, args);
}, wait);
}
function baseDifference(array2, values2, iteratee2, comparator) {
var index = -1, includes2 = arrayIncludes, isCommon = true, length = array2.length, result2 = [], valuesLength = values2.length;
if (!length) {
return result2;
}
if (iteratee2) {
values2 = arrayMap(values2, baseUnary(iteratee2));
}
if (comparator) {
includes2 = arrayIncludesWith;
isCommon = false;
} else if (values2.length >= LARGE_ARRAY_SIZE) {
includes2 = cacheHas;
isCommon = false;
values2 = new SetCache(values2);
}
outer:
while (++index < length) {
var value = array2[index], computed = iteratee2 == null ? value : iteratee2(value);
value = comparator || value !== 0 ? value : 0;
if (isCommon && computed === computed) {
var valuesIndex = valuesLength;
while (valuesIndex--) {
if (values2[valuesIndex] === computed) {
continue outer;
}
}
result2.push(value);
} else if (!includes2(values2, computed, comparator)) {
result2.push(value);
}
}
return result2;
}
var baseEach = createBaseEach(baseForOwn);
var baseEachRight = createBaseEach(baseForOwnRight, true);
function baseEvery(collection, predicate) {
var result2 = true;
baseEach(collection, function(value, index, collection2) {
result2 = !!predicate(value, index, collection2);
return result2;
});
return result2;
}
function baseExtremum(array2, iteratee2, comparator) {
var index = -1, length = array2.length;
while (++index < length) {
var value = array2[index], current = iteratee2(value);
if (current != null && (computed === undefined$1 ? current === current && !isSymbol(current) : comparator(current, computed))) {
var computed = current, result2 = value;
}
}
return result2;
}
function baseFill(array2, value, start, end) {
var length = array2.length;
start = toInteger(start);
if (start < 0) {
start = -start > length ? 0 : length + start;
}
end = end === undefined$1 || end > length ? length : toInteger(end);
if (end < 0) {
end += length;
}
end = start > end ? 0 : toLength(end);
while (start < end) {
array2[start++] = value;
}
return array2;
}
function baseFilter(collection, predicate) {
var result2 = [];
baseEach(collection, function(value, index, collection2) {
if (predicate(value, index, collection2)) {
result2.push(value);
}
});
return result2;
}
function baseFlatten(array2, depth, predicate, isStrict, result2) {
var index = -1, length = array2.length;
predicate || (predicate = isFlattenable);
result2 || (result2 = []);
while (++index < length) {
var value = array2[index];
if (depth > 0 && predicate(value)) {
if (depth > 1) {
baseFlatten(value, depth - 1, predicate, isStrict, result2);
} else {
arrayPush(result2, value);
}
} else if (!isStrict) {
result2[result2.length] = value;
}
}
return result2;
}
var baseFor = createBaseFor();
var baseForRight = createBaseFor(true);
function baseForOwn(object, iteratee2) {
return object && baseFor(object, iteratee2, keys);
}
function baseForOwnRight(object, iteratee2) {
return object && baseForRight(object, iteratee2, keys);
}
function baseFunctions(object, props) {
return arrayFilter(props, function(key) {
return isFunction2(object[key]);
});
}
function baseGet(object, path) {
path = castPath(path, object);
var index = 0, length = path.length;
while (object != null && index < length) {
object = object[toKey(path[index++])];
}
return index && index == length ? object : undefined$1;
}
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result2 = keysFunc(object);
return isArray2(object) ? result2 : arrayPush(result2, symbolsFunc(object));
}
function baseGetTag(value) {
if (value == null) {
return value === undefined$1 ? undefinedTag : nullTag;
}
return symToStringTag && symToStringTag in Object2(value) ? getRawTag(value) : objectToString(value);
}
function baseGt(value, other) {
return value > other;
}
function baseHas(object, key) {
return object != null && hasOwnProperty.call(object, key);
}
function baseHasIn(object, key) {
return object != null && key in Object2(object);
}
function baseInRange(number, start, end) {
return number >= nativeMin(start, end) && number < nativeMax(start, end);
}
function baseIntersection(arrays, iteratee2, comparator) {
var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = [];
while (othIndex--) {
var array2 = arrays[othIndex];
if (othIndex && iteratee2) {
array2 = arrayMap(array2, baseUnary(iteratee2));
}
maxLength = nativeMin(array2.length, maxLength);
caches[othIndex] = !comparator && (iteratee2 || length >= 120 && array2.length >= 120) ? new SetCache(othIndex && array2) : undefined$1;
}
array2 = arrays[0];
var index = -1, seen = caches[0];
outer:
while (++index < length && result2.length < maxLength) {
var value = array2[index], computed = iteratee2 ? iteratee2(value) : value;
value = comparator || value !== 0 ? value : 0;
if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) {
othIndex = othLength;
while (--othIndex) {
var cache = caches[othIndex];
if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) {
continue outer;
}
}
if (seen) {
seen.push(computed);
}
result2.push(value);
}
}
return result2;
}
function baseInverter(object, setter, iteratee2, accumulator) {
baseForOwn(object, function(value, key, object2) {
setter(accumulator, iteratee2(value), key, object2);
});
return accumulator;
}
function baseInvoke(object, path, args) {
path = castPath(path, object);
object = parent(object, path);
var func = object == null ? object : object[toKey(last2(path))];
return func == null ? undefined$1 : apply(func, object, args);
}
function baseIsArguments(value) {
return isObjectLike(value) && baseGetTag(value) == argsTag;
}
function baseIsArrayBuffer(value) {
return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
}
function baseIsDate(value) {
return isObjectLike(value) && baseGetTag(value) == dateTag;
}
function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) {
return true;
}
if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
return value !== value && other !== other;
}
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
objTag = objTag == argsTag ? objectTag : objTag;
othTag = othTag == argsTag ? objectTag : othTag;
var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
if (isSameTag && isBuffer(object)) {
if (!isBuffer(other)) {
return false;
}
objIsArr = true;
objIsObj = false;
}
if (isSameTag && !objIsObj) {
stack || (stack = new Stack());
return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
}
if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack());
return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
if (!isSameTag) {
return false;
}
stack || (stack = new Stack());
return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}
function baseIsMap(value) {
return isObjectLike(value) && getTag(value) == mapTag;
}
function baseIsMatch(object, source, matchData, customizer) {
var index = matchData.length, length = index, noCustomizer = !customizer;
if (object == null) {
return !length;
}
object = Object2(object);
while (index--) {
var data = matchData[index];
if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
return false;
}
}
while (++index < length) {
data = matchData[index];
var key = data[0], objValue = object[key], srcValue = data[1];
if (noCustomizer && data[2]) {
if (objValue === undefined$1 && !(key in object)) {
return false;
}
} else {
var stack = new Stack();
if (customizer) {
var result2 = customizer(objValue, srcValue, key, object, source, stack);
}
if (!(result2 === undefined$1 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) {
return false;
}
}
}
return true;
}
function baseIsNative(value) {
if (!isObject2(value) || isMasked(value)) {
return false;
}
var pattern = isFunction2(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
function baseIsRegExp(value) {
return isObjectLike(value) && baseGetTag(value) == regexpTag;
}
function baseIsSet(value) {
return isObjectLike(value) && getTag(value) == setTag;
}
function baseIsTypedArray(value) {
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}
function baseIteratee(value) {
if (typeof value == "function") {
return value;
}
if (value == null) {
return identity;
}
if (typeof value == "object") {
return isArray2(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
}
return property(value);
}
function baseKeys(object) {
if (!isPrototype(object)) {
return nativeKeys(object);
}
var result2 = [];
for (var key in Object2(object)) {
if (hasOwnProperty.call(object, key) && key != "constructor") {
result2.push(key);
}
}
return result2;
}
function baseKeysIn(object) {
if (!isObject2(object)) {
return nativeKeysIn(object);
}
var isProto = isPrototype(object), result2 = [];
for (var key in object) {
if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
result2.push(key);
}
}
return result2;
}
function baseLt(value, other) {
return value < other;
}
function baseMap(collection, iteratee2) {
var index = -1, result2 = isArrayLike(collection) ? Array2(collection.length) : [];
baseEach(collection, function(value, key, collection2) {
result2[++index] = iteratee2(value, key, collection2);
});
return result2;
}
function baseMatches(source) {
var matchData = getMatchData(source);
if (matchData.length == 1 && matchData[0][2]) {
return matchesStrictComparable(matchData[0][0], matchData[0][1]);
}
return function(object) {
return object === source || baseIsMatch(object, source, matchData);
};
}
function baseMatchesProperty(path, srcValue) {
if (isKey(path) && isStrictComparable(srcValue)) {
return matchesStrictComparable(toKey(path), srcValue);
}
return function(object) {
var objValue = get(object, path);
return objValue === undefined$1 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
function baseMerge(object, source, srcIndex, customizer, stack) {
if (object === source) {
return;
}
baseFor(source, function(srcValue, key) {
stack || (stack = new Stack());
if (isObject2(srcValue)) {
baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
} else {
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : undefined$1;
if (newValue === undefined$1) {
newValue = srcValue;
}
assignMergeValue(object, key, newValue);
}
}, keysIn);
}
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
if (stacked) {
assignMergeValue(object, key, stacked);
return;
}
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : undefined$1;
var isCommon = newValue === undefined$1;
if (isCommon) {
var isArr = isArray2(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
newValue = srcValue;
if (isArr || isBuff || isTyped) {
if (isArray2(objValue)) {
newValue = objValue;
} else if (isArrayLikeObject(objValue)) {
newValue = copyArray(objValue);
} else if (isBuff) {
isCommon = false;
newValue = cloneBuffer(srcValue, true);
} else if (isTyped) {
isCommon = false;
newValue = cloneTypedArray(srcValue, true);
} else {
newValue = [];
}
} else if (isPlainObject(srcValue) || isArguments(srcValue)) {
newValue = objValue;
if (isArguments(objValue)) {
newValue = toPlainObject(objValue);
} else if (!isObject2(objValue) || isFunction2(objValue)) {
newValue = initCloneObject(srcValue);
}
} else {
isCommon = false;
}
}
if (isCommon) {
stack.set(srcValue, newValue);
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
stack["delete"](srcValue);
}
assignMergeValue(object, key, newValue);
}
function baseNth(array2, n2) {
var length = array2.length;
if (!length) {
return;
}
n2 += n2 < 0 ? length : 0;
return isIndex(n2, length) ? array2[n2] : undefined$1;
}
function baseOrderBy(collection, iteratees, orders) {
if (iteratees.length) {
iteratees = arrayMap(iteratees, function(iteratee2) {
if (isArray2(iteratee2)) {
return function(value) {
return baseGet(value, iteratee2.length === 1 ? iteratee2[0] : iteratee2);
};
}
return iteratee2;
});
} else {
iteratees = [identity];
}
var index = -1;
iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
var result2 = baseMap(collection, function(value, key, collection2) {
var criteria = arrayMap(iteratees, function(iteratee2) {
return iteratee2(value);
});
return { "criteria": criteria, "index": ++index, "value": value };
});
return baseSortBy(result2, function(object, other) {
return compareMultiple(object, other, orders);
});
}
function basePick(object, paths) {
return basePickBy(object, paths, function(value, path) {
return hasIn(object, path);
});
}
function basePickBy(object, paths, predicate) {
var index = -1, length = paths.length, result2 = {};
while (++index < length) {
var path = paths[index], value = baseGet(object, path);
if (predicate(value, path)) {
baseSet(result2, castPath(path, object), value);
}
}
return result2;
}
function basePropertyDeep(path) {
return function(object) {
return baseGet(object, path);
};
}
function basePullAll(array2, values2, iteratee2, comparator) {
var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array2;
if (array2 === values2) {
values2 = copyArray(values2);
}
if (iteratee2) {
seen = arrayMap(array2, baseUnary(iteratee2));
}
while (++index < length) {
var fromIndex = 0, value = values2[index], computed = iteratee2 ? iteratee2(value) : value;
while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) {
if (seen !== array2) {
splice.call(seen, fromIndex, 1);
}
splice.call(array2, fromIndex, 1);
}
}
return array2;
}
function basePullAt(array2, indexes) {
var length = array2 ? indexes.length : 0, lastIndex = length - 1;
while (length--) {
var index = indexes[length];
if (length == lastIndex || index !== previous) {
var previous = index;
if (isIndex(index)) {
splice.call(array2, index, 1);
} else {
baseUnset(array2, index);
}
}
}
return array2;
}
function baseRandom(lower, upper) {
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
}
function baseRange(start, end, step, fromRight) {
var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result2 = Array2(length);
while (length--) {
result2[fromRight ? length : ++index] = start;
start += step;
}
return result2;
}
function baseRepeat(string, n2) {
var result2 = "";
if (!string || n2 < 1 || n2 > MAX_SAFE_INTEGER) {
return result2;
}
do {
if (n2 % 2) {
result2 += string;
}
n2 = nativeFloor(n2 / 2);
if (n2) {
string += string;
}
} while (n2);
return result2;
}
function baseRest(func, start) {
return setToString(overRest(func, start, identity), func + "");
}
function baseSample(collection) {
return arraySample(values(collection));
}
function baseSampleSize(collection, n2) {
var array2 = values(collection);
return shuffleSelf(array2, baseClamp(n2, 0, array2.length));
}
function baseSet(object, path, value, customizer) {
if (!isObject2(object)) {
return object;
}
path = castPath(path, object);
var index = -1, length = path.length, lastIndex = length - 1, nested = object;
while (nested != null && ++index < length) {
var key = toKey(path[index]), newValue = value;
if (key === "__proto__" || key === "constructor" || key === "prototype") {
return object;
}
if (index != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : undefined$1;
if (newValue === undefined$1) {
newValue = isObject2(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};
}
}
assignValue(nested, key, newValue);
nested = nested[key];
}
return object;
}
var baseSetData = !metaMap ? identity : function(func, data) {
metaMap.set(func, data);
return func;
};
var baseSetToString = !defineProperty ? identity : function(func, string) {
return defineProperty(func, "toString", {
"configurable": true,
"enumerable": false,
"value": constant(string),
"writable": true
});
};
function baseShuffle(collection) {
return shuffleSelf(values(collection));
}
function baseSlice(array2, start, end) {
var index = -1, length = array2.length;
if (start < 0) {
start = -start > length ? 0 : length + start;
}
end = end > length ? length : end;
if (end < 0) {
end += length;
}
length = start > end ? 0 : end - start >>> 0;
start >>>= 0;
var result2 = Array2(length);
while (++index < length) {
result2[index] = array2[index + start];
}
return result2;
}
function baseSome(collection, predicate) {
var result2;
baseEach(collection, function(value, index, collection2) {
result2 = predicate(value, index, collection2);
return !result2;
});
return !!result2;
}
function baseSortedIndex(array2, value, retHighest) {
var low = 0, high = array2 == null ? low : array2.length;
if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
while (low < high) {
var mid = low + high >>> 1, computed = array2[mid];
if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {
low = mid + 1;
} else {
high = mid;
}
}
return high;
}
return baseSortedIndexBy(array2, value, identity, retHighest);
}
function baseSortedIndexBy(array2, value, iteratee2, retHighest) {
var low = 0, high = array2 == null ? 0 : array2.length;
if (high === 0) {
return 0;
}
value = iteratee2(value);
var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined$1;
while (low < high) {
var mid = nativeFloor((low + high) / 2), computed = iteratee2(array2[mid]), othIsDefined = computed !== undefined$1, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed);
if (valIsNaN) {
var setLow = retHighest || othIsReflexive;
} else if (valIsUndefined) {
setLow = othIsReflexive && (retHighest || othIsDefined);
} else if (valIsNull) {
setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
} else if (valIsSymbol) {
setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
} else if (othIsNull || othIsSymbol) {
setLow = false;
} else {
setLow = retHighest ? computed <= value : computed < value;
}
if (setLow) {
low = mid + 1;
} else {
high = mid;
}
}
return nativeMin(high, MAX_ARRAY_INDEX);
}
function baseSortedUniq(array2, iteratee2) {
var index = -1, length = array2.length, resIndex = 0, result2 = [];
while (++index < length) {
var value = array2[index], computed = iteratee2 ? iteratee2(value) : value;
if (!index || !eq(computed, seen)) {
var seen = computed;
result2[resIndex++] = value === 0 ? 0 : value;
}
}
return result2;
}
function baseToNumber(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
return +value;
}
function baseToString(value) {
if (typeof value == "string") {
return value;
}
if (isArray2(value)) {
return arrayMap(value, baseToString) + "";
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : "";
}
var result2 = value + "";
return result2 == "0" && 1 / value == -Infinity ? "-0" : result2;
}
function baseUniq(array2, iteratee2, comparator) {
var index = -1, includes2 = arrayIncludes, length = array2.length, isCommon = true, result2 = [], seen = result2;
if (comparator) {
isCommon = false;
includes2 = arrayIncludesWith;
} else if (length >= LARGE_ARRAY_SIZE) {
var set2 = iteratee2 ? null : createSet(array2);
if (set2) {
return setToArray(set2);
}
isCommon = false;
includes2 = cacheHas;
seen = new SetCache();
} else {
seen = iteratee2 ? [] : result2;
}
outer:
while (++index < length) {
var value = array2[index], computed = iteratee2 ? iteratee2(value) : value;
value = comparator || value !== 0 ? value : 0;
if (isCommon && computed === computed) {
var seenIndex = seen.length;
while (seenIndex--) {
if (seen[seenIndex] === computed) {
continue outer;
}
}
if (iteratee2) {
seen.push(computed);
}
result2.push(value);
} else if (!includes2(seen, computed, comparator)) {
if (seen !== result2) {
seen.push(computed);
}
result2.push(value);
}
}
return result2;
}
function baseUnset(object, path) {
path = castPath(path, object);
object = parent(object, path);
return object == null || delete object[toKey(last2(path))];
}
function baseUpdate(object, path, updater, customizer) {
return baseSet(object, path, updater(baseGet(object, path)), customizer);
}
function baseWhile(array2, predicate, isDrop, fromRight) {
var length = array2.length, index = fromRight ? length : -1;
while ((fromRight ? index-- : ++index < length) && predicate(array2[index], index, array2)) {
}
return isDrop ? baseSlice(array2, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array2, fromRight ? index + 1 : 0, fromRight ? length : index);
}
function baseWrapperValue(value, actions) {
var result2 = value;
if (result2 instanceof LazyWrapper) {
result2 = result2.value();
}
return arrayReduce(actions, function(result3, action) {
return action.func.apply(action.thisArg, arrayPush([result3], action.args));
}, result2);
}
function baseXor(arrays, iteratee2, comparator) {
var length = arrays.length;
if (length < 2) {
return length ? baseUniq(arrays[0]) : [];
}
var index = -1, result2 = Array2(length);
while (++index < length) {
var array2 = arrays[index], othIndex = -1;
while (++othIndex < length) {
if (othIndex != index) {
result2[index] = baseDifference(result2[index] || array2, arrays[othIndex], iteratee2, comparator);
}
}
}
return baseUniq(baseFlatten(result2, 1), iteratee2, comparator);
}
function baseZipObject(props, values2, assignFunc) {
var index = -1, length = props.length, valsLength = values2.length, result2 = {};
while (++index < length) {
var value = index < valsLength ? values2[index] : undefined$1;
assignFunc(result2, props[index], value);
}
return result2;
}
function castArrayLikeObject(value) {
return isArrayLikeObject(value) ? value : [];
}
function castFunction(value) {
return typeof value == "function" ? value : identity;
}
function castPath(value, object) {
if (isArray2(value)) {
return value;
}
return isKey(value, object) ? [value] : stringToPath(toString(value));
}
var castRest = baseRest;
function castSlice(array2, start, end) {
var length = array2.length;
end = end === undefined$1 ? length : end;
return !start && end >= length ? array2 : baseSlice(array2, start, end);
}
var clearTimeout2 = ctxClearTimeout || function(id) {
return root.clearTimeout(id);
};
function cloneBuffer(buffer, isDeep) {
if (isDeep) {
return buffer.slice();
}
var length = buffer.length, result2 = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
buffer.copy(result2);
return result2;
}
function cloneArrayBuffer(arrayBuffer) {
var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength);
new Uint8Array(result2).set(new Uint8Array(arrayBuffer));
return result2;
}
function cloneDataView(dataView, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
}
function cloneRegExp(regexp) {
var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp));
result2.lastIndex = regexp.lastIndex;
return result2;
}
function cloneSymbol(symbol) {
return symbolValueOf ? Object2(symbolValueOf.call(symbol)) : {};
}
function cloneTypedArray(typedArray, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}
function compareAscending(value, other) {
if (value !== other) {
var valIsDefined = value !== undefined$1, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value);
var othIsDefined = other !== undefined$1, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other);
if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
return 1;
}
if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
return -1;
}
}
return 0;
}
function compareMultiple(object, other, orders) {
var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length;
while (++index < length) {
var result2 = compareAscending(objCriteria[index], othCriteria[index]);
if (result2) {
if (index >= ordersLength) {
return result2;
}
var order = orders[index];
return result2 * (order == "desc" ? -1 : 1);
}
}
return object.index - other.index;
}
function composeArgs(args, partials, holders, isCurried) {
var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried;
while (++leftIndex < leftLength) {
result2[leftIndex] = partials[leftIndex];
}
while (++argsIndex < holdersLength) {
if (isUncurried || argsIndex < argsLength) {
result2[holders[argsIndex]] = args[argsIndex];
}
}
while (rangeLength--) {
result2[leftIndex++] = args[argsIndex++];
}
return result2;
}
function composeArgsRight(args, partials, holders, isCurried) {
var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried;
while (++argsIndex < rangeLength) {
result2[argsIndex] = args[argsIndex];
}
var offset = argsIndex;
while (++rightIndex < rightLength) {
result2[offset + rightIndex] = partials[rightIndex];
}
while (++holdersIndex < holdersLength) {
if (isUncurried || argsIndex < argsLength) {
result2[offset + holders[holdersIndex]] = args[argsIndex++];
}
}
return result2;
}
function copyArray(source, array2) {
var index = -1, length = source.length;
array2 || (array2 = Array2(length));
while (++index < length) {
array2[index] = source[index];
}
return array2;
}
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
var index = -1, length = props.length;
while (++index < length) {
var key = props[index];
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined$1;
if (newValue === undefined$1) {
newValue = source[key];
}
if (isNew) {
baseAssignValue(object, key, newValue);
} else {
assignValue(object, key, newValue);
}
}
return object;
}
function copySymbols(source, object) {
return copyObject(source, getSymbols(source), object);
}
function copySymbolsIn(source, object) {
return copyObject(source, getSymbolsIn(source), object);
}
function createAggregator(setter, initializer) {
return function(collection, iteratee2) {
var func = isArray2(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {};
return func(collection, setter, getIteratee(iteratee2, 2), accumulator);
};
}
function createAssigner(assigner) {
return baseRest(function(object, sources) {
var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined$1, guard = length > 2 ? sources[2] : undefined$1;
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined$1;
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
customizer = length < 3 ? undefined$1 : customizer;
length = 1;
}
object = Object2(object);
while (++index < length) {
var source = sources[index];
if (source) {
assigner(object, source, index, customizer);
}
}
return object;
});
}
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee2) {
if (collection == null) {
return collection;
}
if (!isArrayLike(collection)) {
return eachFunc(collection, iteratee2);
}
var length = collection.length, index = fromRight ? length : -1, iterable = Object2(collection);
while (fromRight ? index-- : ++index < length) {
if (iteratee2(iterable[index], index, iterable) === false) {
break;
}
}
return collection;
};
}
function createBaseFor(fromRight) {
return function(object, iteratee2, keysFunc) {
var index = -1, iterable = Object2(object), props = keysFunc(object), length = props.length;
while (length--) {
var key = props[fromRight ? length : ++index];
if (iteratee2(iterable[key], key, iterable) === false) {
break;
}
}
return object;
};
}
function createBind(func, bitmask, thisArg) {
var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func);
function wrapper() {
var fn2 = this && this !== root && this instanceof wrapper ? Ctor : func;
return fn2.apply(isBind ? thisArg : this, arguments);
}
return wrapper;
}
function createCaseFirst(methodName) {
return function(string) {
string = toString(string);
var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined$1;
var chr = strSymbols ? strSymbols[0] : string.charAt(0);
var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
return chr[methodName]() + trailing;
};
}
function createCompounder(callback) {
return function(string) {
return arrayReduce(words(deburr(string).replace(reApos, "")), callback, "");
};
}
function createCtor(Ctor) {
return function() {
var args = arguments;
switch (args.length) {
case 0:
return new Ctor();
case 1:
return new Ctor(args[0]);
case 2:
return new Ctor(args[0], args[1]);
case 3:
return new Ctor(args[0], args[1], args[2]);
case 4:
return new Ctor(args[0], args[1], args[2], args[3]);
case 5:
return new Ctor(args[0], args[1], args[2], args[3], args[4]);
case 6:
return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7:
return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args);
return isObject2(result2) ? result2 : thisBinding;
};
}
function createCurry(func, bitmask, arity) {
var Ctor = createCtor(func);
function wrapper() {
var length = arguments.length, args = Array2(length), index = length, placeholder = getHolder(wrapper);
while (index--) {
args[index] = arguments[index];
}
var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);
length -= holders.length;
if (length < arity) {
return createRecurry(
func,
bitmask,
createHybrid,
wrapper.placeholder,
undefined$1,
args,
holders,
undefined$1,
undefined$1,
arity - length
);
}
var fn2 = this && this !== root && this instanceof wrapper ? Ctor : func;
return apply(fn2, this, args);
}
return wrapper;
}
function createFind(findIndexFunc) {
return function(collection, predicate, fromIndex) {
var iterable = Object2(collection);
if (!isArrayLike(collection)) {
var iteratee2 = getIteratee(predicate, 3);
collection = keys(collection);
predicate = function(key) {
return iteratee2(iterable[key], key, iterable);
};
}
var index = findIndexFunc(collection, predicate, fromIndex);
return index > -1 ? iterable[iteratee2 ? collection[index] : index] : undefined$1;
};
}
function createFlow(fromRight) {
return flatRest(function(funcs) {
var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru;
if (fromRight) {
funcs.reverse();
}
while (index--) {
var func = funcs[index];
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
if (prereq && !wrapper && getFuncName(func) == "wrapper") {
var wrapper = new LodashWrapper([], true);
}
}
index = wrapper ? index : length;
while (++index < length) {
func = funcs[index];
var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : undefined$1;
if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) {
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
} else {
wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);
}
}
return function() {
var args = arguments, value = args[0];
if (wrapper && args.length == 1 && isArray2(value)) {
return wrapper.plant(value).value();
}
var index2 = 0, result2 = length ? funcs[index2].apply(this, args) : value;
while (++index2 < length) {
result2 = funcs[index2].call(this, result2);
}
return result2;
};
});
}
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) {
var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined$1 : createCtor(func);
function wrapper() {
var length = arguments.length, args = Array2(length), index = length;
while (index--) {
args[index] = arguments[index];
}
if (isCurried) {
var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder);
}
if (partials) {
args = composeArgs(args, partials, holders, isCurried);
}
if (partialsRight) {
args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
}
length -= holdersCount;
if (isCurried && length < arity) {
var newHolders = replaceHolders(args, placeholder);
return createRecurry(
func,
bitmask,
createHybrid,
wrapper.placeholder,
thisArg,
args,
newHolders,
argPos,
ary2,
arity - length
);
}
var thisBinding = isBind ? thisArg : this, fn2 = isBindKey ? thisBinding[func] : func;
length = args.length;
if (argPos) {
args = reorder(args, argPos);
} else if (isFlip && length > 1) {
args.reverse();
}
if (isAry && ary2 < length) {
args.length = ary2;
}
if (this && this !== root && this instanceof wrapper) {
fn2 = Ctor || createCtor(fn2);
}
return fn2.apply(thisBinding, args);
}
return wrapper;
}
function createInverter(setter, toIteratee) {
return function(object, iteratee2) {
return baseInverter(object, setter, toIteratee(iteratee2), {});
};
}
function createMathOperation(operator, defaultValue) {
return function(value, other) {
var result2;
if (value === undefined$1 && other === undefined$1) {
return defaultValue;
}
if (value !== undefined$1) {
result2 = value;
}
if (other !== undefined$1) {
if (result2 === undefined$1) {
return other;
}
if (typeof value == "string" || typeof other == "string") {
value = baseToString(value);
other = baseToString(other);
} else {
value = baseToNumber(value);
other = baseToNumber(other);
}
result2 = operator(value, other);
}
return result2;
};
}
function createOver(arrayFunc) {
return flatRest(function(iteratees) {
iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
return baseRest(function(args) {
var thisArg = this;
return arrayFunc(iteratees, function(iteratee2) {
return apply(iteratee2, thisArg, args);
});
});
});
}
function createPadding(length, chars) {
chars = chars === undefined$1 ? " " : baseToString(chars);
var charsLength = chars.length;
if (charsLength < 2) {
return charsLength ? baseRepeat(chars, length) : chars;
}
var result2 = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length).join("") : result2.slice(0, length);
}
function createPartial(func, bitmask, thisArg, partials) {
var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func);
function wrapper() {
var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn2 = this && this !== root && this instanceof wrapper ? Ctor : func;
while (++leftIndex < leftLength) {
args[leftIndex] = partials[leftIndex];
}
while (argsLength--) {
args[leftIndex++] = arguments[++argsIndex];
}
return apply(fn2, isBind ? thisArg : this, args);
}
return wrapper;
}
function createRange(fromRight) {
return function(start, end, step) {
if (step && typeof step != "number" && isIterateeCall(start, end, step)) {
end = step = undefined$1;
}
start = toFinite(start);
if (end === undefined$1) {
end = start;
start = 0;
} else {
end = toFinite(end);
}
step = step === undefined$1 ? start < end ? 1 : -1 : toFinite(step);
return baseRange(start, end, step, fromRight);
};
}
function createRelationalOperation(operator) {
return function(value, other) {
if (!(typeof value == "string" && typeof other == "string")) {
value = toNumber(value);
other = toNumber(other);
}
return operator(value, other);
};
}
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) {
var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined$1, newHoldersRight = isCurry ? undefined$1 : holders, newPartials = isCurry ? partials : undefined$1, newPartialsRight = isCurry ? undefined$1 : partials;
bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;
bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
bitmask &= -4;
}
var newData = [
func,
bitmask,
thisArg,
newPartials,
newHolders,
newPartialsRight,
newHoldersRight,
argPos,
ary2,
arity
];
var result2 = wrapFunc.apply(undefined$1, newData);
if (isLaziable(func)) {
setData(result2, newData);
}
result2.placeholder = placeholder;
return setWrapToString(result2, func, bitmask);
}
function createRound(methodName) {
var func = Math2[methodName];
return function(number, precision) {
number = toNumber(number);
precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
if (precision && nativeIsFinite(number)) {
var pair = (toString(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision));
pair = (toString(value) + "e").split("e");
return +(pair[0] + "e" + (+pair[1] - precision));
}
return func(number);
};
}
var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop2 : function(values2) {
return new Set2(values2);
};
function createToPairs(keysFunc) {
return function(object) {
var tag = getTag(object);
if (tag == mapTag) {
return mapToArray(object);
}
if (tag == setTag) {
return setToPairs(object);
}
return baseToPairs(object, keysFunc(object));
};
}
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) {
var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
if (!isBindKey && typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
var length = partials ? partials.length : 0;
if (!length) {
bitmask &= -97;
partials = holders = undefined$1;
}
ary2 = ary2 === undefined$1 ? ary2 : nativeMax(toInteger(ary2), 0);
arity = arity === undefined$1 ? arity : toInteger(arity);
length -= holders ? holders.length : 0;
if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
var partialsRight = partials, holdersRight = holders;
partials = holders = undefined$1;
}
var data = isBindKey ? undefined$1 : getData(func);
var newData = [
func,
bitmask,
thisArg,
partials,
holders,
partialsRight,
holdersRight,
argPos,
ary2,
arity
];
if (data) {
mergeData(newData, data);
}
func = newData[0];
bitmask = newData[1];
thisArg = newData[2];
partials = newData[3];
holders = newData[4];
arity = newData[9] = newData[9] === undefined$1 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);
if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
bitmask &= -25;
}
if (!bitmask || bitmask == WRAP_BIND_FLAG) {
var result2 = createBind(func, bitmask, thisArg);
} else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
result2 = createCurry(func, bitmask, arity);
} else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
result2 = createPartial(func, bitmask, thisArg, partials);
} else {
result2 = createHybrid.apply(undefined$1, newData);
}
var setter = data ? baseSetData : setData;
return setWrapToString(setter(result2, newData), func, bitmask);
}
function customDefaultsAssignIn(objValue, srcValue, key, object) {
if (objValue === undefined$1 || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {
return srcValue;
}
return objValue;
}
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
if (isObject2(objValue) && isObject2(srcValue)) {
stack.set(srcValue, objValue);
baseMerge(objValue, srcValue, undefined$1, customDefaultsMerge, stack);
stack["delete"](srcValue);
}
return objValue;
}
function customOmitClone(value) {
return isPlainObject(value) ? undefined$1 : value;
}
function equalArrays(array2, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array2.length, othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
return false;
}
var arrStacked = stack.get(array2);
var othStacked = stack.get(other);
if (arrStacked && othStacked) {
return arrStacked == other && othStacked == array2;
}
var index = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined$1;
stack.set(array2, other);
stack.set(other, array2);
while (++index < arrLength) {
var arrValue = array2[index], othValue = other[index];
if (customizer) {
var compared = isPartial ? customizer(othValue, arrValue, index, other, array2, stack) : customizer(arrValue, othValue, index, array2, other, stack);
}
if (compared !== undefined$1) {
if (compared) {
continue;
}
result2 = false;
break;
}
if (seen) {
if (!arraySome(other, function(othValue2, othIndex) {
if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
return seen.push(othIndex);
}
})) {
result2 = false;
break;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
result2 = false;
break;
}
}
stack["delete"](array2);
stack["delete"](other);
return result2;
}
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
return false;
}
object = object.buffer;
other = other.buffer;
case arrayBufferTag:
if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
return false;
}
return true;
case boolTag:
case dateTag:
case numberTag:
return eq(+object, +other);
case errorTag:
return object.name == other.name && object.message == other.message;
case regexpTag:
case stringTag:
return object == other + "";
case mapTag:
var convert = mapToArray;
case setTag:
var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray);
if (object.size != other.size && !isPartial) {
return false;
}
var stacked = stack.get(object);
if (stacked) {
return stacked == other;
}
bitmask |= COMPARE_UNORDERED_FLAG;
stack.set(object, other);
var result2 = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
stack["delete"](object);
return result2;
case symbolTag:
if (symbolValueOf) {
return symbolValueOf.call(object) == symbolValueOf.call(other);
}
}
return false;
}
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
if (objLength != othLength && !isPartial) {
return false;
}
var index = objLength;
while (index--) {
var key = objProps[index];
if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
return false;
}
}
var objStacked = stack.get(object);
var othStacked = stack.get(other);
if (objStacked && othStacked) {
return objStacked == other && othStacked == object;
}
var result2 = true;
stack.set(object, other);
stack.set(other, object);
var skipCtor = isPartial;
while (++index < objLength) {
key = objProps[index];
var objValue = object[key], othValue = other[key];
if (customizer) {
var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
}
if (!(compared === undefined$1 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
result2 = false;
break;
}
skipCtor || (skipCtor = key == "constructor");
}
if (result2 && !skipCtor) {
var objCtor = object.constructor, othCtor = other.constructor;
if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
result2 = false;
}
}
stack["delete"](object);
stack["delete"](other);
return result2;
}
function flatRest(func) {
return setToString(overRest(func, undefined$1, flatten), func + "");
}
function getAllKeys(object) {
return baseGetAllKeys(object, keys, getSymbols);
}
function getAllKeysIn(object) {
return baseGetAllKeys(object, keysIn, getSymbolsIn);
}
var getData = !metaMap ? noop2 : function(func) {
return metaMap.get(func);
};
function getFuncName(func) {
var result2 = func.name + "", array2 = realNames[result2], length = hasOwnProperty.call(realNames, result2) ? array2.length : 0;
while (length--) {
var data = array2[length], otherFunc = data.func;
if (otherFunc == null || otherFunc == func) {
return data.name;
}
}
return result2;
}
function getHolder(func) {
var object = hasOwnProperty.call(lodash2, "placeholder") ? lodash2 : func;
return object.placeholder;
}
function getIteratee() {
var result2 = lodash2.iteratee || iteratee;
result2 = result2 === iteratee ? baseIteratee : result2;
return arguments.length ? result2(arguments[0], arguments[1]) : result2;
}
function getMapData(map2, key) {
var data = map2.__data__;
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
}
function getMatchData(object) {
var result2 = keys(object), length = result2.length;
while (length--) {
var key = result2[length], value = object[key];
result2[length] = [key, value, isStrictComparable(value)];
}
return result2;
}
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : undefined$1;
}
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = undefined$1;
var unmasked = true;
} catch (e2) {
}
var result2 = nativeObjectToString.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
} else {
delete value[symToStringTag];
}
}
return result2;
}
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
if (object == null) {
return [];
}
object = Object2(object);
return arrayFilter(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
});
};
var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
var result2 = [];
while (object) {
arrayPush(result2, getSymbols(object));
object = getPrototype(object);
}
return result2;
};
var getTag = baseGetTag;
if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
getTag = function(value) {
var result2 = baseGetTag(value), Ctor = result2 == objectTag ? value.constructor : undefined$1, ctorString = Ctor ? toSource(Ctor) : "";
if (ctorString) {
switch (ctorString) {
case dataViewCtorString:
return dataViewTag;
case mapCtorString:
return mapTag;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag;
case weakMapCtorString:
return weakMapTag;
}
}
return result2;
};
}
function getView(start, end, transforms) {
var index = -1, length = transforms.length;
while (++index < length) {
var data = transforms[index], size2 = data.size;
switch (data.type) {
case "drop":
start += size2;
break;
case "dropRight":
end -= size2;
break;
case "take":
end = nativeMin(end, start + size2);
break;
case "takeRight":
start = nativeMax(start, end - size2);
break;
}
}
return { "start": start, "end": end };
}
function getWrapDetails(source) {
var match = source.match(reWrapDetails);
return match ? match[1].split(reSplitDetails) : [];
}
function hasPath(object, path, hasFunc) {
path = castPath(path, object);
var index = -1, length = path.length, result2 = false;
while (++index < length) {
var key = toKey(path[index]);
if (!(result2 = object != null && hasFunc(object, key))) {
break;
}
object = object[key];
}
if (result2 || ++index != length) {
return result2;
}
length = object == null ? 0 : object.length;
return !!length && isLength(length) && isIndex(key, length) && (isArray2(object) || isArguments(object));
}
function initCloneArray(array2) {
var length = array2.length, result2 = new array2.constructor(length);
if (length && typeof array2[0] == "string" && hasOwnProperty.call(array2, "index")) {
result2.index = array2.index;
result2.input = array2.input;
}
return result2;
}
function initCloneObject(object) {
return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
}
function initCloneByTag(object, tag, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag:
return cloneArrayBuffer(object);
case boolTag:
case dateTag:
return new Ctor(+object);
case dataViewTag:
return cloneDataView(object, isDeep);
case float32Tag:
case float64Tag:
case int8Tag:
case int16Tag:
case int32Tag:
case uint8Tag:
case uint8ClampedTag:
case uint16Tag:
case uint32Tag:
return cloneTypedArray(object, isDeep);
case mapTag:
return new Ctor();
case numberTag:
case stringTag:
return new Ctor(object);
case regexpTag:
return cloneRegExp(object);
case setTag:
return new Ctor();
case symbolTag:
return cloneSymbol(object);
}
}
function insertWrapDetails(source, details) {
var length = details.length;
if (!length) {
return source;
}
var lastIndex = length - 1;
details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex];
details = details.join(length > 2 ? ", " : " ");
return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n");
}
function isFlattenable(value) {
return isArray2(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
}
function isIndex(value, length) {
var type = typeof value;
length = length == null ? MAX_SAFE_INTEGER : length;
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
}
function isIterateeCall(value, index, object) {
if (!isObject2(object)) {
return false;
}
var type = typeof index;
if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) {
return eq(object[index], value);
}
return false;
}
function isKey(value, object) {
if (isArray2(value)) {
return false;
}
var type = typeof value;
if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) {
return true;
}
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object2(object);
}
function isKeyable(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
function isLaziable(func) {
var funcName = getFuncName(func), other = lodash2[funcName];
if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) {
return false;
}
if (func === other) {
return true;
}
var data = getData(other);
return !!data && func === data[0];
}
function isMasked(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var isMaskable = coreJsData ? isFunction2 : stubFalse;
function isPrototype(value) {
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
return value === proto;
}
function isStrictComparable(value) {
return value === value && !isObject2(value);
}
function matchesStrictComparable(key, srcValue) {
return function(object) {
if (object == null) {
return false;
}
return object[key] === srcValue && (srcValue !== undefined$1 || key in Object2(object));
};
}
function memoizeCapped(func) {
var result2 = memoize(func, function(key) {
if (cache.size === MAX_MEMOIZE_SIZE) {
cache.clear();
}
return key;
});
var cache = result2.cache;
return result2;
}
function mergeData(data, source) {
var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG;
if (!(isCommon || isCombo)) {
return data;
}
if (srcBitmask & WRAP_BIND_FLAG) {
data[2] = source[2];
newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
}
var value = source[3];
if (value) {
var partials = data[3];
data[3] = partials ? composeArgs(partials, value, source[4]) : value;
data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
}
value = source[5];
if (value) {
partials = data[5];
data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
}
value = source[7];
if (value) {
data[7] = value;
}
if (srcBitmask & WRAP_ARY_FLAG) {
data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
}
if (data[9] == null) {
data[9] = source[9];
}
data[0] = source[0];
data[1] = newBitmask;
return data;
}
function nativeKeysIn(object) {
var result2 = [];
if (object != null) {
for (var key in Object2(object)) {
result2.push(key);
}
}
return result2;
}
function objectToString(value) {
return nativeObjectToString.call(value);
}
function overRest(func, start, transform2) {
start = nativeMax(start === undefined$1 ? func.length - 1 : start, 0);
return function() {
var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array2 = Array2(length);
while (++index < length) {
array2[index] = args[start + index];
}
index = -1;
var otherArgs = Array2(start + 1);
while (++index < start) {
otherArgs[index] = args[index];
}
otherArgs[start] = transform2(array2);
return apply(func, this, otherArgs);
};
}
function parent(object, path) {
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
}
function reorder(array2, indexes) {
var arrLength = array2.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array2);
while (length--) {
var index = indexes[length];
array2[length] = isIndex(index, arrLength) ? oldArray[index] : undefined$1;
}
return array2;
}
function safeGet(object, key) {
if (key === "constructor" && typeof object[key] === "function") {
return;
}
if (key == "__proto__") {
return;
}
return object[key];
}
var setData = shortOut(baseSetData);
var setTimeout2 = ctxSetTimeout || function(func, wait) {
return root.setTimeout(func, wait);
};
var setToString = shortOut(baseSetToString);
function setWrapToString(wrapper, reference, bitmask) {
var source = reference + "";
return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
}
function shortOut(func) {
var count = 0, lastCalled = 0;
return function() {
var stamp2 = nativeNow(), remaining = HOT_SPAN - (stamp2 - lastCalled);
lastCalled = stamp2;
if (remaining > 0) {
if (++count >= HOT_COUNT) {
return arguments[0];
}
} else {
count = 0;
}
return func.apply(undefined$1, arguments);
};
}
function shuffleSelf(array2, size2) {
var index = -1, length = array2.length, lastIndex = length - 1;
size2 = size2 === undefined$1 ? length : size2;
while (++index < size2) {
var rand = baseRandom(index, lastIndex), value = array2[rand];
array2[rand] = array2[index];
array2[index] = value;
}
array2.length = size2;
return array2;
}
var stringToPath = memoizeCapped(function(string) {
var result2 = [];
if (string.charCodeAt(0) === 46) {
result2.push("");
}
string.replace(rePropName, function(match, number, quote, subString) {
result2.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
});
return result2;
});
function toKey(value) {
if (typeof value == "string" || isSymbol(value)) {
return value;
}
var result2 = value + "";
return result2 == "0" && 1 / value == -Infinity ? "-0" : result2;
}
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e2) {
}
try {
return func + "";
} catch (e2) {
}
}
return "";
}
function updateWrapDetails(details, bitmask) {
arrayEach(wrapFlags, function(pair) {
var value = "_." + pair[0];
if (bitmask & pair[1] && !arrayIncludes(details, value)) {
details.push(value);
}
});
return details.sort();
}
function wrapperClone(wrapper) {
if (wrapper instanceof LazyWrapper) {
return wrapper.clone();
}
var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
result2.__actions__ = copyArray(wrapper.__actions__);
result2.__index__ = wrapper.__index__;
result2.__values__ = wrapper.__values__;
return result2;
}
function chunk(array2, size2, guard) {
if (guard ? isIterateeCall(array2, size2, guard) : size2 === undefined$1) {
size2 = 1;
} else {
size2 = nativeMax(toInteger(size2), 0);
}
var length = array2 == null ? 0 : array2.length;
if (!length || size2 < 1) {
return [];
}
var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2));
while (index < length) {
result2[resIndex++] = baseSlice(array2, index, index += size2);
}
return result2;
}
function compact(array2) {
var index = -1, length = array2 == null ? 0 : array2.length, resIndex = 0, result2 = [];
while (++index < length) {
var value = array2[index];
if (value) {
result2[resIndex++] = value;
}
}
return result2;
}
function concat() {
var length = arguments.length;
if (!length) {
return [];
}
var args = Array2(length - 1), array2 = arguments[0], index = length;
while (index--) {
args[index - 1] = arguments[index];
}
return arrayPush(isArray2(array2) ? copyArray(array2) : [array2], baseFlatten(args, 1));
}
var difference = baseRest(function(array2, values2) {
return isArrayLikeObject(array2) ? baseDifference(array2, baseFlatten(values2, 1, isArrayLikeObject, true)) : [];
});
var differenceBy = baseRest(function(array2, values2) {
var iteratee2 = last2(values2);
if (isArrayLikeObject(iteratee2)) {
iteratee2 = undefined$1;
}
return isArrayLikeObject(array2) ? baseDifference(array2, baseFlatten(values2, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : [];
});
var differenceWith = baseRest(function(array2, values2) {
var comparator = last2(values2);
if (isArrayLikeObject(comparator)) {
comparator = undefined$1;
}
return isArrayLikeObject(array2) ? baseDifference(array2, baseFlatten(values2, 1, isArrayLikeObject, true), undefined$1, comparator) : [];
});
function drop(array2, n2, guard) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return [];
}
n2 = guard || n2 === undefined$1 ? 1 : toInteger(n2);
return baseSlice(array2, n2 < 0 ? 0 : n2, length);
}
function dropRight(array2, n2, guard) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return [];
}
n2 = guard || n2 === undefined$1 ? 1 : toInteger(n2);
n2 = length - n2;
return baseSlice(array2, 0, n2 < 0 ? 0 : n2);
}
function dropRightWhile(array2, predicate) {
return array2 && array2.length ? baseWhile(array2, getIteratee(predicate, 3), true, true) : [];
}
function dropWhile(array2, predicate) {
return array2 && array2.length ? baseWhile(array2, getIteratee(predicate, 3), true) : [];
}
function fill2(array2, value, start, end) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return [];
}
if (start && typeof start != "number" && isIterateeCall(array2, value, start)) {
start = 0;
end = length;
}
return baseFill(array2, value, start, end);
}
function findIndex(array2, predicate, fromIndex) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return -1;
}
var index = fromIndex == null ? 0 : toInteger(fromIndex);
if (index < 0) {
index = nativeMax(length + index, 0);
}
return baseFindIndex(array2, getIteratee(predicate, 3), index);
}
function findLastIndex2(array2, predicate, fromIndex) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return -1;
}
var index = length - 1;
if (fromIndex !== undefined$1) {
index = toInteger(fromIndex);
index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
}
return baseFindIndex(array2, getIteratee(predicate, 3), index, true);
}
function flatten(array2) {
var length = array2 == null ? 0 : array2.length;
return length ? baseFlatten(array2, 1) : [];
}
function flattenDeep(array2) {
var length = array2 == null ? 0 : array2.length;
return length ? baseFlatten(array2, INFINITY) : [];
}
function flattenDepth(array2, depth) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return [];
}
depth = depth === undefined$1 ? 1 : toInteger(depth);
return baseFlatten(array2, depth);
}
function fromPairs(pairs) {
var index = -1, length = pairs == null ? 0 : pairs.length, result2 = {};
while (++index < length) {
var pair = pairs[index];
result2[pair[0]] = pair[1];
}
return result2;
}
function head(array2) {
return array2 && array2.length ? array2[0] : undefined$1;
}
function indexOf(array2, value, fromIndex) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return -1;
}
var index = fromIndex == null ? 0 : toInteger(fromIndex);
if (index < 0) {
index = nativeMax(length + index, 0);
}
return baseIndexOf(array2, value, index);
}
function initial(array2) {
var length = array2 == null ? 0 : array2.length;
return length ? baseSlice(array2, 0, -1) : [];
}
var intersection = baseRest(function(arrays) {
var mapped = arrayMap(arrays, castArrayLikeObject);
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];
});
var intersectionBy = baseRest(function(arrays) {
var iteratee2 = last2(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
if (iteratee2 === last2(mapped)) {
iteratee2 = undefined$1;
} else {
mapped.pop();
}
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : [];
});
var intersectionWith = baseRest(function(arrays) {
var comparator = last2(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
comparator = typeof comparator == "function" ? comparator : undefined$1;
if (comparator) {
mapped.pop();
}
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined$1, comparator) : [];
});
function join(array2, separator) {
return array2 == null ? "" : nativeJoin.call(array2, separator);
}
function last2(array2) {
var length = array2 == null ? 0 : array2.length;
return length ? array2[length - 1] : undefined$1;
}
function lastIndexOf(array2, value, fromIndex) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return -1;
}
var index = length;
if (fromIndex !== undefined$1) {
index = toInteger(fromIndex);
index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
}
return value === value ? strictLastIndexOf(array2, value, index) : baseFindIndex(array2, baseIsNaN, index, true);
}
function nth(array2, n2) {
return array2 && array2.length ? baseNth(array2, toInteger(n2)) : undefined$1;
}
var pull = baseRest(pullAll);
function pullAll(array2, values2) {
return array2 && array2.length && values2 && values2.length ? basePullAll(array2, values2) : array2;
}
function pullAllBy(array2, values2, iteratee2) {
return array2 && array2.length && values2 && values2.length ? basePullAll(array2, values2, getIteratee(iteratee2, 2)) : array2;
}
function pullAllWith(array2, values2, comparator) {
return array2 && array2.length && values2 && values2.length ? basePullAll(array2, values2, undefined$1, comparator) : array2;
}
var pullAt = flatRest(function(array2, indexes) {
var length = array2 == null ? 0 : array2.length, result2 = baseAt(array2, indexes);
basePullAt(array2, arrayMap(indexes, function(index) {
return isIndex(index, length) ? +index : index;
}).sort(compareAscending));
return result2;
});
function remove(array2, predicate) {
var result2 = [];
if (!(array2 && array2.length)) {
return result2;
}
var index = -1, indexes = [], length = array2.length;
predicate = getIteratee(predicate, 3);
while (++index < length) {
var value = array2[index];
if (predicate(value, index, array2)) {
result2.push(value);
indexes.push(index);
}
}
basePullAt(array2, indexes);
return result2;
}
function reverse(array2) {
return array2 == null ? array2 : nativeReverse.call(array2);
}
function slice(array2, start, end) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return [];
}
if (end && typeof end != "number" && isIterateeCall(array2, start, end)) {
start = 0;
end = length;
} else {
start = start == null ? 0 : toInteger(start);
end = end === undefined$1 ? length : toInteger(end);
}
return baseSlice(array2, start, end);
}
function sortedIndex(array2, value) {
return baseSortedIndex(array2, value);
}
function sortedIndexBy(array2, value, iteratee2) {
return baseSortedIndexBy(array2, value, getIteratee(iteratee2, 2));
}
function sortedIndexOf(array2, value) {
var length = array2 == null ? 0 : array2.length;
if (length) {
var index = baseSortedIndex(array2, value);
if (index < length && eq(array2[index], value)) {
return index;
}
}
return -1;
}
function sortedLastIndex(array2, value) {
return baseSortedIndex(array2, value, true);
}
function sortedLastIndexBy(array2, value, iteratee2) {
return baseSortedIndexBy(array2, value, getIteratee(iteratee2, 2), true);
}
function sortedLastIndexOf(array2, value) {
var length = array2 == null ? 0 : array2.length;
if (length) {
var index = baseSortedIndex(array2, value, true) - 1;
if (eq(array2[index], value)) {
return index;
}
}
return -1;
}
function sortedUniq(array2) {
return array2 && array2.length ? baseSortedUniq(array2) : [];
}
function sortedUniqBy(array2, iteratee2) {
return array2 && array2.length ? baseSortedUniq(array2, getIteratee(iteratee2, 2)) : [];
}
function tail(array2) {
var length = array2 == null ? 0 : array2.length;
return length ? baseSlice(array2, 1, length) : [];
}
function take(array2, n2, guard) {
if (!(array2 && array2.length)) {
return [];
}
n2 = guard || n2 === undefined$1 ? 1 : toInteger(n2);
return baseSlice(array2, 0, n2 < 0 ? 0 : n2);
}
function takeRight(array2, n2, guard) {
var length = array2 == null ? 0 : array2.length;
if (!length) {
return [];
}
n2 = guard || n2 === undefined$1 ? 1 : toInteger(n2);
n2 = length - n2;
return baseSlice(array2, n2 < 0 ? 0 : n2, length);
}
function takeRightWhile(array2, predicate) {
return array2 && array2.length ? baseWhile(array2, getIteratee(predicate, 3), false, true) : [];
}
function takeWhile(array2, predicate) {
return array2 && array2.length ? baseWhile(array2, getIteratee(predicate, 3)) : [];
}
var union = baseRest(function(arrays) {
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
});
var unionBy = baseRest(function(arrays) {
var iteratee2 = last2(arrays);
if (isArrayLikeObject(iteratee2)) {
iteratee2 = undefined$1;
}
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2));
});
var unionWith = baseRest(function(arrays) {
var comparator = last2(arrays);
comparator = typeof comparator == "function" ? comparator : undefined$1;
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined$1, comparator);
});
function uniq(array2) {
return array2 && array2.length ? baseUniq(array2) : [];
}
function uniqBy(array2, iteratee2) {
return array2 && array2.length ? baseUniq(array2, getIteratee(iteratee2, 2)) : [];
}
function uniqWith(array2, comparator) {
comparator = typeof comparator == "function" ? comparator : undefined$1;
return array2 && array2.length ? baseUniq(array2, undefined$1, comparator) : [];
}
function unzip(array2) {
if (!(array2 && array2.length)) {
return [];
}
var length = 0;
array2 = arrayFilter(array2, function(group) {
if (isArrayLikeObject(group)) {
length = nativeMax(group.length, length);
return true;
}
});
return baseTimes(length, function(index) {
return arrayMap(array2, baseProperty(index));
});
}
function unzipWith(array2, iteratee2) {
if (!(array2 && array2.length)) {
return [];
}
var result2 = unzip(array2);
if (iteratee2 == null) {
return result2;
}
return arrayMap(result2, function(group) {
return apply(iteratee2, undefined$1, group);
});
}
var without = baseRest(function(array2, values2) {
return isArrayLikeObject(array2) ? baseDifference(array2, values2) : [];
});
var xor = baseRest(function(arrays) {
return baseXor(arrayFilter(arrays, isArrayLikeObject));
});
var xorBy = baseRest(function(arrays) {
var iteratee2 = last2(arrays);
if (isArrayLikeObject(iteratee2)) {
iteratee2 = undefined$1;
}
return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2));
});
var xorWith = baseRest(function(arrays) {
var comparator = last2(arrays);
comparator = typeof comparator == "function" ? comparator : undefined$1;
return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined$1, comparator);
});
var zip = baseRest(unzip);
function zipObject(props, values2) {
return baseZipObject(props || [], values2 || [], assignValue);
}
function zipObjectDeep(props, values2) {
return baseZipObject(props || [], values2 || [], baseSet);
}
var zipWith = baseRest(function(arrays) {
var length = arrays.length, iteratee2 = length > 1 ? arrays[length - 1] : undefined$1;
iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined$1;
return unzipWith(arrays, iteratee2);
});
function chain(value) {
var result2 = lodash2(value);
result2.__chain__ = true;
return result2;
}
function tap(value, interceptor) {
interceptor(value);
return value;
}
function thru(value, interceptor) {
return interceptor(value);
}
var wrapperAt = flatRest(function(paths) {
var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) {
return baseAt(object, paths);
};
if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {
return this.thru(interceptor);
}
value = value.slice(start, +start + (length ? 1 : 0));
value.__actions__.push({
"func": thru,
"args": [interceptor],
"thisArg": undefined$1
});
return new LodashWrapper(value, this.__chain__).thru(function(array2) {
if (length && !array2.length) {
array2.push(undefined$1);
}
return array2;
});
});
function wrapperChain() {
return chain(this);
}
function wrapperCommit() {
return new LodashWrapper(this.value(), this.__chain__);
}
function wrapperNext() {
if (this.__values__ === undefined$1) {
this.__values__ = toArray(this.value());
}
var done = this.__index__ >= this.__values__.length, value = done ? undefined$1 : this.__values__[this.__index__++];
return { "done": done, "value": value };
}
function wrapperToIterator() {
return this;
}
function wrapperPlant(value) {
var result2, parent2 = this;
while (parent2 instanceof baseLodash) {
var clone3 = wrapperClone(parent2);
clone3.__index__ = 0;
clone3.__values__ = undefined$1;
if (result2) {
previous.__wrapped__ = clone3;
} else {
result2 = clone3;
}
var previous = clone3;
parent2 = parent2.__wrapped__;
}
previous.__wrapped__ = value;
return result2;
}
function wrapperReverse() {
var value = this.__wrapped__;
if (value instanceof LazyWrapper) {
var wrapped = value;
if (this.__actions__.length) {
wrapped = new LazyWrapper(this);
}
wrapped = wrapped.reverse();
wrapped.__actions__.push({
"func": thru,
"args": [reverse],
"thisArg": undefined$1
});
return new LodashWrapper(wrapped, this.__chain__);
}
return this.thru(reverse);
}
function wrapperValue() {
return baseWrapperValue(this.__wrapped__, this.__actions__);
}
var countBy = createAggregator(function(result2, value, key) {
if (hasOwnProperty.call(result2, key)) {
++result2[key];
} else {
baseAssignValue(result2, key, 1);
}
});
function every(collection, predicate, guard) {
var func = isArray2(collection) ? arrayEvery : baseEvery;
if (guard && isIterateeCall(collection, predicate, guard)) {
predicate = undefined$1;
}
return func(collection, getIteratee(predicate, 3));
}
function filter(collection, predicate) {
var func = isArray2(collection) ? arrayFilter : baseFilter;
return func(collection, getIteratee(predicate, 3));
}
var find = createFind(findIndex);
var findLast = createFind(findLastIndex2);
function flatMap(collection, iteratee2) {
return baseFlatten(map(collection, iteratee2), 1);
}
function flatMapDeep(collection, iteratee2) {
return baseFlatten(map(collection, iteratee2), INFINITY);
}
function flatMapDepth(collection, iteratee2, depth) {
depth = depth === undefined$1 ? 1 : toInteger(depth);
return baseFlatten(map(collection, iteratee2), depth);
}
function forEach2(collection, iteratee2) {
var func = isArray2(collection) ? arrayEach : baseEach;
return func(collection, getIteratee(iteratee2, 3));
}
function forEachRight(collection, iteratee2) {
var func = isArray2(collection) ? arrayEachRight : baseEachRight;
return func(collection, getIteratee(iteratee2, 3));
}
var groupBy = createAggregator(function(result2, value, key) {
if (hasOwnProperty.call(result2, key)) {
result2[key].push(value);
} else {
baseAssignValue(result2, key, [value]);
}
});
function includes(collection, value, fromIndex, guard) {
collection = isArrayLike(collection) ? collection : values(collection);
fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;
var length = collection.length;
if (fromIndex < 0) {
fromIndex = nativeMax(length + fromIndex, 0);
}
return isString2(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
}
var invokeMap = baseRest(function(collection, path, args) {
var index = -1, isFunc = typeof path == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : [];
baseEach(collection, function(value) {
result2[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
});
return result2;
});
var keyBy = createAggregator(function(result2, value, key) {
baseAssignValue(result2, key, value);
});
function map(collection, iteratee2) {
var func = isArray2(collection) ? arrayMap : baseMap;
return func(collection, getIteratee(iteratee2, 3));
}
function orderBy(collection, iteratees, orders, guard) {
if (collection == null) {
return [];
}
if (!isArray2(iteratees)) {
iteratees = iteratees == null ? [] : [iteratees];
}
orders = guard ? undefined$1 : orders;
if (!isArray2(orders)) {
orders = orders == null ? [] : [orders];
}
return baseOrderBy(collection, iteratees, orders);
}
var partition = createAggregator(function(result2, value, key) {
result2[key ? 0 : 1].push(value);
}, function() {
return [[], []];
});
function reduce(collection, iteratee2, accumulator) {
var func = isArray2(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3;
return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach);
}
function reduceRight(collection, iteratee2, accumulator) {
var func = isArray2(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3;
return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight);
}
function reject(collection, predicate) {
var func = isArray2(collection) ? arrayFilter : baseFilter;
return func(collection, negate(getIteratee(predicate, 3)));
}
function sample(collection) {
var func = isArray2(collection) ? arraySample : baseSample;
return func(collection);
}
function sampleSize(collection, n2, guard) {
if (guard ? isIterateeCall(collection, n2, guard) : n2 === undefined$1) {
n2 = 1;
} else {
n2 = toInteger(n2);
}
var func = isArray2(collection) ? arraySampleSize : baseSampleSize;
return func(collection, n2);
}
function shuffle(collection) {
var func = isArray2(collection) ? arrayShuffle : baseShuffle;
return func(collection);
}
function size(collection) {
if (collection == null) {
return 0;
}
if (isArrayLike(collection)) {
return isString2(collection) ? stringSize(collection) : collection.length;
}
var tag = getTag(collection);
if (tag == mapTag || tag == setTag) {
return collection.size;
}
return baseKeys(collection).length;
}
function some(collection, predicate, guard) {
var func = isArray2(collection) ? arraySome : baseSome;
if (guard && isIterateeCall(collection, predicate, guard)) {
predicate = undefined$1;
}
return func(collection, getIteratee(predicate, 3));
}
var sortBy = baseRest(function(collection, iteratees) {
if (collection == null) {
return [];
}
var length = iteratees.length;
if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
iteratees = [];
} else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
iteratees = [iteratees[0]];
}
return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
});
var now = ctxNow || function() {
return root.Date.now();
};
function after(n2, func) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
n2 = toInteger(n2);
return function() {
if (--n2 < 1) {
return func.apply(this, arguments);
}
};
}
function ary(func, n2, guard) {
n2 = guard ? undefined$1 : n2;
n2 = func && n2 == null ? func.length : n2;
return createWrap(func, WRAP_ARY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, n2);
}
function before(n2, func) {
var result2;
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
n2 = toInteger(n2);
return function() {
if (--n2 > 0) {
result2 = func.apply(this, arguments);
}
if (n2 <= 1) {
func = undefined$1;
}
return result2;
};
}
var bind = baseRest(function(func, thisArg, partials) {
var bitmask = WRAP_BIND_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind));
bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(func, bitmask, thisArg, partials, holders);
});
var bindKey = baseRest(function(object, key, partials) {
var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey));
bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(key, bitmask, object, partials, holders);
});
function curry(func, arity, guard) {
arity = guard ? undefined$1 : arity;
var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity);
result2.placeholder = curry.placeholder;
return result2;
}
function curryRight(func, arity, guard) {
arity = guard ? undefined$1 : arity;
var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity);
result2.placeholder = curryRight.placeholder;
return result2;
}
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
wait = toNumber(wait) || 0;
if (isObject2(options)) {
leading = !!options.leading;
maxing = "maxWait" in options;
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
lastArgs = lastThis = undefined$1;
lastInvokeTime = time;
result2 = func.apply(thisArg, args);
return result2;
}
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout2(timerExpired, wait);
return leading ? invokeFunc(time) : result2;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === undefined$1 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now();
if (shouldInvoke(time)) {
return trailingEdge(time);
}
timerId = setTimeout2(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
timerId = undefined$1;
if (trailing && lastArgs) {
return invokeFunc(time);
}
lastArgs = lastThis = undefined$1;
return result2;
}
function cancel() {
if (timerId !== undefined$1) {
clearTimeout2(timerId);
}
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = undefined$1;
}
function flush() {
return timerId === undefined$1 ? result2 : trailingEdge(now());
}
function debounced() {
var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === undefined$1) {
return leadingEdge(lastCallTime);
}
if (maxing) {
clearTimeout2(timerId);
timerId = setTimeout2(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === undefined$1) {
timerId = setTimeout2(timerExpired, wait);
}
return result2;
}
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
var defer = baseRest(function(func, args) {
return baseDelay(func, 1, args);
});
var delay = baseRest(function(func, wait, args) {
return baseDelay(func, toNumber(wait) || 0, args);
});
function flip(func) {
return createWrap(func, WRAP_FLIP_FLAG);
}
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result2 = func.apply(this, args);
memoized.cache = cache.set(key, result2) || cache;
return result2;
};
memoized.cache = new (memoize.Cache || MapCache)();
return memoized;
}
memoize.Cache = MapCache;
function negate(predicate) {
if (typeof predicate != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
return function() {
var args = arguments;
switch (args.length) {
case 0:
return !predicate.call(this);
case 1:
return !predicate.call(this, args[0]);
case 2:
return !predicate.call(this, args[0], args[1]);
case 3:
return !predicate.call(this, args[0], args[1], args[2]);
}
return !predicate.apply(this, args);
};
}
function once(func) {
return before(2, func);
}
var overArgs = castRest(function(func, transforms) {
transforms = transforms.length == 1 && isArray2(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
var funcsLength = transforms.length;
return baseRest(function(args) {
var index = -1, length = nativeMin(args.length, funcsLength);
while (++index < length) {
args[index] = transforms[index].call(this, args[index]);
}
return apply(func, this, args);
});
});
var partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial));
return createWrap(func, WRAP_PARTIAL_FLAG, undefined$1, partials, holders);
});
var partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight));
return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined$1, partials, holders);
});
var rearg = flatRest(function(func, indexes) {
return createWrap(func, WRAP_REARG_FLAG, undefined$1, undefined$1, undefined$1, indexes);
});
function rest(func, start) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
start = start === undefined$1 ? start : toInteger(start);
return baseRest(func, start);
}
function spread(func, start) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
start = start == null ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) {
var array2 = args[start], otherArgs = castSlice(args, 0, start);
if (array2) {
arrayPush(otherArgs, array2);
}
return apply(func, this, otherArgs);
});
}
function throttle(func, wait, options) {
var leading = true, trailing = true;
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
if (isObject2(options)) {
leading = "leading" in options ? !!options.leading : leading;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
return debounce(func, wait, {
"leading": leading,
"maxWait": wait,
"trailing": trailing
});
}
function unary(func) {
return ary(func, 1);
}
function wrap(value, wrapper) {
return partial(castFunction(wrapper), value);
}
function castArray() {
if (!arguments.length) {
return [];
}
var value = arguments[0];
return isArray2(value) ? value : [value];
}
function clone2(value) {
return baseClone(value, CLONE_SYMBOLS_FLAG);
}
function cloneWith(value, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined$1;
return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
}
function cloneDeep(value) {
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
}
function cloneDeepWith(value, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined$1;
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
}
function conformsTo(object, source) {
return source == null || baseConformsTo(object, source, keys(source));
}
function eq(value, other) {
return value === other || value !== value && other !== other;
}
var gt = createRelationalOperation(baseGt);
var gte = createRelationalOperation(function(value, other) {
return value >= other;
});
var isArguments = baseIsArguments(/* @__PURE__ */ function() {
return arguments;
}()) ? baseIsArguments : function(value) {
return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
};
var isArray2 = Array2.isArray;
var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
function isArrayLike(value) {
return value != null && isLength(value.length) && !isFunction2(value);
}
function isArrayLikeObject(value) {
return isObjectLike(value) && isArrayLike(value);
}
function isBoolean2(value) {
return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;
}
var isBuffer = nativeIsBuffer || stubFalse;
var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
function isElement(value) {
return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
}
function isEmpty(value) {
if (value == null) {
return true;
}
if (isArrayLike(value) && (isArray2(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) {
return !value.length;
}
var tag = getTag(value);
if (tag == mapTag || tag == setTag) {
return !value.size;
}
if (isPrototype(value)) {
return !baseKeys(value).length;
}
for (var key in value) {
if (hasOwnProperty.call(value, key)) {
return false;
}
}
return true;
}
function isEqual(value, other) {
return baseIsEqual(value, other);
}
function isEqualWith(value, other, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined$1;
var result2 = customizer ? customizer(value, other) : undefined$1;
return result2 === undefined$1 ? baseIsEqual(value, other, undefined$1, customizer) : !!result2;
}
function isError(value) {
if (!isObjectLike(value)) {
return false;
}
var tag = baseGetTag(value);
return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject(value);
}
function isFinite(value) {
return typeof value == "number" && nativeIsFinite(value);
}
function isFunction2(value) {
if (!isObject2(value)) {
return false;
}
var tag = baseGetTag(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
function isInteger(value) {
return typeof value == "number" && value == toInteger(value);
}
function isLength(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
function isObject2(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
function isMatch(object, source) {
return object === source || baseIsMatch(object, source, getMatchData(source));
}
function isMatchWith(object, source, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined$1;
return baseIsMatch(object, source, getMatchData(source), customizer);
}
function isNaN2(value) {
return isNumber2(value) && value != +value;
}
function isNative(value) {
if (isMaskable(value)) {
throw new Error2(CORE_ERROR_TEXT);
}
return baseIsNative(value);
}
function isNull2(value) {
return value === null;
}
function isNil2(value) {
return value == null;
}
function isNumber2(value) {
return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag;
}
function isPlainObject(value) {
if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
return false;
}
var proto = getPrototype(value);
if (proto === null) {
return true;
}
var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
function isSafeInteger(value) {
return isInteger(value) && value >= -9007199254740991 && value <= MAX_SAFE_INTEGER;
}
var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
function isString2(value) {
return typeof value == "string" || !isArray2(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
}
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
}
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
function isUndefined2(value) {
return value === undefined$1;
}
function isWeakMap(value) {
return isObjectLike(value) && getTag(value) == weakMapTag;
}
function isWeakSet(value) {
return isObjectLike(value) && baseGetTag(value) == weakSetTag;
}
var lt = createRelationalOperation(baseLt);
var lte = createRelationalOperation(function(value, other) {
return value <= other;
});
function toArray(value) {
if (!value) {
return [];
}
if (isArrayLike(value)) {
return isString2(value) ? stringToArray(value) : copyArray(value);
}
if (symIterator && value[symIterator]) {
return iteratorToArray(value[symIterator]());
}
var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;
return func(value);
}
function toFinite(value) {
if (!value) {
return value === 0 ? value : 0;
}
value = toNumber(value);
if (value === INFINITY || value === -Infinity) {
var sign = value < 0 ? -1 : 1;
return sign * MAX_INTEGER;
}
return value === value ? value : 0;
}
function toInteger(value) {
var result2 = toFinite(value), remainder = result2 % 1;
return result2 === result2 ? remainder ? result2 - remainder : result2 : 0;
}
function toLength(value) {
return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
}
function toNumber(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
if (isObject2(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject2(other) ? other + "" : other;
}
if (typeof value != "string") {
return value === 0 ? value : +value;
}
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
function toPlainObject(value) {
return copyObject(value, keysIn(value));
}
function toSafeInteger(value) {
return value ? baseClamp(toInteger(value), -9007199254740991, MAX_SAFE_INTEGER) : value === 0 ? value : 0;
}
function toString(value) {
return value == null ? "" : baseToString(value);
}
var assign = createAssigner(function(object, source) {
if (isPrototype(source) || isArrayLike(source)) {
copyObject(source, keys(source), object);
return;
}
for (var key in source) {
if (hasOwnProperty.call(source, key)) {
assignValue(object, key, source[key]);
}
}
});
var assignIn = createAssigner(function(object, source) {
copyObject(source, keysIn(source), object);
});
var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keysIn(source), object, customizer);
});
var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keys(source), object, customizer);
});
var at = flatRest(baseAt);
function create(prototype, properties) {
var result2 = baseCreate(prototype);
return properties == null ? result2 : baseAssign(result2, properties);
}
var defaults = baseRest(function(object, sources) {
object = Object2(object);
var index = -1;
var length = sources.length;
var guard = length > 2 ? sources[2] : undefined$1;
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
length = 1;
}
while (++index < length) {
var source = sources[index];
var props = keysIn(source);
var propsIndex = -1;
var propsLength = props.length;
while (++propsIndex < propsLength) {
var key = props[propsIndex];
var value = object[key];
if (value === undefined$1 || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {
object[key] = source[key];
}
}
}
return object;
});
var defaultsDeep = baseRest(function(args) {
args.push(undefined$1, customDefaultsMerge);
return apply(mergeWith, undefined$1, args);
});
function findKey(object, predicate) {
return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
}
function findLastKey(object, predicate) {
return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
}
function forIn(object, iteratee2) {
return object == null ? object : baseFor(object, getIteratee(iteratee2, 3), keysIn);
}
function forInRight(object, iteratee2) {
return object == null ? object : baseForRight(object, getIteratee(iteratee2, 3), keysIn);
}
function forOwn(object, iteratee2) {
return object && baseForOwn(object, getIteratee(iteratee2, 3));
}
function forOwnRight(object, iteratee2) {
return object && baseForOwnRight(object, getIteratee(iteratee2, 3));
}
function functions(object) {
return object == null ? [] : baseFunctions(object, keys(object));
}
function functionsIn(object) {
return object == null ? [] : baseFunctions(object, keysIn(object));
}
function get(object, path, defaultValue) {
var result2 = object == null ? undefined$1 : baseGet(object, path);
return result2 === undefined$1 ? defaultValue : result2;
}
function has(object, path) {
return object != null && hasPath(object, path, baseHas);
}
function hasIn(object, path) {
return object != null && hasPath(object, path, baseHasIn);
}
var invert = createInverter(function(result2, value, key) {
if (value != null && typeof value.toString != "function") {
value = nativeObjectToString.call(value);
}
result2[value] = key;
}, constant(identity));
var invertBy = createInverter(function(result2, value, key) {
if (value != null && typeof value.toString != "function") {
value = nativeObjectToString.call(value);
}
if (hasOwnProperty.call(result2, value)) {
result2[value].push(key);
} else {
result2[value] = [key];
}
}, getIteratee);
var invoke = baseRest(baseInvoke);
function keys(object) {
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
function keysIn(object) {
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
}
function mapKeys(object, iteratee2) {
var result2 = {};
iteratee2 = getIteratee(iteratee2, 3);
baseForOwn(object, function(value, key, object2) {
baseAssignValue(result2, iteratee2(value, key, object2), value);
});
return result2;
}
function mapValues(object, iteratee2) {
var result2 = {};
iteratee2 = getIteratee(iteratee2, 3);
baseForOwn(object, function(value, key, object2) {
baseAssignValue(result2, key, iteratee2(value, key, object2));
});
return result2;
}
var merge = createAssigner(function(object, source, srcIndex) {
baseMerge(object, source, srcIndex);
});
var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
baseMerge(object, source, srcIndex, customizer);
});
var omit = flatRest(function(object, paths) {
var result2 = {};
if (object == null) {
return result2;
}
var isDeep = false;
paths = arrayMap(paths, function(path) {
path = castPath(path, object);
isDeep || (isDeep = path.length > 1);
return path;
});
copyObject(object, getAllKeysIn(object), result2);
if (isDeep) {
result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
}
var length = paths.length;
while (length--) {
baseUnset(result2, paths[length]);
}
return result2;
});
function omitBy(object, predicate) {
return pickBy(object, negate(getIteratee(predicate)));
}
var pick2 = flatRest(function(object, paths) {
return object == null ? {} : basePick(object, paths);
});
function pickBy(object, predicate) {
if (object == null) {
return {};
}
var props = arrayMap(getAllKeysIn(object), function(prop) {
return [prop];
});
predicate = getIteratee(predicate);
return basePickBy(object, props, function(value, path) {
return predicate(value, path[0]);
});
}
function result(object, path, defaultValue) {
path = castPath(path, object);
var index = -1, length = path.length;
if (!length) {
length = 1;
object = undefined$1;
}
while (++index < length) {
var value = object == null ? undefined$1 : object[toKey(path[index])];
if (value === undefined$1) {
index = length;
value = defaultValue;
}
object = isFunction2(value) ? value.call(object) : value;
}
return object;
}
function set(object, path, value) {
return object == null ? object : baseSet(object, path, value);
}
function setWith(object, path, value, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined$1;
return object == null ? object : baseSet(object, path, value, customizer);
}
var toPairs = createToPairs(keys);
var toPairsIn = createToPairs(keysIn);
function transform(object, iteratee2, accumulator) {
var isArr = isArray2(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object);
iteratee2 = getIteratee(iteratee2, 4);
if (accumulator == null) {
var Ctor = object && object.constructor;
if (isArrLike) {
accumulator = isArr ? new Ctor() : [];
} else if (isObject2(object)) {
accumulator = isFunction2(Ctor) ? baseCreate(getPrototype(object)) : {};
} else {
accumulator = {};
}
}
(isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object2) {
return iteratee2(accumulator, value, index, object2);
});
return accumulator;
}
function unset(object, path) {
return object == null ? true : baseUnset(object, path);
}
function update(object, path, updater) {
return object == null ? object : baseUpdate(object, path, castFunction(updater));
}
function updateWith(object, path, updater, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined$1;
return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
}
function values(object) {
return object == null ? [] : baseValues(object, keys(object));
}
function valuesIn(object) {
return object == null ? [] : baseValues(object, keysIn(object));
}
function clamp(number, lower, upper) {
if (upper === undefined$1) {
upper = lower;
lower = undefined$1;
}
if (upper !== undefined$1) {
upper = toNumber(upper);
upper = upper === upper ? upper : 0;
}
if (lower !== undefined$1) {
lower = toNumber(lower);
lower = lower === lower ? lower : 0;
}
return baseClamp(toNumber(number), lower, upper);
}
function inRange(number, start, end) {
start = toFinite(start);
if (end === undefined$1) {
end = start;
start = 0;
} else {
end = toFinite(end);
}
number = toNumber(number);
return baseInRange(number, start, end);
}
function random(lower, upper, floating) {
if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) {
upper = floating = undefined$1;
}
if (floating === undefined$1) {
if (typeof upper == "boolean") {
floating = upper;
upper = undefined$1;
} else if (typeof lower == "boolean") {
floating = lower;
lower = undefined$1;
}
}
if (lower === undefined$1 && upper === undefined$1) {
lower = 0;
upper = 1;
} else {
lower = toFinite(lower);
if (upper === undefined$1) {
upper = lower;
lower = 0;
} else {
upper = toFinite(upper);
}
}
if (lower > upper) {
var temp = lower;
lower = upper;
upper = temp;
}
if (floating || lower % 1 || upper % 1) {
var rand = nativeRandom();
return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper);
}
return baseRandom(lower, upper);
}
var camelCase = createCompounder(function(result2, word, index) {
word = word.toLowerCase();
return result2 + (index ? capitalize2(word) : word);
});
function capitalize2(string) {
return upperFirst(toString(string).toLowerCase());
}
function deburr(string) {
string = toString(string);
return string && string.replace(reLatin, deburrLetter).replace(reComboMark, "");
}
function endsWith(string, target, position) {
string = toString(string);
target = baseToString(target);
var length = string.length;
position = position === undefined$1 ? length : baseClamp(toInteger(position), 0, length);
var end = position;
position -= target.length;
return position >= 0 && string.slice(position, end) == target;
}
function escape(string) {
string = toString(string);
return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
}
function escapeRegExp(string) {
string = toString(string);
return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string;
}
var kebabCase = createCompounder(function(result2, word, index) {
return result2 + (index ? "-" : "") + word.toLowerCase();
});
var lowerCase = createCompounder(function(result2, word, index) {
return result2 + (index ? " " : "") + word.toLowerCase();
});
var lowerFirst = createCaseFirst("toLowerCase");
function pad(string, length, chars) {
string = toString(string);
length = toInteger(length);
var strLength = length ? stringSize(string) : 0;
if (!length || strLength >= length) {
return string;
}
var mid = (length - strLength) / 2;
return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);
}
function padEnd(string, length, chars) {
string = toString(string);
length = toInteger(length);
var strLength = length ? stringSize(string) : 0;
return length && strLength < length ? string + createPadding(length - strLength, chars) : string;
}
function padStart(string, length, chars) {
string = toString(string);
length = toInteger(length);
var strLength = length ? stringSize(string) : 0;
return length && strLength < length ? createPadding(length - strLength, chars) + string : string;
}
function parseInt2(string, radix, guard) {
if (guard || radix == null) {
radix = 0;
} else if (radix) {
radix = +radix;
}
return nativeParseInt(toString(string).replace(reTrimStart, ""), radix || 0);
}
function repeat(string, n2, guard) {
if (guard ? isIterateeCall(string, n2, guard) : n2 === undefined$1) {
n2 = 1;
} else {
n2 = toInteger(n2);
}
return baseRepeat(toString(string), n2);
}
function replace() {
var args = arguments, string = toString(args[0]);
return args.length < 3 ? string : string.replace(args[1], args[2]);
}
var snakeCase = createCompounder(function(result2, word, index) {
return result2 + (index ? "_" : "") + word.toLowerCase();
});
function split(string, separator, limit2) {
if (limit2 && typeof limit2 != "number" && isIterateeCall(string, separator, limit2)) {
separator = limit2 = undefined$1;
}
limit2 = limit2 === undefined$1 ? MAX_ARRAY_LENGTH : limit2 >>> 0;
if (!limit2) {
return [];
}
string = toString(string);
if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) {
separator = baseToString(separator);
if (!separator && hasUnicode(string)) {
return castSlice(stringToArray(string), 0, limit2);
}
}
return string.split(separator, limit2);
}
var startCase = createCompounder(function(result2, word, index) {
return result2 + (index ? " " : "") + upperFirst(word);
});
function startsWith(string, target, position) {
string = toString(string);
position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);
target = baseToString(target);
return string.slice(position, position + target.length) == target;
}
function template(string, options, guard) {
var settings = lodash2.templateSettings;
if (guard && isIterateeCall(string, options, guard)) {
options = undefined$1;
}
string = toString(string);
options = assignInWith({}, options, settings, customDefaultsAssignIn);
var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys);
var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '";
var reDelimiters = RegExp2(
(options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
"g"
);
var sourceURL = "//# sourceURL=" + (hasOwnProperty.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n";
string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
interpolateValue || (interpolateValue = esTemplateValue);
source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
if (escapeValue) {
isEscaping = true;
source += "' +\n__e(" + escapeValue + ") +\n'";
}
if (evaluateValue) {
isEvaluating = true;
source += "';\n" + evaluateValue + ";\n__p += '";
}
if (interpolateValue) {
source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
}
index = offset + match.length;
return match;
});
source += "';\n";
var variable = hasOwnProperty.call(options, "variable") && options.variable;
if (!variable) {
source = "with (obj) {\n" + source + "\n}\n";
} else if (reForbiddenIdentifierChars.test(variable)) {
throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT);
}
source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;");
source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}";
var result2 = attempt(function() {
return Function2(importsKeys, sourceURL + "return " + source).apply(undefined$1, importsValues);
});
result2.source = source;
if (isError(result2)) {
throw result2;
}
return result2;
}
function toLower(value) {
return toString(value).toLowerCase();
}
function toUpper(value) {
return toString(value).toUpperCase();
}
function trim(string, chars, guard) {
string = toString(string);
if (string && (guard || chars === undefined$1)) {
return baseTrim(string);
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1;
return castSlice(strSymbols, start, end).join("");
}
function trimEnd(string, chars, guard) {
string = toString(string);
if (string && (guard || chars === undefined$1)) {
return string.slice(0, trimmedEndIndex(string) + 1);
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
return castSlice(strSymbols, 0, end).join("");
}
function trimStart(string, chars, guard) {
string = toString(string);
if (string && (guard || chars === undefined$1)) {
return string.replace(reTrimStart, "");
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars));
return castSlice(strSymbols, start).join("");
}
function truncate(string, options) {
var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
if (isObject2(options)) {
var separator = "separator" in options ? options.separator : separator;
length = "length" in options ? toInteger(options.length) : length;
omission = "omission" in options ? baseToString(options.omission) : omission;
}
string = toString(string);
var strLength = string.length;
if (hasUnicode(string)) {
var strSymbols = stringToArray(string);
strLength = strSymbols.length;
}
if (length >= strLength) {
return string;
}
var end = length - stringSize(omission);
if (end < 1) {
return omission;
}
var result2 = strSymbols ? castSlice(strSymbols, 0, end).join("") : string.slice(0, end);
if (separator === undefined$1) {
return result2 + omission;
}
if (strSymbols) {
end += result2.length - end;
}
if (isRegExp(separator)) {
if (string.slice(end).search(separator)) {
var match, substring = result2;
if (!separator.global) {
separator = RegExp2(separator.source, toString(reFlags.exec(separator)) + "g");
}
separator.lastIndex = 0;
while (match = separator.exec(substring)) {
var newEnd = match.index;
}
result2 = result2.slice(0, newEnd === undefined$1 ? end : newEnd);
}
} else if (string.indexOf(baseToString(separator), end) != end) {
var index = result2.lastIndexOf(separator);
if (index > -1) {
result2 = result2.slice(0, index);
}
}
return result2 + omission;
}
function unescape(string) {
string = toString(string);
return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string;
}
var upperCase = createCompounder(function(result2, word, index) {
return result2 + (index ? " " : "") + word.toUpperCase();
});
var upperFirst = createCaseFirst("toUpperCase");
function words(string, pattern, guard) {
string = toString(string);
pattern = guard ? undefined$1 : pattern;
if (pattern === undefined$1) {
return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
}
return string.match(pattern) || [];
}
var attempt = baseRest(function(func, args) {
try {
return apply(func, undefined$1, args);
} catch (e2) {
return isError(e2) ? e2 : new Error2(e2);
}
});
var bindAll = flatRest(function(object, methodNames) {
arrayEach(methodNames, function(key) {
key = toKey(key);
baseAssignValue(object, key, bind(object[key], object));
});
return object;
});
function cond(pairs) {
var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee();
pairs = !length ? [] : arrayMap(pairs, function(pair) {
if (typeof pair[1] != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
return [toIteratee(pair[0]), pair[1]];
});
return baseRest(function(args) {
var index = -1;
while (++index < length) {
var pair = pairs[index];
if (apply(pair[0], this, args)) {
return apply(pair[1], this, args);
}
}
});
}
function conforms(source) {
return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
}
function constant(value) {
return function() {
return value;
};
}
function defaultTo(value, defaultValue) {
return value == null || value !== value ? defaultValue : value;
}
var flow = createFlow();
var flowRight = createFlow(true);
function identity(value) {
return value;
}
function iteratee(func) {
return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG));
}
function matches(source) {
return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
}
function matchesProperty(path, srcValue) {
return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
}
var method = baseRest(function(path, args) {
return function(object) {
return baseInvoke(object, path, args);
};
});
var methodOf = baseRest(function(object, args) {
return function(path) {
return baseInvoke(object, path, args);
};
});
function mixin(object, source, options) {
var props = keys(source), methodNames = baseFunctions(source, props);
if (options == null && !(isObject2(source) && (methodNames.length || !props.length))) {
options = source;
source = object;
object = this;
methodNames = baseFunctions(source, keys(source));
}
var chain2 = !(isObject2(options) && "chain" in options) || !!options.chain, isFunc = isFunction2(object);
arrayEach(methodNames, function(methodName) {
var func = source[methodName];
object[methodName] = func;
if (isFunc) {
object.prototype[methodName] = function() {
var chainAll = this.__chain__;
if (chain2 || chainAll) {
var result2 = object(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__);
actions.push({ "func": func, "args": arguments, "thisArg": object });
result2.__chain__ = chainAll;
return result2;
}
return func.apply(object, arrayPush([this.value()], arguments));
};
}
});
return object;
}
function noConflict() {
if (root._ === this) {
root._ = oldDash;
}
return this;
}
function noop2() {
}
function nthArg(n2) {
n2 = toInteger(n2);
return baseRest(function(args) {
return baseNth(args, n2);
});
}
var over = createOver(arrayMap);
var overEvery = createOver(arrayEvery);
var overSome = createOver(arraySome);
function property(path) {
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}
function propertyOf(object) {
return function(path) {
return object == null ? undefined$1 : baseGet(object, path);
};
}
var range2 = createRange();
var rangeRight = createRange(true);
function stubArray() {
return [];
}
function stubFalse() {
return false;
}
function stubObject() {
return {};
}
function stubString() {
return "";
}
function stubTrue() {
return true;
}
function times(n2, iteratee2) {
n2 = toInteger(n2);
if (n2 < 1 || n2 > MAX_SAFE_INTEGER) {
return [];
}
var index = MAX_ARRAY_LENGTH, length = nativeMin(n2, MAX_ARRAY_LENGTH);
iteratee2 = getIteratee(iteratee2);
n2 -= MAX_ARRAY_LENGTH;
var result2 = baseTimes(length, iteratee2);
while (++index < n2) {
iteratee2(index);
}
return result2;
}
function toPath(value) {
if (isArray2(value)) {
return arrayMap(value, toKey);
}
return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
}
function uniqueId(prefix) {
var id = ++idCounter;
return toString(prefix) + id;
}
var add = createMathOperation(function(augend, addend) {
return augend + addend;
}, 0);
var ceil = createRound("ceil");
var divide = createMathOperation(function(dividend, divisor) {
return dividend / divisor;
}, 1);
var floor = createRound("floor");
function max2(array2) {
return array2 && array2.length ? baseExtremum(array2, identity, baseGt) : undefined$1;
}
function maxBy(array2, iteratee2) {
return array2 && array2.length ? baseExtremum(array2, getIteratee(iteratee2, 2), baseGt) : undefined$1;
}
function mean(array2) {
return baseMean(array2, identity);
}
function meanBy(array2, iteratee2) {
return baseMean(array2, getIteratee(iteratee2, 2));
}
function min2(array2) {
return array2 && array2.length ? baseExtremum(array2, identity, baseLt) : undefined$1;
}
function minBy(array2, iteratee2) {
return array2 && array2.length ? baseExtremum(array2, getIteratee(iteratee2, 2), baseLt) : undefined$1;
}
var multiply = createMathOperation(function(multiplier, multiplicand) {
return multiplier * multiplicand;
}, 1);
var round = createRound("round");
var subtract = createMathOperation(function(minuend, subtrahend) {
return minuend - subtrahend;
}, 0);
function sum(array2) {
return array2 && array2.length ? baseSum(array2, identity) : 0;
}
function sumBy(array2, iteratee2) {
return array2 && array2.length ? baseSum(array2, getIteratee(iteratee2, 2)) : 0;
}
lodash2.after = after;
lodash2.ary = ary;
lodash2.assign = assign;
lodash2.assignIn = assignIn;
lodash2.assignInWith = assignInWith;
lodash2.assignWith = assignWith;
lodash2.at = at;
lodash2.before = before;
lodash2.bind = bind;
lodash2.bindAll = bindAll;
lodash2.bindKey = bindKey;
lodash2.castArray = castArray;
lodash2.chain = chain;
lodash2.chunk = chunk;
lodash2.compact = compact;
lodash2.concat = concat;
lodash2.cond = cond;
lodash2.conforms = conforms;
lodash2.constant = constant;
lodash2.countBy = countBy;
lodash2.create = create;
lodash2.curry = curry;
lodash2.curryRight = curryRight;
lodash2.debounce = debounce;
lodash2.defaults = defaults;
lodash2.defaultsDeep = defaultsDeep;
lodash2.defer = defer;
lodash2.delay = delay;
lodash2.difference = difference;
lodash2.differenceBy = differenceBy;
lodash2.differenceWith = differenceWith;
lodash2.drop = drop;
lodash2.dropRight = dropRight;
lodash2.dropRightWhile = dropRightWhile;
lodash2.dropWhile = dropWhile;
lodash2.fill = fill2;
lodash2.filter = filter;
lodash2.flatMap = flatMap;
lodash2.flatMapDeep = flatMapDeep;
lodash2.flatMapDepth = flatMapDepth;
lodash2.flatten = flatten;
lodash2.flattenDeep = flattenDeep;
lodash2.flattenDepth = flattenDepth;
lodash2.flip = flip;
lodash2.flow = flow;
lodash2.flowRight = flowRight;
lodash2.fromPairs = fromPairs;
lodash2.functions = functions;
lodash2.functionsIn = functionsIn;
lodash2.groupBy = groupBy;
lodash2.initial = initial;
lodash2.intersection = intersection;
lodash2.intersectionBy = intersectionBy;
lodash2.intersectionWith = intersectionWith;
lodash2.invert = invert;
lodash2.invertBy = invertBy;
lodash2.invokeMap = invokeMap;
lodash2.iteratee = iteratee;
lodash2.keyBy = keyBy;
lodash2.keys = keys;
lodash2.keysIn = keysIn;
lodash2.map = map;
lodash2.mapKeys = mapKeys;
lodash2.mapValues = mapValues;
lodash2.matches = matches;
lodash2.matchesProperty = matchesProperty;
lodash2.memoize = memoize;
lodash2.merge = merge;
lodash2.mergeWith = mergeWith;
lodash2.method = method;
lodash2.methodOf = methodOf;
lodash2.mixin = mixin;
lodash2.negate = negate;
lodash2.nthArg = nthArg;
lodash2.omit = omit;
lodash2.omitBy = omitBy;
lodash2.once = once;
lodash2.orderBy = orderBy;
lodash2.over = over;
lodash2.overArgs = overArgs;
lodash2.overEvery = overEvery;
lodash2.overSome = overSome;
lodash2.partial = partial;
lodash2.partialRight = partialRight;
lodash2.partition = partition;
lodash2.pick = pick2;
lodash2.pickBy = pickBy;
lodash2.property = property;
lodash2.propertyOf = propertyOf;
lodash2.pull = pull;
lodash2.pullAll = pullAll;
lodash2.pullAllBy = pullAllBy;
lodash2.pullAllWith = pullAllWith;
lodash2.pullAt = pullAt;
lodash2.range = range2;
lodash2.rangeRight = rangeRight;
lodash2.rearg = rearg;
lodash2.reject = reject;
lodash2.remove = remove;
lodash2.rest = rest;
lodash2.reverse = reverse;
lodash2.sampleSize = sampleSize;
lodash2.set = set;
lodash2.setWith = setWith;
lodash2.shuffle = shuffle;
lodash2.slice = slice;
lodash2.sortBy = sortBy;
lodash2.sortedUniq = sortedUniq;
lodash2.sortedUniqBy = sortedUniqBy;
lodash2.split = split;
lodash2.spread = spread;
lodash2.tail = tail;
lodash2.take = take;
lodash2.takeRight = takeRight;
lodash2.takeRightWhile = takeRightWhile;
lodash2.takeWhile = takeWhile;
lodash2.tap = tap;
lodash2.throttle = throttle;
lodash2.thru = thru;
lodash2.toArray = toArray;
lodash2.toPairs = toPairs;
lodash2.toPairsIn = toPairsIn;
lodash2.toPath = toPath;
lodash2.toPlainObject = toPlainObject;
lodash2.transform = transform;
lodash2.unary = unary;
lodash2.union = union;
lodash2.unionBy = unionBy;
lodash2.unionWith = unionWith;
lodash2.uniq = uniq;
lodash2.uniqBy = uniqBy;
lodash2.uniqWith = uniqWith;
lodash2.unset = unset;
lodash2.unzip = unzip;
lodash2.unzipWith = unzipWith;
lodash2.update = update;
lodash2.updateWith = updateWith;
lodash2.values = values;
lodash2.valuesIn = valuesIn;
lodash2.without = without;
lodash2.words = words;
lodash2.wrap = wrap;
lodash2.xor = xor;
lodash2.xorBy = xorBy;
lodash2.xorWith = xorWith;
lodash2.zip = zip;
lodash2.zipObject = zipObject;
lodash2.zipObjectDeep = zipObjectDeep;
lodash2.zipWith = zipWith;
lodash2.entries = toPairs;
lodash2.entriesIn = toPairsIn;
lodash2.extend = assignIn;
lodash2.extendWith = assignInWith;
mixin(lodash2, lodash2);
lodash2.add = add;
lodash2.attempt = attempt;
lodash2.camelCase = camelCase;
lodash2.capitalize = capitalize2;
lodash2.ceil = ceil;
lodash2.clamp = clamp;
lodash2.clone = clone2;
lodash2.cloneDeep = cloneDeep;
lodash2.cloneDeepWith = cloneDeepWith;
lodash2.cloneWith = cloneWith;
lodash2.conformsTo = conformsTo;
lodash2.deburr = deburr;
lodash2.defaultTo = defaultTo;
lodash2.divide = divide;
lodash2.endsWith = endsWith;
lodash2.eq = eq;
lodash2.escape = escape;
lodash2.escapeRegExp = escapeRegExp;
lodash2.every = every;
lodash2.find = find;
lodash2.findIndex = findIndex;
lodash2.findKey = findKey;
lodash2.findLast = findLast;
lodash2.findLastIndex = findLastIndex2;
lodash2.findLastKey = findLastKey;
lodash2.floor = floor;
lodash2.forEach = forEach2;
lodash2.forEachRight = forEachRight;
lodash2.forIn = forIn;
lodash2.forInRight = forInRight;
lodash2.forOwn = forOwn;
lodash2.forOwnRight = forOwnRight;
lodash2.get = get;
lodash2.gt = gt;
lodash2.gte = gte;
lodash2.has = has;
lodash2.hasIn = hasIn;
lodash2.head = head;
lodash2.identity = identity;
lodash2.includes = includes;
lodash2.indexOf = indexOf;
lodash2.inRange = inRange;
lodash2.invoke = invoke;
lodash2.isArguments = isArguments;
lodash2.isArray = isArray2;
lodash2.isArrayBuffer = isArrayBuffer;
lodash2.isArrayLike = isArrayLike;
lodash2.isArrayLikeObject = isArrayLikeObject;
lodash2.isBoolean = isBoolean2;
lodash2.isBuffer = isBuffer;
lodash2.isDate = isDate;
lodash2.isElement = isElement;
lodash2.isEmpty = isEmpty;
lodash2.isEqual = isEqual;
lodash2.isEqualWith = isEqualWith;
lodash2.isError = isError;
lodash2.isFinite = isFinite;
lodash2.isFunction = isFunction2;
lodash2.isInteger = isInteger;
lodash2.isLength = isLength;
lodash2.isMap = isMap;
lodash2.isMatch = isMatch;
lodash2.isMatchWith = isMatchWith;
lodash2.isNaN = isNaN2;
lodash2.isNative = isNative;
lodash2.isNil = isNil2;
lodash2.isNull = isNull2;
lodash2.isNumber = isNumber2;
lodash2.isObject = isObject2;
lodash2.isObjectLike = isObjectLike;
lodash2.isPlainObject = isPlainObject;
lodash2.isRegExp = isRegExp;
lodash2.isSafeInteger = isSafeInteger;
lodash2.isSet = isSet;
lodash2.isString = isString2;
lodash2.isSymbol = isSymbol;
lodash2.isTypedArray = isTypedArray;
lodash2.isUndefined = isUndefined2;
lodash2.isWeakMap = isWeakMap;
lodash2.isWeakSet = isWeakSet;
lodash2.join = join;
lodash2.kebabCase = kebabCase;
lodash2.last = last2;
lodash2.lastIndexOf = lastIndexOf;
lodash2.lowerCase = lowerCase;
lodash2.lowerFirst = lowerFirst;
lodash2.lt = lt;
lodash2.lte = lte;
lodash2.max = max2;
lodash2.maxBy = maxBy;
lodash2.mean = mean;
lodash2.meanBy = meanBy;
lodash2.min = min2;
lodash2.minBy = minBy;
lodash2.stubArray = stubArray;
lodash2.stubFalse = stubFalse;
lodash2.stubObject = stubObject;
lodash2.stubString = stubString;
lodash2.stubTrue = stubTrue;
lodash2.multiply = multiply;
lodash2.nth = nth;
lodash2.noConflict = noConflict;
lodash2.noop = noop2;
lodash2.now = now;
lodash2.pad = pad;
lodash2.padEnd = padEnd;
lodash2.padStart = padStart;
lodash2.parseInt = parseInt2;
lodash2.random = random;
lodash2.reduce = reduce;
lodash2.reduceRight = reduceRight;
lodash2.repeat = repeat;
lodash2.replace = replace;
lodash2.result = result;
lodash2.round = round;
lodash2.runInContext = runInContext2;
lodash2.sample = sample;
lodash2.size = size;
lodash2.snakeCase = snakeCase;
lodash2.some = some;
lodash2.sortedIndex = sortedIndex;
lodash2.sortedIndexBy = sortedIndexBy;
lodash2.sortedIndexOf = sortedIndexOf;
lodash2.sortedLastIndex = sortedLastIndex;
lodash2.sortedLastIndexBy = sortedLastIndexBy;
lodash2.sortedLastIndexOf = sortedLastIndexOf;
lodash2.startCase = startCase;
lodash2.startsWith = startsWith;
lodash2.subtract = subtract;
lodash2.sum = sum;
lodash2.sumBy = sumBy;
lodash2.template = template;
lodash2.times = times;
lodash2.toFinite = toFinite;
lodash2.toInteger = toInteger;
lodash2.toLength = toLength;
lodash2.toLower = toLower;
lodash2.toNumber = toNumber;
lodash2.toSafeInteger = toSafeInteger;
lodash2.toString = toString;
lodash2.toUpper = toUpper;
lodash2.trim = trim;
lodash2.trimEnd = trimEnd;
lodash2.trimStart = trimStart;
lodash2.truncate = truncate;
lodash2.unescape = unescape;
lodash2.uniqueId = uniqueId;
lodash2.upperCase = upperCase;
lodash2.upperFirst = upperFirst;
lodash2.each = forEach2;
lodash2.eachRight = forEachRight;
lodash2.first = head;
mixin(lodash2, function() {
var source = {};
baseForOwn(lodash2, function(func, methodName) {
if (!hasOwnProperty.call(lodash2.prototype, methodName)) {
source[methodName] = func;
}
});
return source;
}(), { "chain": false });
lodash2.VERSION = VERSION;
arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) {
lodash2[methodName].placeholder = lodash2;
});
arrayEach(["drop", "take"], function(methodName, index) {
LazyWrapper.prototype[methodName] = function(n2) {
n2 = n2 === undefined$1 ? 1 : nativeMax(toInteger(n2), 0);
var result2 = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone();
if (result2.__filtered__) {
result2.__takeCount__ = nativeMin(n2, result2.__takeCount__);
} else {
result2.__views__.push({
"size": nativeMin(n2, MAX_ARRAY_LENGTH),
"type": methodName + (result2.__dir__ < 0 ? "Right" : "")
});
}
return result2;
};
LazyWrapper.prototype[methodName + "Right"] = function(n2) {
return this.reverse()[methodName](n2).reverse();
};
});
arrayEach(["filter", "map", "takeWhile"], function(methodName, index) {
var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
LazyWrapper.prototype[methodName] = function(iteratee2) {
var result2 = this.clone();
result2.__iteratees__.push({
"iteratee": getIteratee(iteratee2, 3),
"type": type
});
result2.__filtered__ = result2.__filtered__ || isFilter;
return result2;
};
});
arrayEach(["head", "last"], function(methodName, index) {
var takeName = "take" + (index ? "Right" : "");
LazyWrapper.prototype[methodName] = function() {
return this[takeName](1).value()[0];
};
});
arrayEach(["initial", "tail"], function(methodName, index) {
var dropName = "drop" + (index ? "" : "Right");
LazyWrapper.prototype[methodName] = function() {
return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
};
});
LazyWrapper.prototype.compact = function() {
return this.filter(identity);
};
LazyWrapper.prototype.find = function(predicate) {
return this.filter(predicate).head();
};
LazyWrapper.prototype.findLast = function(predicate) {
return this.reverse().find(predicate);
};
LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
if (typeof path == "function") {
return new LazyWrapper(this);
}
return this.map(function(value) {
return baseInvoke(value, path, args);
});
});
LazyWrapper.prototype.reject = function(predicate) {
return this.filter(negate(getIteratee(predicate)));
};
LazyWrapper.prototype.slice = function(start, end) {
start = toInteger(start);
var result2 = this;
if (result2.__filtered__ && (start > 0 || end < 0)) {
return new LazyWrapper(result2);
}
if (start < 0) {
result2 = result2.takeRight(-start);
} else if (start) {
result2 = result2.drop(start);
}
if (end !== undefined$1) {
end = toInteger(end);
result2 = end < 0 ? result2.dropRight(-end) : result2.take(end - start);
}
return result2;
};
LazyWrapper.prototype.takeRightWhile = function(predicate) {
return this.reverse().takeWhile(predicate).reverse();
};
LazyWrapper.prototype.toArray = function() {
return this.take(MAX_ARRAY_LENGTH);
};
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash2[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName);
if (!lodashFunc) {
return;
}
lodash2.prototype[methodName] = function() {
var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray2(value);
var interceptor = function(value2) {
var result3 = lodashFunc.apply(lodash2, arrayPush([value2], args));
return isTaker && chainAll ? result3[0] : result3;
};
if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) {
isLazy = useLazy = false;
}
var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid;
if (!retUnwrapped && useLazy) {
value = onlyLazy ? value : new LazyWrapper(this);
var result2 = func.apply(value, args);
result2.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": undefined$1 });
return new LodashWrapper(result2, chainAll);
}
if (isUnwrapped && onlyLazy) {
return func.apply(this, args);
}
result2 = this.thru(interceptor);
return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2;
};
});
arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) {
var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName);
lodash2.prototype[methodName] = function() {
var args = arguments;
if (retUnwrapped && !this.__chain__) {
var value = this.value();
return func.apply(isArray2(value) ? value : [], args);
}
return this[chainName](function(value2) {
return func.apply(isArray2(value2) ? value2 : [], args);
});
};
});
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
var lodashFunc = lodash2[methodName];
if (lodashFunc) {
var key = lodashFunc.name + "";
if (!hasOwnProperty.call(realNames, key)) {
realNames[key] = [];
}
realNames[key].push({ "name": methodName, "func": lodashFunc });
}
});
realNames[createHybrid(undefined$1, WRAP_BIND_KEY_FLAG).name] = [{
"name": "wrapper",
"func": undefined$1
}];
LazyWrapper.prototype.clone = lazyClone;
LazyWrapper.prototype.reverse = lazyReverse;
LazyWrapper.prototype.value = lazyValue;
lodash2.prototype.at = wrapperAt;
lodash2.prototype.chain = wrapperChain;
lodash2.prototype.commit = wrapperCommit;
lodash2.prototype.next = wrapperNext;
lodash2.prototype.plant = wrapperPlant;
lodash2.prototype.reverse = wrapperReverse;
lodash2.prototype.toJSON = lodash2.prototype.valueOf = lodash2.prototype.value = wrapperValue;
lodash2.prototype.first = lodash2.prototype.head;
if (symIterator) {
lodash2.prototype[symIterator] = wrapperToIterator;
}
return lodash2;
};
var _2 = runInContext();
if (freeModule) {
(freeModule.exports = _2)._ = _2;
freeExports._ = _2;
} else {
root._ = _2;
}
}).call(lodash);
})(lodash$1, lodash$1.exports);
return lodash$1.exports;
}
var lodashExports = requireLodash();
const defaultTheme = {
// common: {
// border: "1px solid #ddd",
// backgroundColor: "white",
// holiday: { color: "#f54f3d" },
// saturday: { color: "#135de6" },
// dayName: { color: "#333" },
// today: { color: "#009688" },
// gridSelection: {
// backgroundColor: "rgba(19, 93, 230, 0.1)",
// border: "1px solid #135de6",
// },
// },
// month: {
// dayName: {
// borderLeft: 'none',
// backgroundColor: 'inherit',
// },
// holidayExceptThisMonth: { color: '#f3acac' },
// dayExceptThisMonth: { color: '#bbb' },
// weekend: { backgroundColor: '#fafafa' },
// moreView: { boxShadow: 'none' },
// moreViewTitle: { backgroundColor: '#f4f4f4' },
// },
// week: {
// dayName: {
// borderTop: '1px solid #ddd',
// borderBottom: '1px solid #ddd',
// borderLeft: '1px solid #ddd',
// backgroundColor: 'inherit',
// },
// today: {
// color: '#009688',
// backgroundColor: 'inherit',
// },
// pastDay: { color: '#999' },
// panelResizer: { border: '1px solid #ddd' },
// dayGrid: { borderRight: '1px solid #ddd' },
// dayGridLeft: {
// width: '100px',
// backgroundColor: '',
// borderRight: '1px solid #ddd',
// },
// weekend: { backgroundColor: 'inherit' },
// timeGridLeft: {
// width: '100px',
// backgroundColor: '#fafafa',
// borderRight: '1px solid #ddd',
// },
// timeGridLeftAdditionalTimezone: { backgroundColor: '#fdfdfd' },
// timeGridHourLine: { borderBottom: '1px solid #eee' },
// timeGridHalfHourLine: { borderBottom: '1px dotted #f9f9f9' },
// timeGrid: { borderRight: '1px solid #ddd' },
// nowIndicatorLabel: { color: '#135de6' },
// nowIndicatorPast: { border: '1px solid rgba(19, 93, 230, 0.3)' },
// nowIndicatorBullet: { backgroundColor: '#135de6' },
// nowIndicatorToday: { border: '1px solid #135de6' },
// nowIndicatorFuture: { border: '1px solid #135de6' },
// pastTime: { color: '#999' },
// futureTime: { color: '#333' },
// gridSelection: { color: '#135de6' },
// },
};
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "tui-calendar",
props: {
view: {},
useFormPopup: { type: Boolean, default: false },
useDetailPopup: { type: Boolean, default: false },
isReadOnly: { type: Boolean, default: false },
usageStatistics: { type: Boolean, default: false },
gridSelection: { type: [Object, Boolean], default: true },
week: { default: () => ({}) },
month: { default: () => ({}) },
timezone: { default: () => ({
// @see https://timezonedb.com/time-zones
zones: []
}) },
theme: { default: () => lodashExports.cloneDeep(defaultTheme) },
template: { default: () => ({}) },
calendars: {},
events: {},
eventFilter: { type: Function, default: () => () => [] }
},
emits: [
"selectDateTime",
"beforeCreateEvent",
"beforeUpdateEvent",
"beforeDeleteEvent",
"afterRenderEvent",
"clickDayName",
"clickEvent",
"clickMoreEventsBtn",
"clickTimezoneCollapseBtn"
],
setup(__props, { expose: __expose, emit: __emit }) {
const Calendar$1 = markRaw(Calendar);
const emitEvents = [
"selectDateTime",
"beforeCreateEvent",
"beforeUpdateEvent",
"beforeDeleteEvent",
"afterRenderEvent",
"clickDayName",
"clickEvent",
"clickMoreEventsBtn",
"clickTimezoneCollapseBtn"
];
const emits = __emit;
const props = __props;
const instance = ref();
watchEffect(() => {
if (!instance.value) {
return;
}
instance.value.changeView(lodashExports.cloneDeep(props.view));
});
watchEffect(() => {
if (!instance.value) {
return;
}
instance.value.setOptions({
useFormPopup: lodashExports.cloneDeep(props.useFormPopup),
useDetailPopup: lodashExports.cloneDeep(props.useDetailPopup),
isReadOnly: lodashExports.cloneDeep(props.isReadOnly),
eventFilter: lodashExports.cloneDeep(props.eventFilter),
week: lodashExports.cloneDeep(props.week),
month: lodashExports.cloneDeep(props.month),
gridSelection: lodashExports.cloneDeep(props.gridSelection),
timezone: lodashExports.cloneDeep(props.timezone),
template: lodashExports.cloneDeep(props.template)
});
});
watchEffect(() => {
if (!instance.value) {
return;
}
instance.value.setTheme(lodashExports.cloneDeep(props.theme));
});
watchEffect(() => {
if (!instance.value) {
return;
}
instance.value.setCalendars(lodashExports.cloneDeep(props.calendars));
});
watchEffect(() => {
if (!instance.value) {
return;
}
instance.value.clear();
instance.value.createEvents(lodashExports.cloneDeep(props.events));
});
const containerRef = ref(null);
onMounted(() => {
instance.value = new Calendar$1(unrefElement(containerRef), {
/** States */
defaultView: lodashExports.cloneDeep(props.view),
useFormPopup: lodashExports.cloneDeep(props.useFormPopup),
useDetailPopup: lodashExports.cloneDeep(props.useDetailPopup),
isReadOnly: lodashExports.cloneDeep(props.isReadOnly),
usageStatistics: lodashExports.cloneDeep(props.usageStatistics),
week: lodashExports.cloneDeep(props.week),
month: lodashExports.cloneDeep(props.month),
gridSelection: lodashExports.cloneDeep(props.gridSelection),
timezone: lodashExports.cloneDeep(props.timezone),
theme: lodashExports.cloneDeep(props.theme),
template: lodashExports.cloneDeep(props.template),
calendars: lodashExports.cloneDeep(props.calendars),
/** Filters */
eventFilter: props.eventFilter
});
console.info("[info] instance.value", instance.value);
addEvtListeners();
instance.value.createEvents(lodashExports.cloneDeep(props.events));
});
onBeforeUnmount(() => {
instance.value.off();
instance.value.destroy();
});
function addEvtListeners() {
emitEvents.forEach((eventName) => {
instance.value.on(eventName, (...args) => emits(eventName, ...args));
});
}
__expose({
getRootElement() {
return unrefElement(containerRef);
},
getInstance() {
return instance.value;
}
});
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", {
ref_key: "containerRef",
ref: containerRef,
class: "toastui-vue-calendar"
}, null, 512);
};
}
});
const install = (app) => {
app.component("TuiCalendar", _sfc_main);
};
const TuiCalendar = _sfc_main;
TuiCalendar.install = install;
export {
Calendar,
Day,
Month,
TZDate,
TuiCalendar,
Week,
TuiCalendar as default
};