{"version":3,"file":"index.mjs","sources":["../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/has.js","../../node_modules/lodash/_baseIsDate.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isDate.js","../../node_modules/lodash/isString.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_baseSome.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/some.js","../../node_modules/lodash/isBoolean.js","../../node_modules/lodash/isNumber.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/mapValues.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/defaults.js","../../node_modules/lodash/_assignMergeValue.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/isArrayLikeObject.js","../../node_modules/lodash/isPlainObject.js","../../node_modules/lodash/_safeGet.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/toPlainObject.js","../../node_modules/lodash/_baseMergeDeep.js","../../node_modules/lodash/_baseMerge.js","../../node_modules/lodash/_customDefaultsMerge.js","../../node_modules/lodash/_createAssigner.js","../../node_modules/lodash/mergeWith.js","../../node_modules/lodash/defaultsDeep.js","../../node_modules/lodash/head.js","../../node_modules/lodash/last.js","../../src/utils/helpers.ts","../../node_modules/date-fns/_lib/toInteger/index.js","../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js","../../node_modules/date-fns-tz/esm/_lib/tzTokenizeDate/index.js","../../node_modules/date-fns-tz/esm/_lib/newDateUTC/index.js","../../node_modules/date-fns-tz/esm/_lib/tzParseTimezone/index.js","../../node_modules/date-fns-tz/esm/_lib/tzPattern/index.js","../../node_modules/date-fns-tz/esm/toDate/index.js","../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../node_modules/date-fns/esm/toDate/index.js","../../node_modules/date-fns/esm/_lib/toInteger/index.js","../../node_modules/date-fns/esm/_lib/defaultOptions/index.js","../../node_modules/date-fns/esm/startOfWeek/index.js","../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../../node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","../../node_modules/date-fns/esm/lastDayOfMonth/index.js","../../node_modules/date-fns/esm/startOfMonth/index.js","../../node_modules/date-fns/esm/getWeeksInMonth/index.js","../../node_modules/date-fns/esm/getWeekYear/index.js","../../node_modules/date-fns/esm/startOfWeekYear/index.js","../../node_modules/date-fns/esm/getWeek/index.js","../../node_modules/date-fns/esm/startOfISOWeek/index.js","../../node_modules/date-fns/esm/getISOWeekYear/index.js","../../node_modules/date-fns/esm/startOfISOWeekYear/index.js","../../node_modules/date-fns/esm/getISOWeek/index.js","../../node_modules/date-fns/esm/addDays/index.js","../../node_modules/date-fns/esm/addMonths/index.js","../../node_modules/date-fns/esm/addYears/index.js","../../src/utils/page.ts","../../src/utils/cache.ts","../../src/utils/date/range.ts","../../src/utils/defaults/locales.ts","../../src/utils/defaults/index.ts","../../src/utils/locale.ts","../../src/utils/date/rules.ts","../../src/utils/date/repeat.ts","../../src/utils/date/helpers.ts","../../src/utils/attribute.ts","../../src/utils/popovers.ts","../../src/utils/touch.ts","../../src/utils/watchers.ts","../../node_modules/vue-screen-utils/dist/index.mjs","../../src/utils/glyph.ts","../../src/utils/theme.ts","../../src/use/base.ts","../../src/use/slots.ts","../../src/use/calendar.ts","../../src/components/Popover/Popover.vue","../../src/components/Popover/Popover.vue","../../src/components/Popover/PopoverRow.vue","../../src/components/Calendar/CalendarSlot.vue","../../src/components/Calendar/CalendarDayPopover.vue","../../src/components/BaseIcon/icons/IconChevronRight.vue","../../src/components/BaseIcon/icons/IconChevronLeft.vue","../../src/components/BaseIcon/icons/IconChevronDown.vue","../../src/components/BaseIcon/icons/IconClock.vue","../../src/components/BaseIcon/BaseIcon.vue","../../src/components/Calendar/CalendarHeader.vue","../../src/use/page.ts","../../src/components/Calendar/CalendarNav.vue","../../src/components/Calendar/CalendarPageProvider.vue","../../src/components/Calendar/CalendarNavPopover.vue","../../src/components/Calendar/CalendarDay.vue","../../src/components/Calendar/CalendarDay.vue","../../src/components/Calendar/CalendarPage.vue","../../src/components/Calendar/Calendar.vue","../../src/components/Calendar/Calendar.vue","../../src/use/datePicker.ts","../../src/use/timePicker.ts","../../src/components/BaseSelect/BaseSelect.vue","../../src/components/DatePicker/TimePicker.vue","../../src/components/DatePicker/DatePickerBase.vue","../../src/components/DatePicker/DatePickerPopover.vue","../../src/components/DatePicker/DatePicker.vue","../../src/components/DatePicker/DatePicker.vue","../../src/index.ts"],"sourcesContent":["/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHas = require('./_baseHas'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n  return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsDate = require('./_baseIsDate'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction baseSome(collection, predicate) {\n  var result;\n\n  baseEach(collection, function(value, index, collection) {\n    result = predicate(value, index, collection);\n    return !result;\n  });\n  return !!result;\n}\n\nmodule.exports = baseSome;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var arraySome = require('./_arraySome'),\n    baseIteratee = require('./_baseIteratee'),\n    baseSome = require('./_baseSome'),\n    isArray = require('./isArray'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n *   { 'user': 'barney', 'active': true },\n *   { 'user': 'fred',   'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n  var func = isArray(collection) ? arraySome : baseSome;\n  if (guard && isIterateeCall(collection, predicate, guard)) {\n    predicate = undefined;\n  }\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n  return value === true || value === false ||\n    (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nmodule.exports = isBoolean;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nmodule.exports = mapValues;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var baseRest = require('./_baseRest'),\n    eq = require('./eq'),\n    isIterateeCall = require('./_isIterateeCall'),\n    keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n  object = Object(object);\n\n  var index = -1;\n  var length = sources.length;\n  var guard = length > 2 ? sources[2] : undefined;\n\n  if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n    length = 1;\n  }\n\n  while (++index < length) {\n    var source = sources[index];\n    var props = keysIn(source);\n    var propsIndex = -1;\n    var propsLength = props.length;\n\n    while (++propsIndex < propsLength) {\n      var key = props[propsIndex];\n      var value = object[key];\n\n      if (value === undefined ||\n          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        object[key] = source[key];\n      }\n    }\n  }\n\n  return object;\n});\n\nmodule.exports = defaults;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var baseMerge = require('./_baseMerge'),\n    isObject = require('./isObject');\n\n/**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n  if (isObject(objValue) && isObject(srcValue)) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, objValue);\n    baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n    stack['delete'](srcValue);\n  }\n  return objValue;\n}\n\nmodule.exports = customDefaultsMerge;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   if (_.isArray(objValue)) {\n *     return objValue.concat(srcValue);\n *   }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nmodule.exports = mergeWith;\n","var apply = require('./_apply'),\n    baseRest = require('./_baseRest'),\n    customDefaultsMerge = require('./_customDefaultsMerge'),\n    mergeWith = require('./mergeWith');\n\n/**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\nvar defaultsDeep = baseRest(function(args) {\n  args.push(undefined, customDefaultsMerge);\n  return apply(mergeWith, undefined, args);\n});\n\nmodule.exports = defaultsDeep;\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n  return (array && array.length) ? array[0] : undefined;\n}\n\nmodule.exports = head;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","import _has from 'lodash/has';\r\nimport _isDate from 'lodash/isDate';\r\nimport isFunction from 'lodash/isFunction';\r\nimport isString from 'lodash/isString';\r\nimport _some from 'lodash/some';\r\nimport type { ComponentPublicInstance } from 'vue';\r\n\r\nexport { isFunction, isString };\r\nexport { default as isBoolean } from 'lodash/isBoolean';\r\nexport { default as isNumber } from 'lodash/isNumber';\r\nexport { default as isUndefined } from 'lodash/isUndefined';\r\nexport { default as get } from 'lodash/get';\r\nexport { default as set } from 'lodash/set';\r\nexport { default as mapValues } from 'lodash/mapValues';\r\nexport { default as defaults } from 'lodash/defaults';\r\nexport { default as defaultsDeep } from 'lodash/defaultsDeep';\r\nexport { default as map } from 'lodash/map';\r\nexport { default as head } from 'lodash/head';\r\nexport { default as last } from 'lodash/last';\r\n\r\n// Type checkers\r\nexport const getType = (value: any) =>\r\n  Object.prototype.toString.call(value).slice(8, -1);\r\nexport const isDate = (value: unknown): value is Date =>\r\n  _isDate(value) && !isNaN(value.getTime());\r\nexport const isObject = (value: unknown): value is Object =>\r\n  getType(value) === 'Object';\r\n\r\n// Object utils\r\nexport const has = _has;\r\nexport const hasAny = (obj: object, props: string[]) =>\r\n  _some(props, p => _has(obj, p));\r\n\r\n// Collection utils\r\nexport const some = _some;\r\n\r\nexport const pad = (val: string | number, len: number, char = '0') => {\r\n  val = val !== null && val !== undefined ? String(val) : '';\r\n  len = len || 2;\r\n  while (val.length < len) {\r\n    val = `${char}${val}`;\r\n  }\r\n  return val;\r\n};\r\n\r\nexport const roundTenth = (n: number) => {\r\n  return Math.round(n * 100) / 100;\r\n};\r\n\r\nexport const isArray = (val: any): val is any[] => Array.isArray(val);\r\n\r\nexport const arrayHasItems = (array: any): boolean =>\r\n  isArray(array) && array.length > 0;\r\n\r\nexport const resolveEl = (target: unknown): Node | null => {\r\n  if (target == null) return null;\r\n  if (document && isString(target)) return document.querySelector(target);\r\n  return (target as ComponentPublicInstance).$el ?? target;\r\n};\r\n\r\nexport interface ElementPosition {\r\n  top: number;\r\n  left: number;\r\n}\r\n\r\nexport interface CustomElement {\r\n  addEventListener: Function;\r\n  removeEventListener: Function;\r\n  dispatchEvent: Function;\r\n}\r\n\r\nexport const off = (\r\n  element: CustomElement,\r\n  event: string,\r\n  handler: (e: any) => void,\r\n  opts: boolean | EventListenerOptions | undefined = undefined,\r\n) => {\r\n  element.removeEventListener(event, handler, opts);\r\n};\r\n\r\nexport const on = (\r\n  element: CustomElement,\r\n  event: string,\r\n  handler: (e: any) => void,\r\n  opts: boolean | AddEventListenerOptions | undefined = undefined,\r\n) => {\r\n  element.addEventListener(event, handler, opts);\r\n  return () => off(element, event, handler, opts);\r\n};\r\n\r\nexport const elementContains = (element: Node, child: Node) =>\r\n  !!element && !!child && (element === child || element.contains(child));\r\n\r\nexport const onSpaceOrEnter = (\r\n  event: KeyboardEvent,\r\n  handler: (e: KeyboardEvent) => void,\r\n) => {\r\n  if (event.key === ' ' || event.key === 'Enter') {\r\n    handler(event);\r\n    event.preventDefault();\r\n  }\r\n};\r\n\r\nexport const capitalize = (str: string) => {\r\n  return str.charAt(0).toUpperCase() + str.slice(1);\r\n};\r\n\r\nexport const omit = <T extends object, K extends [...(keyof T)[]]>(\r\n  obj: T,\r\n  ...keys: K\r\n) => {\r\n  const ret = {} as {\r\n    [K in keyof typeof obj]: (typeof obj)[K];\r\n  };\r\n  let key: keyof typeof obj;\r\n  for (key in obj) {\r\n    if (!keys.includes(key)) {\r\n      ret[key] = obj[key];\r\n    }\r\n  }\r\n  return ret;\r\n};\r\n\r\nexport const pick = <T extends object, K extends keyof T>(\r\n  obj: T,\r\n  keys: K[],\r\n): Pick<T, K> => {\r\n  const ret: any = {};\r\n  keys.forEach(key => {\r\n    if (key in obj) ret[key] = obj[key];\r\n  });\r\n  return ret;\r\n};\r\n\r\nexport function extend<T extends object, E extends object>(\r\n  value: T,\r\n  ext: E,\r\n): T & E {\r\n  const handler = {\r\n    get(target: T, prop: keyof (T | E)) {\r\n      if ((prop as string) in target) {\r\n        return target[prop];\r\n      }\r\n      return ext[prop];\r\n    },\r\n  };\r\n  // @ts-ignore\r\n  return new Proxy(value, handler) as T & E;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n  return Math.min(Math.max(num, min), max);\r\n}\r\n\r\n/* eslint-disable no-bitwise */\r\n\r\nexport function hash(str: string): number {\r\n  let hashcode = 0;\r\n  let i = 0;\r\n  let chr;\r\n  if (str.length === 0) return hashcode;\r\n  for (i = 0; i < str.length; i++) {\r\n    chr = str.charCodeAt(i);\r\n    hashcode = (hashcode << 5) - hashcode + chr;\r\n    hashcode |= 0; // Convert to 32bit integer\r\n  }\r\n  return hashcode;\r\n}\r\n\r\n/* eslint-enable no-bitwise */\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toInteger;\n\nfunction toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n\n  var number = Number(dirtyNumber);\n\n  if (isNaN(number)) {\n    return number;\n  }\n\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getTimezoneOffsetInMilliseconds;\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nfunction getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}\n\nmodule.exports = exports.default;","/**\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\n * `date` as it will be rendered in the `timeZone`.\n */\nexport default function tzTokenizeDate(date, timeZone) {\n  var dtf = getDateTimeFormat(timeZone)\n  return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date)\n}\n\nvar typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5,\n}\n\nfunction partsOffset(dtf, date) {\n  try {\n    var formatted = dtf.formatToParts(date)\n    var filled = []\n    for (var i = 0; i < formatted.length; i++) {\n      var pos = typeToPos[formatted[i].type]\n\n      if (pos >= 0) {\n        filled[pos] = parseInt(formatted[i].value, 10)\n      }\n    }\n    return filled\n  } catch (error) {\n    if (error instanceof RangeError) {\n      return [NaN]\n    }\n    throw error\n  }\n}\n\nfunction hackyOffset(dtf, date) {\n  var formatted = dtf.format(date).replace(/\\u200E/g, '')\n  var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted)\n  // var [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\n  // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\n  return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]]\n}\n\n// Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\n// to get deterministic local date/time output according to the `en-US` locale which\n// can be used to extract local time parts as necessary.\nvar dtfCache = {}\nfunction getDateTimeFormat(timeZone) {\n  if (!dtfCache[timeZone]) {\n    // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\n    var testDateFormatted = new Intl.DateTimeFormat('en-US', {\n      hour12: false,\n      timeZone: 'America/New_York',\n      year: 'numeric',\n      month: 'numeric',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    }).format(new Date('2014-06-25T04:00:00.123Z'))\n    var hourCycleSupported =\n      testDateFormatted === '06/25/2014, 00:00:00' ||\n      testDateFormatted === '‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00'\n\n    dtfCache[timeZone] = hourCycleSupported\n      ? new Intl.DateTimeFormat('en-US', {\n          hour12: false,\n          timeZone: timeZone,\n          year: 'numeric',\n          month: 'numeric',\n          day: '2-digit',\n          hour: '2-digit',\n          minute: '2-digit',\n          second: '2-digit',\n        })\n      : new Intl.DateTimeFormat('en-US', {\n          hourCycle: 'h23',\n          timeZone: timeZone,\n          year: 'numeric',\n          month: 'numeric',\n          day: '2-digit',\n          hour: '2-digit',\n          minute: '2-digit',\n          second: '2-digit',\n        })\n  }\n  return dtfCache[timeZone]\n}\n","/**\n * Use instead of `new Date(Date.UTC(...))` to support years below 100 which doesn't work\n * otherwise due to the nature of the\n * [`Date` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#interpretation_of_two-digit_years.\n *\n * For `Date.UTC(...)`, use `newDateUTC(...).getTime()`.\n */\nexport default function newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n  var utcDate = new Date(0)\n  utcDate.setUTCFullYear(fullYear, month, day)\n  utcDate.setUTCHours(hour, minute, second, millisecond)\n  return utcDate\n}\n","import tzTokenizeDate from '../tzTokenizeDate/index.js'\nimport newDateUTC from '../newDateUTC/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\n\nvar patterns = {\n  timezone: /([Z+-].*)$/,\n  timezoneZ: /^(Z)$/,\n  timezoneHH: /^([+-]\\d{2})$/,\n  timezoneHHMM: /^([+-]\\d{2}):?(\\d{2})$/,\n}\n\n// Parse various time zone offset formats to an offset in milliseconds\nexport default function tzParseTimezone(timezoneString, date, isUtcDate) {\n  var token\n  var absoluteOffset\n\n  // Empty string\n  if (!timezoneString) {\n    return 0\n  }\n\n  // Z\n  token = patterns.timezoneZ.exec(timezoneString)\n  if (token) {\n    return 0\n  }\n\n  var hours\n\n  // ±hh\n  token = patterns.timezoneHH.exec(timezoneString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n\n    if (!validateTimezone(hours)) {\n      return NaN\n    }\n\n    return -(hours * MILLISECONDS_IN_HOUR)\n  }\n\n  // ±hh:mm or ±hhmm\n  token = patterns.timezoneHHMM.exec(timezoneString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    var minutes = parseInt(token[2], 10)\n\n    if (!validateTimezone(hours, minutes)) {\n      return NaN\n    }\n\n    absoluteOffset = Math.abs(hours) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n    return hours > 0 ? -absoluteOffset : absoluteOffset\n  }\n\n  // IANA time zone\n  if (isValidTimezoneIANAString(timezoneString)) {\n    date = new Date(date || Date.now())\n    var utcDate = isUtcDate ? date : toUtcDate(date)\n\n    var offset = calcOffset(utcDate, timezoneString)\n\n    var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString)\n\n    return -fixedOffset\n  }\n\n  return NaN\n}\n\nfunction toUtcDate(date) {\n  return newDateUTC(\n    date.getFullYear(),\n    date.getMonth(),\n    date.getDate(),\n    date.getHours(),\n    date.getMinutes(),\n    date.getSeconds(),\n    date.getMilliseconds()\n  )\n}\n\nfunction calcOffset(date, timezoneString) {\n  var tokens = tzTokenizeDate(date, timezoneString)\n\n  // ms dropped because it's not provided by tzTokenizeDate\n  var asUTC = newDateUTC(\n    tokens[0],\n    tokens[1] - 1,\n    tokens[2],\n    tokens[3] % 24,\n    tokens[4],\n    tokens[5],\n    0\n  ).getTime()\n\n  var asTS = date.getTime()\n  var over = asTS % 1000\n  asTS -= over >= 0 ? over : 1000 + over\n  return asUTC - asTS\n}\n\nfunction fixOffset(date, offset, timezoneString) {\n  var localTS = date.getTime()\n\n  // Our UTC time is just a guess because our offset is just a guess\n  var utcGuess = localTS - offset\n\n  // Test whether the zone matches the offset for this ts\n  var o2 = calcOffset(new Date(utcGuess), timezoneString)\n\n  // If so, offset didn't change, and we're done\n  if (offset === o2) {\n    return offset\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= o2 - offset\n\n  // If that gives us the local time we want, we're done\n  var o3 = calcOffset(new Date(utcGuess), timezoneString)\n  if (o2 === o3) {\n    return o2\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but we don't adjust the time\n  return Math.max(o2, o3)\n}\n\nfunction validateTimezone(hours, minutes) {\n  return -23 <= hours && hours <= 23 && (minutes == null || (0 <= minutes && minutes <= 59))\n}\n\nvar validIANATimezoneCache = {}\nfunction isValidTimezoneIANAString(timeZoneString) {\n  if (validIANATimezoneCache[timeZoneString]) return true\n  try {\n    new Intl.DateTimeFormat(undefined, { timeZone: timeZoneString })\n    validIANATimezoneCache[timeZoneString] = true\n    return true\n  } catch (error) {\n    return false\n  }\n}\n","/** Regex to identify the presence of a time zone specifier in a date string */\nvar tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/\n\nexport default tzPattern\n","import toInteger from 'date-fns/_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from 'date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport tzPattern from '../_lib/tzPattern/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n  dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n  datePattern: /^([0-9W+-]+)(.*)/,\n  plainTime: /:/,\n\n  // year tokens\n  YY: /^(\\d{2})$/,\n  YYY: [\n    /^([+-]\\d{2})$/, // 0 additional digits\n    /^([+-]\\d{3})$/, // 1 additional digit\n    /^([+-]\\d{4})$/, // 2 additional digits\n  ],\n  YYYY: /^(\\d{4})/,\n  YYYYY: [\n    /^([+-]\\d{4})/, // 0 additional digits\n    /^([+-]\\d{5})/, // 1 additional digit\n    /^([+-]\\d{6})/, // 2 additional digits\n  ],\n\n  // date tokens\n  MM: /^-(\\d{2})$/,\n  DDD: /^-?(\\d{3})$/,\n  MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n  Www: /^-?W(\\d{2})$/,\n  WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n\n  HH: /^(\\d{2}([.,]\\d*)?)$/,\n  HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n  HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n\n  // time zone tokens (to identify the presence of a tz)\n  timeZone: tzPattern,\n}\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function toDate(argument, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  if (argument === null) {\n    return new Date(NaN)\n  }\n\n  var options = dirtyOptions || {}\n\n  var additionalDigits =\n    options.additionalDigits == null\n      ? DEFAULT_ADDITIONAL_DIGITS\n      : toInteger(options.additionalDigits)\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2')\n  }\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]')\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime())\n  } else if (\n    typeof argument === 'number' ||\n    Object.prototype.toString.call(argument) === '[object Number]'\n  ) {\n    return new Date(argument)\n  } else if (\n    !(\n      typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]'\n    )\n  ) {\n    return new Date(NaN)\n  }\n\n  var dateStrings = splitDateString(argument)\n\n  var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n  var year = parseYearResult.year\n  var restDateString = parseYearResult.restDateString\n\n  var date = parseDate(restDateString, year)\n\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  if (date) {\n    var timestamp = date.getTime()\n    var time = 0\n    var offset\n\n    if (dateStrings.time) {\n      time = parseTime(dateStrings.time)\n\n      if (isNaN(time)) {\n        return new Date(NaN)\n      }\n    }\n\n    if (dateStrings.timeZone || options.timeZone) {\n      offset = tzParseTimezone(dateStrings.timeZone || options.timeZone, new Date(timestamp + time))\n      if (isNaN(offset)) {\n        return new Date(NaN)\n      }\n    } else {\n      // get offset accurate to hour in time zones that change offset\n      offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time))\n      offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time + offset))\n    }\n\n    return new Date(timestamp + time + offset)\n  } else {\n    return new Date(NaN)\n  }\n}\n\nfunction splitDateString(dateString) {\n  var dateStrings = {}\n  var parts = patterns.dateTimePattern.exec(dateString)\n  var timeString\n\n  if (!parts) {\n    parts = patterns.datePattern.exec(dateString)\n    if (parts) {\n      dateStrings.date = parts[1]\n      timeString = parts[2]\n    } else {\n      dateStrings.date = null\n      timeString = dateString\n    }\n  } else {\n    dateStrings.date = parts[1]\n    timeString = parts[3]\n  }\n\n  if (timeString) {\n    var token = patterns.timeZone.exec(timeString)\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '')\n      dateStrings.timeZone = token[1].trim()\n    } else {\n      dateStrings.time = timeString\n    }\n  }\n\n  return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  var patternYYY = patterns.YYY[additionalDigits]\n  var patternYYYYY = patterns.YYYYY[additionalDigits]\n\n  var token\n\n  // YYYY or ±YYYYY\n  token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString)\n  if (token) {\n    var yearString = token[1]\n    return {\n      year: parseInt(yearString, 10),\n      restDateString: dateString.slice(yearString.length),\n    }\n  }\n\n  // YY or ±YYY\n  token = patterns.YY.exec(dateString) || patternYYY.exec(dateString)\n  if (token) {\n    var centuryString = token[1]\n    return {\n      year: parseInt(centuryString, 10) * 100,\n      restDateString: dateString.slice(centuryString.length),\n    }\n  }\n\n  // Invalid ISO-formatted year\n  return {\n    year: null,\n  }\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) {\n    return null\n  }\n\n  var token\n  var date\n  var month\n  var week\n\n  // YYYY\n  if (dateString.length === 0) {\n    date = new Date(0)\n    date.setUTCFullYear(year)\n    return date\n  }\n\n  // YYYY-MM\n  token = patterns.MM.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n\n    if (!validateDate(year, month)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, month)\n    return date\n  }\n\n  // YYYY-DDD or YYYYDDD\n  token = patterns.DDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    var dayOfYear = parseInt(token[1], 10)\n\n    if (!validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, 0, dayOfYear)\n    return date\n  }\n\n  // yyyy-MM-dd or YYYYMMDD\n  token = patterns.MMDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n    var day = parseInt(token[2], 10)\n\n    if (!validateDate(year, month, day)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, month, day)\n    return date\n  }\n\n  // YYYY-Www or YYYYWww\n  token = patterns.Www.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n\n    if (!validateWeekDate(year, week)) {\n      return new Date(NaN)\n    }\n\n    return dayOfISOWeekYear(year, week)\n  }\n\n  // YYYY-Www-D or YYYYWwwD\n  token = patterns.WwwD.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n    var dayOfWeek = parseInt(token[2], 10) - 1\n\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN)\n    }\n\n    return dayOfISOWeekYear(year, week, dayOfWeek)\n  }\n\n  // Invalid ISO-formatted date\n  return null\n}\n\nfunction parseTime(timeString) {\n  var token\n  var hours\n  var minutes\n\n  // hh\n  token = patterns.HH.exec(timeString)\n  if (token) {\n    hours = parseFloat(token[1].replace(',', '.'))\n\n    if (!validateTime(hours)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR\n  }\n\n  // hh:mm or hhmm\n  token = patterns.HHMM.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseFloat(token[2].replace(',', '.'))\n\n    if (!validateTime(hours, minutes)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n  }\n\n  // hh:mm:ss or hhmmss\n  token = patterns.HHMMSS.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseInt(token[2], 10)\n    var seconds = parseFloat(token[3].replace(',', '.'))\n\n    if (!validateTime(hours, minutes, seconds)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000\n  }\n\n  // Invalid ISO-formatted time\n  return null\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  week = week || 0\n  day = day || 0\n  var date = new Date(0)\n  date.setUTCFullYear(isoWeekYear, 0, 4)\n  var fourthOfJanuaryDay = date.getUTCDay() || 7\n  var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n\n// Validation functions\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\nfunction validateDate(year, month, date) {\n  if (month < 0 || month > 11) {\n    return false\n  }\n\n  if (date != null) {\n    if (date < 1) {\n      return false\n    }\n\n    var isLeapYear = isLeapYearIndex(year)\n    if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n      return false\n    }\n    if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  if (dayOfYear < 1) {\n    return false\n  }\n\n  var isLeapYear = isLeapYearIndex(year)\n  if (isLeapYear && dayOfYear > 366) {\n    return false\n  }\n  if (!isLeapYear && dayOfYear > 365) {\n    return false\n  }\n\n  return true\n}\n\nfunction validateWeekDate(year, week, day) {\n  if (week < 0 || week > 52) {\n    return false\n  }\n\n  if (day != null && (day < 0 || day > 6)) {\n    return false\n  }\n\n  return true\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours != null && (hours < 0 || hours >= 25)) {\n    return false\n  }\n\n  if (minutes != null && (minutes < 0 || minutes >= 60)) {\n    return false\n  }\n\n  if (seconds != null && (seconds < 0 || seconds >= 60)) {\n    return false\n  }\n\n  return true\n}\n","export default function requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n  if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\"); // eslint-disable-next-line no-console\n\n      console.warn(new Error().stack);\n    }\n\n    return new Date(NaN);\n  }\n}","export default function toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n\n  var number = Number(dirtyNumber);\n\n  if (isNaN(number)) {\n    return number;\n  }\n\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","var defaultOptions = {};\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setDate(date.getDate() - diff);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5),\n *   { weekStartsOn: 1 }\n * )\n * //=> 2\n */\n\nexport default function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var startOfWeekLeft = startOfWeek(dirtyDateLeft, options);\n  var startOfWeekRight = startOfWeek(dirtyDateRight, options);\n  var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft);\n  var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight); // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\n\nexport default function lastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import differenceInCalendarWeeks from \"../differenceInCalendarWeeks/index.js\";\nimport lastDayOfMonth from \"../lastDayOfMonth/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * const result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * const result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n  requiredArgs(1, arguments);\n  return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\n\nexport default function getWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import getWeekYear from \"../getWeekYear/index.js\";\nimport startOfWeek from \"../startOfWeek/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\n\nexport default function startOfWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getWeekYear(dirtyDate, options);\n  var firstWeek = new Date(0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  var date = startOfWeek(firstWeek, options);\n  return date;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport startOfWeekYear from \"../startOfWeekYear/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfWeek(date, options).getTime() - startOfWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return startOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import toDate from \"../toDate/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\n\nexport default function getISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\n\nexport default function startOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuary);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\n\nexport default function getISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n\n  date.setDate(date.getDate() + amount);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n\n  var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n\n  var endOfDesiredMonth = new Date(date.getTime());\n  endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n    return date;\n  }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, amount * 12);\n}","import {\r\n  type DateParts,\r\n  type DateSource,\r\n  type DayParts,\r\n  type MonthParts,\r\n  addDays,\r\n  addMonths,\r\n  daysInWeek,\r\n  getDayIndex,\r\n  weeksInMonth,\r\n} from './date/helpers';\r\nimport { pad, pick } from './helpers';\r\nimport Locale from './locale';\r\n\r\nexport interface CalendarDay extends DayParts {\r\n  id: string;\r\n  position: number;\r\n  label: string;\r\n  ariaLabel: string;\r\n  weekdayPosition: number;\r\n  weekdayPositionFromEnd: number;\r\n  weekPosition: number;\r\n  isoWeeknumber: number;\r\n  startDate: Date;\r\n  noonDate: Date;\r\n  endDate: Date;\r\n  isToday: boolean;\r\n  isFirstDay: boolean;\r\n  isLastDay: boolean;\r\n  isDisabled: boolean;\r\n  isFocusable: boolean;\r\n  isFocused: boolean;\r\n  inMonth: boolean;\r\n  inPrevMonth: boolean;\r\n  inNextMonth: boolean;\r\n  onTop: boolean;\r\n  onBottom: boolean;\r\n  onLeft: boolean;\r\n  onRight: boolean;\r\n  classes: Array<string | Object>;\r\n  locale: Locale;\r\n}\r\n\r\nexport interface CalendarWeek {\r\n  id: string;\r\n  week: number;\r\n  weekPosition: number;\r\n  weeknumber: number;\r\n  isoWeeknumber: number;\r\n  weeknumberDisplay?: number;\r\n  days: CalendarDay[];\r\n  title: string;\r\n}\r\n\r\nexport interface CalendarWeekday {\r\n  weekday: number;\r\n  label: string;\r\n}\r\n\r\nexport type PageView = 'daily' | 'weekly' | 'monthly';\r\n\r\nexport type TitlePosition = 'center' | 'left' | 'right';\r\n\r\nexport interface Page {\r\n  id: string;\r\n  day?: number;\r\n  week?: number;\r\n  month: number;\r\n  year: number;\r\n  view: PageView;\r\n  trimWeeks: boolean;\r\n  position: number;\r\n  row: number;\r\n  rowFromEnd: number;\r\n  column: number;\r\n  columnFromEnd: number;\r\n  showWeeknumbers: boolean;\r\n  showIsoWeeknumbers: boolean;\r\n  weeknumberPosition: string;\r\n  monthTitle: string;\r\n  weekTitle?: string;\r\n  dayTitle?: string;\r\n  title: string;\r\n  titlePosition: TitlePosition;\r\n  shortMonthLabel: string;\r\n  monthLabel: string;\r\n  shortYearLabel: string;\r\n  yearLabel: string;\r\n  monthComps: MonthParts;\r\n  prevMonthComps: MonthParts;\r\n  nextMonthComps: MonthParts;\r\n  days: CalendarDay[];\r\n  weeks: CalendarWeek[];\r\n  weekdays: CalendarWeekday[];\r\n  viewDays: CalendarDay[];\r\n  viewWeeks: CalendarWeek[];\r\n}\r\n\r\nexport type PageAddress = Pick<Page, 'day' | 'week' | 'month' | 'year'>;\r\n\r\nexport type PageConfig = Pick<\r\n  Page,\r\n  | 'day'\r\n  | 'week'\r\n  | 'month'\r\n  | 'year'\r\n  | 'view'\r\n  | 'titlePosition'\r\n  | 'trimWeeks'\r\n  | 'position'\r\n  | 'row'\r\n  | 'rowFromEnd'\r\n  | 'column'\r\n  | 'columnFromEnd'\r\n  | 'showWeeknumbers'\r\n  | 'showIsoWeeknumbers'\r\n  | 'weeknumberPosition'\r\n>;\r\n\r\nexport type CachedPage = Pick<\r\n  Page,\r\n  | 'id'\r\n  | 'month'\r\n  | 'year'\r\n  | 'monthTitle'\r\n  | 'shortMonthLabel'\r\n  | 'monthLabel'\r\n  | 'shortYearLabel'\r\n  | 'yearLabel'\r\n  | 'monthComps'\r\n  | 'prevMonthComps'\r\n  | 'nextMonthComps'\r\n  | 'days'\r\n  | 'weeks'\r\n  | 'weekdays'\r\n>;\r\n\r\nconst viewAddressKeys: Record<PageView, (keyof DateParts)[]> = {\r\n  daily: ['year', 'month', 'day'],\r\n  weekly: ['year', 'month', 'week'],\r\n  monthly: ['year', 'month'],\r\n};\r\n\r\nfunction getDays(\r\n  {\r\n    monthComps,\r\n    prevMonthComps,\r\n    nextMonthComps,\r\n  }: Pick<Page, 'monthComps' | 'prevMonthComps' | 'nextMonthComps'>,\r\n  locale: Locale,\r\n): CalendarDay[] {\r\n  const days: CalendarDay[] = [];\r\n  const {\r\n    firstDayOfWeek,\r\n    firstWeekday,\r\n    isoWeeknumbers,\r\n    weeknumbers,\r\n    numDays,\r\n    numWeeks,\r\n  } = monthComps;\r\n  const prevMonthDaysToShow =\r\n    firstWeekday +\r\n    (firstWeekday < firstDayOfWeek ? daysInWeek : 0) -\r\n    firstDayOfWeek;\r\n  let prevMonth = true;\r\n  let thisMonth = false;\r\n  let nextMonth = false;\r\n  let position = 0;\r\n  // Formatter for aria labels\r\n  const formatter = new Intl.DateTimeFormat(locale.id, {\r\n    weekday: 'long',\r\n    year: 'numeric',\r\n    month: 'short',\r\n    day: 'numeric',\r\n  });\r\n  // Init counters with previous month's data\r\n  let day = prevMonthComps.numDays - prevMonthDaysToShow + 1;\r\n  let dayFromEnd = prevMonthComps.numDays - day + 1;\r\n  let weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\r\n  let weekdayOrdinalFromEnd = 1;\r\n  let week = prevMonthComps.numWeeks;\r\n  let weekFromEnd = 1;\r\n  let month = prevMonthComps.month;\r\n  let year = prevMonthComps.year;\r\n  // Store todays comps\r\n  const today = new Date();\r\n  const todayDay = today.getDate();\r\n  const todayMonth = today.getMonth() + 1;\r\n  const todayYear = today.getFullYear();\r\n  // Cycle through max weeks in month\r\n  for (let w = 1; w <= weeksInMonth; w++) {\r\n    // Cycle through days in week\r\n    for (\r\n      let i = 1, weekday = firstDayOfWeek;\r\n      i <= daysInWeek;\r\n      i++, weekday += weekday === daysInWeek ? 1 - daysInWeek : 1\r\n    ) {\r\n      // We need to know when to start counting actual month days\r\n      if (prevMonth && weekday === firstWeekday) {\r\n        // Reset counters for current month\r\n        day = 1;\r\n        dayFromEnd = monthComps.numDays;\r\n        weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\r\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\r\n        week = 1;\r\n        weekFromEnd = numWeeks;\r\n        month = monthComps.month;\r\n        year = monthComps.year;\r\n        // ...and flag we're tracking actual month days\r\n        prevMonth = false;\r\n        thisMonth = true;\r\n      }\r\n      const startDate = locale.getDateFromParams(year, month, day, 0, 0, 0, 0);\r\n      const noonDate = locale.getDateFromParams(year, month, day, 12, 0, 0, 0);\r\n      const endDate = locale.getDateFromParams(\r\n        year,\r\n        month,\r\n        day,\r\n        23,\r\n        59,\r\n        59,\r\n        999,\r\n      );\r\n      const date = startDate;\r\n      const id = `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;\r\n      const weekdayPosition = i;\r\n      const weekdayPositionFromEnd = daysInWeek - i;\r\n      const weeknumber = weeknumbers[w - 1];\r\n      const isoWeeknumber = isoWeeknumbers[w - 1];\r\n      const isToday =\r\n        day === todayDay && month === todayMonth && year === todayYear;\r\n      const isFirstDay = thisMonth && day === 1;\r\n      const isLastDay = thisMonth && day === numDays;\r\n      const onTop = w === 1;\r\n      const onBottom = w === numWeeks;\r\n      const onLeft = i === 1;\r\n      const onRight = i === daysInWeek;\r\n      const dayIndex = getDayIndex(year, month, day);\r\n      days.push({\r\n        locale,\r\n        id,\r\n        position: ++position,\r\n        label: day.toString(),\r\n        ariaLabel: formatter.format(new Date(year, month - 1, day)),\r\n        day,\r\n        dayFromEnd,\r\n        weekday,\r\n        weekdayPosition,\r\n        weekdayPositionFromEnd,\r\n        weekdayOrdinal,\r\n        weekdayOrdinalFromEnd,\r\n        week,\r\n        weekFromEnd,\r\n        weekPosition: w,\r\n        weeknumber,\r\n        isoWeeknumber,\r\n        month,\r\n        year,\r\n        date,\r\n        startDate,\r\n        endDate,\r\n        noonDate,\r\n        dayIndex,\r\n        isToday,\r\n        isFirstDay,\r\n        isLastDay,\r\n        isDisabled: !thisMonth,\r\n        isFocusable: !thisMonth,\r\n        isFocused: false,\r\n        inMonth: thisMonth,\r\n        inPrevMonth: prevMonth,\r\n        inNextMonth: nextMonth,\r\n        onTop,\r\n        onBottom,\r\n        onLeft,\r\n        onRight,\r\n        classes: [\r\n          `id-${id}`,\r\n          `day-${day}`,\r\n          `day-from-end-${dayFromEnd}`,\r\n          `weekday-${weekday}`,\r\n          `weekday-position-${weekdayPosition}`,\r\n          `weekday-ordinal-${weekdayOrdinal}`,\r\n          `weekday-ordinal-from-end-${weekdayOrdinalFromEnd}`,\r\n          `week-${week}`,\r\n          `week-from-end-${weekFromEnd}`,\r\n          {\r\n            'is-today': isToday,\r\n            'is-first-day': isFirstDay,\r\n            'is-last-day': isLastDay,\r\n            'in-month': thisMonth,\r\n            'in-prev-month': prevMonth,\r\n            'in-next-month': nextMonth,\r\n            'on-top': onTop,\r\n            'on-bottom': onBottom,\r\n            'on-left': onLeft,\r\n            'on-right': onRight,\r\n          },\r\n        ],\r\n      });\r\n      // See if we've hit the last day of the month\r\n      if (thisMonth && isLastDay) {\r\n        thisMonth = false;\r\n        nextMonth = true;\r\n        // Reset counters to next month's data\r\n        day = 1;\r\n        dayFromEnd = numDays;\r\n        weekdayOrdinal = 1;\r\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\r\n        week = 1;\r\n        weekFromEnd = nextMonthComps.numWeeks;\r\n        month = nextMonthComps.month;\r\n        year = nextMonthComps.year;\r\n        // Still in the middle of the month (hasn't ended yet)\r\n      } else {\r\n        day++;\r\n        dayFromEnd--;\r\n        weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\r\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\r\n      }\r\n    }\r\n    // Append week days\r\n    week++;\r\n    weekFromEnd--;\r\n  }\r\n  return days;\r\n}\r\n\r\nfunction getWeeks(\r\n  days: CalendarDay[],\r\n  showWeeknumbers: boolean,\r\n  showIsoWeeknumbers: boolean,\r\n  locale: Locale,\r\n): CalendarWeek[] {\r\n  const result = days.reduce((result: CalendarWeek[], day: CalendarDay, i) => {\r\n    const weekIndex = Math.floor(i / 7);\r\n    let week = result[weekIndex];\r\n    if (!week) {\r\n      week = {\r\n        id: `week-${weekIndex + 1}`,\r\n        title: '',\r\n        week: day.week,\r\n        weekPosition: day.weekPosition,\r\n        weeknumber: day.weeknumber,\r\n        isoWeeknumber: day.isoWeeknumber,\r\n        weeknumberDisplay: showWeeknumbers\r\n          ? day.weeknumber\r\n          : showIsoWeeknumbers\r\n          ? day.isoWeeknumber\r\n          : undefined,\r\n        days: [],\r\n      };\r\n      result[weekIndex] = week;\r\n    }\r\n    week.days.push(day);\r\n    return result;\r\n  }, Array(days.length / daysInWeek));\r\n  result.forEach(week => {\r\n    const fromDay = week.days[0];\r\n    const toDay = week.days[week.days.length - 1];\r\n    if (fromDay.month === toDay.month) {\r\n      week.title = `${locale.formatDate(fromDay.date, 'MMMM YYYY')}`;\r\n    } else if (fromDay.year === toDay.year) {\r\n      week.title = `${locale.formatDate(\r\n        fromDay.date,\r\n        'MMM',\r\n      )} - ${locale.formatDate(toDay.date, 'MMM YYYY')}`;\r\n    } else {\r\n      week.title = `${locale.formatDate(\r\n        fromDay.date,\r\n        'MMM YYYY',\r\n      )} - ${locale.formatDate(toDay.date, 'MMM YYYY')}`;\r\n    }\r\n  });\r\n  return result;\r\n}\r\n\r\nfunction getWeekdays(week: CalendarWeek, locale: Locale): CalendarWeekday[] {\r\n  return week.days.map(day => ({\r\n    label: locale.formatDate(day.date, locale.masks.weekdays),\r\n    weekday: day.weekday,\r\n  }));\r\n}\r\n\r\nexport function getPageId(month: number, year: number) {\r\n  return `${year}.${pad(month, 2)}`;\r\n}\r\n\r\nexport function getPageAddressForDate(\r\n  date: DateSource,\r\n  view: PageView,\r\n  locale: Locale,\r\n) {\r\n  return pick(\r\n    locale.getDateParts(locale.toDate(date)),\r\n    viewAddressKeys[view],\r\n  ) as PageAddress;\r\n}\r\n\r\nexport function addPages(\r\n  { day, week, month, year }: PageAddress,\r\n  count: number,\r\n  view: PageView,\r\n  locale: Locale,\r\n): PageAddress {\r\n  if (view === 'daily' && day) {\r\n    const date = new Date(year, month - 1, day);\r\n    const newDate = addDays(date, count);\r\n    return {\r\n      day: newDate.getDate(),\r\n      month: newDate.getMonth() + 1,\r\n      year: newDate.getFullYear(),\r\n    };\r\n  } else if (view === 'weekly' && week) {\r\n    const comps = locale.getMonthParts(month, year);\r\n    const date = comps.firstDayOfMonth;\r\n    const newDate = addDays(date, (week - 1 + count) * 7);\r\n    const parts = locale.getDateParts(newDate);\r\n    return {\r\n      week: parts.week,\r\n      month: parts.month,\r\n      year: parts.year,\r\n    };\r\n  } else {\r\n    const date = new Date(year, month - 1, 1);\r\n    const newDate = addMonths(date, count);\r\n    return {\r\n      month: newDate.getMonth() + 1,\r\n      year: newDate.getFullYear(),\r\n    };\r\n  }\r\n}\r\n\r\nexport function pageIsValid(page: PageAddress | null | undefined) {\r\n  return page != null && page.month != null && page.year != null;\r\n}\r\n\r\nexport function pageIsBeforePage(\r\n  page: PageAddress | null | undefined,\r\n  comparePage: PageAddress | null | undefined,\r\n) {\r\n  if (!pageIsValid(page) || !pageIsValid(comparePage)) return false;\r\n  page = page as PageAddress;\r\n  comparePage = comparePage as PageAddress;\r\n  if (page.year !== comparePage.year) return page.year < comparePage.year;\r\n  if (page.month && comparePage.month && page.month !== comparePage.month)\r\n    return page.month < comparePage.month;\r\n  if (page.week && comparePage.week && page.week !== comparePage.week) {\r\n    return page.week < comparePage.week;\r\n  }\r\n  if (page.day && comparePage.day && page.day !== comparePage.day) {\r\n    return page.day < comparePage.day;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport function pageIsAfterPage(\r\n  page: PageAddress | null | undefined,\r\n  comparePage: PageAddress | null | undefined,\r\n) {\r\n  if (!pageIsValid(page) || !pageIsValid(comparePage)) return false;\r\n  page = page as PageAddress;\r\n  comparePage = comparePage as PageAddress;\r\n  if (page.year !== comparePage.year) {\r\n    return page.year > comparePage.year;\r\n  }\r\n  if (page.month && comparePage.month && page.month !== comparePage.month) {\r\n    return page.month > comparePage.month;\r\n  }\r\n  if (page.week && comparePage.week && page.week !== comparePage.week) {\r\n    return page.week > comparePage.week;\r\n  }\r\n  if (page.day && comparePage.day && page.day !== comparePage.day) {\r\n    return page.day > comparePage.day;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport function pageIsBetweenPages(\r\n  page: PageAddress | null | undefined,\r\n  fromPage: PageAddress | null | undefined,\r\n  toPage: PageAddress | null | undefined,\r\n) {\r\n  return (\r\n    (page || false) &&\r\n    !pageIsBeforePage(page, fromPage) &&\r\n    !pageIsAfterPage(page, toPage)\r\n  );\r\n}\r\n\r\nexport function pageIsEqualToPage(\r\n  aPage: PageAddress | null | undefined,\r\n  bPage: PageAddress | null | undefined,\r\n) {\r\n  if (!aPage && bPage) return false;\r\n  if (aPage && !bPage) return false;\r\n  if (!aPage && !bPage) return true;\r\n  aPage = aPage as PageAddress;\r\n  bPage = bPage as PageAddress;\r\n  return (\r\n    aPage.year === bPage.year &&\r\n    aPage.month === bPage.month &&\r\n    aPage.week === bPage.week &&\r\n    aPage.day === bPage.day\r\n  );\r\n}\r\n\r\nexport function pageRangeToArray(\r\n  from: PageAddress,\r\n  to: PageAddress,\r\n  view: PageView,\r\n  locale: Locale,\r\n) {\r\n  if (!pageIsValid(from) || !pageIsValid(to)) return [];\r\n  const result = [];\r\n  while (!pageIsAfterPage(from, to)) {\r\n    result.push(from);\r\n    from = addPages(from, 1, view, locale);\r\n  }\r\n  return result;\r\n}\r\n\r\nexport function getPageKey(config: PageConfig) {\r\n  const { day, week, month, year } = config;\r\n  let id = `${year}-${pad(month, 2)}`;\r\n  if (week) id = `${id}-w${week}`;\r\n  if (day) id = `${id}-${pad(day, 2)}`;\r\n  return id;\r\n}\r\n\r\nexport function getCachedPage(config: PageConfig, locale: Locale): CachedPage {\r\n  const { month, year, showWeeknumbers, showIsoWeeknumbers } = config;\r\n  const date = new Date(year, month - 1, 15);\r\n  const monthComps = locale.getMonthParts(month, year);\r\n  const prevMonthComps = locale.getPrevMonthParts(month, year);\r\n  const nextMonthComps = locale.getNextMonthParts(month, year);\r\n  const days = getDays({ monthComps, prevMonthComps, nextMonthComps }, locale);\r\n  const weeks = getWeeks(days, showWeeknumbers, showIsoWeeknumbers, locale);\r\n  const weekdays = getWeekdays(weeks[0], locale);\r\n  return {\r\n    id: getPageKey(config),\r\n    month,\r\n    year,\r\n    monthTitle: locale.formatDate(date, locale.masks.title),\r\n    shortMonthLabel: locale.formatDate(date, 'MMM'),\r\n    monthLabel: locale.formatDate(date, 'MMMM'),\r\n    shortYearLabel: year.toString().substring(2),\r\n    yearLabel: year.toString(),\r\n    monthComps,\r\n    prevMonthComps,\r\n    nextMonthComps,\r\n    days,\r\n    weeks,\r\n    weekdays,\r\n  };\r\n}\r\n\r\nexport function getPage(config: PageConfig, cachedPage: CachedPage) {\r\n  const { day, week, view, trimWeeks } = config;\r\n  const page: Page = {\r\n    ...cachedPage,\r\n    ...config,\r\n    title: '',\r\n    viewDays: [],\r\n    viewWeeks: [],\r\n  };\r\n  switch (view) {\r\n    case 'daily': {\r\n      let dayObj = page.days.find(d => d.inMonth)!;\r\n      if (day) {\r\n        dayObj = page.days.find(d => d.day === day && d.inMonth) || dayObj;\r\n      } else if (week) {\r\n        dayObj = page.days.find(d => d.week === week && d.inMonth)!;\r\n      }\r\n      const weekObj = page.weeks[dayObj.week - 1];\r\n      page.viewWeeks = [weekObj];\r\n      page.viewDays = [dayObj];\r\n      page.week = dayObj.week;\r\n      page.weekTitle = weekObj.title;\r\n      page.day = dayObj.day;\r\n      page.dayTitle = dayObj.ariaLabel;\r\n      page.title = page.dayTitle;\r\n      break;\r\n    }\r\n    case 'weekly': {\r\n      page.week = week || 1;\r\n      const weekObj = page.weeks[page.week - 1];\r\n      page.viewWeeks = [weekObj];\r\n      page.viewDays = weekObj.days;\r\n      page.weekTitle = weekObj.title;\r\n      page.title = page.weekTitle;\r\n      break;\r\n    }\r\n    default: {\r\n      page.title = page.monthTitle;\r\n      page.viewWeeks = page.weeks.slice(\r\n        0,\r\n        trimWeeks ? page.monthComps.numWeeks : undefined,\r\n      );\r\n      page.viewDays = page.days;\r\n      break;\r\n    }\r\n  }\r\n  return page;\r\n}\r\n","export default class Cache<T> {\r\n  keys: string[] = [];\r\n  store: Record<string, T> = {};\r\n\r\n  constructor(\r\n    public size: number,\r\n    public createKey: (...args: any[]) => string,\r\n    public createItem: (...args: any[]) => T,\r\n  ) {}\r\n\r\n  get(...args: any[]) {\r\n    const key = this.createKey(...args);\r\n    return this.store[key];\r\n  }\r\n\r\n  getOrSet(...args: any[]): T {\r\n    const key = this.createKey(...args);\r\n    if (this.store[key]) return this.store[key];\r\n    const item = this.createItem(...args);\r\n    if (this.keys.length >= this.size) {\r\n      const removeKey = this.keys.shift();\r\n      if (removeKey != null) {\r\n        delete this.store[removeKey];\r\n      }\r\n    }\r\n    this.keys.push(key);\r\n    this.store[key] = item;\r\n    return item;\r\n  }\r\n}\r\n","import { isArray, isDate, isObject } from '../helpers';\r\nimport Locale from '../locale';\r\nimport type { CalendarDay } from '../page';\r\nimport { type DateParts, type DayParts, MS_PER_DAY, addDays } from './helpers';\r\nimport { DateRepeat, type DateRepeatConfig } from './repeat';\r\n\r\ntype DateRangeDate = Date | string | number | null;\r\n\r\ninterface DateRangeConfig {\r\n  start: DateRangeDate;\r\n  end: DateRangeDate;\r\n  span: number;\r\n  order: number;\r\n  repeat: Partial<DateRepeatConfig>;\r\n}\r\n\r\nexport type DateRangeSource =\r\n  | DateRange\r\n  | DateRangeDate\r\n  | [DateRangeDate, DateRangeDate]\r\n  | Partial<DateRangeConfig>;\r\n\r\nexport interface SimpleDateRange {\r\n  start: Date;\r\n  end: Date;\r\n}\r\n\r\nexport class DateRange {\r\n  order: number;\r\n  locale: Locale;\r\n  start: DateParts | null = null;\r\n  end: DateParts | null = null;\r\n  repeat: DateRepeat | null = null;\r\n\r\n  static fromMany(ranges: DateRangeSource | DateRangeSource[], locale: Locale) {\r\n    // Assign dates\r\n    return (isArray(ranges) ? ranges : [ranges])\r\n      .filter(d => d)\r\n      .map(d => DateRange.from(d, locale));\r\n  }\r\n\r\n  static from(source: DateRangeSource, locale: Locale) {\r\n    if (source instanceof DateRange) return source;\r\n    const config: Partial<DateRangeConfig> = {\r\n      start: null,\r\n      end: null,\r\n    };\r\n    if (source != null) {\r\n      if (isArray(source)) {\r\n        config.start = source[0] ?? null;\r\n        config.end = source[1] ?? null;\r\n      } else if (isObject(source)) {\r\n        Object.assign(config, source);\r\n      } else {\r\n        config.start = source;\r\n        config.end = source;\r\n      }\r\n    }\r\n    if (config.start != null) config.start = new Date(config.start);\r\n    if (config.end != null) config.end = new Date(config.end);\r\n    return new DateRange(config, locale);\r\n  }\r\n\r\n  private constructor(config: Partial<DateRangeConfig>, locale = new Locale()) {\r\n    this.locale = locale;\r\n    const { start, end, span, order, repeat } = config;\r\n\r\n    if (isDate(start)) {\r\n      this.start = locale.getDateParts(start);\r\n    }\r\n\r\n    if (isDate(end)) {\r\n      this.end = locale.getDateParts(end);\r\n    } else if (this.start != null && span) {\r\n      this.end = locale.getDateParts(addDays(this.start.date, span - 1));\r\n    }\r\n\r\n    this.order = order ?? 0;\r\n\r\n    if (repeat) {\r\n      this.repeat = new DateRepeat(\r\n        {\r\n          from: this.start?.date,\r\n          ...repeat,\r\n        },\r\n        {\r\n          locale: this.locale,\r\n        },\r\n      );\r\n    }\r\n  }\r\n\r\n  get opts() {\r\n    const { order, locale } = this;\r\n    return { order, locale };\r\n  }\r\n\r\n  get hasRepeat() {\r\n    return !!this.repeat;\r\n  }\r\n\r\n  get isSingleDay() {\r\n    const { start, end } = this;\r\n    return (\r\n      start &&\r\n      end &&\r\n      start.year === end.year &&\r\n      start.month === end.month &&\r\n      start.day === end.day\r\n    );\r\n  }\r\n\r\n  get isMultiDay() {\r\n    return !this.isSingleDay;\r\n  }\r\n\r\n  get daySpan() {\r\n    if (this.start == null || this.end == null) {\r\n      if (this.hasRepeat) return 1;\r\n      return Infinity;\r\n    }\r\n    return this.end.dayIndex - this.start.dayIndex;\r\n  }\r\n\r\n  startsOnDay(dayParts: DayParts) {\r\n    return (\r\n      this.start?.dayIndex === dayParts.dayIndex ||\r\n      !!this.repeat?.passes(dayParts)\r\n    );\r\n  }\r\n\r\n  intersectsDay(dayIndex: number) {\r\n    return this.intersectsDayRange(dayIndex, dayIndex);\r\n  }\r\n\r\n  intersectsRange(range: DateRange) {\r\n    return this.intersectsDayRange(\r\n      range.start?.dayIndex ?? -Infinity,\r\n      range.end?.dayIndex ?? Infinity,\r\n    );\r\n  }\r\n\r\n  intersectsDayRange(startDayIndex: number, endDayIndex: number) {\r\n    if (this.start && this.start.dayIndex > endDayIndex) return false;\r\n    if (this.end && this.end.dayIndex < startDayIndex) return false;\r\n    return true;\r\n  }\r\n}\r\n\r\ninterface DataRange {\r\n  startDay: number;\r\n  startTime: number;\r\n  endDay: number;\r\n  endTime: number;\r\n}\r\n\r\nexport interface RangeData {\r\n  key: string | number;\r\n  order?: number;\r\n}\r\n\r\ninterface DataRanges {\r\n  ranges: DataRange[];\r\n  data: RangeData;\r\n}\r\n\r\nexport interface DateRangeCell<T extends RangeData> extends DataRange {\r\n  data: T;\r\n  onStart: boolean;\r\n  onEnd: boolean;\r\n  startTime: number;\r\n  startDate: Date;\r\n  endTime: number;\r\n  endDate: Date;\r\n  allDay: boolean;\r\n  order: number;\r\n}\r\n\r\nexport class DateRangeContext {\r\n  private records: Record<string, DataRanges> = {};\r\n\r\n  render(data: RangeData, range: DateRange, days: DayParts[]) {\r\n    let result = null;\r\n    const startDayIndex = days[0].dayIndex;\r\n    const endDayIndex = days[days.length - 1].dayIndex;\r\n    if (range.hasRepeat) {\r\n      days.forEach(day => {\r\n        if (range.startsOnDay(day)) {\r\n          const span = range.daySpan < Infinity ? range.daySpan : 1;\r\n          result = {\r\n            startDay: day.dayIndex,\r\n            startTime: range.start?.time ?? 0,\r\n            endDay: day.dayIndex + span - 1,\r\n            endTime: range.end?.time ?? MS_PER_DAY,\r\n          };\r\n          this.getRangeRecords(data).push(result);\r\n        }\r\n      });\r\n    } else if (range.intersectsDayRange(startDayIndex, endDayIndex)) {\r\n      result = {\r\n        startDay: range.start?.dayIndex ?? -Infinity,\r\n        startTime: range.start?.time ?? -Infinity,\r\n        endDay: range.end?.dayIndex ?? Infinity,\r\n        endTime: range.end?.time ?? Infinity,\r\n      };\r\n      this.getRangeRecords(data).push(result);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private getRangeRecords(data: RangeData) {\r\n    let record = this.records[data.key];\r\n    if (!record) {\r\n      record = {\r\n        ranges: [],\r\n        data,\r\n      };\r\n      this.records[data.key] = record;\r\n    }\r\n    return record.ranges;\r\n  }\r\n\r\n  getCell(key: string | number, day: CalendarDay) {\r\n    const cells = this.getCells(day);\r\n    const result = cells.find(cell => cell.data.key === key);\r\n    return result;\r\n  }\r\n\r\n  cellExists(key: string | number, dayIndex: number) {\r\n    const records = this.records[key];\r\n    if (records == null) return false;\r\n    return records.ranges.some(\r\n      r => r.startDay <= dayIndex && r.endDay >= dayIndex,\r\n    );\r\n  }\r\n\r\n  getCells(day: CalendarDay) {\r\n    const records = Object.values(this.records);\r\n    const result: DateRangeCell<any>[] = [];\r\n    const { dayIndex } = day;\r\n    records.forEach(({ data, ranges }) => {\r\n      ranges\r\n        .filter(r => r.startDay <= dayIndex && r.endDay >= dayIndex)\r\n        .forEach(range => {\r\n          const onStart = dayIndex === range.startDay;\r\n          const onEnd = dayIndex === range.endDay;\r\n          const startTime = onStart ? range.startTime : 0;\r\n          const startDate = new Date(day.startDate.getTime() + startTime);\r\n          const endTime = onEnd ? range.endTime : MS_PER_DAY;\r\n          const endDate = new Date(day.endDate.getTime() + endTime);\r\n          const allDay = startTime === 0 && endTime === MS_PER_DAY;\r\n          const order = data.order || 0;\r\n          result.push({\r\n            ...range,\r\n            data,\r\n            onStart,\r\n            onEnd,\r\n            startTime,\r\n            startDate,\r\n            endTime,\r\n            endDate,\r\n            allDay,\r\n            order,\r\n          });\r\n        });\r\n    });\r\n    result.sort((a, b) => a.order - b.order);\r\n    return result;\r\n  }\r\n}\r\n","interface LocaleConfig {\r\n  dow: number;\r\n  L: string;\r\n}\r\n\r\ninterface LocaleSetting {\r\n  id: string;\r\n  firstDayOfWeek: number;\r\n  masks: {\r\n    L: string;\r\n  };\r\n}\r\n\r\nconst locales: Record<string, LocaleConfig> = {\r\n  // Arabic\r\n  ar: { dow: 7, L: 'D/\\u200FM/\\u200FYYYY' },\r\n  // Bulgarian\r\n  bg: { dow: 2, L: 'D.MM.YYYY' },\r\n  // Catalan\r\n  ca: { dow: 2, L: 'DD/MM/YYYY' },\r\n  // Chinese (China)\r\n  'zh-CN': { dow: 2, L: 'YYYY/MM/DD' },\r\n  // Chinese (Taiwan)\r\n  'zh-TW': { dow: 1, L: 'YYYY/MM/DD' },\r\n  // Croatian\r\n  hr: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Czech\r\n  cs: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Danish\r\n  da: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Dutch\r\n  nl: { dow: 2, L: 'DD-MM-YYYY' },\r\n  // English (US)\r\n  'en-US': { dow: 1, L: 'MM/DD/YYYY' },\r\n  // English (Australia)\r\n  'en-AU': { dow: 2, L: 'DD/MM/YYYY' },\r\n  // English (Canada)\r\n  'en-CA': { dow: 1, L: 'YYYY-MM-DD' },\r\n  // English (Great Britain)\r\n  'en-GB': { dow: 2, L: 'DD/MM/YYYY' },\r\n  // English (Ireland)\r\n  'en-IE': { dow: 2, L: 'DD-MM-YYYY' },\r\n  // English (New Zealand)\r\n  'en-NZ': { dow: 2, L: 'DD/MM/YYYY' },\r\n  // English (South Africa)\r\n  'en-ZA': { dow: 1, L: 'YYYY/MM/DD' },\r\n  // Esperanto\r\n  eo: { dow: 2, L: 'YYYY-MM-DD' },\r\n  // Estonian\r\n  et: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Finnish\r\n  fi: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // French\r\n  fr: { dow: 2, L: 'DD/MM/YYYY' },\r\n  // French (Canada)\r\n  'fr-CA': { dow: 1, L: 'YYYY-MM-DD' },\r\n  // French (Switzerland)\r\n  'fr-CH': { dow: 2, L: 'DD.MM.YYYY' },\r\n  // German\r\n  de: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Hebrew\r\n  he: { dow: 1, L: 'DD.MM.YYYY' },\r\n  // Indonesian\r\n  id: { dow: 2, L: 'DD/MM/YYYY' },\r\n  // Italian\r\n  it: { dow: 2, L: 'DD/MM/YYYY' },\r\n  // Japanese\r\n  ja: { dow: 1, L: 'YYYY年M月D日' },\r\n  // Korean\r\n  ko: { dow: 1, L: 'YYYY.MM.DD' },\r\n  // Latvian\r\n  lv: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Lithuanian\r\n  lt: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Macedonian\r\n  mk: { dow: 2, L: 'D.MM.YYYY' },\r\n  // Norwegian\r\n  nb: { dow: 2, L: 'D. MMMM YYYY' },\r\n  nn: { dow: 2, L: 'D. MMMM YYYY' },\r\n  // Polish\r\n  pl: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Portuguese\r\n  pt: { dow: 2, L: 'DD/MM/YYYY' },\r\n  // Romanian\r\n  ro: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Russian\r\n  ru: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Slovak\r\n  sk: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Spanish (Spain)\r\n  'es-ES': { dow: 2, L: 'DD/MM/YYYY' },\r\n  // Spanish (Mexico)\r\n  'es-MX': { dow: 2, L: 'DD/MM/YYYY' },\r\n  // Swedish\r\n  sv: { dow: 2, L: 'YYYY-MM-DD' },\r\n  // Thai\r\n  th: { dow: 1, L: 'DD/MM/YYYY' },\r\n  // Turkish\r\n  tr: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Ukrainian\r\n  uk: { dow: 2, L: 'DD.MM.YYYY' },\r\n  // Vietnam\r\n  vi: { dow: 2, L: 'DD/MM/YYYY' },\r\n};\r\nlocales.en = locales['en-US'];\r\nlocales.es = locales['es-ES'];\r\nlocales.no = locales.nb;\r\nlocales.zh = locales['zh-CN'];\r\n\r\n// Remap from abbr. to intuitive property names\r\nconst localeSettings = Object.entries(locales).reduce(\r\n  (res, [id, { dow, L }]) => {\r\n    res[id] = {\r\n      id,\r\n      firstDayOfWeek: dow,\r\n      masks: { L },\r\n    };\r\n    return res;\r\n  },\r\n  {} as Record<string, LocaleSetting>,\r\n);\r\n\r\nexport default localeSettings;\r\n","import { type App, computed, reactive } from 'vue';\r\nimport type { DarkModeConfig } from 'vue-screen-utils';\r\nimport { defaultsDeep, get, has, mapValues } from '../helpers';\r\nimport locales from './locales';\r\nimport masks from './masks.json';\r\nimport touch from './touch.json';\r\n\r\ndeclare const window: any;\r\n\r\ninterface DatePickerPopoverDefaults {\r\n  visibility?: string;\r\n  placement?: string;\r\n  isInteractive?: boolean;\r\n}\r\n\r\ninterface DatePickerDefaults {\r\n  updateOnInput?: boolean;\r\n  inputDebounce?: number;\r\n  popover?: DatePickerPopoverDefaults;\r\n}\r\n\r\nexport interface Defaults {\r\n  componentPrefix?: string;\r\n  color?: string;\r\n  isDark?: DarkModeConfig;\r\n  navVisibility?: string;\r\n  titlePosition?: string;\r\n  transition?: string;\r\n  touch?: object;\r\n  masks?: object;\r\n  locales?: any;\r\n  datePicker?: DatePickerDefaults;\r\n}\r\n\r\nconst defaultConfig: Defaults = {\r\n  componentPrefix: 'V',\r\n  color: 'blue',\r\n  isDark: false,\r\n  navVisibility: 'click',\r\n  titlePosition: 'center',\r\n  transition: 'slide-h',\r\n  touch,\r\n  masks,\r\n  locales,\r\n  datePicker: {\r\n    updateOnInput: true,\r\n    inputDebounce: 1000,\r\n    popover: {\r\n      visibility: 'hover-focus',\r\n      placement: 'bottom-start',\r\n      isInteractive: true,\r\n    },\r\n  },\r\n};\r\n\r\nconst state = reactive(defaultConfig);\r\n\r\nconst defaultLocales = computed(() => {\r\n  return mapValues(state.locales, (l: any) => {\r\n    l.masks = defaultsDeep(l.masks, state.masks);\r\n    return l;\r\n  });\r\n});\r\n\r\nexport { defaultLocales };\r\n\r\nexport const getDefault = (path: string) => {\r\n  if (typeof window !== 'undefined' && has(window.__vcalendar__, path)) {\r\n    return get(window.__vcalendar__, path);\r\n  }\r\n  return get(state, path);\r\n};\r\n\r\nexport const setupDefaults = (app: App, userDefaults: Defaults | undefined) => {\r\n  app.config.globalProperties.$VCalendar = state;\r\n  return Object.assign(state, defaultsDeep(userDefaults, state));\r\n};\r\n","import {\r\n  type PageConfig,\r\n  type CachedPage,\r\n  getPageKey,\r\n  getCachedPage,\r\n  getPage,\r\n} from './page';\r\nimport {\r\n  type DateSource,\r\n  type DateOptions,\r\n  type DayOfWeek,\r\n  type MonthParts,\r\n  type MonthInYear,\r\n  type SimpleDateParts,\r\n  type TimeNames,\r\n  DatePatchKeys,\r\n  applyRulesForDateParts,\r\n  daysInWeek,\r\n  formatDate,\r\n  parseDate,\r\n  getDateParts,\r\n  getDateFromParts,\r\n  getDayNames,\r\n  getMonthNames,\r\n  getMonthParts,\r\n  getMonthPartsKey,\r\n  getHourDates,\r\n  getRelativeTimeNames,\r\n  isDateParts,\r\n} from './date/helpers';\r\nimport Cache from './cache';\r\nimport { type DateRangeSource, DateRange } from './date/range';\r\nimport { defaultLocales } from './defaults';\r\nimport {\r\n  isString,\r\n  isNumber,\r\n  isDate,\r\n  isObject,\r\n  has,\r\n  pick,\r\n  clamp,\r\n  defaultsDeep,\r\n} from './helpers';\r\n\r\nexport interface LocaleConfig {\r\n  id: string;\r\n  firstDayOfWeek: number;\r\n  masks: any;\r\n  monthCacheSize: number;\r\n  pageCacheSize: number;\r\n}\r\n\r\nconst DEFAULT_MONTH_CACHE_SIZE = 12;\r\nconst DEFAULT_PAGE_CACHE_SIZE = 5;\r\n\r\nexport function resolveConfig(\r\n  config: string | Partial<LocaleConfig> | undefined,\r\n  locales: any,\r\n) {\r\n  // Get the detected locale string\r\n  const detLocale = new Intl.DateTimeFormat().resolvedOptions().locale;\r\n  // Resolve the locale id\r\n  let id;\r\n  if (isString(config)) {\r\n    id = config;\r\n  } else if (has(config, 'id')) {\r\n    id = config!.id;\r\n  }\r\n  id = (id || detLocale).toLowerCase();\r\n  const localeKeys = Object.keys(locales);\r\n  const validKey = (k: string) => localeKeys.find(lk => lk.toLowerCase() === k);\r\n  id = validKey(id) || validKey(id.substring(0, 2)) || detLocale;\r\n  // Add fallback and spread default locale to prevent repetitive update loops\r\n  const defLocale: LocaleConfig = {\r\n    ...locales['en-IE'],\r\n    ...locales[id],\r\n    id,\r\n    monthCacheSize: DEFAULT_MONTH_CACHE_SIZE,\r\n    pageCacheSize: DEFAULT_PAGE_CACHE_SIZE,\r\n  };\r\n  // Assign or merge defaults with provided config\r\n  const result: LocaleConfig = isObject(config)\r\n    ? defaultsDeep(config, defLocale)\r\n    : defLocale;\r\n  // Return resolved config\r\n  return result;\r\n}\r\n\r\nexport default class Locale {\r\n  id: any;\r\n  daysInWeek: number;\r\n  firstDayOfWeek: DayOfWeek;\r\n  masks: any;\r\n  timezone: string | undefined;\r\n  hourLabels: string[];\r\n  dayNames: string[];\r\n  dayNamesShort: string[];\r\n  dayNamesShorter: string[];\r\n  dayNamesNarrow: string[];\r\n  monthNames: string[];\r\n  monthNamesShort: string[];\r\n  relativeTimeNames: TimeNames;\r\n  amPm: [string, string] = ['am', 'pm'];\r\n  monthCache: Cache<MonthParts>;\r\n  pageCache: Cache<CachedPage>;\r\n\r\n  constructor(\r\n    config: Partial<LocaleConfig> | string | undefined = undefined,\r\n    timezone?: string,\r\n  ) {\r\n    const { id, firstDayOfWeek, masks, monthCacheSize, pageCacheSize } =\r\n      resolveConfig(config, defaultLocales.value);\r\n    this.monthCache = new Cache(\r\n      monthCacheSize,\r\n      getMonthPartsKey,\r\n      getMonthParts,\r\n    );\r\n    this.pageCache = new Cache(pageCacheSize, getPageKey, getCachedPage);\r\n    this.id = id;\r\n    this.daysInWeek = daysInWeek;\r\n    this.firstDayOfWeek = clamp(firstDayOfWeek, 1, daysInWeek) as DayOfWeek;\r\n    this.masks = masks;\r\n    this.timezone = timezone || undefined;\r\n    this.hourLabels = this.getHourLabels();\r\n    this.dayNames = getDayNames('long', this.id);\r\n    this.dayNamesShort = getDayNames('short', this.id);\r\n    this.dayNamesShorter = this.dayNamesShort.map(s => s.substring(0, 2));\r\n    this.dayNamesNarrow = getDayNames('narrow', this.id);\r\n    this.monthNames = getMonthNames('long', this.id);\r\n    this.monthNamesShort = getMonthNames('short', this.id);\r\n    this.relativeTimeNames = getRelativeTimeNames(this.id);\r\n  }\r\n\r\n  formatDate(date: Date, masks: string | string[]) {\r\n    return formatDate(date, masks, this);\r\n  }\r\n\r\n  parseDate(dateString: string, mask: string | string[]) {\r\n    return parseDate(dateString, mask, this);\r\n  }\r\n\r\n  toDate(\r\n    d: DateSource | Partial<SimpleDateParts>,\r\n    opts: Partial<DateOptions> = {},\r\n  ): Date {\r\n    const nullDate = new Date(NaN);\r\n    let result = nullDate;\r\n    const { fillDate, mask, patch, rules } = opts;\r\n    if (isNumber(d)) {\r\n      opts.type = 'number';\r\n      result = new Date(+d);\r\n    } else if (isString(d)) {\r\n      opts.type = 'string';\r\n      result = d ? parseDate(d, mask || 'iso', this) : nullDate;\r\n    } else if (isDate(d)) {\r\n      opts.type = 'date';\r\n      result = new Date(d.getTime());\r\n    } else if (isDateParts(d)) {\r\n      opts.type = 'object';\r\n      result = this.getDateFromParts(d);\r\n    }\r\n    // Patch parts or apply rules if needed\r\n    if (result && (patch || rules)) {\r\n      let parts = this.getDateParts(result);\r\n      // Patch date parts\r\n      if (patch && fillDate != null) {\r\n        const fillParts = this.getDateParts(this.toDate(fillDate));\r\n        parts = this.getDateParts(\r\n          this.toDate({ ...fillParts, ...pick(parts, DatePatchKeys[patch]) }),\r\n        );\r\n      }\r\n      // Apply date part rules\r\n      if (rules) {\r\n        parts = applyRulesForDateParts(parts, rules);\r\n      }\r\n      result = this.getDateFromParts(parts);\r\n    }\r\n    return result || nullDate;\r\n  }\r\n\r\n  toDateOrNull(\r\n    d: DateSource | Partial<SimpleDateParts>,\r\n    opts: Partial<DateOptions> = {},\r\n  ): Date | null {\r\n    const dte = this.toDate(d, opts);\r\n    return isNaN(dte.getTime()) ? null : dte;\r\n  }\r\n\r\n  fromDate(date: Date | null, { type, mask }: Partial<DateOptions> = {}) {\r\n    switch (type) {\r\n      case 'number':\r\n        return date ? date.getTime() : NaN;\r\n      case 'string':\r\n        return date ? this.formatDate(date, mask || 'iso') : '';\r\n      case 'object':\r\n        return date ? this.getDateParts(date) : null;\r\n      default:\r\n        return date ? new Date(date) : null;\r\n    }\r\n  }\r\n\r\n  range(source: DateRangeSource) {\r\n    return DateRange.from(source, this);\r\n  }\r\n\r\n  ranges(ranges: DateRangeSource | DateRangeSource[]) {\r\n    return DateRange.fromMany(ranges, this);\r\n  }\r\n\r\n  getDateParts(date: Date) {\r\n    return getDateParts(date, this);\r\n  }\r\n\r\n  getDateFromParts(parts: Partial<SimpleDateParts>) {\r\n    return getDateFromParts(parts, this.timezone);\r\n  }\r\n\r\n  getDateFromParams(\r\n    year: number,\r\n    month: number,\r\n    day: number,\r\n    hours: number,\r\n    minutes: number,\r\n    seconds: number,\r\n    milliseconds: number,\r\n  ) {\r\n    return this.getDateFromParts({\r\n      year,\r\n      month,\r\n      day,\r\n      hours,\r\n      minutes,\r\n      seconds,\r\n      milliseconds,\r\n    });\r\n  }\r\n\r\n  getPage(config: PageConfig) {\r\n    const cachedPage = this.pageCache.getOrSet(config, this);\r\n    return getPage(config, cachedPage);\r\n  }\r\n\r\n  getMonthParts(month: number, year: number) {\r\n    const { firstDayOfWeek } = this;\r\n    return this.monthCache.getOrSet(month, year, firstDayOfWeek);\r\n  }\r\n\r\n  getThisMonthParts() {\r\n    const date = new Date();\r\n    return this.getMonthParts(\r\n      <MonthInYear>(date.getMonth() + 1),\r\n      date.getFullYear(),\r\n    );\r\n  }\r\n\r\n  getPrevMonthParts(month: number, year: number) {\r\n    if (month === 1) return this.getMonthParts(12, year - 1);\r\n    return this.getMonthParts(month - 1, year);\r\n  }\r\n\r\n  getNextMonthParts(month: number, year: number) {\r\n    if (month === 12) return this.getMonthParts(1, year + 1);\r\n    return this.getMonthParts(month + 1, year);\r\n  }\r\n\r\n  getHourLabels() {\r\n    return getHourDates().map(d => {\r\n      return this.formatDate(d, this.masks.hours);\r\n    });\r\n  }\r\n\r\n  getDayId(date: Date) {\r\n    return this.formatDate(date, 'YYYY-MM-DD');\r\n  }\r\n}\r\n","import { isArray, isFunction, isNumber } from '../helpers';\r\nimport {\r\n  type DayOfWeek,\r\n  type DayParts,\r\n  type OrdinalWeekInMonth,\r\n  diffInDays,\r\n  diffInMonths,\r\n  diffInWeeks,\r\n  diffInYears,\r\n  isDayInMonth,\r\n  isDayOfWeek,\r\n  isMonthInYear,\r\n  isOrdinalWeekInMonth,\r\n  isWeekInMonth,\r\n} from './helpers';\r\n\r\nexport type SingleOrArray<T> = T | T[];\r\n\r\nexport enum GroupRuleType {\r\n  Any = 'any',\r\n  All = 'all',\r\n}\r\n\r\nexport enum IntervalRuleType {\r\n  Days = 'days',\r\n  Weeks = 'weeks',\r\n  Months = 'months',\r\n  Years = 'years',\r\n}\r\n\r\nexport enum ComponentRuleType {\r\n  Days = 'days',\r\n  Weekdays = 'weekdays',\r\n  Weeks = 'weeks',\r\n  Months = 'months',\r\n  Years = 'years',\r\n}\r\n\r\nexport enum OrdinalComponentRuleType {\r\n  OrdinalWeekdays = 'ordinalWeekdays',\r\n}\r\n\r\nexport enum FunctionRuleType {\r\n  Function = 'function',\r\n}\r\n\r\nexport type RuleType =\r\n  | GroupRuleType\r\n  | IntervalRuleType\r\n  | ComponentRuleType\r\n  | OrdinalComponentRuleType\r\n  | FunctionRuleType;\r\n\r\nexport type OrdinalArrayConfig = SingleOrArray<\r\n  [OrdinalWeekInMonth, ...DayOfWeek[]]\r\n>;\r\n\r\nexport interface Rule<T> {\r\n  type: T;\r\n  passes(dayParts: DayParts): boolean;\r\n}\r\n\r\nexport class IntervalRule implements Rule<IntervalRuleType> {\r\n  private validated = true;\r\n\r\n  constructor(\r\n    public type: IntervalRuleType,\r\n    public interval: number,\r\n    public from: DayParts,\r\n  ) {\r\n    // Start date needed for interval rules\r\n    if (!this.from) {\r\n      console.error(\r\n        `A valid \"from\" date is required for date interval rule. This rule will be skipped.`,\r\n      );\r\n      this.validated = false;\r\n    }\r\n  }\r\n\r\n  passes(dateParts: DayParts) {\r\n    if (!this.validated) return true;\r\n\r\n    const { date } = dateParts;\r\n    switch (this.type) {\r\n      case 'days': {\r\n        return diffInDays(this.from.date, date) % this.interval === 0;\r\n      }\r\n      case 'weeks': {\r\n        return diffInWeeks(this.from.date, date) % this.interval === 0;\r\n      }\r\n      case 'months': {\r\n        return diffInMonths(this.from.date, date) % this.interval === 0;\r\n      }\r\n      case 'years': {\r\n        return diffInYears(this.from.date, date) % this.interval === 0;\r\n      }\r\n      default: {\r\n        return false;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport class ComponentRule implements Rule<ComponentRuleType> {\r\n  components: number[] = [];\r\n\r\n  static create(type: ComponentRuleType, config: unknown) {\r\n    switch (type) {\r\n      case ComponentRuleType.Days:\r\n        return new DaysRule(config);\r\n      case ComponentRuleType.Weekdays:\r\n        return new WeekdaysRule(config);\r\n      case ComponentRuleType.Weeks:\r\n        return new WeeksRule(config);\r\n      case ComponentRuleType.Months:\r\n        return new MonthsRule(config);\r\n      case ComponentRuleType.Years:\r\n        return new YearsRule(config);\r\n    }\r\n  }\r\n\r\n  constructor(\r\n    public type: ComponentRuleType,\r\n    components: unknown,\r\n    public validator: (component: unknown) => component is number,\r\n    public getter: (dayParts: DayParts) => number[],\r\n  ) {\r\n    this.components = this.normalizeComponents(components);\r\n  }\r\n\r\n  normalizeComponents(components: unknown) {\r\n    if (this.validator(components)) return [components];\r\n    if (!isArray(components)) return [];\r\n    const result: number[] = [];\r\n    components.forEach(component => {\r\n      if (!this.validator(component)) {\r\n        console.error(\r\n          `Component value ${component} in invalid for \"${this.type}\" rule. This rule will be skipped.`,\r\n        );\r\n        return;\r\n      }\r\n      result.push(component);\r\n    });\r\n    return result;\r\n  }\r\n\r\n  passes(dayParts: DayParts) {\r\n    const comps = this.getter(dayParts);\r\n    const result = comps.some(comp => this.components.includes(comp));\r\n    return result;\r\n  }\r\n}\r\n\r\nexport class DaysRule extends ComponentRule {\r\n  constructor(components: unknown) {\r\n    super(\r\n      ComponentRuleType.Days,\r\n      components,\r\n      isDayInMonth,\r\n      ({ day, dayFromEnd }) => [day, -dayFromEnd],\r\n    );\r\n  }\r\n}\r\n\r\nexport class WeekdaysRule extends ComponentRule {\r\n  constructor(components: unknown) {\r\n    super(\r\n      ComponentRuleType.Weekdays,\r\n      components,\r\n      isDayOfWeek,\r\n      ({ weekday }) => [weekday],\r\n    );\r\n  }\r\n}\r\n\r\nexport class WeeksRule extends ComponentRule {\r\n  constructor(components: unknown) {\r\n    super(\r\n      ComponentRuleType.Weeks,\r\n      components,\r\n      isWeekInMonth,\r\n      ({ week, weekFromEnd }) => [week, -weekFromEnd],\r\n    );\r\n  }\r\n}\r\n\r\nexport class MonthsRule extends ComponentRule {\r\n  constructor(components: unknown) {\r\n    super(ComponentRuleType.Months, components, isMonthInYear, ({ month }) => [\r\n      month,\r\n    ]);\r\n  }\r\n}\r\n\r\nexport class YearsRule extends ComponentRule {\r\n  constructor(components: unknown) {\r\n    super(ComponentRuleType.Years, components, isNumber, ({ year }) => [year]);\r\n  }\r\n}\r\n\r\nexport class OrdinalComponentRule implements Rule<OrdinalComponentRuleType> {\r\n  components: [OrdinalWeekInMonth, DayOfWeek][];\r\n\r\n  constructor(\r\n    public type: OrdinalComponentRuleType,\r\n    components: OrdinalArrayConfig,\r\n  ) {\r\n    this.components = this.normalizeComponents(components);\r\n  }\r\n\r\n  normalizeArrayConfig(config: OrdinalArrayConfig) {\r\n    const result: [OrdinalWeekInMonth, DayOfWeek][] = [];\r\n    config.forEach((numOrArray, i) => {\r\n      if (isNumber(numOrArray)) {\r\n        if (i === 0) return;\r\n        if (!isOrdinalWeekInMonth(config[0])) {\r\n          console.error(\r\n            `Ordinal range for \"${this.type}\" rule is from -5 to -1 or 1 to 5. This rule will be skipped.`,\r\n          );\r\n          return;\r\n        }\r\n        if (!isDayOfWeek(numOrArray)) {\r\n          console.error(\r\n            `Acceptable range for \"${this.type}\" rule is from 1 to 5. This rule will be skipped`,\r\n          );\r\n          return;\r\n        }\r\n        result.push([config[0], numOrArray]);\r\n      } else if (isArray(numOrArray)) {\r\n        result.push(...this.normalizeArrayConfig(numOrArray));\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  normalizeComponents(config: OrdinalArrayConfig) {\r\n    const result: [OrdinalWeekInMonth, DayOfWeek][] = [];\r\n    config.forEach((numOrArray, i) => {\r\n      if (isNumber(numOrArray)) {\r\n        if (i === 0) return;\r\n        if (!isOrdinalWeekInMonth(config[0])) {\r\n          console.error(\r\n            `Ordinal range for \"${this.type}\" rule is from -5 to -1 or 1 to 5. This rule will be skipped.`,\r\n          );\r\n          return;\r\n        }\r\n        if (!isDayOfWeek(numOrArray)) {\r\n          console.error(\r\n            `Acceptable range for \"${this.type}\" rule is from 1 to 5. This rule will be skipped`,\r\n          );\r\n          return;\r\n        }\r\n        result.push([config[0], numOrArray]);\r\n      } else if (isArray(numOrArray)) {\r\n        result.push(...this.normalizeArrayConfig(numOrArray));\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  passes(dayParts: DayParts) {\r\n    const { weekday, weekdayOrdinal, weekdayOrdinalFromEnd } = dayParts;\r\n    return this.components.some(\r\n      ([ordinalWeek, ordinalWeekday]) =>\r\n        (ordinalWeek === weekdayOrdinal ||\r\n          ordinalWeek === -weekdayOrdinalFromEnd) &&\r\n        weekday === ordinalWeekday,\r\n    );\r\n  }\r\n}\r\n\r\nexport class FunctionRule implements Rule<FunctionRuleType> {\r\n  type = FunctionRuleType.Function;\r\n  private validated = true;\r\n\r\n  constructor(public fn: Function) {\r\n    if (!isFunction(fn)) {\r\n      console.error(\r\n        `The function rule requires a valid function. This rule will be skipped.`,\r\n      );\r\n      this.validated = false;\r\n    }\r\n  }\r\n\r\n  passes(dayParts: DayParts) {\r\n    if (!this.validated) return true;\r\n\r\n    return this.fn(dayParts);\r\n  }\r\n}\r\n","import { isArray, isFunction, isObject, isString } from '../helpers';\r\nimport Locale from '../locale';\r\nimport type {\r\n  DateParts,\r\n  DayInMonth,\r\n  DayOfWeek,\r\n  DayParts,\r\n  MonthInYear,\r\n  WeekInMonth,\r\n} from './helpers';\r\nimport {\r\n  ComponentRule,\r\n  ComponentRuleType,\r\n  FunctionRule,\r\n  GroupRuleType,\r\n  IntervalRule,\r\n  IntervalRuleType,\r\n  OrdinalComponentRule,\r\n  OrdinalComponentRuleType,\r\n  type Rule,\r\n  type RuleType,\r\n  type SingleOrArray,\r\n} from './rules';\r\n\r\nexport type RepeatIntervalShort = 'day' | 'week' | 'month' | 'year';\r\n\r\nexport type RepeatInterval = 'days' | 'weeks' | 'months' | 'years';\r\nexport interface DateRepeatConfig {\r\n  every: RepeatIntervalShort | [number, RepeatInterval];\r\n  from: Date;\r\n  until: Date;\r\n  weekdays: SingleOrArray<DayOfWeek>;\r\n  days: SingleOrArray<DayInMonth>;\r\n  weeks: SingleOrArray<WeekInMonth>;\r\n  months: SingleOrArray<MonthInYear>;\r\n  years: SingleOrArray<number>;\r\n  ordinalWeekdays: SingleOrArray<number[]>;\r\n  on: SingleOrArray<DateRepeatFn | Partial<DateRepeatConfig>>;\r\n}\r\n\r\nexport type DateRepeatFn = (dayParts: DayParts) => boolean;\r\n\r\nexport interface DateRepeatOptions {\r\n  locale: Locale;\r\n}\r\n\r\nexport class DateRepeat implements Rule<GroupRuleType> {\r\n  validated = true;\r\n\r\n  config: Partial<DateRepeatConfig> | DateRepeatFn;\r\n  type = GroupRuleType.Any;\r\n  from: DateParts | undefined;\r\n  until: DateParts | undefined;\r\n  rules: Rule<RuleType>[] = [];\r\n  locale = new Locale();\r\n\r\n  constructor(\r\n    config: Partial<DateRepeatConfig> | DateRepeatFn,\r\n    options: Partial<DateRepeatOptions> = {},\r\n    private parent?: DateRepeat,\r\n  ) {\r\n    if (options.locale) this.locale = options.locale;\r\n\r\n    this.config = config;\r\n    if (isFunction(config)) {\r\n      this.type = GroupRuleType.All;\r\n      this.rules = [new FunctionRule(config)];\r\n    } else if (isArray(config)) {\r\n      this.type = GroupRuleType.Any;\r\n      this.rules = config.map(c => new DateRepeat(c, options, this));\r\n    } else if (isObject(config)) {\r\n      this.type = GroupRuleType.All;\r\n      // Assign bounding dates\r\n      this.from = config.from\r\n        ? this.locale.getDateParts(config.from)\r\n        : parent?.from;\r\n      this.until = config.until\r\n        ? this.locale.getDateParts(config.until)\r\n        : parent?.until;\r\n      this.rules = this.getObjectRules(config);\r\n    } else {\r\n      console.error('Rule group configuration must be an object or an array.');\r\n      this.validated = false;\r\n    }\r\n  }\r\n\r\n  getObjectRules(config: any) {\r\n    const rules: Rule<RuleType>[] = [];\r\n\r\n    // Add interval rule\r\n    if (config.every) {\r\n      if (isString(config.every)) {\r\n        config.every = [1, `${config.every}s`];\r\n      }\r\n      if (isArray(config.every)) {\r\n        const [interval = 1, type = IntervalRuleType.Days] = config.every;\r\n        rules.push(new IntervalRule(type, interval, this.from!));\r\n      }\r\n    }\r\n\r\n    // Add component rules\r\n    Object.values(ComponentRuleType).forEach(type => {\r\n      if (!(type in config)) return;\r\n      rules.push(ComponentRule.create(type, config[type]));\r\n    });\r\n\r\n    // Add ordinal component rules\r\n    Object.values(OrdinalComponentRuleType).forEach(type => {\r\n      if (!(type in config)) return;\r\n      rules.push(new OrdinalComponentRule(type, config[type]));\r\n    });\r\n\r\n    // Add group rules\r\n    if (config.on != null) {\r\n      if (!isArray(config.on)) config.on = [config.on];\r\n      rules.push(\r\n        new DateRepeat(config.on, { locale: this.locale }, this.parent),\r\n      );\r\n    }\r\n\r\n    return rules;\r\n  }\r\n\r\n  passes(dayParts: DayParts) {\r\n    if (!this.validated) return true;\r\n\r\n    if (this.from && dayParts.dayIndex <= this.from.dayIndex) return false;\r\n    if (this.until && dayParts.dayIndex >= this.until.dayIndex) return false;\r\n\r\n    if (this.type === GroupRuleType.Any) {\r\n      return this.rules.some(r => r.passes(dayParts));\r\n    }\r\n    return this.rules.every(r => r.passes(dayParts));\r\n  }\r\n}\r\n","import {\r\n  pad,\r\n  isNumber,\r\n  isString,\r\n  isDate,\r\n  isArray,\r\n  arrayHasItems,\r\n  isFunction,\r\n  isObject,\r\n} from '../helpers';\r\nimport { toDate } from 'date-fns-tz';\r\nimport getWeeksInMonth from 'date-fns/getWeeksInMonth';\r\nimport getWeek from 'date-fns/getWeek';\r\nimport getISOWeek from 'date-fns/getISOWeek';\r\nimport addDays from 'date-fns/addDays';\r\nimport addMonths from 'date-fns/addMonths';\r\nimport addYears from 'date-fns/addYears';\r\nimport { type LocaleConfig, default as Locale } from '../locale';\r\n\r\nexport { addDays, addMonths, addYears };\r\nexport { DateRepeat } from './repeat';\r\n\r\n// #region Types\r\n\r\ntype DayNameLength = 'narrow' | 'short' | 'long';\r\ntype MonthNameLength = 'short' | 'long';\r\n\r\nexport type DayInMonth =\r\n  | 1\r\n  | 2\r\n  | 3\r\n  | 4\r\n  | 5\r\n  | 6\r\n  | 7\r\n  | 8\r\n  | 9\r\n  | 10\r\n  | 11\r\n  | 12\r\n  | 13\r\n  | 14\r\n  | 15\r\n  | 16\r\n  | 17\r\n  | 18\r\n  | 19\r\n  | 20\r\n  | 21\r\n  | 22\r\n  | 23\r\n  | 24\r\n  | 25\r\n  | 26\r\n  | 27\r\n  | 28\r\n  | 29\r\n  | 30\r\n  | 31\r\n  | -1\r\n  | -2\r\n  | -3\r\n  | -4\r\n  | -5\r\n  | -6\r\n  | -7\r\n  | -8\r\n  | -9\r\n  | -10\r\n  | -11\r\n  | -12\r\n  | -13\r\n  | -14\r\n  | -15\r\n  | -16\r\n  | -17\r\n  | -18\r\n  | -19\r\n  | -20\r\n  | -21\r\n  | -22\r\n  | -23\r\n  | -24\r\n  | -25\r\n  | -26\r\n  | -27\r\n  | -28\r\n  | -29\r\n  | -30\r\n  | -31;\r\nexport type DayOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;\r\nexport type WeekInMonth = 1 | 2 | 3 | 4 | 5 | 6;\r\nexport type WeekInMonthFromEnd = -6 | -5 | -4 | -3 | -2 | -1;\r\nexport type OrdinalWeekInMonth = -5 | -4 | -3 | -2 | -1 | 1 | 2 | 3 | 4 | 5;\r\nexport type MonthInYear = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\r\nexport type StartOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;\r\n\r\nexport type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;\r\nexport type DateSource = Date | string | number;\r\nexport type TimeNames = Partial<Record<Intl.RelativeTimeFormatUnit, string>>;\r\n\r\n// #endregion Types\r\n\r\nexport function isDayInMonth(dayInMonth: unknown): dayInMonth is DayInMonth {\r\n  if (!isNumber(dayInMonth)) return false;\r\n  return dayInMonth >= 1 && dayInMonth <= 31;\r\n}\r\n\r\nexport function isDayOfWeek(dayOfWeek: unknown): dayOfWeek is DayOfWeek {\r\n  if (!isNumber(dayOfWeek)) return false;\r\n  return dayOfWeek >= 1 && dayOfWeek <= 7;\r\n}\r\n\r\nexport function isWeekInMonth(\r\n  weekInMonth: unknown,\r\n): weekInMonth is WeekInMonth {\r\n  if (!isNumber(weekInMonth)) return false;\r\n  return (\r\n    (weekInMonth >= -6 && weekInMonth <= -1) ||\r\n    (weekInMonth >= 1 && weekInMonth <= 6)\r\n  );\r\n}\r\n\r\nexport function isMonthInYear(\r\n  monthInYear: unknown,\r\n): monthInYear is MonthInYear {\r\n  if (!isNumber(monthInYear)) return false;\r\n  return monthInYear >= 1 && monthInYear <= 12;\r\n}\r\n\r\nexport function isOrdinalWeekInMonth(\r\n  weekInMonth: unknown,\r\n): weekInMonth is OrdinalWeekInMonth {\r\n  if (!isNumber(weekInMonth)) return false;\r\n  if (weekInMonth < -5 || weekInMonth > 5 || weekInMonth === 0) return false;\r\n  return true;\r\n}\r\n\r\ninterface NumberRuleConfig {\r\n  min?: number;\r\n  max?: number;\r\n  interval?: number;\r\n}\r\n\r\ntype DatePartsRuleFunction = (part: number, parts: TimeParts) => boolean;\r\n\r\ntype DatePartsRule =\r\n  | number\r\n  | Array<number>\r\n  | NumberRuleConfig\r\n  | DatePartsRuleFunction;\r\n\r\nexport interface DatePartsRules {\r\n  hours?: DatePartsRule;\r\n  minutes?: DatePartsRule;\r\n  seconds?: DatePartsRule;\r\n  milliseconds?: DatePartsRule;\r\n}\r\n\r\nexport interface DatePartOption {\r\n  value: number;\r\n  label: string;\r\n  disabled?: boolean;\r\n}\r\n\r\nexport interface FormatParseOptions {\r\n  locale?: Locale | LocaleConfig | string;\r\n  timezone?: string;\r\n}\r\n\r\nexport interface DateOptions {\r\n  type: string;\r\n  fillDate: DateSource;\r\n  mask: string;\r\n  patch: DatePatch;\r\n  rules: DatePartsRules;\r\n}\r\n\r\nexport interface PageAddress {\r\n  day?: number;\r\n  week?: number;\r\n  month: number;\r\n  year: number;\r\n}\r\n\r\nexport interface TimeParts {\r\n  hours: number;\r\n  minutes: number;\r\n  seconds: number;\r\n  milliseconds: number;\r\n}\r\n\r\nexport interface SimpleDateParts {\r\n  year: number;\r\n  month: number;\r\n  day: number;\r\n  hours: number;\r\n  minutes: number;\r\n  seconds: number;\r\n  milliseconds: number;\r\n}\r\n\r\nexport interface DayParts {\r\n  dayIndex: number;\r\n  day: number;\r\n  dayFromEnd: number;\r\n  weekday: number;\r\n  weekdayOrdinal: number;\r\n  weekdayOrdinalFromEnd: number;\r\n  week: number;\r\n  weekFromEnd: number;\r\n  weeknumber: number;\r\n  month: number;\r\n  year: number;\r\n  date: Date;\r\n}\r\n\r\nexport interface DateParts extends DayParts {\r\n  milliseconds: number;\r\n  seconds: number;\r\n  minutes: number;\r\n  hours: number;\r\n  time: number;\r\n  dateTime: number;\r\n  isValid: boolean;\r\n  timezoneOffset: number;\r\n  isPm?: boolean;\r\n}\r\n\r\nexport interface MonthParts {\r\n  firstDayOfWeek: DayOfWeek;\r\n  firstDayOfMonth: Date;\r\n  inLeapYear: boolean;\r\n  firstWeekday: number;\r\n  numDays: number;\r\n  numWeeks: number;\r\n  month: number;\r\n  year: number;\r\n  weeknumbers: number[];\r\n  isoWeeknumbers: number[];\r\n}\r\n\r\nexport type DatePatch = 'dateTime' | 'date' | 'time';\r\n\r\nexport const DatePatchKeys: Record<DatePatch, (keyof SimpleDateParts)[]> = {\r\n  dateTime: [\r\n    'year',\r\n    'month',\r\n    'day',\r\n    'hours',\r\n    'minutes',\r\n    'seconds',\r\n    'milliseconds',\r\n  ],\r\n  date: ['year', 'month', 'day'],\r\n  time: ['hours', 'minutes', 'seconds', 'milliseconds'],\r\n};\r\n\r\nexport const daysInWeek = 7;\r\nexport const weeksInMonth = 6;\r\nexport const MS_PER_SECOND = 1000;\r\nexport const MS_PER_MINUTE = MS_PER_SECOND * 60;\r\nexport const MS_PER_HOUR = MS_PER_MINUTE * 60;\r\nexport const MS_PER_DAY = MS_PER_HOUR * 24;\r\n\r\nconst daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\nconst maskMacros = ['L', 'iso'];\r\n\r\ntype DatePartsRange = Readonly<[number, number, number]>;\r\ntype TimePartsKey = 'milliseconds' | 'seconds' | 'minutes' | 'hours';\r\nconst DATE_PART_RANGES: Record<TimePartsKey, DatePartsRange> = {\r\n  milliseconds: [0, 999, 3],\r\n  seconds: [0, 59, 2],\r\n  minutes: [0, 59, 2],\r\n  hours: [0, 23, 2],\r\n} as const;\r\n\r\n// #region Format constants\r\n\r\nconst token =\r\n  /d{1,2}|W{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|Z{1,4}|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\r\nconst literal = /\\[([^]*?)\\]/gm;\r\nconst formatFlags: any = {\r\n  D(d: DateParts) {\r\n    return d.day;\r\n  },\r\n  DD(d: DateParts) {\r\n    return pad(d.day, 2);\r\n  },\r\n  // Do(d: DateParts, l: Locale) {\r\n  //   return l.DoFn(d.day);\r\n  // },\r\n  d(d: DateParts) {\r\n    return d.weekday - 1;\r\n  },\r\n  dd(d: DateParts) {\r\n    return pad(d.weekday - 1, 2);\r\n  },\r\n  W(d: DateParts, l: Locale) {\r\n    return l.dayNamesNarrow[d.weekday - 1];\r\n  },\r\n  WW(d: DateParts, l: Locale) {\r\n    return l.dayNamesShorter[d.weekday - 1];\r\n  },\r\n  WWW(d: DateParts, l: Locale) {\r\n    return l.dayNamesShort[d.weekday - 1];\r\n  },\r\n  WWWW(d: DateParts, l: Locale) {\r\n    return l.dayNames[d.weekday - 1];\r\n  },\r\n  M(d: DateParts) {\r\n    return d.month;\r\n  },\r\n  MM(d: DateParts) {\r\n    return pad(d.month, 2);\r\n  },\r\n  MMM(d: DateParts, l: Locale) {\r\n    return l.monthNamesShort[d.month - 1];\r\n  },\r\n  MMMM(d: DateParts, l: Locale) {\r\n    return l.monthNames[d.month - 1];\r\n  },\r\n  YY(d: DateParts) {\r\n    return String(d.year).substr(2);\r\n  },\r\n  YYYY(d: DateParts) {\r\n    return pad(d.year, 4);\r\n  },\r\n  h(d: DateParts) {\r\n    return d.hours % 12 || 12;\r\n  },\r\n  hh(d: DateParts) {\r\n    return pad(d.hours % 12 || 12, 2);\r\n  },\r\n  H(d: DateParts) {\r\n    return d.hours;\r\n  },\r\n  HH(d: DateParts) {\r\n    return pad(d.hours, 2);\r\n  },\r\n  m(d: DateParts) {\r\n    return d.minutes;\r\n  },\r\n  mm(d: DateParts) {\r\n    return pad(d.minutes, 2);\r\n  },\r\n  s(d: DateParts) {\r\n    return d.seconds;\r\n  },\r\n  ss(d: DateParts) {\r\n    return pad(d.seconds, 2);\r\n  },\r\n  S(d: DateParts) {\r\n    return Math.round(d.milliseconds / 100);\r\n  },\r\n  SS(d: DateParts) {\r\n    return pad(Math.round(d.milliseconds / 10), 2);\r\n  },\r\n  SSS(d: DateParts) {\r\n    return pad(d.milliseconds, 3);\r\n  },\r\n  a(d: DateParts, l: Locale) {\r\n    return d.hours < 12 ? l.amPm[0] : l.amPm[1];\r\n  },\r\n  A(d: DateParts, l: Locale) {\r\n    return d.hours < 12 ? l.amPm[0].toUpperCase() : l.amPm[1].toUpperCase();\r\n  },\r\n  Z() {\r\n    return 'Z';\r\n  },\r\n  ZZ(d: DateParts) {\r\n    const o = d.timezoneOffset;\r\n    return `${o > 0 ? '-' : '+'}${pad(Math.floor(Math.abs(o) / 60), 2)}`;\r\n  },\r\n  ZZZ(d: DateParts) {\r\n    const o = d.timezoneOffset;\r\n    return `${o > 0 ? '-' : '+'}${pad(\r\n      Math.floor(Math.abs(o) / 60) * 100 + (Math.abs(o) % 60),\r\n      4,\r\n    )}`;\r\n  },\r\n  ZZZZ(d: DateParts) {\r\n    const o = d.timezoneOffset;\r\n    return `${o > 0 ? '-' : '+'}${pad(Math.floor(Math.abs(o) / 60), 2)}:${pad(\r\n      Math.abs(o) % 60,\r\n      2,\r\n    )}`;\r\n  },\r\n};\r\n\r\n// #endregion Format constants\r\n\r\n// #region Parse constants\r\n\r\nconst twoDigits = /\\d\\d?/;\r\nconst threeDigits = /\\d{3}/;\r\nconst fourDigits = /\\d{4}/;\r\nconst word =\r\n  /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\r\n// eslint-disable-next-line @typescript-eslint/no-empty-function\r\nconst noop = () => {};\r\nconst monthUpdate = (arrName: string) => (d: DateParts, v: string, l: any) => {\r\n  const index = l[arrName].indexOf(\r\n    v.charAt(0).toUpperCase() + v.substr(1).toLowerCase(),\r\n  );\r\n  if (~index) {\r\n    d.month = index;\r\n  }\r\n};\r\nconst parseFlags: any = {\r\n  D: [\r\n    twoDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.day = v;\r\n    },\r\n  ],\r\n  Do: [\r\n    new RegExp(twoDigits.source + word.source),\r\n    (d: DateParts, v: string) => {\r\n      d.day = parseInt(v, 10);\r\n    },\r\n  ],\r\n  d: [twoDigits, noop],\r\n  W: [word, noop],\r\n  M: [\r\n    twoDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.month = v - 1;\r\n    },\r\n  ],\r\n  MMM: [word, monthUpdate('monthNamesShort')],\r\n  MMMM: [word, monthUpdate('monthNames')],\r\n  YY: [\r\n    twoDigits,\r\n    (d: DateParts, v: number) => {\r\n      const da = new Date();\r\n      const cent = +da.getFullYear().toString().substr(0, 2);\r\n      d.year = +`${v > 68 ? cent - 1 : cent}${v}`;\r\n    },\r\n  ],\r\n  YYYY: [\r\n    fourDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.year = v;\r\n    },\r\n  ],\r\n  S: [\r\n    /\\d/,\r\n    (d: DateParts, v: number) => {\r\n      d.milliseconds = v * 100;\r\n    },\r\n  ],\r\n  SS: [\r\n    /\\d{2}/,\r\n    (d: DateParts, v: number) => {\r\n      d.milliseconds = v * 10;\r\n    },\r\n  ],\r\n  SSS: [\r\n    threeDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.milliseconds = v;\r\n    },\r\n  ],\r\n  h: [\r\n    twoDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.hours = v;\r\n    },\r\n  ],\r\n  m: [\r\n    twoDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.minutes = v;\r\n    },\r\n  ],\r\n  s: [\r\n    twoDigits,\r\n    (d: DateParts, v: number) => {\r\n      d.seconds = v;\r\n    },\r\n  ],\r\n  a: [\r\n    word,\r\n    (d: DateParts, v: string, l: Locale) => {\r\n      const val = v.toLowerCase();\r\n      if (val === l.amPm[0]) {\r\n        d.isPm = false;\r\n      } else if (val === l.amPm[1]) {\r\n        d.isPm = true;\r\n      }\r\n    },\r\n  ],\r\n  Z: [\r\n    /[^\\s]*?[+-]\\d\\d:?\\d\\d|[^\\s]*?Z?/,\r\n    (d: DateParts, v: string) => {\r\n      if (v === 'Z') v = '+00:00';\r\n      const parts = `${v}`.match(/([+-]|\\d\\d)/gi);\r\n      if (parts) {\r\n        const minutes = +parts[1] * 60 + parseInt(parts[2], 10);\r\n        d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\r\n      }\r\n    },\r\n  ],\r\n};\r\nparseFlags.DD = parseFlags.D;\r\nparseFlags.dd = parseFlags.d;\r\nparseFlags.WWWW = parseFlags.WWW = parseFlags.WW = parseFlags.W;\r\nparseFlags.MM = parseFlags.M;\r\nparseFlags.mm = parseFlags.m;\r\nparseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\r\nparseFlags.ss = parseFlags.s;\r\nparseFlags.A = parseFlags.a;\r\nparseFlags.ZZZZ = parseFlags.ZZZ = parseFlags.ZZ = parseFlags.Z;\r\n\r\n// #endregion Parse constants\r\n\r\nfunction normalizeMasks(masks: string | string[], locale: Locale): string[] {\r\n  return (\r\n    ((arrayHasItems(masks) && masks) || [\r\n      (isString(masks) && masks) || 'YYYY-MM-DD',\r\n    ]) as string[]\r\n  ).map(m =>\r\n    maskMacros.reduce(\r\n      (prev, curr) => prev.replace(curr, locale.masks[curr] || ''),\r\n      m,\r\n    ),\r\n  );\r\n}\r\n\r\nexport function isDateParts(parts: unknown): parts is Partial<DateParts> {\r\n  return (\r\n    isObject(parts) && 'year' in parts && 'month' in parts && 'day' in parts\r\n  );\r\n}\r\n\r\nexport function isDateSource(date: unknown): date is DateSource {\r\n  if (date == null) return false;\r\n  return isString(date) || isNumber(date) || isDate(date);\r\n}\r\n\r\nexport function roundDate(dateMs: number, snapMs = 0) {\r\n  if (snapMs > 0) return new Date(Math.round(dateMs / snapMs) * snapMs);\r\n  return new Date(dateMs);\r\n}\r\n\r\nexport function startOfWeek(date: Date, firstDayOfWeek: DayOfWeek = 1) {\r\n  const day = date.getDay() + 1;\r\n  const daysToAdd =\r\n    day >= firstDayOfWeek\r\n      ? firstDayOfWeek - day\r\n      : -(7 - (firstDayOfWeek - day));\r\n  return addDays(date, daysToAdd);\r\n}\r\n\r\nexport function getStartOfWeek(date: Date, firstDayOfWeek: DayOfWeek = 1) {\r\n  const day = date.getDay() + 1;\r\n  const daysToAdd =\r\n    day >= firstDayOfWeek\r\n      ? firstDayOfWeek - day\r\n      : -(7 - (firstDayOfWeek - day));\r\n  return addDays(date, daysToAdd);\r\n}\r\n\r\nexport function getDayIndex(year: number, month: number, day: number) {\r\n  const utcDate = Date.UTC(year, month - 1, day);\r\n  return diffInDays(new Date(0), new Date(utcDate));\r\n}\r\n\r\nexport function diffInDays(d1: Date, d2: Date) {\r\n  return Math.round((d2.getTime() - d1.getTime()) / MS_PER_DAY);\r\n}\r\n\r\nexport function diffInWeeks(d1: Date, d2: Date) {\r\n  return Math.ceil(diffInDays(startOfWeek(d1), startOfWeek(d2)) / 7);\r\n}\r\n\r\nexport function diffInYears(d1: Date, d2: Date) {\r\n  return d2.getUTCFullYear() - d1.getUTCFullYear();\r\n}\r\n\r\nexport function diffInMonths(d1: Date, d2: Date) {\r\n  return diffInYears(d1, d2) * 12 + (d2.getMonth() - d1.getMonth());\r\n}\r\n\r\nexport function getDateFromParts(\r\n  parts: Partial<SimpleDateParts>,\r\n  timezone = '',\r\n) {\r\n  const d = new Date();\r\n  const {\r\n    year = d.getFullYear(),\r\n    month = d.getMonth() + 1,\r\n    day = d.getDate(),\r\n    hours: hrs = 0,\r\n    minutes: min = 0,\r\n    seconds: sec = 0,\r\n    milliseconds: ms = 0,\r\n  } = parts;\r\n\r\n  if (timezone) {\r\n    const dateString = `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}T${pad(\r\n      hrs,\r\n      2,\r\n    )}:${pad(min, 2)}:${pad(sec, 2)}.${pad(ms, 3)}`;\r\n    return toDate(dateString, { timeZone: timezone });\r\n  }\r\n  return new Date(year, month - 1, day, hrs, min, sec, ms);\r\n}\r\n\r\nexport function getTimezoneOffset(\r\n  parts: Partial<SimpleDateParts>,\r\n  timezone = '',\r\n) {\r\n  const {\r\n    year: y = 0,\r\n    month: m = 0,\r\n    day: d = 0,\r\n    hours: hrs = 0,\r\n    minutes: min = 0,\r\n    seconds: sec = 0,\r\n    milliseconds: ms = 0,\r\n  } = parts;\r\n  let date;\r\n  const utcDate = new Date(Date.UTC(y, m - 1, d, hrs, min, sec, ms));\r\n  if (timezone) {\r\n    const dateString = `${pad(y, 4)}-${pad(m, 2)}-${pad(d, 2)}T${pad(\r\n      hrs,\r\n      2,\r\n    )}:${pad(min, 2)}:${pad(sec, 2)}.${pad(ms, 3)}`;\r\n    date = toDate(dateString, { timeZone: timezone });\r\n  } else {\r\n    date = new Date(y, m - 1, d, hrs, min, sec, ms);\r\n  }\r\n  return (date.getTime() - utcDate.getTime()) / 60000;\r\n}\r\n\r\nexport function getDateParts(date: Date, locale: Locale): DateParts {\r\n  let tzDate = new Date(date.getTime());\r\n  if (locale.timezone) {\r\n    tzDate = new Date(\r\n      date.toLocaleString('en-US', { timeZone: locale.timezone }),\r\n    );\r\n    tzDate.setMilliseconds(date.getMilliseconds());\r\n  }\r\n  const milliseconds = tzDate.getMilliseconds();\r\n  const seconds = tzDate.getSeconds();\r\n  const minutes = tzDate.getMinutes();\r\n  const hours = tzDate.getHours();\r\n  const time =\r\n    milliseconds +\r\n    seconds * MS_PER_SECOND +\r\n    minutes * MS_PER_MINUTE +\r\n    hours * MS_PER_HOUR;\r\n  const month = <MonthInYear>(tzDate.getMonth() + 1);\r\n  const year = tzDate.getFullYear();\r\n  const monthParts = locale.getMonthParts(month, year);\r\n  const day = <DayInMonth>tzDate.getDate();\r\n  const dayFromEnd = monthParts.numDays - day + 1;\r\n  const weekday = tzDate.getDay() + 1;\r\n  const weekdayOrdinal = Math.floor((day - 1) / 7 + 1);\r\n  const weekdayOrdinalFromEnd = Math.floor((monthParts.numDays - day) / 7 + 1);\r\n  const week = Math.ceil(\r\n    (day + Math.abs(monthParts.firstWeekday - monthParts.firstDayOfWeek)) / 7,\r\n  );\r\n  const weekFromEnd = monthParts.numWeeks - week + 1;\r\n  const weeknumber = monthParts.weeknumbers[week];\r\n  const dayIndex = getDayIndex(year, month, day);\r\n  const parts: DateParts = {\r\n    milliseconds,\r\n    seconds,\r\n    minutes,\r\n    hours,\r\n    time,\r\n    day,\r\n    dayFromEnd,\r\n    weekday,\r\n    weekdayOrdinal,\r\n    weekdayOrdinalFromEnd,\r\n    week,\r\n    weekFromEnd,\r\n    weeknumber,\r\n    month,\r\n    year,\r\n    date: tzDate,\r\n    dateTime: tzDate.getTime(),\r\n    dayIndex,\r\n    timezoneOffset: 0,\r\n    isValid: true,\r\n  };\r\n  return parts;\r\n}\r\n\r\nexport function getMonthPartsKey(\r\n  month: number,\r\n  year: number,\r\n  firstDayOfWeek: DayOfWeek,\r\n) {\r\n  return `${year}-${month}-${firstDayOfWeek}`;\r\n}\r\n\r\nexport function getMonthParts(\r\n  month: number,\r\n  year: number,\r\n  firstDayOfWeek: DayOfWeek,\r\n) {\r\n  const inLeapYear = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n  const firstDayOfMonth = new Date(year, month - 1, 1);\r\n  const firstWeekday = firstDayOfMonth.getDay() + 1;\r\n  const numDays = month === 2 && inLeapYear ? 29 : daysInMonths[month - 1];\r\n  const weekStartsOn: WeekStartsOn = (firstDayOfWeek - 1) as WeekStartsOn;\r\n  const numWeeks = getWeeksInMonth(firstDayOfMonth, {\r\n    weekStartsOn,\r\n  });\r\n  const weeknumbers = [];\r\n  const isoWeeknumbers = [];\r\n  for (let i = 0; i < numWeeks; i++) {\r\n    const date = addDays(firstDayOfMonth, i * 7);\r\n    weeknumbers.push(getWeek(date, { weekStartsOn }));\r\n    isoWeeknumbers.push(getISOWeek(date));\r\n  }\r\n  return {\r\n    firstDayOfWeek,\r\n    firstDayOfMonth,\r\n    inLeapYear,\r\n    firstWeekday,\r\n    numDays,\r\n    numWeeks,\r\n    month,\r\n    year,\r\n    weeknumbers,\r\n    isoWeeknumbers,\r\n  };\r\n}\r\n\r\nexport function getWeekdayDates() {\r\n  const dates = [];\r\n  const year = 2020;\r\n  const month = 1;\r\n  const day = 5;\r\n  for (let i = 0; i < daysInWeek; i++) {\r\n    dates.push(\r\n      getDateFromParts({\r\n        year,\r\n        month,\r\n        day: day + i,\r\n        hours: 12,\r\n      }),\r\n    );\r\n  }\r\n  return dates;\r\n}\r\n\r\nexport function getDayNames(\r\n  length: DayNameLength,\r\n  localeId: string | undefined = undefined,\r\n) {\r\n  const dtf = new Intl.DateTimeFormat(localeId, {\r\n    weekday: length,\r\n  });\r\n  return getWeekdayDates().map(d => dtf.format(d));\r\n}\r\n\r\nexport function getHourDates() {\r\n  const dates = [];\r\n  for (let i = 0; i <= 24; i++) {\r\n    dates.push(new Date(2000, 0, 1, i));\r\n  }\r\n  return dates;\r\n}\r\n\r\nexport function getRelativeTimeNames(localeId = undefined): TimeNames {\r\n  const units: Intl.RelativeTimeFormatUnit[] = [\r\n    'second',\r\n    'minute',\r\n    'hour',\r\n    'day',\r\n    'week',\r\n    'month',\r\n    'quarter',\r\n    'year',\r\n  ];\r\n  const rtf = new Intl.RelativeTimeFormat(localeId);\r\n  return units.reduce<TimeNames>((names, unit) => {\r\n    const parts = rtf.formatToParts(100, unit);\r\n    // @ts-ignore\r\n    names[unit] = parts[1].unit;\r\n    return names;\r\n  }, {});\r\n}\r\n\r\nexport function getMonthDates() {\r\n  const dates = [];\r\n  for (let i = 0; i < 12; i++) {\r\n    dates.push(new Date(2000, i, 15));\r\n  }\r\n  return dates;\r\n}\r\n\r\nexport function getMonthNames(length: MonthNameLength, localeId = undefined) {\r\n  const dtf = new Intl.DateTimeFormat(localeId, {\r\n    month: length,\r\n    timeZone: 'UTC',\r\n  });\r\n  return getMonthDates().map(d => dtf.format(d));\r\n}\r\n\r\nexport function datePartIsValid(\r\n  part: number,\r\n  rule: DatePartsRule,\r\n  parts: DateParts,\r\n): boolean {\r\n  if (isNumber(rule)) return rule === part;\r\n  if (isArray(rule)) return (rule as number[]).includes(part);\r\n  if (isFunction(rule)) return rule(part, parts);\r\n  if (rule.min != null && rule.min > part) return false;\r\n  if (rule.max != null && rule.max < part) return false;\r\n  if (rule.interval != null && part % rule.interval !== 0) return false;\r\n  return true;\r\n}\r\n\r\nexport function getDatePartOptions(\r\n  parts: DateParts,\r\n  range: DatePartsRange,\r\n  rule: DatePartsRule | undefined,\r\n) {\r\n  const options: DatePartOption[] = [];\r\n  const [min, max, padding] = range;\r\n  for (let i = min; i <= max; i++) {\r\n    if (rule == null || datePartIsValid(i, rule, parts)) {\r\n      options.push({\r\n        value: i,\r\n        label: pad(i, padding),\r\n      });\r\n    }\r\n  }\r\n  return options;\r\n}\r\n\r\nexport function getDatePartsOptions(parts: DateParts, rules: DatePartsRules) {\r\n  return {\r\n    milliseconds: getDatePartOptions(\r\n      parts,\r\n      DATE_PART_RANGES.milliseconds,\r\n      rules.milliseconds,\r\n    ),\r\n    seconds: getDatePartOptions(parts, DATE_PART_RANGES.seconds, rules.seconds),\r\n    minutes: getDatePartOptions(parts, DATE_PART_RANGES.minutes, rules.minutes),\r\n    hours: getDatePartOptions(parts, DATE_PART_RANGES.hours, rules.hours),\r\n  };\r\n}\r\n\r\nexport function getNearestDatePart(\r\n  parts: DateParts,\r\n  range: DatePartsRange,\r\n  value: number,\r\n  rule: DatePartsRule,\r\n) {\r\n  const options = getDatePartOptions(parts, range, rule);\r\n  const result = options.reduce((prev, opt) => {\r\n    if (opt.disabled) return prev;\r\n    if (isNaN(prev)) return opt.value;\r\n    const diffPrev = Math.abs(prev - value);\r\n    const diffCurr = Math.abs(opt.value - value);\r\n    return diffCurr < diffPrev ? opt.value : prev;\r\n  }, NaN);\r\n  return isNaN(result) ? value : result;\r\n}\r\n\r\nexport function applyRulesForDateParts(\r\n  dateParts: DateParts,\r\n  rules: DatePartsRules,\r\n) {\r\n  const result = <DateParts>{ ...dateParts };\r\n  Object.entries(rules).forEach(([key, rule]) => {\r\n    const range = DATE_PART_RANGES[key as TimePartsKey];\r\n    const value = dateParts[key as TimePartsKey];\r\n    result[key as TimePartsKey] = getNearestDatePart(\r\n      dateParts,\r\n      range,\r\n      value,\r\n      rule,\r\n    );\r\n  });\r\n  return result;\r\n}\r\n\r\nexport function parseDate(\r\n  dateString: string,\r\n  mask: string | string[],\r\n  locale: Locale,\r\n) {\r\n  const masks = normalizeMasks(mask, locale);\r\n  return (\r\n    masks\r\n      .map(m => {\r\n        if (typeof m !== 'string') {\r\n          throw new Error('Invalid mask');\r\n        }\r\n        // Reset string value\r\n        let str = dateString;\r\n        // Avoid regular expression denial of service, fail early for really long strings\r\n        // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\r\n        if (str.length > 1000) {\r\n          return false;\r\n        }\r\n\r\n        let isValid = true;\r\n        const dp: Partial<DateParts> = {};\r\n        m.replace(token, $0 => {\r\n          if (parseFlags[$0]) {\r\n            const info = parseFlags[$0];\r\n            const index = str.search(info[0]);\r\n            if (!~index) {\r\n              isValid = false;\r\n            } else {\r\n              str.replace(info[0], result => {\r\n                info[1](dp, result, locale);\r\n                str = str.substr(index + result.length);\r\n                return result;\r\n              });\r\n            }\r\n          }\r\n\r\n          return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);\r\n        });\r\n\r\n        if (!isValid) {\r\n          return false;\r\n        }\r\n\r\n        const today = new Date();\r\n        if (dp.hours != null) {\r\n          if (dp.isPm === true && +dp.hours !== 12) {\r\n            dp.hours = +dp.hours + 12;\r\n          } else if (dp.isPm === false && +dp.hours === 12) {\r\n            dp.hours = 0;\r\n          }\r\n        }\r\n\r\n        let date;\r\n        if (dp.timezoneOffset != null) {\r\n          dp.minutes = +(dp.minutes || 0) - +dp.timezoneOffset;\r\n          date = new Date(\r\n            Date.UTC(\r\n              dp.year || today.getFullYear(),\r\n              dp.month || 0,\r\n              dp.day || 1,\r\n              dp.hours || 0,\r\n              dp.minutes || 0,\r\n              dp.seconds || 0,\r\n              dp.milliseconds || 0,\r\n            ),\r\n          );\r\n        } else {\r\n          date = locale.getDateFromParts({\r\n            year: dp.year || today.getFullYear(),\r\n            month: (dp.month || 0) + 1,\r\n            day: dp.day || 1,\r\n            hours: dp.hours || 0,\r\n            minutes: dp.minutes || 0,\r\n            seconds: dp.seconds || 0,\r\n            milliseconds: dp.milliseconds || 0,\r\n          });\r\n        }\r\n        return date;\r\n      })\r\n      .find(d => d) || new Date(dateString)\r\n  );\r\n}\r\n\r\nexport function formatDate(\r\n  date: Date,\r\n  masks: string | string[],\r\n  locale: Locale,\r\n) {\r\n  if (date == null) return '';\r\n  let mask = normalizeMasks(masks, locale)[0];\r\n  // Convert timezone to utc if needed\r\n  if (/Z$/.test(mask)) locale.timezone = 'utc';\r\n  const literals: string[] = [];\r\n  // Make literals inactive by replacing them with ??\r\n  mask = mask.replace(literal, ($0, $1: string) => {\r\n    literals.push($1);\r\n    return '??';\r\n  });\r\n  const dateParts = locale.getDateParts(date);\r\n  // Apply formatting rules\r\n  mask = mask.replace(token, $0 =>\r\n    $0 in formatFlags\r\n      ? formatFlags[$0](dateParts, locale)\r\n      : $0.slice(1, $0.length - 1),\r\n  );\r\n  // Inline literal values back into the formatted value\r\n  return mask.replace(/\\?\\?/g, () => literals.shift()!);\r\n}\r\n","import type { Placement } from '@popperjs/core';\r\nimport { addDays } from './date/helpers';\r\nimport { DateRange, type DateRangeSource } from './date/range';\r\nimport {\r\n  Bar,\r\n  BarConfig,\r\n  Content,\r\n  ContentConfig,\r\n  Dot,\r\n  DotConfig,\r\n  Highlight,\r\n  HighlightConfig,\r\n  Profile,\r\n} from './glyph';\r\nimport { arrayHasItems } from './helpers';\r\nimport Locale from './locale';\r\nimport type { PopoverVisibility } from './popovers';\r\nimport { Theme } from './theme';\r\n\r\nexport type PopoverConfig = Partial<{\r\n  label: string;\r\n  visibility: PopoverVisibility;\r\n  placement: Placement;\r\n  hideIndicator: boolean;\r\n  isInteractive: boolean;\r\n}>;\r\n\r\nexport type EventConfig = Partial<{\r\n  label: string;\r\n}>;\r\n\r\nexport type AttributeConfig = Partial<{\r\n  key: string | number;\r\n  hashcode: string;\r\n  content: ContentConfig;\r\n  highlight: HighlightConfig;\r\n  dot: DotConfig;\r\n  bar: BarConfig;\r\n  popover: PopoverConfig;\r\n  event: EventConfig;\r\n  dates: DateRangeSource[];\r\n  customData: any;\r\n  order: number;\r\n  pinPage: boolean;\r\n}>;\r\n\r\nlet attrKey = 0;\r\n\r\nexport class Attribute {\r\n  key: string | number = '';\r\n  hashcode = '';\r\n  highlight: Profile<Highlight> | null = null;\r\n  content: Profile<Content> | null = null;\r\n  dot: Profile<Dot> | null = null;\r\n  bar: Profile<Bar> | null = null;\r\n  event: EventConfig | null = null;\r\n  popover: PopoverConfig | null = null;\r\n  customData: any = null;\r\n  ranges: DateRange[];\r\n  hasRanges = false;\r\n  order = 0;\r\n  pinPage = false;\r\n  maxRepeatSpan = 0;\r\n  locale: Locale;\r\n\r\n  constructor(config: Partial<AttributeConfig>, theme: Theme, locale: Locale) {\r\n    const { dates } = Object.assign(\r\n      this,\r\n      { hashcode: '', order: 0, pinPage: false },\r\n      config,\r\n    );\r\n    this.key ||= ++attrKey;\r\n    this.locale = locale;\r\n    // Normalize attribute\r\n    theme.normalizeGlyphs(this);\r\n    // Assign dates\r\n    this.ranges = locale.ranges(dates ?? []);\r\n    this.hasRanges = !!arrayHasItems(this.ranges);\r\n    this.maxRepeatSpan = this.ranges\r\n      .filter(r => r.hasRepeat)\r\n      .map(r => r.daySpan)\r\n      .reduce((res, curr) => Math.max(res, curr), 0);\r\n  }\r\n\r\n  intersectsRange({ start, end }: DateRange) {\r\n    if (start == null || end == null) return false;\r\n    const simpleRanges = this.ranges.filter(r => !r.hasRepeat);\r\n    for (const range of simpleRanges) {\r\n      if (range.intersectsDayRange(start.dayIndex, end.dayIndex)) {\r\n        return true;\r\n      }\r\n    }\r\n    const repeatRanges = this.ranges.filter(r => r.hasRepeat);\r\n    if (!repeatRanges.length) return false;\r\n    let day = start;\r\n    if (this.maxRepeatSpan > 1) {\r\n      day = this.locale.getDateParts(addDays(day.date, -this.maxRepeatSpan));\r\n    }\r\n    while (day.dayIndex <= end.dayIndex) {\r\n      for (const range of repeatRanges) {\r\n        if (range.startsOnDay(day)) return true;\r\n      }\r\n      day = this.locale.getDateParts(addDays(day.date, 1));\r\n    }\r\n    return false;\r\n  }\r\n}\r\n","import type { Placement } from '@popperjs/core';\nimport type { ComponentPublicInstance, Directive, DirectiveBinding } from 'vue';\nimport { elementContains, on, resolveEl } from './helpers';\n\nexport type PopoverVisibility = 'click' | 'hover' | 'hover-focus' | 'focus';\n\nexport interface PopoverOptions\n{\n  id: PropertyKey;\n  visibility: PopoverVisibility;\n  isInteractive: boolean;\n  autoHide: boolean;\n  force: boolean;\n  target: unknown;\n  placement: Placement;\n  modifiers: any;\n  data: any;\n  showDelay: number;\n  hideDelay: number;\n}\n\nexport interface PopoverState\n{\n  isVisible: boolean;\n  target: unknown;\n  data: any;\n  transition: string;\n  placement: Placement;\n  direction: string;\n  positionFixed: false;\n  modifiers: any[];\n  isInteractive: boolean;\n  visibility: PopoverVisibility;\n  isHovered: boolean;\n  isFocused: boolean;\n  autoHide: boolean;\n  force: boolean;\n}\n\nexport interface PopoverEvent\n{\n  detail: Partial<PopoverOptions>;\n}\n\nexport interface PopoverEventHandlers\n{\n  click: (e: MouseEvent) => void;\n  mousemove: (e: MouseEvent) => void;\n  mouseleave: (e: MouseEvent) => void;\n  focusin: (e: MouseEvent) => void;\n  focusout: (e: MouseEvent) => void;\n}\n\nexport function showPopover(opts: Partial<PopoverOptions>)\n{\n  if (document)\n  {\n    document.dispatchEvent(\n      new CustomEvent('show-popover', {\n        detail: opts,\n      }),\n    );\n  }\n}\n\nexport function hidePopover(opts: Partial<PopoverOptions>)\n{\n  if (document)\n  {\n    document.dispatchEvent(\n      new CustomEvent('hide-popover', {\n        detail: opts,\n      }),\n    );\n  }\n}\n\nexport function togglePopover(opts: Partial<PopoverOptions>)\n{\n  if (document)\n  {\n    document.dispatchEvent(\n      new CustomEvent('toggle-popover', {\n        detail: opts,\n      }),\n    );\n  }\n}\n\nexport function getPopoverEventHandlers(\n  opts: Partial<PopoverOptions>,\n): Partial<PopoverEventHandlers>\n{\n  const { visibility } = opts;\n  const click = visibility === 'click';\n  const hover = visibility === 'hover';\n  const hoverFocus = visibility === 'hover-focus';\n  const focus = visibility === 'focus';\n  opts.autoHide = !click;\n  let hovered = false;\n  let focused = false;\n\n  const clickHandler = (e: MouseEvent) =>\n  {\n    if (click)\n    {\n      togglePopover({\n        ...opts,\n        target: opts.target || (e.currentTarget as HTMLElement),\n      });\n      e.stopPropagation();\n    }\n  };\n  const mouseMoveHandler = (e: MouseEvent) =>\n  {\n    if (!hovered)\n    {\n      hovered = true;\n      if (hover || hoverFocus)\n      {\n        showPopover({\n          ...opts,\n          target: opts.target || (e.currentTarget as HTMLElement),\n        });\n      }\n    }\n  };\n  const mouseLeaveHandler = () =>\n  {\n    if (hovered)\n    {\n      hovered = false;\n      if (hover || (hoverFocus && !focused))\n      {\n        hidePopover(opts);\n      }\n    }\n  };\n  const focusInHandler = (e: FocusEvent) =>\n  {\n    if (!focused)\n    {\n      focused = true;\n      if (focus || hoverFocus)\n      {\n        showPopover({\n          ...opts,\n          target: opts.target || (e.currentTarget as HTMLElement),\n        });\n      }\n    }\n  };\n  const focusOutHandler = (e: FocusEvent) =>\n  {\n    if (\n      focused &&\n      !elementContains(e.currentTarget as Node, e.relatedTarget as Element)\n    )\n    {\n      focused = false;\n      if (focus || (hoverFocus && !hovered))\n      {\n        hidePopover(opts);\n      }\n    }\n  };\n\n  const handlers: Record<string, Function> = {};\n  switch (opts.visibility)\n  {\n    case 'click':\n      handlers.click = clickHandler;\n      break;\n    case 'hover':\n      handlers.mousemove = mouseMoveHandler;\n      handlers.mouseleave = mouseLeaveHandler;\n      break;\n    case 'focus':\n      handlers.focusin = focusInHandler;\n      handlers.focusout = focusOutHandler;\n      break;\n    case 'hover-focus':\n      handlers.mousemove = mouseMoveHandler;\n      handlers.mouseleave = mouseLeaveHandler;\n      handlers.focusin = focusInHandler;\n      handlers.focusout = focusOutHandler;\n      break;\n  }\n  return handlers;\n}\n\nconst removeHandlers = (target: Element | ComponentPublicInstance | string) =>\n{\n  const el = resolveEl(target);\n  if (el == null) return;\n  const handlers = (el as any).popoverHandlers;\n  if (!handlers || !handlers.length) return;\n  handlers.forEach((handler: Function) => handler());\n  delete (el as any).popoverHandlers;\n};\n\nconst addHandlers = (\n  target: Element | ComponentPublicInstance | string,\n  opts: Partial<PopoverOptions>,\n) =>\n{\n  const el = resolveEl(target);\n  if (el == null) return;\n  const remove: Function[] = [];\n  const handlers = getPopoverEventHandlers(opts);\n  Object.entries(handlers).forEach(([event, handler]) =>\n  {\n    remove.push(on(el, event, handler as EventListener));\n  });\n  (el as any).popoverHandlers = remove;\n};\n\nexport const popoverDirective: Directive = {\n  mounted(el: any, binding: DirectiveBinding<PopoverOptions>)\n  {\n    const { value } = binding;\n    if (!value) return;\n    addHandlers(el, value);\n  },\n  updated(el: any, binding: DirectiveBinding<PopoverOptions>)\n  {\n    const { oldValue, value } = binding;\n    const oldVisibility = oldValue?.visibility;\n    const newVisibility = value?.visibility;\n    if (oldVisibility !== newVisibility)\n    {\n      if (oldVisibility)\n      {\n        removeHandlers(el);\n        if (!newVisibility) hidePopover(oldValue);\n      }\n      if (newVisibility)\n      {\n        addHandlers(el, value);\n      }\n    }\n  },\n  unmounted(el: Element)\n  {\n    removeHandlers(el);\n  },\n};\n\nexport function forceUpdateHandlers(el: any, value: any)\n{\n  removeHandlers(el);\n  addHandlers(el, value);\n}\n","import { isFunction, off, on } from './helpers';\r\nimport type { CustomElement } from './helpers';\r\n\r\ninterface SwipeHandlerOptions {\r\n  maxSwipeTime: number;\r\n  minHorizontalSwipeDistance: number;\r\n  maxVerticalSwipeDistance: number;\r\n}\r\n\r\nexport const addHorizontalSwipeHandler = (\r\n  element: CustomElement,\r\n  handler: Function,\r\n  {\r\n    maxSwipeTime,\r\n    minHorizontalSwipeDistance,\r\n    maxVerticalSwipeDistance,\r\n  }: SwipeHandlerOptions,\r\n) => {\r\n  if (!element || !element.addEventListener || !isFunction(handler)) {\r\n    return null;\r\n  }\r\n  // State variables\r\n  let startX = 0;\r\n  let startY = 0;\r\n  let startTime: number | null = null;\r\n  let isSwiping = false;\r\n  // Touch start handler\r\n  function touchStart(e: TouchEvent) {\r\n    const t = e.changedTouches[0];\r\n    startX = t.screenX;\r\n    startY = t.screenY;\r\n    startTime = new Date().getTime();\r\n    isSwiping = true;\r\n  }\r\n  // Touch end handler\r\n  function touchEnd(e: TouchEvent) {\r\n    if (!isSwiping || !startTime) return;\r\n    isSwiping = false;\r\n    const t = e.changedTouches[0];\r\n    const deltaX = t.screenX - startX;\r\n    const deltaY = t.screenY - startY;\r\n    const deltaTime = new Date().getTime() - startTime;\r\n    if (deltaTime < maxSwipeTime) {\r\n      if (\r\n        Math.abs(deltaX) >= minHorizontalSwipeDistance &&\r\n        Math.abs(deltaY) <= maxVerticalSwipeDistance\r\n      ) {\r\n        const arg = { toLeft: false, toRight: false };\r\n        if (deltaX < 0) {\r\n          // Swipe to the left\r\n          arg.toLeft = true;\r\n        } else {\r\n          // Swipe to the right\r\n          arg.toRight = true;\r\n        }\r\n        handler(arg);\r\n      }\r\n    }\r\n  }\r\n  // Add event handlers\r\n  on(element, 'touchstart', touchStart, { passive: true });\r\n  // on(element, 'touchmove', touchmove);\r\n  on(element, 'touchend', touchEnd, { passive: true });\r\n  // Return function that removes event handlers\r\n  return () => {\r\n    off(element, 'touchstart', touchStart);\r\n    // off(element, 'touchmove', touchmove);\r\n    off(element, 'touchend', touchEnd);\r\n  };\r\n};\r\n","const watchSkippers: Partial<Record<string, number>> = {};\r\n\r\nexport const skipWatcher = (watcher: string, durationMs = 10) => {\r\n  watchSkippers[watcher] = Date.now() + durationMs;\r\n};\r\n\r\nexport const unskipWatcher = (watcher: string) => {\r\n  delete watchSkippers[watcher];\r\n};\r\n\r\nexport const handleWatcher = (watcher: string, handler: Function) => {\r\n  if (watcher in watchSkippers) {\r\n    const dateTime = watchSkippers[watcher] as number;\r\n    if (Date.now() < dateTime) return;\r\n    delete watchSkippers[watcher];\r\n  }\r\n  handler();\r\n};\r\n","import { ref, onMounted, onUnmounted, watch, computed, reactive, provide } from 'vue';\n\nfunction windowExists() {\n    return typeof window !== 'undefined';\n}\nfunction windowHasFeature(feature) {\n    return windowExists() && feature in window;\n}\n\nfunction useMediaQuery(query, callback) {\n    let mediaQuery;\n    const matches = ref(false);\n    function listener(ev) {\n        if (callback)\n            callback(ev);\n        matches.value = ev.matches;\n    }\n    function cleanup() {\n        if (mediaQuery) {\n            mediaQuery.removeEventListener('change', listener);\n            mediaQuery = undefined;\n        }\n    }\n    function setup(newQuery = query) {\n        cleanup();\n        if (windowHasFeature('matchMedia') && newQuery) {\n            mediaQuery = window.matchMedia(newQuery);\n            mediaQuery.addEventListener('change', listener);\n            matches.value = mediaQuery.matches;\n        }\n    }\n    onMounted(() => setup());\n    onUnmounted(() => cleanup());\n    return { matches, setup, cleanup };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n    let observer;\n    const rect = ref();\n    const listener = (...args) => {\n        if (callback)\n            callback(...args);\n        const entry = args[0][0];\n        rect.value = entry.contentRect;\n    };\n    const stopObserver = () => {\n        if (observer) {\n            observer.disconnect();\n            observer = undefined;\n        }\n    };\n    const stopWatch = watch(() => target.value, (elOrComp) => {\n        stopObserver();\n        if (windowHasFeature('ResizeObserver') && elOrComp) {\n            observer = new ResizeObserver(listener);\n            observer.observe(elOrComp.$el ?? elOrComp, options);\n        }\n    }, { immediate: true, flush: 'post' });\n    const cleanup = () => {\n        stopObserver();\n        stopWatch();\n    };\n    onUnmounted(() => cleanup());\n    return { rect, cleanup };\n}\n\nfunction useDarkMode(config) {\n    const isDark = ref(false);\n    const displayMode = computed(() => (isDark.value ? 'dark' : 'light'));\n    let mediaQuery;\n    let mutationObserver;\n    function mqListener(ev) {\n        isDark.value = ev.matches;\n    }\n    function setupSystem() {\n        if (windowHasFeature('matchMedia')) {\n            mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n            mediaQuery.addEventListener('change', mqListener);\n            isDark.value = mediaQuery.matches;\n        }\n    }\n    function moListener() {\n        const { selector = ':root', darkClass = 'dark' } = config.value;\n        const el = document.querySelector(selector);\n        isDark.value = el.classList.contains(darkClass);\n    }\n    function setupClass(config) {\n        const { selector = ':root', darkClass = 'dark' } = config;\n        if (windowExists() && selector && darkClass) {\n            const el = document.querySelector(selector);\n            if (el) {\n                mutationObserver = new MutationObserver(moListener);\n                mutationObserver.observe(el, {\n                    attributes: true,\n                    attributeFilter: ['class'],\n                });\n                isDark.value = el.classList.contains(darkClass);\n            }\n        }\n    }\n    function setup() {\n        stopObservers();\n        const type = typeof config.value;\n        if (type === 'string' && config.value.toLowerCase() === 'system') {\n            setupSystem();\n        }\n        else if (type === 'object') {\n            setupClass(config.value);\n        }\n        else {\n            isDark.value = !!config.value;\n        }\n    }\n    const stopWatch = watch(() => config.value, () => setup(), {\n        immediate: true,\n    });\n    function stopObservers() {\n        if (mediaQuery) {\n            mediaQuery.removeEventListener('change', mqListener);\n            mediaQuery = undefined;\n        }\n        if (mutationObserver) {\n            mutationObserver.disconnect();\n            mutationObserver = undefined;\n        }\n    }\n    function cleanup() {\n        stopObservers();\n        stopWatch();\n    }\n    onUnmounted(() => cleanup());\n    return {\n        isDark,\n        displayMode,\n        cleanup,\n    };\n}\n\nfunction resolveValue({ 'min-width': _minWidth, min = _minWidth, max, raw } = {}) {\n    return { min, max, raw };\n}\n/**\n * A function that normalizes the various forms that the screens object can be\n * provided in.\n *\n * Input(s):\n *   - ['100px', '200px'] // Raw strings\n *   - { sm: '100px', md: '200px' } // Object with string values\n *   - { sm: { min: '100px' }, md: { max: '100px' } } // Object with object values\n *   - { sm: [{ min: '100px' }, { max: '200px' }] } // Object with object array (multiple values)\n *\n * Output(s):\n *   - [{ name: 'sm', values: [{ min: '100px', max: '200px' }] }] // List of objects, that contains multiple values\n */\nfunction normalizeScreens(screens, root = true) {\n    if (Array.isArray(screens)) {\n        return screens.map((screen) => {\n            if (root && Array.isArray(screen)) {\n                throw new Error('The tuple syntax is not supported for `screens`.');\n            }\n            if (typeof screen === 'string') {\n                return { name: screen.toString(), values: [{ min: screen, max: undefined }] };\n            }\n            let [name, options] = screen;\n            name = name.toString();\n            if (typeof options === 'string') {\n                return { name, values: [{ min: options, max: undefined }] };\n            }\n            if (Array.isArray(options)) {\n                return { name, values: options.map((option) => resolveValue(option)) };\n            }\n            return { name, values: [resolveValue(options)] };\n        });\n    }\n    return normalizeScreens(Object.entries(screens ?? {}), false);\n}\n\n// This function gratuitously borrowed from TailwindCSS\n// https://github.com/tailwindcss/tailwindcss/blob/master/src/util/buildMediaQuery.js\nfunction buildMediaQuery(screenValues) {\n    return screenValues\n        .map((sv) => {\n        if (sv.raw !== undefined)\n            return sv.raw;\n        return [sv.min && `(min-width: ${sv.min})`, sv.max && `(max-width: ${sv.max})`].filter(Boolean).join(' and ');\n    })\n        .join(', ');\n}\n\nvar defaultScreens = {\n    xs: '0px',\n    sm: '640px',\n    md: '768px',\n    lg: '1024px',\n    xl: '1280px',\n};\n\nconst defaultInjectKey = '$screens';\nfunction initScreens(screens) {\n    const state = reactive({\n        screens: normalizeScreens(screens || defaultScreens),\n        queries: {},\n        matches: {},\n        hasSetup: false,\n    });\n    function refreshMatches() {\n        Object.entries(state.queries).forEach(([key, query]) => {\n            state.matches[key] = query.matches;\n        });\n    }\n    function mapList(config) {\n        return computed(() => Object.keys(state.matches)\n            .filter((key) => state.matches[key] === true && config.hasOwnProperty(key))\n            .map((key) => config[key]));\n    }\n    const list = computed(() => Object.keys(state.matches).filter((k) => state.matches[k]));\n    function mapCurrent(config, def) {\n        return computed(() => {\n            const curr = current.value;\n            if (curr && config.hasOwnProperty(curr))\n                return config[curr];\n            return def;\n        });\n    }\n    const current = computed(() => {\n        const arr = list.value;\n        if (arr.length)\n            return arr[arr.length - 1];\n        return '';\n    });\n    function cleanup() {\n        Object.values(state.queries).forEach((query) => query.removeEventListener('change', refreshMatches));\n        state.queries = {};\n        state.matches = {};\n    }\n    if (!state.hasSetup && windowHasFeature('matchMedia')) {\n        cleanup();\n        state.queries = state.screens.reduce((result, { name, values }) => {\n            const mediaQuery = window.matchMedia(buildMediaQuery(values));\n            mediaQuery.addEventListener('change', refreshMatches);\n            result[name] = mediaQuery;\n            return result;\n        }, {});\n        refreshMatches();\n        state.hasSetup = true;\n    }\n    return { matches: state.matches, list, mapList, current, mapCurrent, cleanup };\n}\n\nfunction useScreens(screens, opts) {\n    const s = initScreens(screens);\n    provide(opts?.injectKey || defaultInjectKey, s);\n    onUnmounted(() => s.cleanup());\n    return s;\n}\n\nconst plugin = {\n    install: (app, screens, opts) => {\n        const s = initScreens(screens);\n        const key = opts?.injectKey || defaultInjectKey;\n        // Inject a globally available screens object method\n        app.config.globalProperties[key] = s;\n        // Provide screens object\n        app.provide(key, s);\n    },\n};\n\nexport { buildMediaQuery, normalizeScreens, plugin as screens, useDarkMode, useMediaQuery, useResizeObserver, useScreens };\n//# sourceMappingURL=index.mjs.map\n","import { Attribute } from './attribute';\r\nimport type { DateRangeCell } from './date/range';\r\nimport { defaultsDeep, hasAny, isObject, isString } from './helpers';\r\n\r\ntype GlyphTarget = 'base' | 'start' | 'end' | 'startEnd';\r\ntype ThemeProp =\r\n  | 'class'\r\n  | 'wrapperClass'\r\n  | 'contentClass'\r\n  | 'style'\r\n  | 'contentStyle'\r\n  | 'color'\r\n  | 'fillMode';\r\n\r\nconst targetProps: GlyphTarget[] = ['base', 'start', 'end', 'startEnd'];\r\nconst displayProps: ThemeProp[] = [\r\n  'class',\r\n  'wrapperClass',\r\n  'contentClass',\r\n  'style',\r\n  'contentStyle',\r\n  'color',\r\n  'fillMode',\r\n];\r\n\r\nexport interface Glyph {\r\n  key: string | number;\r\n  color: string;\r\n  class: string | any[];\r\n  style: Record<string, any>;\r\n}\r\n\r\nexport interface Profile<T> {\r\n  start: T;\r\n  base: T;\r\n  end: T;\r\n  startEnd?: T;\r\n}\r\n\r\n// Highlights\r\nexport type HighlightFillMode = 'solid' | 'light' | 'outline';\r\nexport interface Highlight extends Glyph {\r\n  fillMode: HighlightFillMode;\r\n  wrapperClass: string | any[];\r\n  contentClass: string | any[];\r\n  contentStyle: Record<string, any>;\r\n}\r\nexport type HighlightConfig =\r\n  | boolean\r\n  | string\r\n  | Partial<Highlight | Profile<Partial<Highlight>>>;\r\n\r\n// Dots\r\nexport type Dot = Glyph;\r\nexport type DotConfig = boolean | string | Partial<Dot | Profile<Partial<Dot>>>;\r\n\r\n// Bars\r\nexport type Bar = Glyph;\r\nexport type BarConfig = boolean | string | Partial<Bar | Profile<Partial<Bar>>>;\r\n\r\n// Content\r\nexport type Content = Glyph;\r\nexport type ContentConfig =\r\n  | string\r\n  | Partial<Content | Profile<Partial<Content>>>;\r\n\r\nconst _defaultProfile = { base: {}, start: {}, end: {} };\r\n\r\nfunction normalizeConfig(\r\n  color: string,\r\n  config: any,\r\n  defaultProfile: any = _defaultProfile,\r\n): Profile<Glyph> {\r\n  let rootColor = color;\r\n  let root: any = {};\r\n  // Get the normalized root config\r\n  if (config === true || isString(config)) {\r\n    // Assign default color for booleans or strings\r\n    rootColor = isString(config) ? config : rootColor;\r\n    // Set the default root\r\n    root = { ...defaultProfile };\r\n  } else if (isObject(config)) {\r\n    if (hasAny(config as Record<string, any>, targetProps)) {\r\n      // Mixin target configs\r\n      root = { ...config };\r\n    } else {\r\n      // Mixin display configs\r\n      root = {\r\n        base: { ...(config as Record<string, any>) },\r\n        start: { ...(config as Record<string, any>) },\r\n        end: { ...(config as Record<string, any>) },\r\n      };\r\n    }\r\n  }\r\n  // Fill in missing targets\r\n  const result = defaultsDeep(\r\n    root,\r\n    { start: root.startEnd, end: root.startEnd },\r\n    defaultProfile,\r\n  ) as Profile<any>;\r\n  // Normalize each target\r\n  Object.entries(result).forEach(([targetType, targetConfig]) => {\r\n    let targetColor = rootColor;\r\n    if (targetConfig === true || isString(targetConfig)) {\r\n      targetColor = isString(targetConfig) ? targetConfig : targetColor;\r\n      // @ts-ignore\r\n      result[targetType] = { color: targetColor };\r\n    } else if (isObject(targetConfig)) {\r\n      if (hasAny(targetConfig, displayProps)) {\r\n        // @ts-ignore\r\n        result[targetType] = { ...targetConfig };\r\n      } else {\r\n        // @ts-ignore\r\n        result[targetType] = {};\r\n      }\r\n    }\r\n    // Set the theme color if it is missing\r\n    // @ts-ignore\r\n    defaultsDeep(result[targetType], { color: targetColor });\r\n  });\r\n  return result;\r\n}\r\n\r\nexport interface GlyphRenderer<P extends Partial<Glyph>> {\r\n  type: string;\r\n  normalizeConfig(color: string, config: any): Profile<P>;\r\n  prepareRender(glyphs: Record<string, P[]>): void;\r\n  render(attr: DateRangeCell<Attribute>, glyphs: Record<string, P[]>): void;\r\n}\r\n\r\nexport class HighlightRenderer implements GlyphRenderer<Highlight> {\r\n  type = 'highlight';\r\n\r\n  normalizeConfig(color: string, config: any) {\r\n    return normalizeConfig(color, config, {\r\n      base: { fillMode: 'light' },\r\n      start: { fillMode: 'solid' },\r\n      end: { fillMode: 'solid' },\r\n    }) as Profile<Highlight>;\r\n  }\r\n\r\n  prepareRender(glyphs: Record<string, Glyph[]>) {\r\n    glyphs.highlights = [];\r\n    if (!glyphs.content) glyphs.content = [];\r\n  }\r\n\r\n  render(\r\n    { data, onStart, onEnd }: DateRangeCell<Attribute>,\r\n    glyphs: Record<string, Highlight[]>,\r\n  ) {\r\n    const { key, highlight } = data;\r\n    if (!highlight) return;\r\n    const { highlights } = glyphs;\r\n    const { base, start, end } = highlight;\r\n    if (onStart && onEnd) {\r\n      highlights.push({\r\n        ...start,\r\n        key,\r\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${start.color}`,\r\n        class: [`vc-highlight vc-highlight-bg-${start.fillMode}`, start.class],\r\n        contentClass: [\r\n          `vc-attr vc-highlight-content-${start.fillMode} vc-${start.color}`,\r\n          start.contentClass,\r\n        ],\r\n      });\r\n    } else if (onStart) {\r\n      highlights.push({\r\n        ...base,\r\n        key: `${key}-base`,\r\n        wrapperClass: `vc-day-layer vc-day-box-right-center vc-attr vc-${base.color}`,\r\n        class: [\r\n          `vc-highlight vc-highlight-base-start vc-highlight-bg-${base.fillMode}`,\r\n          base.class,\r\n        ],\r\n      });\r\n      highlights.push({\r\n        ...start,\r\n        key,\r\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${start.color}`,\r\n        class: [`vc-highlight vc-highlight-bg-${start.fillMode}`, start.class],\r\n        contentClass: [\r\n          `vc-attr vc-highlight-content-${start.fillMode} vc-${start.color}`,\r\n          start.contentClass,\r\n        ],\r\n      });\r\n    } else if (onEnd) {\r\n      highlights.push({\r\n        ...base,\r\n        key: `${key}-base`,\r\n        wrapperClass: `vc-day-layer vc-day-box-left-center vc-attr vc-${base.color}`,\r\n        class: [\r\n          `vc-highlight vc-highlight-base-end vc-highlight-bg-${base.fillMode}`,\r\n          base.class,\r\n        ],\r\n      });\r\n      highlights.push({\r\n        ...end,\r\n        key,\r\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${end.color}`,\r\n        class: [`vc-highlight vc-highlight-bg-${end.fillMode}`, end.class],\r\n        contentClass: [\r\n          `vc-attr vc-highlight-content-${end.fillMode} vc-${end.color}`,\r\n          end.contentClass,\r\n        ],\r\n      });\r\n    } else {\r\n      highlights.push({\r\n        ...base,\r\n        key: `${key}-middle`,\r\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${base.color}`,\r\n        class: [\r\n          `vc-highlight vc-highlight-base-middle vc-highlight-bg-${base.fillMode}`,\r\n          base.class,\r\n        ],\r\n        contentClass: [\r\n          `vc-attr vc-highlight-content-${base.fillMode} vc-${base.color}`,\r\n          base.contentClass,\r\n        ],\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\nexport class BaseRenderer<T extends Partial<Glyph>>\r\n  implements GlyphRenderer<T>\r\n{\r\n  type = '';\r\n  collectionType = '';\r\n\r\n  constructor(type: string, collectionType: string) {\r\n    this.type = type;\r\n    this.collectionType = collectionType;\r\n  }\r\n\r\n  normalizeConfig(color: string, config: any) {\r\n    return normalizeConfig(color, config) as Profile<T>;\r\n  }\r\n\r\n  prepareRender(glyphs: Record<string, T[]>) {\r\n    glyphs[this.collectionType] = [];\r\n  }\r\n\r\n  render(\r\n    { data, onStart, onEnd }: DateRangeCell<Attribute>,\r\n    glyphs: Record<string, T[]>,\r\n  ) {\r\n    const { key } = data;\r\n    const item = data[this.type as keyof Attribute];\r\n    if (!key || !item) {\r\n      return;\r\n    }\r\n    const collection = glyphs[this.collectionType];\r\n    const { base, start, end } = item;\r\n    if (onStart) {\r\n      collection.push({\r\n        ...start,\r\n        key,\r\n        class: [\r\n          `vc-${this.type} vc-${this.type}-start vc-${start.color} vc-attr`,\r\n          start.class,\r\n        ],\r\n      });\r\n    } else if (onEnd) {\r\n      collection.push({\r\n        ...end,\r\n        key,\r\n        class: [\r\n          `vc-${this.type} vc-${this.type}-end vc-${end.color} vc-attr`,\r\n          end.class,\r\n        ],\r\n      });\r\n    } else {\r\n      collection.push({\r\n        ...base,\r\n        key,\r\n        class: [\r\n          `vc-${this.type} vc-${this.type}-base vc-${base.color} vc-attr`,\r\n          base.class,\r\n        ],\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\nexport class ContentRenderer extends BaseRenderer<Content> {\r\n  constructor() {\r\n    super('content', 'content');\r\n  }\r\n\r\n  normalizeConfig(_: string, config: any) {\r\n    return normalizeConfig('base', config) as Profile<Content>;\r\n  }\r\n}\r\n\r\nexport class DotRenderer extends BaseRenderer<Dot> {\r\n  constructor() {\r\n    super('dot', 'dots');\r\n  }\r\n}\r\n\r\nexport class BarRenderer extends BaseRenderer<Dot> {\r\n  constructor() {\r\n    super('bar', 'bars');\r\n  }\r\n}\r\n","import type { DateRangeCell } from '@/utils/date/range';\r\nimport { Attribute } from './attribute';\r\nimport {\r\n  type Bar,\r\n  BarRenderer,\r\n  type Content,\r\n  ContentRenderer,\r\n  type Dot,\r\n  DotRenderer,\r\n  type Glyph,\r\n  type GlyphRenderer,\r\n  type Highlight,\r\n  HighlightRenderer,\r\n} from './glyph';\r\n\r\nexport interface Glyphs {\r\n  highlights: Highlight[];\r\n  dots: Dot[];\r\n  bars: Bar[];\r\n  content: Content[];\r\n}\r\n\r\nexport class Theme {\r\n  color: string;\r\n  renderers: GlyphRenderer<Glyph>[] = [\r\n    new ContentRenderer(),\r\n    new HighlightRenderer(),\r\n    new DotRenderer(),\r\n    new BarRenderer(),\r\n  ];\r\n\r\n  constructor(color: string) {\r\n    this.color = color;\r\n  }\r\n\r\n  normalizeGlyphs(attr: Attribute) {\r\n    this.renderers.forEach(renderer => {\r\n      const type = renderer.type as keyof Attribute;\r\n      if (attr[type] != null) {\r\n        // @ts-ignore\r\n        attr[type] = renderer.normalizeConfig(this.color, attr[type]);\r\n      }\r\n    });\r\n  }\r\n\r\n  prepareRender(glyphs: Partial<Glyphs> = {}) {\r\n    this.renderers.forEach(renderer => {\r\n      renderer.prepareRender(glyphs);\r\n    });\r\n    return glyphs;\r\n  }\r\n\r\n  render(cell: DateRangeCell<Attribute>, glyphs: Partial<Glyphs>) {\r\n    this.renderers.forEach(renderer => {\r\n      renderer.render(cell, glyphs);\r\n    });\r\n  }\r\n}\r\n","import {\r\n  type ExtractPropTypes,\r\n  type PropType,\r\n  computed,\r\n  inject,\r\n  provide,\r\n} from 'vue';\r\nimport { type DarkModeClassConfig, useDarkMode } from 'vue-screen-utils';\r\nimport { Attribute } from '../utils/attribute';\r\nimport { type DayOfWeek, addDays } from '../utils/date/helpers';\r\nimport { getDefault } from '../utils/defaults';\r\nimport { isObject } from '../utils/helpers';\r\nimport { default as Locale, type LocaleConfig } from '../utils/locale';\r\nimport { Theme } from '../utils/theme';\r\n\r\nconst contextKey = Symbol('__vc_base_context__');\r\n\r\nexport const propsDef = {\r\n  color: {\r\n    type: String,\r\n    default: () => getDefault('color'),\r\n  },\r\n  isDark: {\r\n    type: [Boolean, String, Object] as PropType<\r\n      boolean | 'system' | DarkModeClassConfig\r\n    >,\r\n    default: () => getDefault('isDark'),\r\n  },\r\n  firstDayOfWeek: Number as PropType<DayOfWeek>,\r\n  masks: Object,\r\n  locale: [String, Object] as PropType<string | Record<string, any> | Locale>,\r\n  timezone: String,\r\n  minDate: null,\r\n  maxDate: null,\r\n  disabledDates: null,\r\n};\r\n\r\nexport type BaseProps = Readonly<ExtractPropTypes<typeof propsDef>>;\r\n\r\nexport type BaseContext = ReturnType<typeof createBase>;\r\n\r\nexport function createBase(props: BaseProps) {\r\n  // #region Computed\r\n\r\n  const color = computed(() => props.color ?? '');\r\n  const isDark = computed(() => props.isDark ?? false);\r\n  const { displayMode } = useDarkMode(isDark);\r\n  const theme = computed(() => new Theme(color.value));\r\n\r\n  const locale = computed(() => {\r\n    // Return the locale prop if it is an instance of the Locale class\r\n    if (props.locale instanceof Locale) return props.locale;\r\n    // Build up a base config from component props\r\n    const config = (\r\n      isObject(props.locale)\r\n        ? props.locale\r\n        : {\r\n            id: props.locale,\r\n            firstDayOfWeek: props.firstDayOfWeek,\r\n            masks: props.masks,\r\n          }\r\n    ) as Partial<LocaleConfig>;\r\n    // Return new locale\r\n    return new Locale(config, props.timezone);\r\n  });\r\n\r\n  const masks = computed(() => locale.value.masks);\r\n\r\n  const minDate = computed(() => props.minDate);\r\n  const maxDate = computed(() => props.maxDate);\r\n\r\n  const disabledDates = computed(() => {\r\n    const dates: any[] = props.disabledDates ? [...props.disabledDates] : [];\r\n    // Add disabled range for min date\r\n    if (minDate.value != null) {\r\n      dates.push({\r\n        start: null,\r\n        end: addDays(locale.value.toDate(minDate.value), -1),\r\n      });\r\n    }\r\n    // Add disabled range for max date\r\n    if (maxDate.value != null) {\r\n      dates.push({\r\n        start: addDays(locale.value.toDate(maxDate.value), 1),\r\n        end: null,\r\n      });\r\n    }\r\n    return locale.value.ranges(dates);\r\n  });\r\n\r\n  const disabledAttribute = computed(() => {\r\n    return new Attribute(\r\n      {\r\n        key: 'disabled',\r\n        dates: disabledDates.value,\r\n        order: 100,\r\n      },\r\n      theme.value,\r\n      locale.value,\r\n    );\r\n  });\r\n\r\n  // #endregion Computed\r\n\r\n  const context = {\r\n    color,\r\n    isDark,\r\n    displayMode,\r\n    theme,\r\n    locale,\r\n    masks,\r\n    minDate,\r\n    maxDate,\r\n    disabledDates,\r\n    disabledAttribute,\r\n  };\r\n  provide(contextKey, context);\r\n  return context;\r\n}\r\n\r\nexport function useBase() {\r\n  const context = inject<BaseContext>(contextKey);\r\n  if (context) return context;\r\n  throw new Error(\r\n    'Base context missing. Please verify this component is nested within a valid context provider.',\r\n  );\r\n}\r\n\r\nexport function useOrCreateBase(props: BaseProps) {\r\n  return inject<BaseContext>(contextKey, () => createBase(props), true);\r\n}\r\n","import { type SetupContext, inject, provide } from 'vue';\r\n\r\ntype Slots = SetupContext['slots'];\r\n\r\nfunction contextKey(slotKey: string) {\r\n  return `__vc_slot_${slotKey}__`;\r\n}\r\n\r\nexport function provideSlots(slots: Slots, remap: Record<string, string> = {}) {\r\n  Object.keys(slots).forEach(slotKey => {\r\n    provide(contextKey(remap[slotKey] ?? slotKey), slots[slotKey]);\r\n  });\r\n}\r\n\r\nexport function useSlot(slotKey: string) {\r\n  return inject(contextKey(slotKey), null);\r\n}\r\n","import {\r\n  type ExtractPropTypes,\r\n  type PropType,\r\n  type SetupContext,\r\n  computed,\r\n  inject,\r\n  onMounted,\r\n  onUnmounted,\r\n  provide,\r\n  ref,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue';\r\nimport { Attribute, type AttributeConfig } from '../utils/attribute';\r\nimport {\r\n  type DateSource,\r\n  addDays,\r\n  addMonths,\r\n  addYears,\r\n} from '../utils/date/helpers';\r\nimport { type DateRangeCell, DateRangeContext } from '../utils/date/range';\r\nimport { getDefault } from '../utils/defaults';\r\nimport {\r\n  type CustomElement,\r\n  arrayHasItems,\r\n  has,\r\n  head,\r\n  isBoolean,\r\n  last,\r\n} from '../utils/helpers';\r\nimport {\r\n  type CalendarDay,\r\n  type CalendarWeek,\r\n  type Page,\r\n  type PageAddress,\r\n  type TitlePosition,\r\n  addPages as _addPages,\r\n  getPageAddressForDate,\r\n  pageIsAfterPage,\r\n  pageIsBeforePage,\r\n  pageIsBetweenPages,\r\n  pageIsEqualToPage,\r\n  pageIsValid,\r\n  pageRangeToArray,\r\n} from '../utils/page';\r\nimport { type PopoverVisibility, hidePopover } from '../utils/popovers';\r\nimport { addHorizontalSwipeHandler } from '../utils/touch';\r\nimport { handleWatcher, skipWatcher } from '../utils/watchers';\r\nimport { propsDef as basePropsDef, useOrCreateBase } from './base';\r\nimport { provideSlots } from './slots';\r\n\r\nexport type CalendarView = 'daily' | 'weekly' | 'monthly';\r\n\r\nexport type MoveTarget = DateSource | PageAddress;\r\n\r\nexport type MoveTransition = 'none' | 'fade' | 'slide-v' | 'slide-h';\r\n\r\nexport interface MoveOptions {\r\n  position: number;\r\n  view: CalendarView;\r\n  transition: MoveTransition;\r\n  force: boolean;\r\n  fromPage: PageAddress;\r\n  toPage: PageAddress;\r\n}\r\n\r\nexport interface RefreshOptions {\r\n  page: PageAddress;\r\n  position: number;\r\n  force: boolean;\r\n  transition: MoveTransition;\r\n}\r\n\r\nexport type DayCells = Record<\r\n  number,\r\n  { day: CalendarDay; cells: DateRangeCell<Attribute>[] }\r\n>;\r\n\r\nexport type CalendarProps = Readonly<ExtractPropTypes<typeof propsDef>>;\r\n\r\ntype IContainer = Pick<Element, 'querySelector'> & CustomElement;\r\n\r\nexport type CalendarContext = ReturnType<typeof createCalendar>;\r\n\r\nexport const propsDef = {\r\n  ...basePropsDef,\r\n  view: {\r\n    type: String as PropType<CalendarView>,\r\n    default: 'monthly',\r\n    validator(value: string) {\r\n      return ['daily', 'weekly', 'monthly'].includes(value);\r\n    },\r\n  },\r\n  rows: {\r\n    type: Number,\r\n    default: 1,\r\n  },\r\n  columns: {\r\n    type: Number,\r\n    default: 1,\r\n  },\r\n  step: Number,\r\n  titlePosition: {\r\n    type: String as PropType<TitlePosition>,\r\n    default: () => getDefault('titlePosition') as TitlePosition,\r\n  },\r\n  navVisibility: {\r\n    type: String as PropType<PopoverVisibility>,\r\n    default: () => getDefault('navVisibility') as PopoverVisibility,\r\n  },\r\n  showWeeknumbers: [Boolean, String],\r\n  showIsoWeeknumbers: [Boolean, String],\r\n  expanded: Boolean,\r\n  borderless: Boolean,\r\n  transparent: Boolean,\r\n  initialPage: Object as PropType<PageAddress>,\r\n  initialPagePosition: { type: Number, default: 1 },\r\n  minPage: Object as PropType<PageAddress>,\r\n  maxPage: Object as PropType<PageAddress>,\r\n  transition: String as PropType<MoveTransition>,\r\n  attributes: Array as PropType<Array<AttributeConfig>>,\r\n  trimWeeks: Boolean,\r\n  disablePageSwipe: Boolean,\r\n};\r\n\r\nexport const emitsDef = [\r\n  'dayclick',\r\n  'daymouseenter',\r\n  'daymouseleave',\r\n  'dayfocusin',\r\n  'dayfocusout',\r\n  'daykeydown',\r\n  'weeknumberclick',\r\n  'transition-start',\r\n  'transition-end',\r\n  'did-move',\r\n  'update:view',\r\n  'update:pages',\r\n];\r\n\r\nconst contextKey = Symbol('__vc_calendar_context__');\r\n\r\nexport function createCalendar(\r\n  props: CalendarProps,\r\n  { slots, emit }: Pick<SetupContext, 'slots' | 'emit'>,\r\n) {\r\n  // #region Refs\r\n\r\n  const containerRef = ref<IContainer | null>(null);\r\n  const focusedDay = ref<CalendarDay | null>(null);\r\n  const focusableDay = ref(new Date().getDate());\r\n  const inTransition = ref(false);\r\n  const navPopoverId = ref(Symbol());\r\n  const dayPopoverId = ref(Symbol());\r\n  const _view = ref(props.view);\r\n  const _pages = ref<Page[]>([]);\r\n  const transitionName = ref('');\r\n\r\n  // #endregion\r\n\r\n  // Non-reactive util vars\r\n  let transitionPromise: any = null;\r\n  let removeHandlers: any = null;\r\n\r\n  provideSlots(slots);\r\n\r\n  const {\r\n    theme,\r\n    color,\r\n    displayMode,\r\n    locale,\r\n    masks,\r\n    minDate,\r\n    maxDate,\r\n    disabledAttribute,\r\n    disabledDates,\r\n  } = useOrCreateBase(props);\r\n\r\n  // #region Computed\r\n\r\n  const count = computed(() => props.rows * props.columns);\r\n\r\n  const step = computed(() => props.step || count.value);\r\n\r\n  const firstPage = computed(() => head(_pages.value) ?? null);\r\n\r\n  const lastPage = computed(() => last(_pages.value) ?? null);\r\n\r\n  const minPage = computed(\r\n    () =>\r\n      props.minPage || (minDate.value ? getDateAddress(minDate.value) : null),\r\n  );\r\n\r\n  const maxPage = computed(\r\n    () =>\r\n      props.maxPage || (maxDate.value ? getDateAddress(maxDate.value) : null),\r\n  );\r\n\r\n  const navVisibility = computed(() => props.navVisibility);\r\n\r\n  const showWeeknumbers = computed(() => !!props.showWeeknumbers);\r\n\r\n  const showIsoWeeknumbers = computed(() => !!props.showIsoWeeknumbers);\r\n\r\n  const isMonthly = computed(() => _view.value === 'monthly');\r\n  const isWeekly = computed(() => _view.value === 'weekly');\r\n  const isDaily = computed(() => _view.value === 'daily');\r\n\r\n  // #endregion Computed\r\n\r\n  // #region Methods\r\n\r\n  const onTransitionBeforeEnter = () => {\r\n    inTransition.value = true;\r\n    emit('transition-start');\r\n  };\r\n\r\n  const onTransitionAfterEnter = () => {\r\n    inTransition.value = false;\r\n    emit('transition-end');\r\n    if (transitionPromise) {\r\n      transitionPromise.resolve(true);\r\n      transitionPromise = null;\r\n    }\r\n  };\r\n\r\n  const addPages = (\r\n    address: PageAddress,\r\n    count: number,\r\n    view = _view.value,\r\n  ) => {\r\n    return _addPages(address, count, view, locale.value);\r\n  };\r\n\r\n  const getDateAddress = (date: DateSource) => {\r\n    return getPageAddressForDate(date, _view.value, locale.value);\r\n  };\r\n\r\n  const refreshDisabled = (day: CalendarDay) => {\r\n    if (!disabledAttribute.value || !attributeContext.value) return;\r\n    day.isDisabled = attributeContext.value.cellExists(\r\n      disabledAttribute.value.key,\r\n      day.dayIndex,\r\n    );\r\n  };\r\n\r\n  const refreshFocusable = (day: CalendarDay) => {\r\n    day.isFocusable = day.inMonth && day.day === focusableDay.value;\r\n  };\r\n\r\n  const forDays = (pages: Page[], fn: (day: CalendarDay) => boolean | void) => {\r\n    for (const page of pages) {\r\n      for (const day of page.days) {\r\n        if (fn(day) === false) return;\r\n      }\r\n    }\r\n  };\r\n\r\n  const days = computed(() =>\r\n    _pages.value.reduce((result: CalendarDay[], page: Page) => {\r\n      result.push(...page.viewDays);\r\n      return result;\r\n    }, [] as CalendarDay[]),\r\n  );\r\n\r\n  const attributes = computed(() => {\r\n    const result: Attribute[] = [];\r\n    (props.attributes || []).forEach((attr, i) => {\r\n      if (!attr || !attr.dates) return;\r\n      result.push(\r\n        new Attribute(\r\n          {\r\n            ...attr,\r\n            order: attr.order || 0,\r\n          },\r\n          theme.value,\r\n          locale.value,\r\n        ),\r\n      );\r\n    });\r\n    if (disabledAttribute.value) {\r\n      result.push(disabledAttribute.value);\r\n    }\r\n    return result;\r\n  });\r\n\r\n  const hasAttributes = computed(() => arrayHasItems(attributes.value));\r\n\r\n  const attributeContext = computed(() => {\r\n    const ctx = new DateRangeContext();\r\n    attributes.value.forEach(attr => {\r\n      attr.ranges.forEach(range => {\r\n        ctx.render(attr, range, days.value);\r\n      });\r\n    });\r\n    return ctx;\r\n  });\r\n\r\n  const dayCells = computed(() => {\r\n    return days.value.reduce((result, day) => {\r\n      result[day.dayIndex] = { day, cells: [] };\r\n      result[day.dayIndex].cells.push(...attributeContext.value.getCells(day));\r\n      return result;\r\n    }, {} as DayCells);\r\n  });\r\n\r\n  const getWeeknumberPosition = (column: number, columnFromEnd: number) => {\r\n    const showWeeknumbers = props.showWeeknumbers || props.showIsoWeeknumbers;\r\n    if (showWeeknumbers == null) return '';\r\n    if (isBoolean(showWeeknumbers)) {\r\n      return showWeeknumbers ? 'left' : '';\r\n    }\r\n    if (showWeeknumbers.startsWith('right')) {\r\n      return columnFromEnd > 1 ? 'right' : showWeeknumbers;\r\n    }\r\n    return column > 1 ? 'left' : showWeeknumbers;\r\n  };\r\n\r\n  const getPageForAttributes = () => {\r\n    if (!hasAttributes.value) return null;\r\n    const attr =\r\n      attributes.value.find(attr => attr.pinPage) || attributes.value[0];\r\n    if (!attr || !attr.hasRanges) return null;\r\n    const [range] = attr.ranges;\r\n    const date = range.start?.date || range.end?.date;\r\n    return date ? getDateAddress(date) : null;\r\n  };\r\n\r\n  const getDefaultInitialPage = () => {\r\n    // 1. Try existing first page\r\n    if (pageIsValid(firstPage.value)) return firstPage.value as PageAddress;\r\n    // 2. Try the first attribute\r\n    const page = getPageForAttributes();\r\n    if (pageIsValid(page)) return page as PageAddress;\r\n    // 3. Use today's page\r\n    return getDateAddress(new Date());\r\n  };\r\n\r\n  const getTargetPageRange = (\r\n    page: PageAddress,\r\n    opts: Partial<MoveOptions> = {},\r\n  ) => {\r\n    const { view = _view.value, position = 1, force } = opts;\r\n    const pagesToAdd = position > 0 ? 1 - position : -(count.value + position);\r\n    let fromPage = addPages(page, pagesToAdd, view);\r\n    let toPage = addPages(fromPage!, count.value - 1, view);\r\n\r\n    // Adjust range for min/max if not forced\r\n    if (!force) {\r\n      if (pageIsBeforePage(fromPage, minPage.value)) {\r\n        fromPage = minPage.value!;\r\n      } else if (pageIsAfterPage(toPage, maxPage.value)) {\r\n        fromPage = addPages(maxPage.value!, 1 - count.value);\r\n      }\r\n      toPage = addPages(fromPage!, count.value - 1);\r\n    }\r\n    return { fromPage, toPage };\r\n  };\r\n\r\n  const getPageTransition = (\r\n    oldPage: Page,\r\n    newPage: Page,\r\n    defaultTransition = '',\r\n  ) => {\r\n    if (defaultTransition === 'none' || defaultTransition === 'fade')\r\n      return defaultTransition;\r\n    // Moving to a different view\r\n    if (oldPage?.view !== newPage?.view) return 'fade';\r\n    // Moving to a previous page\r\n    const moveNext = pageIsAfterPage(newPage, oldPage);\r\n    const movePrev = pageIsBeforePage(newPage, oldPage);\r\n    if (!moveNext && !movePrev) {\r\n      return 'fade';\r\n    }\r\n    // Vertical slide\r\n    if (defaultTransition === 'slide-v') {\r\n      return movePrev ? 'slide-down' : 'slide-up';\r\n    }\r\n    // Horizontal slide\r\n    return movePrev ? 'slide-right' : 'slide-left';\r\n  };\r\n\r\n  const refreshPages = (opts: Partial<RefreshOptions> = {}) => {\r\n    return new Promise((resolve, reject) => {\r\n      const { position = 1, force = false, transition } = opts;\r\n      const page = pageIsValid(opts.page)\r\n        ? opts.page!\r\n        : getDefaultInitialPage();\r\n      const { fromPage } = getTargetPageRange(page, {\r\n        position,\r\n        force,\r\n      });\r\n      // Create the new pages\r\n      const pages: Page[] = [];\r\n      for (let i = 0; i < count.value; i++) {\r\n        const newPage = addPages(fromPage!, i);\r\n        const position = i + 1;\r\n        const row = Math.ceil(position / props.columns);\r\n        const rowFromEnd = props.rows - row + 1;\r\n        const column = position % props.columns || props.columns;\r\n        const columnFromEnd = props.columns - column + 1;\r\n        const weeknumberPosition = getWeeknumberPosition(column, columnFromEnd);\r\n        pages.push(\r\n          locale.value.getPage({\r\n            ...newPage,\r\n            view: _view.value,\r\n            titlePosition: props.titlePosition,\r\n            trimWeeks: props.trimWeeks,\r\n            position,\r\n            row,\r\n            rowFromEnd,\r\n            column,\r\n            columnFromEnd,\r\n            showWeeknumbers: showWeeknumbers.value,\r\n            showIsoWeeknumbers: showIsoWeeknumbers.value,\r\n            weeknumberPosition,\r\n          }),\r\n        );\r\n      }\r\n      // Assign the transition\r\n      transitionName.value = getPageTransition(\r\n        _pages.value[0],\r\n        pages[0],\r\n        transition,\r\n      );\r\n      // Assign the new pages\r\n      _pages.value = pages;\r\n      // Cache or resolve transition promise\r\n      if (transitionName.value && transitionName.value !== 'none') {\r\n        transitionPromise = {\r\n          resolve,\r\n          reject,\r\n        };\r\n      } else {\r\n        resolve(true);\r\n      }\r\n    });\r\n  };\r\n\r\n  const targetBy = (pages: number) => {\r\n    const fromPage = firstPage.value ?? getDateAddress(new Date());\r\n    return addPages(fromPage, pages);\r\n  };\r\n\r\n  const canMove = (target: MoveTarget, opts: Partial<MoveOptions> = {}) => {\r\n    const page = pageIsValid(target as PageAddress)\r\n      ? (target as Page)\r\n      : getDateAddress(target as DateSource);\r\n    // Calculate new page range without adjusting to min/max\r\n    Object.assign(\r\n      opts,\r\n      getTargetPageRange(page, {\r\n        ...opts,\r\n        force: true,\r\n      }),\r\n    );\r\n    // Verify we can move to any pages in the target range\r\n    const pagesInRange = pageRangeToArray(\r\n      opts.fromPage!,\r\n      opts.toPage!,\r\n      _view.value,\r\n      locale.value,\r\n    ).map(p => pageIsBetweenPages(p, minPage.value, maxPage.value));\r\n    return pagesInRange.some(val => val);\r\n  };\r\n\r\n  const canMoveBy = (pages: number, opts: Partial<MoveOptions> = {}) => {\r\n    return canMove(targetBy(pages), opts);\r\n  };\r\n\r\n  const canMovePrev = computed(() => canMoveBy(-step.value));\r\n\r\n  const canMoveNext = computed(() => canMoveBy(step.value));\r\n\r\n  const move = async (target: MoveTarget, opts: Partial<MoveOptions> = {}) => {\r\n    // Return if we can't move to this page\r\n    if (!opts.force && !canMove(target, opts)) return false;\r\n    // Move to new `fromPage` if it's different from the current one\r\n    if (opts.fromPage && !pageIsEqualToPage(opts.fromPage, firstPage.value)) {\r\n      // Hide nav popover for good measure\r\n      hidePopover({ id: navPopoverId.value, hideDelay: 0 });\r\n      // Quietly change view if needed\r\n      if (opts.view) {\r\n        skipWatcher('view', 10);\r\n        _view.value = opts.view;\r\n      }\r\n      await refreshPages({\r\n        ...opts,\r\n        page: opts.fromPage,\r\n        position: 1,\r\n        force: true,\r\n      });\r\n      emit('did-move', _pages.value);\r\n    }\r\n    return true;\r\n  };\r\n\r\n  const moveBy = (pages: number, opts: Partial<MoveOptions> = {}) => {\r\n    return move(targetBy(pages), opts);\r\n  };\r\n\r\n  const movePrev = () => {\r\n    return moveBy(-step.value);\r\n  };\r\n\r\n  const moveNext = () => {\r\n    return moveBy(step.value);\r\n  };\r\n\r\n  const tryFocusDate = (date: Date) => {\r\n    const inMonth = isMonthly.value ? '.in-month' : '';\r\n    const daySelector = `.id-${locale.value.getDayId(date)}${inMonth}`;\r\n    const selector = `${daySelector}.vc-focusable, ${daySelector} .vc-focusable`;\r\n    const el = containerRef.value;\r\n    if (el) {\r\n      const focusableEl = el.querySelector(selector) as HTMLElement;\r\n      if (focusableEl) {\r\n        focusableEl.focus();\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  };\r\n\r\n  const focusDate = async (date: Date, opts: Partial<MoveOptions> = {}) => {\r\n    if (tryFocusDate(date)) return true;\r\n    // Move to the given date\r\n    await move(date, opts);\r\n    return tryFocusDate(date);\r\n  };\r\n\r\n  const onDayClick = (day: CalendarDay, event: MouseEvent) => {\r\n    focusableDay.value = day.day;\r\n    emit('dayclick', day, event);\r\n  };\r\n\r\n  const onDayMouseenter = (day: CalendarDay, event: MouseEvent) => {\r\n    emit('daymouseenter', day, event);\r\n  };\r\n\r\n  const onDayMouseleave = (day: CalendarDay, event: MouseEvent) => {\r\n    emit('daymouseleave', day, event);\r\n  };\r\n\r\n  const onDayFocusin = (day: CalendarDay, event: FocusEvent | null) => {\r\n    focusableDay.value = day.day;\r\n    focusedDay.value = day;\r\n    day.isFocused = true;\r\n    emit('dayfocusin', day, event);\r\n  };\r\n\r\n  const onDayFocusout = (day: CalendarDay, event: FocusEvent) => {\r\n    focusedDay.value = null;\r\n    day.isFocused = false;\r\n    emit('dayfocusout', day, event);\r\n  };\r\n\r\n  const onDayKeydown = (day: CalendarDay, event: KeyboardEvent) => {\r\n    emit('daykeydown', day, event);\r\n    const date = day.noonDate;\r\n    let newDate = null;\r\n    switch (event.key) {\r\n      case 'ArrowLeft': {\r\n        // Move to previous day\r\n        newDate = addDays(date, -1);\r\n        break;\r\n      }\r\n      case 'ArrowRight': {\r\n        // Move to next day\r\n        newDate = addDays(date, 1);\r\n        break;\r\n      }\r\n      case 'ArrowUp': {\r\n        // Move to previous week\r\n        newDate = addDays(date, -7);\r\n        break;\r\n      }\r\n      case 'ArrowDown': {\r\n        // Move to next week\r\n        newDate = addDays(date, 7);\r\n        break;\r\n      }\r\n      case 'Home': {\r\n        // Move to first weekday position\r\n        newDate = addDays(date, -day.weekdayPosition + 1);\r\n        break;\r\n      }\r\n      case 'End': {\r\n        // Move to last weekday position\r\n        newDate = addDays(date, day.weekdayPositionFromEnd);\r\n        break;\r\n      }\r\n      case 'PageUp': {\r\n        if (event.altKey) {\r\n          // Move to previous year w/ Alt/Option key\r\n          newDate = addYears(date, -1);\r\n        } else {\r\n          // Move to previous month\r\n          newDate = addMonths(date, -1);\r\n        }\r\n        break;\r\n      }\r\n      case 'PageDown': {\r\n        if (event.altKey) {\r\n          // Move to next year w/ Alt/Option key\r\n          newDate = addYears(date, 1);\r\n        } else {\r\n          // Move to next month\r\n          newDate = addMonths(date, 1);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n    if (newDate) {\r\n      event.preventDefault();\r\n      focusDate(newDate).catch();\r\n    }\r\n  };\r\n\r\n  const onKeydown = (event: KeyboardEvent) => {\r\n    const day = focusedDay.value;\r\n    if (day != null) {\r\n      onDayKeydown(day, event);\r\n    }\r\n  };\r\n\r\n  const onWeeknumberClick = (week: CalendarWeek, event: MouseEvent) => {\r\n    emit('weeknumberclick', week, event);\r\n  };\r\n\r\n  // #endregion Methods\r\n\r\n  // #region Lifecycle methods\r\n\r\n  // Created\r\n\r\n  refreshPages({\r\n    page: props.initialPage,\r\n    position: props.initialPagePosition,\r\n  });\r\n\r\n  // Mounted\r\n\r\n  onMounted(() => {\r\n    if (!props.disablePageSwipe && containerRef.value) {\r\n      // Add swipe handler to move to next and previous pages\r\n      removeHandlers = addHorizontalSwipeHandler(\r\n        containerRef.value,\r\n        ({ toLeft = false, toRight = false }) => {\r\n          if (toLeft) {\r\n            moveNext();\r\n          } else if (toRight) {\r\n            movePrev();\r\n          }\r\n        },\r\n        getDefault('touch'),\r\n      );\r\n    }\r\n  });\r\n\r\n  // Unmounted\r\n  onUnmounted(() => {\r\n    _pages.value = [];\r\n    if (removeHandlers) removeHandlers();\r\n  });\r\n\r\n  // #endregion Lifecycle methods\r\n\r\n  // #region Watch\r\n\r\n  watch(\r\n    () => locale.value,\r\n    () => {\r\n      refreshPages();\r\n    },\r\n  );\r\n\r\n  watch(\r\n    () => count.value,\r\n    () => refreshPages(),\r\n  );\r\n\r\n  watch(\r\n    () => props.view,\r\n    () => (_view.value = props.view),\r\n  );\r\n\r\n  watch(\r\n    () => _view.value,\r\n    () => {\r\n      handleWatcher('view', () => {\r\n        refreshPages();\r\n      });\r\n      emit('update:view', _view.value);\r\n    },\r\n  );\r\n\r\n  watch(\r\n    () => focusableDay.value,\r\n    () => {\r\n      forDays(_pages.value, day => refreshFocusable(day));\r\n    },\r\n  );\r\n\r\n  watchEffect(() => {\r\n    emit('update:pages', _pages.value);\r\n    // Refresh state for days\r\n    forDays(_pages.value, day => {\r\n      // Refresh disabled state\r\n      refreshDisabled(day);\r\n      // Refresh focusable state\r\n      refreshFocusable(day);\r\n    });\r\n  });\r\n\r\n  // #endregion Watch\r\n\r\n  const context = {\r\n    emit,\r\n    containerRef,\r\n    focusedDay,\r\n    inTransition,\r\n    navPopoverId,\r\n    dayPopoverId,\r\n    view: _view,\r\n    pages: _pages,\r\n    transitionName,\r\n    theme,\r\n    color,\r\n    displayMode,\r\n    locale,\r\n    masks,\r\n    attributes,\r\n    disabledAttribute,\r\n    disabledDates,\r\n    attributeContext,\r\n    days,\r\n    dayCells,\r\n    count,\r\n    step,\r\n    firstPage,\r\n    lastPage,\r\n    canMovePrev,\r\n    canMoveNext,\r\n    minPage,\r\n    maxPage,\r\n    isMonthly,\r\n    isWeekly,\r\n    isDaily,\r\n    navVisibility,\r\n    showWeeknumbers,\r\n    showIsoWeeknumbers,\r\n    getDateAddress,\r\n    canMove,\r\n    canMoveBy,\r\n    move,\r\n    moveBy,\r\n    movePrev,\r\n    moveNext,\r\n    onTransitionBeforeEnter,\r\n    onTransitionAfterEnter,\r\n    tryFocusDate,\r\n    focusDate,\r\n    onKeydown,\r\n    onDayKeydown,\r\n    onDayClick,\r\n    onDayMouseenter,\r\n    onDayMouseleave,\r\n    onDayFocusin,\r\n    onDayFocusout,\r\n    onWeeknumberClick,\r\n  };\r\n  provide(contextKey, context);\r\n  return context;\r\n}\r\n\r\nexport function useCalendar(): CalendarContext {\r\n  const context = inject<CalendarContext>(contextKey);\r\n  if (context) return context;\r\n  throw new Error(\r\n    'Calendar context missing. Please verify this component is nested within a valid context provider.',\r\n  );\r\n}\r\n","<template>\r\n  <div\r\n    class=\"vc-popover-content-wrapper\"\r\n    :class=\"{ 'is-interactive': isInteractive }\"\r\n    ref=\"popoverRef\"\r\n    @click=\"onClick\"\r\n    @mouseover=\"onMouseOver\"\r\n    @mouseleave=\"onMouseLeave\"\r\n    @focusin=\"onFocusIn\"\r\n    @focusout=\"onFocusOut\"\r\n  >\r\n    <Transition\r\n      :name=\"`vc-${transition}`\"\r\n      appear\r\n      @before-enter=\"beforeEnter\"\r\n      @after-enter=\"afterEnter\"\r\n      @before-leave=\"beforeLeave\"\r\n      @after-leave=\"afterLeave\"\r\n    >\r\n      <div\r\n        v-if=\"isVisible\"\r\n        tabindex=\"-1\"\r\n        :class=\"`vc-popover-content direction-${direction}`\"\r\n        v-bind=\"$attrs\"\r\n      >\r\n        <slot\r\n          :direction=\"direction\"\r\n          :alignment=\"alignment\"\r\n          :data=\"data\"\r\n          :hide=\"hide\"\r\n        >\r\n          {{ data }}\r\n        </slot>\r\n        <span\r\n          :class=\"[\r\n            'vc-popover-caret',\r\n            `direction-${direction}`,\r\n            `align-${alignment}`,\r\n          ]\"\r\n        />\r\n      </div>\r\n    </Transition>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n  type Instance,\r\n  type OptionsGeneric,\r\n  type State as PopperState,\r\n  type PositioningStrategy,\r\n  createPopper,\r\n} from '@popperjs/core';\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  onUnmounted,\r\n  reactive,\r\n  ref,\r\n  toRefs,\r\n  watch,\r\n} from 'vue';\r\nimport { elementContains, off, omit, on, resolveEl } from '../../utils/helpers';\r\nimport type {\r\n  PopoverEvent,\r\n  PopoverOptions,\r\n  PopoverState,\r\n} from '../../utils/popovers';\r\n\r\nexport default defineComponent({\r\n  inheritAttrs: false,\r\n  emits: ['before-show', 'after-show', 'before-hide', 'after-hide'],\r\n  props: {\r\n    id: { type: [Number, String, Symbol], required: true },\r\n    showDelay: { type: Number, default: 0 },\r\n    hideDelay: { type: Number, default: 110 },\r\n    boundarySelector: { type: String },\r\n  },\r\n  setup(props, { emit }) {\r\n    let timeout: number | undefined = undefined;\r\n    const popoverRef = ref<HTMLElement>();\r\n    let resizeObserver: ResizeObserver | null = null;\r\n    let popper: Instance | null = null;\r\n\r\n    const state: PopoverState = reactive({\r\n      isVisible: false,\r\n      target: null,\r\n      data: null,\r\n      transition: 'slide-fade',\r\n      placement: 'bottom',\r\n      direction: '',\r\n      positionFixed: false,\r\n      modifiers: [],\r\n      isInteractive: true,\r\n      visibility: 'click',\r\n      isHovered: false,\r\n      isFocused: false,\r\n      autoHide: false,\r\n      force: false,\r\n    });\r\n\r\n    function updateDirection(placement?: string) {\r\n      if (placement) state.direction = placement.split('-')[0];\r\n    }\r\n\r\n    function onPopperUpdate({ placement, options }: Partial<PopperState>) {\r\n      updateDirection(placement || options?.placement);\r\n    }\r\n\r\n    const popperOptions = computed<Partial<OptionsGeneric<any>>>(() => {\r\n      return {\r\n        placement: state.placement,\r\n        strategy: (state.positionFixed\r\n          ? 'fixed'\r\n          : 'absolute') as PositioningStrategy,\r\n        boundary: '',\r\n        modifiers: [\r\n          {\r\n            name: 'onUpdate',\r\n            enabled: true,\r\n            phase: 'afterWrite',\r\n            fn: onPopperUpdate,\r\n          },\r\n          ...(state.modifiers || []),\r\n        ],\r\n        onFirstUpdate: onPopperUpdate,\r\n      };\r\n      // if (props.boundarySelector) {\r\n      //   const boundary = document.querySelector(props.boundarySelector);\r\n      //   modifiers.push({\r\n      //     name: 'boundary',\r\n      //     enabled: true,\r\n      //     phase: 'main',\r\n      //     requiresIfExists: ['offset'],\r\n      //     fn({ state }) {\r\n      //       console.log(\r\n      //         detectOverflow(state, {\r\n      //           boundary,\r\n      //           altBoundary: true,\r\n      //         }),\r\n      //       );\r\n      //     },\r\n      //   });\r\n      // }\r\n    });\r\n\r\n    const alignment = computed(() => {\r\n      const isLeftRight =\r\n        state.direction === 'left' || state.direction === 'right';\r\n      let alignment = '';\r\n      if (state.placement) {\r\n        const parts = state.placement.split('-');\r\n        if (parts.length > 1) alignment = parts[1];\r\n      }\r\n      if (['start', 'top', 'left'].includes(alignment)) {\r\n        return isLeftRight ? 'top' : 'left';\r\n      }\r\n      if (['end', 'bottom', 'right'].includes(alignment)) {\r\n        return isLeftRight ? 'bottom' : 'right';\r\n      }\r\n      return isLeftRight ? 'middle' : 'center';\r\n    });\r\n\r\n    function destroyPopper() {\r\n      if (popper) {\r\n        popper.destroy();\r\n        popper = null;\r\n      }\r\n    }\r\n\r\n    function setupPopper() {\r\n      nextTick(() => {\r\n        const el = resolveEl(state.target);\r\n        if (!el || !popoverRef.value) return;\r\n        if (popper && popper.state.elements.reference !== el) {\r\n          destroyPopper();\r\n        }\r\n        if (!popper) {\r\n          popper = createPopper(\r\n            el as Element,\r\n            popoverRef.value,\r\n            popperOptions.value,\r\n          );\r\n        } else {\r\n          popper.update();\r\n        }\r\n      });\r\n    }\r\n\r\n    function updateState(newState: Partial<PopoverState>) {\r\n      Object.assign(state, omit(newState, 'force'));\r\n    }\r\n\r\n    function setTimer(delay: number, fn: Function) {\r\n      clearTimeout(timeout);\r\n      if (delay > 0) {\r\n        timeout = setTimeout(fn, delay);\r\n      } else {\r\n        fn();\r\n      }\r\n    }\r\n\r\n    function isCurrentTarget(target: unknown) {\r\n      if (!target || !popper) return false;\r\n      const el = resolveEl(target);\r\n      return el === popper.state.elements.reference;\r\n    }\r\n\r\n    async function show(opts: Partial<PopoverOptions> = {}) {\r\n      if (state.force) return;\r\n      if (opts.force) state.force = true;\r\n\r\n      setTimer(opts.showDelay ?? props.showDelay, () => {\r\n        if (state.isVisible) {\r\n          state.force = false;\r\n        }\r\n        updateState({\r\n          ...opts,\r\n          isVisible: true,\r\n        });\r\n        setupPopper();\r\n      });\r\n    }\r\n\r\n    function hide(opts: Partial<PopoverOptions> = {}) {\r\n      if (!popper) return;\r\n      if (opts.target && !isCurrentTarget(opts.target)) return;\r\n\r\n      if (state.force) return;\r\n      if (opts.force) state.force = true;\r\n\r\n      setTimer(opts.hideDelay ?? props.hideDelay, () => {\r\n        if (!state.isVisible) state.force = false;\r\n        state.isVisible = false;\r\n      });\r\n    }\r\n\r\n    function toggle(opts: Partial<PopoverOptions> = {}) {\r\n      if (opts.target == null) return;\r\n      if (state.isVisible && isCurrentTarget(opts.target)) {\r\n        hide(opts);\r\n      } else {\r\n        show(opts);\r\n      }\r\n    }\r\n\r\n    function onDocumentClick(e: CustomEvent) {\r\n      if (!popper) return;\r\n      const popperRef = popper.state.elements.reference;\r\n      if (!popoverRef.value || !popperRef) {\r\n        return;\r\n      }\r\n      // Don't hide if target element is contained within popover ref or content\r\n      const target = e.target as Node;\r\n      if (\r\n        elementContains(popoverRef.value, target) ||\r\n        elementContains(popperRef as Node, target)\r\n      ) {\r\n        return;\r\n      }\r\n      // Hide the popover\r\n      hide({ force: true });\r\n    }\r\n\r\n    function onDocumentKeydown(e: KeyboardEvent) {\r\n      if (e.key === 'Esc' || e.key === 'Escape') {\r\n        hide();\r\n      }\r\n    }\r\n\r\n    function onDocumentShowPopover({ detail }: PopoverEvent) {\r\n      if (!detail.id || detail.id !== props.id) return;\r\n      show(detail);\r\n    }\r\n\r\n    function onDocumentHidePopover({ detail }: PopoverEvent) {\r\n      if (!detail.id || detail.id !== props.id) return;\r\n      hide(detail);\r\n    }\r\n\r\n    function onDocumentTogglePopover({ detail }: PopoverEvent) {\r\n      if (!detail.id || detail.id !== props.id) return;\r\n      toggle(detail);\r\n    }\r\n\r\n    function addEvents() {\r\n      on(document, 'keydown', onDocumentKeydown);\r\n      on(document, 'click', onDocumentClick);\r\n      on(document, 'show-popover', onDocumentShowPopover);\r\n      on(document, 'hide-popover', onDocumentHidePopover);\r\n      on(document, 'toggle-popover', onDocumentTogglePopover);\r\n    }\r\n\r\n    function removeEvents() {\r\n      off(document, 'keydown', onDocumentKeydown);\r\n      off(document, 'click', onDocumentClick);\r\n      off(document, 'show-popover', onDocumentShowPopover);\r\n      off(document, 'hide-popover', onDocumentHidePopover);\r\n      off(document, 'toggle-popover', onDocumentTogglePopover);\r\n    }\r\n\r\n    function beforeEnter(el: Element) {\r\n      emit('before-show', el);\r\n    }\r\n\r\n    function afterEnter(el: Element) {\r\n      state.force = false;\r\n      emit('after-show', el);\r\n    }\r\n\r\n    function beforeLeave(el: Element) {\r\n      emit('before-hide', el);\r\n    }\r\n\r\n    function afterLeave(el: Element) {\r\n      state.force = false;\r\n      destroyPopper();\r\n      emit('after-hide', el);\r\n    }\r\n\r\n    function onClick(e: MouseEvent) {\r\n      e.stopPropagation();\r\n    }\r\n\r\n    function onMouseOver() {\r\n      state.isHovered = true;\r\n      if (\r\n        state.isInteractive &&\r\n        ['hover', 'hover-focus'].includes(state.visibility)\r\n      ) {\r\n        show();\r\n      }\r\n    }\r\n\r\n    function onMouseLeave() {\r\n      state.isHovered = false;\r\n      if (!popper) return;\r\n      const popperRef = popper.state.elements.reference;\r\n      if (\r\n        state.autoHide &&\r\n        !state.isFocused &&\r\n        (!popperRef || popperRef !== document.activeElement) &&\r\n        ['hover', 'hover-focus'].includes(state.visibility)\r\n      ) {\r\n        hide();\r\n      }\r\n    }\r\n\r\n    function onFocusIn() {\r\n      state.isFocused = true;\r\n      if (\r\n        state.isInteractive &&\r\n        ['focus', 'hover-focus'].includes(state.visibility)\r\n      ) {\r\n        show();\r\n      }\r\n    }\r\n\r\n    function onFocusOut(e: FocusEvent) {\r\n      if (\r\n        ['focus', 'hover-focus'].includes(state.visibility) &&\r\n        (!e.relatedTarget ||\r\n          !elementContains(popoverRef.value!, e.relatedTarget as Node))\r\n      ) {\r\n        state.isFocused = false;\r\n        if (!state.isHovered && state.autoHide) hide();\r\n      }\r\n    }\r\n\r\n    function cleanupRO() {\r\n      if (resizeObserver != null) {\r\n        resizeObserver.disconnect();\r\n        resizeObserver = null;\r\n      }\r\n    }\r\n\r\n    watch(\r\n      () => popoverRef.value,\r\n      val => {\r\n        cleanupRO();\r\n        if (!val) return;\r\n        resizeObserver = new ResizeObserver(() => {\r\n          if (popper) popper.update();\r\n        });\r\n        resizeObserver.observe(val);\r\n      },\r\n    );\r\n\r\n    watch(() => state.placement, updateDirection, {\r\n      immediate: true,\r\n    });\r\n\r\n    onMounted(() => {\r\n      addEvents();\r\n    });\r\n\r\n    onUnmounted(() => {\r\n      destroyPopper();\r\n      cleanupRO();\r\n      removeEvents();\r\n    });\r\n\r\n    return {\r\n      ...toRefs(state),\r\n      popoverRef,\r\n      alignment,\r\n      hide,\r\n      setupPopper,\r\n      beforeEnter,\r\n      afterEnter,\r\n      beforeLeave,\r\n      afterLeave,\r\n      onClick,\r\n      onMouseOver,\r\n      onMouseLeave,\r\n      onFocusIn,\r\n      onFocusOut,\r\n    };\r\n  },\r\n});\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-popover-content-wrapper {\r\n  --popover-horizontal-content-offset: 8px;\r\n  --popover-vertical-content-offset: 10px;\r\n  --popover-caret-horizontal-offset: 18px;\r\n  --popover-caret-vertical-offset: 8px;\r\n\r\n  position: absolute;\r\n  display: block;\r\n  outline: none;\r\n  z-index: 10;\r\n  &:not(.is-interactive) {\r\n    pointer-events: none;\r\n  }\r\n}\r\n\r\n.vc-popover-content {\r\n  position: relative;\r\n  color: var(--vc-popover-content-color);\r\n  font-weight: var(--vc-font-medium);\r\n  background-color: var(--vc-popover-content-bg);\r\n  border: 1px solid;\r\n  border-color: var(--vc-popover-content-border);\r\n  border-radius: var(--vc-rounded-lg);\r\n  padding: 4px;\r\n  outline: none;\r\n  z-index: 10;\r\n  box-shadow: var(--vc-shadow-lg);\r\n  &.direction-bottom {\r\n    margin-top: var(--popover-vertical-content-offset);\r\n  }\r\n  &.direction-top {\r\n    margin-bottom: var(--popover-vertical-content-offset);\r\n  }\r\n  &.direction-left {\r\n    margin-right: var(--popover-horizontal-content-offset);\r\n  }\r\n  &.direction-right {\r\n    margin-left: var(--popover-horizontal-content-offset);\r\n  }\r\n}\r\n\r\n.vc-popover-caret {\r\n  content: '';\r\n  position: absolute;\r\n  display: block;\r\n  width: 12px;\r\n  height: 12px;\r\n  border-top: inherit;\r\n  border-left: inherit;\r\n  background-color: inherit;\r\n  z-index: -1;\r\n  &.direction-bottom {\r\n    top: 0;\r\n    &.align-left {\r\n      transform: translateY(-50%) rotate(45deg);\r\n    }\r\n    &.align-center {\r\n      transform: translateX(-50%) translateY(-50%) rotate(45deg);\r\n    }\r\n    &.align-right {\r\n      transform: translateY(-50%) rotate(45deg);\r\n    }\r\n  }\r\n  &.direction-top {\r\n    top: 100%;\r\n    &.align-left {\r\n      transform: translateY(-50%) rotate(-135deg);\r\n    }\r\n    &.align-center {\r\n      transform: translateX(-50%) translateY(-50%) rotate(-135deg);\r\n    }\r\n    &.align-right {\r\n      transform: translateY(-50%) rotate(-135deg);\r\n    }\r\n  }\r\n  &.direction-left {\r\n    left: 100%;\r\n    &.align-top {\r\n      transform: translateX(-50%) rotate(135deg);\r\n    }\r\n    &.align-middle {\r\n      transform: translateY(-50%) translateX(-50%) rotate(135deg);\r\n    }\r\n    &.align-bottom {\r\n      transform: translateX(-50%) rotate(135deg);\r\n    }\r\n  }\r\n  &.direction-right {\r\n    left: 0;\r\n    &.align-top {\r\n      transform: translateX(-50%) rotate(-45deg);\r\n    }\r\n    &.align-middle {\r\n      transform: translateY(-50%) translateX(-50%) rotate(-45deg);\r\n    }\r\n    &.align-bottom {\r\n      transform: translateX(-50%) rotate(-45deg);\r\n    }\r\n  }\r\n  &.align-left {\r\n    left: var(--popover-caret-horizontal-offset);\r\n  }\r\n  &.align-center {\r\n    left: 50%;\r\n  }\r\n  &.align-right {\r\n    right: var(--popover-caret-horizontal-offset);\r\n  }\r\n  &.align-top {\r\n    top: var(--popover-caret-vertical-offset);\r\n  }\r\n  &.align-middle {\r\n    top: 50%;\r\n  }\r\n  &.align-bottom {\r\n    bottom: var(--popover-caret-vertical-offset);\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    class=\"vc-popover-content-wrapper\"\r\n    :class=\"{ 'is-interactive': isInteractive }\"\r\n    ref=\"popoverRef\"\r\n    @click=\"onClick\"\r\n    @mouseover=\"onMouseOver\"\r\n    @mouseleave=\"onMouseLeave\"\r\n    @focusin=\"onFocusIn\"\r\n    @focusout=\"onFocusOut\"\r\n  >\r\n    <Transition\r\n      :name=\"`vc-${transition}`\"\r\n      appear\r\n      @before-enter=\"beforeEnter\"\r\n      @after-enter=\"afterEnter\"\r\n      @before-leave=\"beforeLeave\"\r\n      @after-leave=\"afterLeave\"\r\n    >\r\n      <div\r\n        v-if=\"isVisible\"\r\n        tabindex=\"-1\"\r\n        :class=\"`vc-popover-content direction-${direction}`\"\r\n        v-bind=\"$attrs\"\r\n      >\r\n        <slot\r\n          :direction=\"direction\"\r\n          :alignment=\"alignment\"\r\n          :data=\"data\"\r\n          :hide=\"hide\"\r\n        >\r\n          {{ data }}\r\n        </slot>\r\n        <span\r\n          :class=\"[\r\n            'vc-popover-caret',\r\n            `direction-${direction}`,\r\n            `align-${alignment}`,\r\n          ]\"\r\n        />\r\n      </div>\r\n    </Transition>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n  type Instance,\r\n  type OptionsGeneric,\r\n  type State as PopperState,\r\n  type PositioningStrategy,\r\n  createPopper,\r\n} from '@popperjs/core';\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  onUnmounted,\r\n  reactive,\r\n  ref,\r\n  toRefs,\r\n  watch,\r\n} from 'vue';\r\nimport { elementContains, off, omit, on, resolveEl } from '../../utils/helpers';\r\nimport type {\r\n  PopoverEvent,\r\n  PopoverOptions,\r\n  PopoverState,\r\n} from '../../utils/popovers';\r\n\r\nexport default defineComponent({\r\n  inheritAttrs: false,\r\n  emits: ['before-show', 'after-show', 'before-hide', 'after-hide'],\r\n  props: {\r\n    id: { type: [Number, String, Symbol], required: true },\r\n    showDelay: { type: Number, default: 0 },\r\n    hideDelay: { type: Number, default: 110 },\r\n    boundarySelector: { type: String },\r\n  },\r\n  setup(props, { emit }) {\r\n    let timeout: number | undefined = undefined;\r\n    const popoverRef = ref<HTMLElement>();\r\n    let resizeObserver: ResizeObserver | null = null;\r\n    let popper: Instance | null = null;\r\n\r\n    const state: PopoverState = reactive({\r\n      isVisible: false,\r\n      target: null,\r\n      data: null,\r\n      transition: 'slide-fade',\r\n      placement: 'bottom',\r\n      direction: '',\r\n      positionFixed: false,\r\n      modifiers: [],\r\n      isInteractive: true,\r\n      visibility: 'click',\r\n      isHovered: false,\r\n      isFocused: false,\r\n      autoHide: false,\r\n      force: false,\r\n    });\r\n\r\n    function updateDirection(placement?: string) {\r\n      if (placement) state.direction = placement.split('-')[0];\r\n    }\r\n\r\n    function onPopperUpdate({ placement, options }: Partial<PopperState>) {\r\n      updateDirection(placement || options?.placement);\r\n    }\r\n\r\n    const popperOptions = computed<Partial<OptionsGeneric<any>>>(() => {\r\n      return {\r\n        placement: state.placement,\r\n        strategy: (state.positionFixed\r\n          ? 'fixed'\r\n          : 'absolute') as PositioningStrategy,\r\n        boundary: '',\r\n        modifiers: [\r\n          {\r\n            name: 'onUpdate',\r\n            enabled: true,\r\n            phase: 'afterWrite',\r\n            fn: onPopperUpdate,\r\n          },\r\n          ...(state.modifiers || []),\r\n        ],\r\n        onFirstUpdate: onPopperUpdate,\r\n      };\r\n      // if (props.boundarySelector) {\r\n      //   const boundary = document.querySelector(props.boundarySelector);\r\n      //   modifiers.push({\r\n      //     name: 'boundary',\r\n      //     enabled: true,\r\n      //     phase: 'main',\r\n      //     requiresIfExists: ['offset'],\r\n      //     fn({ state }) {\r\n      //       console.log(\r\n      //         detectOverflow(state, {\r\n      //           boundary,\r\n      //           altBoundary: true,\r\n      //         }),\r\n      //       );\r\n      //     },\r\n      //   });\r\n      // }\r\n    });\r\n\r\n    const alignment = computed(() => {\r\n      const isLeftRight =\r\n        state.direction === 'left' || state.direction === 'right';\r\n      let alignment = '';\r\n      if (state.placement) {\r\n        const parts = state.placement.split('-');\r\n        if (parts.length > 1) alignment = parts[1];\r\n      }\r\n      if (['start', 'top', 'left'].includes(alignment)) {\r\n        return isLeftRight ? 'top' : 'left';\r\n      }\r\n      if (['end', 'bottom', 'right'].includes(alignment)) {\r\n        return isLeftRight ? 'bottom' : 'right';\r\n      }\r\n      return isLeftRight ? 'middle' : 'center';\r\n    });\r\n\r\n    function destroyPopper() {\r\n      if (popper) {\r\n        popper.destroy();\r\n        popper = null;\r\n      }\r\n    }\r\n\r\n    function setupPopper() {\r\n      nextTick(() => {\r\n        const el = resolveEl(state.target);\r\n        if (!el || !popoverRef.value) return;\r\n        if (popper && popper.state.elements.reference !== el) {\r\n          destroyPopper();\r\n        }\r\n        if (!popper) {\r\n          popper = createPopper(\r\n            el as Element,\r\n            popoverRef.value,\r\n            popperOptions.value,\r\n          );\r\n        } else {\r\n          popper.update();\r\n        }\r\n      });\r\n    }\r\n\r\n    function updateState(newState: Partial<PopoverState>) {\r\n      Object.assign(state, omit(newState, 'force'));\r\n    }\r\n\r\n    function setTimer(delay: number, fn: Function) {\r\n      clearTimeout(timeout);\r\n      if (delay > 0) {\r\n        timeout = setTimeout(fn, delay);\r\n      } else {\r\n        fn();\r\n      }\r\n    }\r\n\r\n    function isCurrentTarget(target: unknown) {\r\n      if (!target || !popper) return false;\r\n      const el = resolveEl(target);\r\n      return el === popper.state.elements.reference;\r\n    }\r\n\r\n    async function show(opts: Partial<PopoverOptions> = {}) {\r\n      if (state.force) return;\r\n      if (opts.force) state.force = true;\r\n\r\n      setTimer(opts.showDelay ?? props.showDelay, () => {\r\n        if (state.isVisible) {\r\n          state.force = false;\r\n        }\r\n        updateState({\r\n          ...opts,\r\n          isVisible: true,\r\n        });\r\n        setupPopper();\r\n      });\r\n    }\r\n\r\n    function hide(opts: Partial<PopoverOptions> = {}) {\r\n      if (!popper) return;\r\n      if (opts.target && !isCurrentTarget(opts.target)) return;\r\n\r\n      if (state.force) return;\r\n      if (opts.force) state.force = true;\r\n\r\n      setTimer(opts.hideDelay ?? props.hideDelay, () => {\r\n        if (!state.isVisible) state.force = false;\r\n        state.isVisible = false;\r\n      });\r\n    }\r\n\r\n    function toggle(opts: Partial<PopoverOptions> = {}) {\r\n      if (opts.target == null) return;\r\n      if (state.isVisible && isCurrentTarget(opts.target)) {\r\n        hide(opts);\r\n      } else {\r\n        show(opts);\r\n      }\r\n    }\r\n\r\n    function onDocumentClick(e: CustomEvent) {\r\n      if (!popper) return;\r\n      const popperRef = popper.state.elements.reference;\r\n      if (!popoverRef.value || !popperRef) {\r\n        return;\r\n      }\r\n      // Don't hide if target element is contained within popover ref or content\r\n      const target = e.target as Node;\r\n      if (\r\n        elementContains(popoverRef.value, target) ||\r\n        elementContains(popperRef as Node, target)\r\n      ) {\r\n        return;\r\n      }\r\n      // Hide the popover\r\n      hide({ force: true });\r\n    }\r\n\r\n    function onDocumentKeydown(e: KeyboardEvent) {\r\n      if (e.key === 'Esc' || e.key === 'Escape') {\r\n        hide();\r\n      }\r\n    }\r\n\r\n    function onDocumentShowPopover({ detail }: PopoverEvent) {\r\n      if (!detail.id || detail.id !== props.id) return;\r\n      show(detail);\r\n    }\r\n\r\n    function onDocumentHidePopover({ detail }: PopoverEvent) {\r\n      if (!detail.id || detail.id !== props.id) return;\r\n      hide(detail);\r\n    }\r\n\r\n    function onDocumentTogglePopover({ detail }: PopoverEvent) {\r\n      if (!detail.id || detail.id !== props.id) return;\r\n      toggle(detail);\r\n    }\r\n\r\n    function addEvents() {\r\n      on(document, 'keydown', onDocumentKeydown);\r\n      on(document, 'click', onDocumentClick);\r\n      on(document, 'show-popover', onDocumentShowPopover);\r\n      on(document, 'hide-popover', onDocumentHidePopover);\r\n      on(document, 'toggle-popover', onDocumentTogglePopover);\r\n    }\r\n\r\n    function removeEvents() {\r\n      off(document, 'keydown', onDocumentKeydown);\r\n      off(document, 'click', onDocumentClick);\r\n      off(document, 'show-popover', onDocumentShowPopover);\r\n      off(document, 'hide-popover', onDocumentHidePopover);\r\n      off(document, 'toggle-popover', onDocumentTogglePopover);\r\n    }\r\n\r\n    function beforeEnter(el: Element) {\r\n      emit('before-show', el);\r\n    }\r\n\r\n    function afterEnter(el: Element) {\r\n      state.force = false;\r\n      emit('after-show', el);\r\n    }\r\n\r\n    function beforeLeave(el: Element) {\r\n      emit('before-hide', el);\r\n    }\r\n\r\n    function afterLeave(el: Element) {\r\n      state.force = false;\r\n      destroyPopper();\r\n      emit('after-hide', el);\r\n    }\r\n\r\n    function onClick(e: MouseEvent) {\r\n      e.stopPropagation();\r\n    }\r\n\r\n    function onMouseOver() {\r\n      state.isHovered = true;\r\n      if (\r\n        state.isInteractive &&\r\n        ['hover', 'hover-focus'].includes(state.visibility)\r\n      ) {\r\n        show();\r\n      }\r\n    }\r\n\r\n    function onMouseLeave() {\r\n      state.isHovered = false;\r\n      if (!popper) return;\r\n      const popperRef = popper.state.elements.reference;\r\n      if (\r\n        state.autoHide &&\r\n        !state.isFocused &&\r\n        (!popperRef || popperRef !== document.activeElement) &&\r\n        ['hover', 'hover-focus'].includes(state.visibility)\r\n      ) {\r\n        hide();\r\n      }\r\n    }\r\n\r\n    function onFocusIn() {\r\n      state.isFocused = true;\r\n      if (\r\n        state.isInteractive &&\r\n        ['focus', 'hover-focus'].includes(state.visibility)\r\n      ) {\r\n        show();\r\n      }\r\n    }\r\n\r\n    function onFocusOut(e: FocusEvent) {\r\n      if (\r\n        ['focus', 'hover-focus'].includes(state.visibility) &&\r\n        (!e.relatedTarget ||\r\n          !elementContains(popoverRef.value!, e.relatedTarget as Node))\r\n      ) {\r\n        state.isFocused = false;\r\n        if (!state.isHovered && state.autoHide) hide();\r\n      }\r\n    }\r\n\r\n    function cleanupRO() {\r\n      if (resizeObserver != null) {\r\n        resizeObserver.disconnect();\r\n        resizeObserver = null;\r\n      }\r\n    }\r\n\r\n    watch(\r\n      () => popoverRef.value,\r\n      val => {\r\n        cleanupRO();\r\n        if (!val) return;\r\n        resizeObserver = new ResizeObserver(() => {\r\n          if (popper) popper.update();\r\n        });\r\n        resizeObserver.observe(val);\r\n      },\r\n    );\r\n\r\n    watch(() => state.placement, updateDirection, {\r\n      immediate: true,\r\n    });\r\n\r\n    onMounted(() => {\r\n      addEvents();\r\n    });\r\n\r\n    onUnmounted(() => {\r\n      destroyPopper();\r\n      cleanupRO();\r\n      removeEvents();\r\n    });\r\n\r\n    return {\r\n      ...toRefs(state),\r\n      popoverRef,\r\n      alignment,\r\n      hide,\r\n      setupPopper,\r\n      beforeEnter,\r\n      afterEnter,\r\n      beforeLeave,\r\n      afterLeave,\r\n      onClick,\r\n      onMouseOver,\r\n      onMouseLeave,\r\n      onFocusIn,\r\n      onFocusOut,\r\n    };\r\n  },\r\n});\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-popover-content-wrapper {\r\n  --popover-horizontal-content-offset: 8px;\r\n  --popover-vertical-content-offset: 10px;\r\n  --popover-caret-horizontal-offset: 18px;\r\n  --popover-caret-vertical-offset: 8px;\r\n\r\n  position: absolute;\r\n  display: block;\r\n  outline: none;\r\n  z-index: 10;\r\n  &:not(.is-interactive) {\r\n    pointer-events: none;\r\n  }\r\n}\r\n\r\n.vc-popover-content {\r\n  position: relative;\r\n  color: var(--vc-popover-content-color);\r\n  font-weight: var(--vc-font-medium);\r\n  background-color: var(--vc-popover-content-bg);\r\n  border: 1px solid;\r\n  border-color: var(--vc-popover-content-border);\r\n  border-radius: var(--vc-rounded-lg);\r\n  padding: 4px;\r\n  outline: none;\r\n  z-index: 10;\r\n  box-shadow: var(--vc-shadow-lg);\r\n  &.direction-bottom {\r\n    margin-top: var(--popover-vertical-content-offset);\r\n  }\r\n  &.direction-top {\r\n    margin-bottom: var(--popover-vertical-content-offset);\r\n  }\r\n  &.direction-left {\r\n    margin-right: var(--popover-horizontal-content-offset);\r\n  }\r\n  &.direction-right {\r\n    margin-left: var(--popover-horizontal-content-offset);\r\n  }\r\n}\r\n\r\n.vc-popover-caret {\r\n  content: '';\r\n  position: absolute;\r\n  display: block;\r\n  width: 12px;\r\n  height: 12px;\r\n  border-top: inherit;\r\n  border-left: inherit;\r\n  background-color: inherit;\r\n  z-index: -1;\r\n  &.direction-bottom {\r\n    top: 0;\r\n    &.align-left {\r\n      transform: translateY(-50%) rotate(45deg);\r\n    }\r\n    &.align-center {\r\n      transform: translateX(-50%) translateY(-50%) rotate(45deg);\r\n    }\r\n    &.align-right {\r\n      transform: translateY(-50%) rotate(45deg);\r\n    }\r\n  }\r\n  &.direction-top {\r\n    top: 100%;\r\n    &.align-left {\r\n      transform: translateY(-50%) rotate(-135deg);\r\n    }\r\n    &.align-center {\r\n      transform: translateX(-50%) translateY(-50%) rotate(-135deg);\r\n    }\r\n    &.align-right {\r\n      transform: translateY(-50%) rotate(-135deg);\r\n    }\r\n  }\r\n  &.direction-left {\r\n    left: 100%;\r\n    &.align-top {\r\n      transform: translateX(-50%) rotate(135deg);\r\n    }\r\n    &.align-middle {\r\n      transform: translateY(-50%) translateX(-50%) rotate(135deg);\r\n    }\r\n    &.align-bottom {\r\n      transform: translateX(-50%) rotate(135deg);\r\n    }\r\n  }\r\n  &.direction-right {\r\n    left: 0;\r\n    &.align-top {\r\n      transform: translateX(-50%) rotate(-45deg);\r\n    }\r\n    &.align-middle {\r\n      transform: translateY(-50%) translateX(-50%) rotate(-45deg);\r\n    }\r\n    &.align-bottom {\r\n      transform: translateX(-50%) rotate(-45deg);\r\n    }\r\n  }\r\n  &.align-left {\r\n    left: var(--popover-caret-horizontal-offset);\r\n  }\r\n  &.align-center {\r\n    left: 50%;\r\n  }\r\n  &.align-right {\r\n    right: var(--popover-caret-horizontal-offset);\r\n  }\r\n  &.align-top {\r\n    top: var(--popover-caret-vertical-offset);\r\n  }\r\n  &.align-middle {\r\n    top: 50%;\r\n  }\r\n  &.align-bottom {\r\n    bottom: var(--popover-caret-vertical-offset);\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <!-- Content row -->\r\n  <div class=\"vc-day-popover-row\">\r\n    <!-- Indicator -->\r\n    <div v-if=\"indicator\" class=\"vc-day-popover-row-indicator\">\r\n      <span :class=\"indicator.class\" />\r\n    </div>\r\n    <!-- Content -->\r\n    <div class=\"vc-day-popover-row-label\">\r\n      <slot>{{\r\n        attribute.popover ? attribute.popover.label : 'No content provided'\r\n      }}</slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { Attribute } from '../../utils/attribute';\r\n\r\nconst props = defineProps<{\r\n  attribute: Attribute;\r\n}>();\r\n\r\nconst indicator = computed(() => {\r\n  const { content, highlight, dot, bar, popover } = props.attribute;\r\n  if (popover && popover.hideIndicator) return null;\r\n  if (content) {\r\n    return {\r\n      class: `vc-bar vc-day-popover-row-bar vc-attr vc-${content.base.color}`,\r\n    };\r\n  }\r\n  if (highlight) {\r\n    return {\r\n      class: `vc-highlight-bg-solid vc-day-popover-row-highlight vc-attr vc-${highlight.base.color}`,\r\n    };\r\n  }\r\n  if (dot) {\r\n    return {\r\n      class: `vc-dot vc-attr vc-${dot.base.color}`,\r\n    };\r\n  }\r\n  if (bar) {\r\n    return {\r\n      class: `vc-bar vc-day-popover-row-bar vc-attr vc-${bar.base.color}`,\r\n    };\r\n  }\r\n  return null;\r\n});\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-day-popover-row {\r\n  display: flex;\r\n  align-items: center;\r\n  transition: var(--vc-day-content-transition);\r\n}\r\n\r\n.vc-day-popover-row-indicator {\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  flex-grow: 0;\r\n  width: 15px;\r\n  & span {\r\n    transition: var(--vc-day-content-transition);\r\n  }\r\n}\r\n\r\n.vc-day-popover-row-label {\r\n  display: flex;\r\n  align-items: center;\r\n  flex-wrap: none;\r\n  flex-grow: 1;\r\n  width: max-content;\r\n  margin-left: 4px;\r\n  margin-right: 4px;\r\n  font-size: var(--vc-text-xs);\r\n  line-height: var(--vc-leading-normal);\r\n}\r\n\r\n.vc-day-popover-row-highlight {\r\n  width: 8px;\r\n  height: 5px;\r\n  border-radius: 3px;\r\n}\r\n\r\n.vc-day-popover-row-dot {\r\n}\r\n.vc-day-popover-row-bar {\r\n  width: 10px;\r\n  height: 3px;\r\n}\r\n</style>\r\n","<template>\r\n  <Component v-if=\"slot\" :is=\"slot\" v-bind=\"$attrs\" />\r\n  <slot v-else />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  inheritAttrs: false,\r\n};\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useSlot } from '../../use/slots';\r\n\r\nexport type CalendarSlotName =\r\n  | 'day-content'\r\n  | 'day-popover'\r\n  | 'dp-footer'\r\n  | 'footer'\r\n  | 'header-title-wrapper'\r\n  | 'header-title'\r\n  | 'header-prev-button'\r\n  | 'header-next-button'\r\n  | 'nav'\r\n  | 'nav-prev-button'\r\n  | 'nav-next-button'\r\n  | 'page'\r\n  | 'time-header';\r\n\r\nconst props = defineProps<{\r\n  name: CalendarSlotName;\r\n}>();\r\n\r\nconst slot = useSlot(props.name);\r\n</script>\r\n","<template>\r\n  <Popover :id=\"dayPopoverId\" :class=\"[`vc-${color}`, `vc-${displayMode}`]\">\r\n    <template #default=\"{ data: { day, attributes }, hide }\">\r\n      <CalendarSlot\r\n        name=\"day-popover\"\r\n        :day=\"day\"\r\n        :day-title=\"dayTitle(day)\"\r\n        :attributes=\"attributes\"\r\n        :format=\"format\"\r\n        :masks=\"masks\"\r\n        :hide=\"hide\"\r\n      >\r\n        <div class=\"vc-day-popover-container\">\r\n          <div v-if=\"masks.dayPopover\" class=\"vc-day-popover-header\">\r\n            {{ dayTitle(day) }}\r\n          </div>\r\n          <PopoverRow\r\n            v-for=\"attribute in attributes\"\r\n            :key=\"attribute.key\"\r\n            :attribute=\"attribute\"\r\n          />\r\n        </div>\r\n      </CalendarSlot>\r\n    </template>\r\n  </Popover>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useCalendar } from '../../use/calendar';\r\nimport { CalendarDay } from '../../utils/page';\r\nimport Popover from '../Popover/Popover.vue';\r\nimport PopoverRow from '../Popover/PopoverRow.vue';\r\nimport CalendarSlot from './CalendarSlot.vue';\r\n\r\nconst { dayPopoverId, displayMode, color, masks, locale } = useCalendar();\r\n\r\nfunction format(date: Date, mask: string) {\r\n  return locale.value.formatDate(date, mask);\r\n}\r\n\r\nfunction dayTitle(day: CalendarDay) {\r\n  return locale.value.formatDate(day.date, masks.value.dayPopover);\r\n}\r\n</script>\r\n","<template>\r\n  <svg stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\r\n    <polyline points=\"9 18 15 12 9 6\"></polyline>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <svg stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\r\n    <polyline points=\"15 18 9 12 15 6\"></polyline>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <svg stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\r\n    <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <svg\r\n    fill=\"none\"\r\n    stroke-linecap=\"round\"\r\n    stroke-linejoin=\"round\"\r\n    stroke-width=\"2\"\r\n    viewBox=\"0 0 24 24\"\r\n  >\r\n    <path d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <component :is=\"icon\" :width=\"width\" :height=\"height\" class=\"vc-base-icon\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport * as icons from './icons';\r\n\r\nconst props = defineProps({\r\n  name: { type: String, required: true },\r\n  width: { type: String },\r\n  height: { type: String },\r\n  size: { type: String, default: '26' },\r\n  viewBox: { type: String },\r\n});\r\n\r\nconst width = computed(() => props.width || props.size);\r\nconst height = computed(() => props.height || props.size);\r\nconst icon = computed(() => (icons as any)[`Icon${props.name}`]);\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-base-icon {\r\n  display: inline-block;\r\n  stroke: currentColor;\r\n  stroke-width: 2;\r\n  fill: none;\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    class=\"vc-header\"\r\n    :class=\"{ 'is-lg': isLg, 'is-xl': isXl, 'is-2xl': is2xl }\"\r\n    :style=\"gridStyle\"\r\n  >\r\n    <button\r\n      v-if=\"show.prev\"\r\n      type=\"button\"\r\n      class=\"vc-arrow vc-prev vc-focus\"\r\n      :disabled=\"!canMovePrev\"\r\n      @click=\"movePrev\"\r\n      @keydown.space.enter=\"movePrev\"\r\n    >\r\n      <CalendarSlot name=\"header-prev-button\" :disabled=\"!canMovePrev\">\r\n        <BaseIcon name=\"ChevronLeft\" size=\"24\" />\r\n      </CalendarSlot>\r\n    </button>\r\n    <div v-if=\"show.title\" class=\"vc-title-wrapper\">\r\n      <CalendarSlot name=\"header-title-wrapper\">\r\n        <button type=\"button\" class=\"vc-title\" v-popover=\"navPopoverOptions\">\r\n          <CalendarSlot name=\"header-title\" :title=\"page.title\">\r\n            <span>{{ page.title }}</span>\r\n          </CalendarSlot>\r\n        </button>\r\n      </CalendarSlot>\r\n    </div>\r\n    <button\r\n      v-if=\"show.next\"\r\n      type=\"button\"\r\n      class=\"vc-arrow vc-next vc-focus\"\r\n      :disabled=\"!canMoveNext\"\r\n      @click=\"moveNext\"\r\n      @keydown.space.enter=\"moveNext\"\r\n    >\r\n      <CalendarSlot name=\"header-next-button\" :disabled=\"!canMoveNext\">\r\n        <BaseIcon name=\"ChevronRight\" size=\"24\" />\r\n      </CalendarSlot>\r\n    </button>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { useCalendar } from '../../use/calendar';\r\nimport { Page } from '../../utils/page';\r\nimport { popoverDirective as vPopover } from '../../utils/popovers';\r\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\r\nimport CalendarSlot from './CalendarSlot.vue';\r\n\r\nconst props = defineProps<{\r\n  page: Page;\r\n  layout?: string;\r\n  isLg?: boolean;\r\n  isXl?: boolean;\r\n  is2xl?: boolean;\r\n  hideTitle?: boolean;\r\n  hideArrows?: boolean;\r\n}>();\r\n\r\nconst {\r\n  navPopoverId,\r\n  navVisibility,\r\n  canMovePrev,\r\n  movePrev,\r\n  canMoveNext,\r\n  moveNext,\r\n} = useCalendar();\r\n\r\nconst navPlacement = computed(() => {\r\n  switch (props.page.titlePosition) {\r\n    case 'left':\r\n      return 'bottom-start';\r\n    case 'right':\r\n      return 'bottom-end';\r\n    default:\r\n      return 'bottom';\r\n  }\r\n});\r\nconst navPopoverOptions = computed(() => {\r\n  const { page } = props;\r\n  return {\r\n    id: navPopoverId.value,\r\n    visibility: navVisibility.value,\r\n    placement: navPlacement.value,\r\n    modifiers: [{ name: 'flip', options: { fallbackPlacements: ['bottom'] } }],\r\n    data: { page },\r\n    isInteractive: true,\r\n  };\r\n});\r\nconst titleLeft = computed(() => props.page.titlePosition.includes('left'));\r\nconst titleRight = computed(() => props.page.titlePosition.includes('right'));\r\nconst layout_ = computed(() => {\r\n  if (props.layout) return props.layout;\r\n  if (titleLeft.value) return 'tu-pn';\r\n  if (titleRight.value) return 'pn-tu';\r\n  return 'p-tu-n;';\r\n});\r\nconst show = computed(() => {\r\n  return {\r\n    prev: layout_.value.includes('p') && !props.hideArrows,\r\n    title: layout_.value.includes('t') && !props.hideTitle,\r\n    next: layout_.value.includes('n') && !props.hideArrows,\r\n  };\r\n});\r\nconst gridStyle = computed(() => {\r\n  const gridTemplateColumns = layout_.value\r\n    .split('')\r\n    .map(l => {\r\n      switch (l) {\r\n        case 'p':\r\n          return '[prev] auto';\r\n        case 'n':\r\n          return '[next] auto';\r\n        case 't':\r\n          return '[title] auto';\r\n        case '-':\r\n          return '1fr';\r\n        default:\r\n          return '';\r\n      }\r\n    })\r\n    .join(' ');\r\n  return { gridTemplateColumns };\r\n});\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-header {\r\n  display: grid;\r\n  grid-gap: 4px;\r\n  align-items: center;\r\n  height: 30px;\r\n  margin-top: 10px;\r\n  padding-left: 10px;\r\n  padding-right: 10px;\r\n\r\n  &.is-lg {\r\n    font-size: var(--vc-text-lg);\r\n  }\r\n  &.is-xl {\r\n    font-size: var(--vc-text-xl);\r\n  }\r\n  &.is-2xl {\r\n    font-size: var(--vc-text-2xl);\r\n  }\r\n\r\n  .vc-title-wrapper {\r\n    grid-row: 1;\r\n    grid-column: title;\r\n  }\r\n  .vc-prev {\r\n    grid-row: 1;\r\n    grid-column: prev;\r\n  }\r\n  .vc-next {\r\n    grid-row: 1;\r\n    grid-column: next;\r\n  }\r\n\r\n  .vc-title,\r\n  .vc-prev,\r\n  .vc-next {\r\n    display: flex;\r\n    align-items: center;\r\n    border: 0;\r\n    border-radius: var(--vc-rounded);\r\n    pointer-events: auto;\r\n    user-select: none;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .vc-title {\r\n    color: var(--vc-header-title-color);\r\n    font-weight: var(--vc-font-semibold);\r\n    white-space: nowrap;\r\n    padding: 0 8px;\r\n    margin: 0;\r\n    line-height: 30px;\r\n    &:hover {\r\n      opacity: 0.75;\r\n    }\r\n  }\r\n\r\n  .vc-arrow {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    color: var(--vc-header-arrow-color);\r\n    width: 28px;\r\n    height: 30px;\r\n    margin: 0;\r\n    padding: 0;\r\n    &:hover {\r\n      background: var(--vc-header-arrow-hover-bg);\r\n    }\r\n    &:disabled {\r\n      opacity: 0.25;\r\n      pointer-events: none;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import { type Ref, inject, provide } from 'vue';\r\nimport { useCalendar } from '..';\r\nimport { getMonthDates } from '../utils/date/helpers';\r\nimport { type Page, getPageId } from '../utils/page';\r\n\r\nexport interface MonthNavItem {\r\n  month: number;\r\n  year: number;\r\n  id: string;\r\n  label: string;\r\n  ariaLabel: string;\r\n  isActive: boolean;\r\n  isCurrent: boolean;\r\n  isDisabled: boolean;\r\n}\r\n\r\nexport type YearNavItem = Omit<MonthNavItem, 'month'>;\r\n\r\nexport type CalendarPageContext = ReturnType<typeof createPage>;\r\n\r\nconst contextKey = Symbol('__vc_page_context__');\r\n\r\nexport function createPage(page: Ref<Page>) {\r\n  const { locale, getDateAddress, canMove } = useCalendar();\r\n\r\n  function getMonthItems(year: number, mask: string): MonthNavItem[] {\r\n    const { month: thisMonth, year: thisYear } = getDateAddress(new Date());\r\n    return getMonthDates().map((d, i: number) => {\r\n      const month = i + 1;\r\n      return {\r\n        month,\r\n        year,\r\n        id: getPageId(month, year),\r\n        label: locale.value.formatDate(d, mask),\r\n        ariaLabel: locale.value.formatDate(d, 'MMMM'),\r\n        isActive: month === page.value.month && year === page.value.year,\r\n        isCurrent: month === thisMonth && year === thisYear,\r\n        isDisabled: !canMove(\r\n          { month, year },\r\n          { position: page.value.position },\r\n        ),\r\n      };\r\n    });\r\n  }\r\n\r\n  function getYearItems(startYear: number, endYear: number): YearNavItem[] {\r\n    const { year: thisYear } = getDateAddress(new Date());\r\n    const { position } = page.value;\r\n    const items = [];\r\n    for (let year = startYear; year <= endYear; year += 1) {\r\n      const enabled = [...Array(12).keys()].some(m =>\r\n        canMove({ month: m + 1, year }, { position }),\r\n      );\r\n      items.push({\r\n        year,\r\n        id: year.toString(),\r\n        label: year.toString(),\r\n        ariaLabel: year.toString(),\r\n        isActive: year === page.value.year,\r\n        isCurrent: year === thisYear,\r\n        isDisabled: !enabled,\r\n      });\r\n    }\r\n    return items;\r\n  }\r\n\r\n  const context = { page, getMonthItems, getYearItems };\r\n  provide(contextKey, context);\r\n  return context;\r\n}\r\n\r\nexport function usePage(): CalendarPageContext {\r\n  const context = inject<CalendarPageContext>(contextKey);\r\n  if (context) return context;\r\n  throw new Error(\r\n    'Page context missing. Please verify this component is nested within a valid context provider.',\r\n  );\r\n}\r\n","<template>\r\n  <!--Nav panel-->\r\n  <div class=\"vc-nav-container\" ref=\"navContainer\">\r\n    <!--Nav header-->\r\n    <div class=\"vc-nav-header\">\r\n      <!--Move prev button-->\r\n      <button\r\n        type=\"button\"\r\n        class=\"vc-nav-arrow is-left vc-focus\"\r\n        :disabled=\"!prevItemsEnabled\"\r\n        @click=\"movePrev\"\r\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, movePrev)\"\r\n      >\r\n        <CalendarSlot\r\n          name=\"nav-prev-button\"\r\n          :move=\"movePrev\"\r\n          :disabled=\"!prevItemsEnabled\"\r\n        >\r\n          <BaseIcon name=\"ChevronLeft\" width=\"22px\" height=\"24px\" />\r\n        </CalendarSlot>\r\n      </button>\r\n      <!--Mode switch button-->\r\n      <button\r\n        type=\"button\"\r\n        class=\"vc-nav-title vc-focus\"\r\n        @click=\"toggleMode\"\r\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, toggleMode)\"\r\n      >\r\n        {{ title }}\r\n      </button>\r\n      <!--Move next button-->\r\n      <button\r\n        type=\"button\"\r\n        class=\"vc-nav-arrow is-right vc-focus\"\r\n        :disabled=\"!nextItemsEnabled\"\r\n        @click=\"moveNext\"\r\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, moveNext)\"\r\n      >\r\n        <CalendarSlot\r\n          name=\"nav-next-button\"\r\n          :move=\"moveNext\"\r\n          :disabled=\"!nextItemsEnabled\"\r\n        >\r\n          <BaseIcon name=\"ChevronRight\" width=\"22px\" height=\"24px\" />\r\n        </CalendarSlot>\r\n      </button>\r\n    </div>\r\n    <!--Navigation items-->\r\n    <div class=\"vc-nav-items\">\r\n      <button\r\n        v-for=\"item in activeItems\"\r\n        :key=\"item.label\"\r\n        type=\"button\"\r\n        :data-id=\"item.id\"\r\n        :aria-label=\"item.ariaLabel\"\r\n        class=\"vc-nav-item vc-focus\"\r\n        :class=\"[\r\n          item.isActive ? 'is-active' : item.isCurrent ? 'is-current' : '',\r\n        ]\"\r\n        :disabled=\"item.isDisabled\"\r\n        @click=\"item.click\"\r\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, item.click)\"\r\n      >\r\n        {{ item.label }}\r\n      </button>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onMounted, ref, watch, watchEffect } from 'vue';\r\nimport { useCalendar } from '../../use/calendar';\r\nimport { usePage } from '../../use/page';\r\nimport { head, last, onSpaceOrEnter } from '../../utils/helpers';\r\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\r\nimport CalendarSlot from './CalendarSlot.vue';\r\n\r\nexport type IQuerySelector = Pick<HTMLElement, 'querySelector'>;\r\n\r\nconst { masks, move } = useCalendar();\r\nconst { page, getMonthItems, getYearItems } = usePage();\r\n\r\nconst monthMode = ref(true);\r\nconst yearGroupCount = 12;\r\n\r\nconst selectedYear = ref(page.value.year);\r\nconst selectedYearGroup = ref(getYearGroupIndex(page.value.year));\r\nconst navContainer = ref<IQuerySelector | null>(null);\r\n\r\nfunction focusFirstItem() {\r\n  // Use setTimeout instead of $nextTick so it plays nice with popperjs\r\n  setTimeout(() => {\r\n    if (navContainer.value == null) return;\r\n    // Set focus on the first enabled nav item\r\n    const focusableEl = navContainer.value.querySelector(\r\n      '.vc-nav-item:not(:disabled)',\r\n    ) as HTMLElement;\r\n    if (focusableEl) {\r\n      focusableEl.focus();\r\n    }\r\n  }, 10);\r\n}\r\n\r\nfunction getYearGroupIndex(year: number) {\r\n  return Math.floor(year / yearGroupCount);\r\n}\r\n\r\nfunction toggleMode() {\r\n  monthMode.value = !monthMode.value;\r\n}\r\n\r\nfunction getStartYear(groupIndex: number) {\r\n  return groupIndex * yearGroupCount;\r\n}\r\n\r\nfunction getEndYear(groupIndex: number) {\r\n  return yearGroupCount * (groupIndex + 1) - 1;\r\n}\r\n\r\n// #region Move methods\r\n\r\nfunction movePrev() {\r\n  if (!prevItemsEnabled.value) return;\r\n  if (monthMode.value) {\r\n    movePrevYear();\r\n  }\r\n  movePrevYearGroup();\r\n}\r\n\r\nfunction moveNext() {\r\n  if (!nextItemsEnabled.value) return;\r\n  if (monthMode.value) {\r\n    moveNextYear();\r\n  }\r\n  moveNextYearGroup();\r\n}\r\n\r\nfunction movePrevYear() {\r\n  selectedYear.value--;\r\n}\r\n\r\nfunction moveNextYear() {\r\n  selectedYear.value++;\r\n}\r\n\r\nfunction movePrevYearGroup() {\r\n  selectedYearGroup.value--;\r\n}\r\n\r\nfunction moveNextYearGroup() {\r\n  selectedYearGroup.value++;\r\n}\r\n\r\n// #endregion Move methods\r\n\r\nconst monthItems = computed(() =>\r\n  getMonthItems(selectedYear.value, masks.value.navMonths).map(item => ({\r\n    ...item,\r\n    click: () =>\r\n      move(\r\n        { month: item.month, year: item.year },\r\n        { position: page.value.position },\r\n      ),\r\n  })),\r\n);\r\n\r\nconst prevMonthItems = computed(() =>\r\n  getMonthItems(selectedYear.value - 1, masks.value.navMonths),\r\n);\r\n\r\nconst prevMonthItemsEnabled = computed(() =>\r\n  prevMonthItems.value.some(i => !i.isDisabled),\r\n);\r\n\r\nconst nextMonthItems = computed(() =>\r\n  getMonthItems(selectedYear.value + 1, masks.value.navMonths),\r\n);\r\n\r\nconst nextMonthItemsEnabled = computed(() =>\r\n  nextMonthItems.value.some(i => !i.isDisabled),\r\n);\r\n\r\nconst yearItems = computed(() =>\r\n  getYearItems(\r\n    getStartYear(selectedYearGroup.value),\r\n    getEndYear(selectedYearGroup.value),\r\n  ).map(item => {\r\n    return {\r\n      ...item,\r\n      click: () => {\r\n        selectedYear.value = item.year;\r\n        monthMode.value = true;\r\n        focusFirstItem();\r\n      },\r\n    };\r\n  }),\r\n);\r\n\r\nconst prevYearItems = computed(() =>\r\n  getYearItems(\r\n    getStartYear(selectedYearGroup.value - 1),\r\n    getEndYear(selectedYearGroup.value - 1),\r\n  ),\r\n);\r\n\r\nconst prevYearItemsEnabled = computed(() =>\r\n  prevYearItems.value.some(i => !i.isDisabled),\r\n);\r\n\r\nconst nextYearItems = computed(() =>\r\n  getYearItems(\r\n    getStartYear(selectedYearGroup.value + 1),\r\n    getEndYear(selectedYearGroup.value + 1),\r\n  ),\r\n);\r\n\r\nconst nextYearItemsEnabled = computed(() =>\r\n  nextYearItems.value.some(i => !i.isDisabled),\r\n);\r\n\r\nconst activeItems = computed(() =>\r\n  monthMode.value ? monthItems.value : yearItems.value,\r\n);\r\n\r\nconst prevItemsEnabled = computed(() =>\r\n  monthMode.value ? prevMonthItemsEnabled.value : prevYearItemsEnabled.value,\r\n);\r\n\r\nconst nextItemsEnabled = computed(() =>\r\n  monthMode.value ? nextMonthItemsEnabled.value : nextYearItemsEnabled.value,\r\n);\r\n\r\nconst firstYear = computed(() => head(yearItems.value.map(i => i.year)));\r\n\r\nconst lastYear = computed(() => last(yearItems.value.map(i => i.year)));\r\n\r\nconst title = computed(() => {\r\n  return monthMode.value\r\n    ? selectedYear.value\r\n    : `${firstYear.value} - ${lastYear.value}`;\r\n});\r\n\r\nwatchEffect(() => {\r\n  selectedYear.value = page.value.year;\r\n  focusFirstItem();\r\n});\r\n\r\nwatch(\r\n  () => selectedYear.value,\r\n  val => (selectedYearGroup.value = getYearGroupIndex(val)),\r\n);\r\n\r\nonMounted(() => focusFirstItem());\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-nav-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n}\r\n\r\n.vc-nav-title,\r\n.vc-nav-arrow,\r\n.vc-nav-item {\r\n  font-size: var(--vc-text-sm);\r\n  margin: 0;\r\n  cursor: pointer;\r\n  user-select: none;\r\n  border: 0;\r\n  border-radius: var(--vc-rounded);\r\n  white-space: nowrap;\r\n  &:hover {\r\n    background-color: var(--vc-nav-hover-bg);\r\n  }\r\n  &:disabled {\r\n    opacity: 0.25;\r\n    pointer-events: none;\r\n  }\r\n}\r\n\r\n.vc-nav-title {\r\n  color: var(--vc-nav-title-color);\r\n  font-weight: var(--vc-font-bold);\r\n  line-height: var(--vc-leading-snug);\r\n  height: 30px;\r\n  padding: 0 6px;\r\n}\r\n\r\n.vc-nav-arrow {\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  color: var(--vc-header-arrow-color);\r\n  width: 26px;\r\n  height: 30px;\r\n  padding: 0;\r\n}\r\n\r\n.vc-nav-items {\r\n  display: grid;\r\n  grid-template-columns: repeat(3, 1fr);\r\n  grid-row-gap: 2px;\r\n  grid-column-gap: 5px;\r\n  margin-top: 2px;\r\n}\r\n\r\n.vc-nav-item {\r\n  width: 48px;\r\n  text-align: center;\r\n  font-weight: var(--vc-font-semibold);\r\n  line-height: var(--vc-leading-snug);\r\n  padding: 6px 0;\r\n  &.is-active {\r\n    color: var(--vc-nav-item-active-color);\r\n    background-color: var(--vc-nav-item-active-bg);\r\n    font-weight: var(--vc-font-bold);\r\n    &:not(:focus) {\r\n      box-shadow: var(--vc-nav-item-active-box-shadow);\r\n    }\r\n  }\r\n  &.is-current {\r\n    color: var(--vc-nav-item-current-color);\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <slot />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { toRef } from 'vue';\r\nimport { createPage } from '../../use/page';\r\nimport type { Page } from '../../utils/page';\r\n\r\nconst props = defineProps<{\r\n  page: Page;\r\n}>();\r\n\r\ncreatePage(toRef(props, 'page'));\r\n</script>\r\n","<template>\r\n  <Popover\r\n    :id=\"navPopoverId\"\r\n    :class=\"['vc-nav-popover-container', `vc-${color}`, `vc-${displayMode}`]\"\r\n  >\r\n    <template #default=\"{ data }\">\r\n      <CalendarPageProvider :page=\"data.page\">\r\n        <CalendarSlot name=\"nav\">\r\n          <CalendarNav />\r\n        </CalendarSlot>\r\n      </CalendarPageProvider>\r\n    </template>\r\n  </Popover>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useCalendar } from '../../use/calendar';\r\nimport Popover from '../Popover/Popover.vue';\r\nimport CalendarNav from './CalendarNav.vue';\r\nimport CalendarPageProvider from './CalendarPageProvider.vue';\r\nimport CalendarSlot from './CalendarSlot.vue';\r\n\r\nconst { navPopoverId, color, displayMode } = useCalendar();\r\n</script>\r\n","<template>\n  <div :class=\"dayClasses\" ref=\"calendarDay\">\n    <!--Highlights-->\n    <div v-if=\"hasHighlights\" class=\"vc-highlights vc-day-layer\">\n      <div v-for=\"{ key, wrapperClass, class: bgClass, style } in highlights\" :key=\"key\" :class=\"wrapperClass\">\n        <div :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n    <!--Content-->\n    <CalendarSlot name=\"day-content\" :day=\"day\" :attributes=\"attributes\" :attribute-cells=\"attributeCells\"\n      :dayProps=\"dayContentProps\" :dayEvents=\"dayContentEvents\" :locale=\"locale\">\n      <div ref=\"dayContent\" v-bind=\"dayContentProps\" v-on=\"dayContentEvents\" v-popover=\"dayPopover\">\n        {{ day.label }}\n      </div>\n    </CalendarSlot>\n    <!--Dots-->\n    <div v-if=\"hasDots\" class=\"vc-day-layer vc-day-box-center-bottom\">\n      <div class=\"vc-dots\">\n        <span v-for=\"{ key, class: bgClass, style } in dots\" :key=\"key\" :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n    <!--Bars-->\n    <div v-if=\"hasBars\" class=\"vc-day-layer vc-day-box-center-bottom\">\n      <div class=\"vc-bars\">\n        <span v-for=\"{ key, class: bgClass, style } in bars\" :key=\"key\" :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { type PropType, computed, defineComponent, Ref, ref, watch } from 'vue';\nimport { useCalendar } from '../../use/calendar';\nimport { useSlot } from '../../use/slots';\nimport type { Attribute, PopoverConfig } from '../../utils/attribute';\nimport type { DateRangeCell } from '../../utils/date/range';\nimport { arrayHasItems, defaults, get, last } from '../../utils/helpers';\nimport type { CalendarDay } from '../../utils/page';\nimport { forceUpdateHandlers, popoverDirective } from '../../utils/popovers';\nimport CalendarSlot from './CalendarSlot.vue';\n\nexport default defineComponent({\n  directives: { popover: popoverDirective },\n  components: { CalendarSlot },\n  props: {\n    day: { type: Object as PropType<CalendarDay>, required: true },\n  },\n  setup(props)\n  {\n    const {\n      locale,\n      theme,\n      attributeContext,\n      dayPopoverId,\n      onDayClick,\n      onDayMouseenter,\n      onDayMouseleave,\n      onDayFocusin,\n      onDayFocusout,\n      onDayKeydown,\n    } = useCalendar();\n\n    const calendarDay: Ref<HTMLElement | null> = ref(null);\n    const dayContent: Ref<HTMLElement | null> = ref(null);\n\n    const day = computed(() => props.day);\n    const attributeCells = computed(() =>\n    {\n      return attributeContext.value.getCells(day.value);\n    });\n    const attributes = computed(() =>\n      attributeCells.value.map(cell => cell.data as Attribute),\n    );\n    const attributedDay = computed(() =>\n    {\n      return {\n        ...day.value,\n        attributes: attributes.value,\n        attributeCells: attributeCells.value,\n      };\n    });\n\n    function processPopover(\n      { data: attribute }: DateRangeCell<Attribute>,\n      { popovers }: { popovers: PopoverConfig[] },\n    )\n    {\n      const { key, customData, popover } = attribute;\n      if (!popover) return;\n      const resolvedPopover = defaults(\n        {\n          key,\n          customData,\n          attribute,\n        },\n        { ...popover },\n        {\n          visibility: popover.label ? 'hover' : 'click',\n          placement: 'bottom',\n          isInteractive: !popover.label,\n        },\n      );\n      popovers.splice(0, 0, resolvedPopover);\n    }\n\n    const glyphs = computed(() =>\n    {\n      const result = {\n        ...theme.value.prepareRender({}),\n        popovers: [],\n      };\n      attributeCells.value.forEach(cell =>\n      {\n        theme.value.render(cell, result);\n        processPopover(cell, result);\n      });\n      return result;\n    });\n\n    const highlights = computed(() => glyphs.value.highlights);\n    const hasHighlights = computed(() => !!arrayHasItems(highlights.value));\n\n    const content = computed(() => glyphs.value.content);\n\n    const dots = computed(() => glyphs.value.dots);\n    const hasDots = computed(() => !!arrayHasItems(dots.value));\n\n    const bars = computed(() => glyphs.value.bars);\n    const hasBars = computed(() => !!arrayHasItems(bars.value));\n\n    const popovers = computed(() => glyphs.value.popovers);\n    const popoverAttrs = computed(() =>\n      popovers.value.map((p: any) => p.attribute),\n    );\n\n    const dayContentSlot = useSlot('day-content');\n    const dayClasses = computed(() =>\n    {\n      return [\n        'vc-day',\n        ...day.value.classes,\n        { 'vc-day-box-center-center': !dayContentSlot },\n        { 'is-not-in-month': !props.day.inMonth },\n      ];\n    });\n\n    const dayContentProps = computed(() =>\n    {\n      let tabindex;\n      if (day.value.isFocusable)\n      {\n        tabindex = '0';\n      } else\n      {\n        tabindex = '-1';\n      }\n      const classes = [\n        'vc-day-content vc-focusable vc-focus vc-attr',\n        { 'vc-disabled': day.value.isDisabled },\n        get(last(highlights.value), 'contentClass'),\n        get(last(content.value), 'class') || '',\n      ];\n      const style = {\n        ...get(last(highlights.value), 'contentStyle'),\n        ...get(last(content.value), 'style'),\n      };\n      return {\n        class: classes,\n        style,\n        tabindex,\n        'aria-label': day.value.ariaLabel,\n        'aria-disabled': day.value.isDisabled ? true : false,\n        role: 'button',\n      };\n    });\n\n    const dayContentEvents = computed(() =>\n    {\n      return {\n        click(event: MouseEvent)\n        {\n          onDayClick(attributedDay.value, event);\n        },\n        mouseenter(event: MouseEvent)\n        {\n          onDayMouseenter(attributedDay.value, event);\n        },\n        mouseleave(event: MouseEvent)\n        {\n          onDayMouseleave(attributedDay.value, event);\n        },\n        focusin(event: FocusEvent)\n        {\n          onDayFocusin(attributedDay.value, event);\n        },\n        focusout(event: FocusEvent)\n        {\n          onDayFocusout(attributedDay.value, event);\n        },\n        keydown(event: KeyboardEvent)\n        {\n          onDayKeydown(attributedDay.value, event);\n        },\n      };\n    });\n\n    const dayPopover = computed(() =>\n    {\n      if (!arrayHasItems(popovers.value)) return {};\n      return defaults(\n        {\n          id: dayPopoverId.value,\n          data: { day, attributes: popoverAttrs.value },\n        },\n        ...popovers.value,\n      );\n    });\n\n    watch(() => Object.keys(dayPopover.value), () =>\n    {\n      if (Object.keys(dayPopover.value).length > 0)\n      {\n        forceUpdateHandlers(calendarDay.value, dayPopover.value);\n        forceUpdateHandlers(dayContent.value, dayPopover.value);\n      }\n    });\n\n    return {\n      attributes,\n      attributeCells,\n      bars,\n      dayClasses,\n      dayContentProps,\n      dayContentEvents,\n      dayPopover,\n      glyphs,\n      dots,\n      hasDots,\n      hasBars,\n      highlights,\n      hasHighlights,\n      locale,\n      popovers,\n      calendarDay,\n      dayContent\n    };\n  },\n});\n</script>\n\n<style>\n.vc-day {\n  position: relative;\n  min-height: 32px;\n  z-index: 1;\n  /* &.is-not-in-month * {\n    opacity: 0;\n    pointer-events: none;\n  } */\n}\n\n.vc-monthly .is-not-in-month * {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.vc-day-layer {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  pointer-events: none;\n}\n\n.vc-day-box-center-center {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  transform-origin: 50% 50%;\n}\n\n.vc-day-box-left-center {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  transform-origin: 0% 50%;\n}\n\n.vc-day-box-right-center {\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  transform-origin: 100% 50%;\n}\n\n.vc-day-box-center-bottom {\n  display: flex;\n  justify-content: center;\n  align-items: flex-end;\n}\n\n.vc-day-content {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-size: var(--vc-text-sm);\n  font-weight: var(--vc-font-medium);\n  width: 28px;\n  height: 28px;\n  line-height: 28px;\n  border-radius: var(--vc-rounded-full);\n  user-select: none;\n  cursor: pointer;\n\n  &:hover {\n    background-color: var(--vc-day-content-hover-bg);\n  }\n\n  &.vc-disabled {\n    color: var(--vc-day-content-disabled-color);\n  }\n}\n\n/* ----Content---- */\n\n.vc-content:not(.vc-base) {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-content-color);\n}\n\n/* ----Highlights---- */\n\n.vc-highlights {\n  overflow: hidden;\n  pointer-events: none;\n  z-index: -1;\n}\n\n.vc-highlight {\n  width: 28px;\n  height: 28px;\n\n  &.vc-highlight-base-start {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-right-width: 0 !important;\n  }\n\n  &.vc-highlight-base-end {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-left-width: 0 !important;\n  }\n\n  &.vc-highlight-base-middle {\n    width: 100%;\n    border-radius: 0 !important;\n    border-left-width: 0 !important;\n    border-right-width: 0 !important;\n    margin: 0 -1px;\n  }\n}\n\n.vc-highlight-bg-outline,\n.vc-highlight-bg-none {\n  background-color: var(--vc-highlight-outline-bg);\n  border: 2px solid;\n  border-color: var(--vc-highlight-outline-border);\n  border-radius: var(--vc-rounded-full);\n}\n\n.vc-highlight-bg-light {\n  background-color: var(--vc-highlight-light-bg);\n  border-radius: var(--vc-rounded-full);\n}\n\n.vc-highlight-bg-solid {\n  background-color: var(--vc-highlight-solid-bg);\n  border-radius: var(--vc-rounded-full);\n}\n\n.vc-highlight-content-outline,\n.vc-highlight-content-none {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-outline-content-color);\n}\n\n.vc-highlight-content-light {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-light-content-color);\n}\n\n.vc-highlight-content-solid {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-solid-content-color);\n}\n\n/* ----Dots---- */\n\n.vc-dots {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.vc-dot {\n  width: 5px;\n  height: 5px;\n  border-radius: 9999px;\n  transition: var(--vc-day-content-transition);\n\n  &:not(:last-child) {\n    margin-right: 3px;\n  }\n}\n\n/* ----Bars---- */\n\n.vc-bars {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  width: 75%;\n}\n\n.vc-bar {\n  flex-grow: 1;\n  height: 3px;\n  transition: var(--vc-day-content-transition);\n}\n\n.vc-dot {\n  background-color: var(--vc-dot-bg);\n}\n\n.vc-bar {\n  background-color: var(--vc-bar-bg);\n}\n</style>\n","<template>\n  <div :class=\"dayClasses\" ref=\"calendarDay\">\n    <!--Highlights-->\n    <div v-if=\"hasHighlights\" class=\"vc-highlights vc-day-layer\">\n      <div v-for=\"{ key, wrapperClass, class: bgClass, style } in highlights\" :key=\"key\" :class=\"wrapperClass\">\n        <div :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n    <!--Content-->\n    <CalendarSlot name=\"day-content\" :day=\"day\" :attributes=\"attributes\" :attribute-cells=\"attributeCells\"\n      :dayProps=\"dayContentProps\" :dayEvents=\"dayContentEvents\" :locale=\"locale\">\n      <div ref=\"dayContent\" v-bind=\"dayContentProps\" v-on=\"dayContentEvents\" v-popover=\"dayPopover\">\n        {{ day.label }}\n      </div>\n    </CalendarSlot>\n    <!--Dots-->\n    <div v-if=\"hasDots\" class=\"vc-day-layer vc-day-box-center-bottom\">\n      <div class=\"vc-dots\">\n        <span v-for=\"{ key, class: bgClass, style } in dots\" :key=\"key\" :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n    <!--Bars-->\n    <div v-if=\"hasBars\" class=\"vc-day-layer vc-day-box-center-bottom\">\n      <div class=\"vc-bars\">\n        <span v-for=\"{ key, class: bgClass, style } in bars\" :key=\"key\" :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { type PropType, computed, defineComponent, Ref, ref, watch } from 'vue';\nimport { useCalendar } from '../../use/calendar';\nimport { useSlot } from '../../use/slots';\nimport type { Attribute, PopoverConfig } from '../../utils/attribute';\nimport type { DateRangeCell } from '../../utils/date/range';\nimport { arrayHasItems, defaults, get, last } from '../../utils/helpers';\nimport type { CalendarDay } from '../../utils/page';\nimport { forceUpdateHandlers, popoverDirective } from '../../utils/popovers';\nimport CalendarSlot from './CalendarSlot.vue';\n\nexport default defineComponent({\n  directives: { popover: popoverDirective },\n  components: { CalendarSlot },\n  props: {\n    day: { type: Object as PropType<CalendarDay>, required: true },\n  },\n  setup(props)\n  {\n    const {\n      locale,\n      theme,\n      attributeContext,\n      dayPopoverId,\n      onDayClick,\n      onDayMouseenter,\n      onDayMouseleave,\n      onDayFocusin,\n      onDayFocusout,\n      onDayKeydown,\n    } = useCalendar();\n\n    const calendarDay: Ref<HTMLElement | null> = ref(null);\n    const dayContent: Ref<HTMLElement | null> = ref(null);\n\n    const day = computed(() => props.day);\n    const attributeCells = computed(() =>\n    {\n      return attributeContext.value.getCells(day.value);\n    });\n    const attributes = computed(() =>\n      attributeCells.value.map(cell => cell.data as Attribute),\n    );\n    const attributedDay = computed(() =>\n    {\n      return {\n        ...day.value,\n        attributes: attributes.value,\n        attributeCells: attributeCells.value,\n      };\n    });\n\n    function processPopover(\n      { data: attribute }: DateRangeCell<Attribute>,\n      { popovers }: { popovers: PopoverConfig[] },\n    )\n    {\n      const { key, customData, popover } = attribute;\n      if (!popover) return;\n      const resolvedPopover = defaults(\n        {\n          key,\n          customData,\n          attribute,\n        },\n        { ...popover },\n        {\n          visibility: popover.label ? 'hover' : 'click',\n          placement: 'bottom',\n          isInteractive: !popover.label,\n        },\n      );\n      popovers.splice(0, 0, resolvedPopover);\n    }\n\n    const glyphs = computed(() =>\n    {\n      const result = {\n        ...theme.value.prepareRender({}),\n        popovers: [],\n      };\n      attributeCells.value.forEach(cell =>\n      {\n        theme.value.render(cell, result);\n        processPopover(cell, result);\n      });\n      return result;\n    });\n\n    const highlights = computed(() => glyphs.value.highlights);\n    const hasHighlights = computed(() => !!arrayHasItems(highlights.value));\n\n    const content = computed(() => glyphs.value.content);\n\n    const dots = computed(() => glyphs.value.dots);\n    const hasDots = computed(() => !!arrayHasItems(dots.value));\n\n    const bars = computed(() => glyphs.value.bars);\n    const hasBars = computed(() => !!arrayHasItems(bars.value));\n\n    const popovers = computed(() => glyphs.value.popovers);\n    const popoverAttrs = computed(() =>\n      popovers.value.map((p: any) => p.attribute),\n    );\n\n    const dayContentSlot = useSlot('day-content');\n    const dayClasses = computed(() =>\n    {\n      return [\n        'vc-day',\n        ...day.value.classes,\n        { 'vc-day-box-center-center': !dayContentSlot },\n        { 'is-not-in-month': !props.day.inMonth },\n      ];\n    });\n\n    const dayContentProps = computed(() =>\n    {\n      let tabindex;\n      if (day.value.isFocusable)\n      {\n        tabindex = '0';\n      } else\n      {\n        tabindex = '-1';\n      }\n      const classes = [\n        'vc-day-content vc-focusable vc-focus vc-attr',\n        { 'vc-disabled': day.value.isDisabled },\n        get(last(highlights.value), 'contentClass'),\n        get(last(content.value), 'class') || '',\n      ];\n      const style = {\n        ...get(last(highlights.value), 'contentStyle'),\n        ...get(last(content.value), 'style'),\n      };\n      return {\n        class: classes,\n        style,\n        tabindex,\n        'aria-label': day.value.ariaLabel,\n        'aria-disabled': day.value.isDisabled ? true : false,\n        role: 'button',\n      };\n    });\n\n    const dayContentEvents = computed(() =>\n    {\n      return {\n        click(event: MouseEvent)\n        {\n          onDayClick(attributedDay.value, event);\n        },\n        mouseenter(event: MouseEvent)\n        {\n          onDayMouseenter(attributedDay.value, event);\n        },\n        mouseleave(event: MouseEvent)\n        {\n          onDayMouseleave(attributedDay.value, event);\n        },\n        focusin(event: FocusEvent)\n        {\n          onDayFocusin(attributedDay.value, event);\n        },\n        focusout(event: FocusEvent)\n        {\n          onDayFocusout(attributedDay.value, event);\n        },\n        keydown(event: KeyboardEvent)\n        {\n          onDayKeydown(attributedDay.value, event);\n        },\n      };\n    });\n\n    const dayPopover = computed(() =>\n    {\n      if (!arrayHasItems(popovers.value)) return {};\n      return defaults(\n        {\n          id: dayPopoverId.value,\n          data: { day, attributes: popoverAttrs.value },\n        },\n        ...popovers.value,\n      );\n    });\n\n    watch(() => Object.keys(dayPopover.value), () =>\n    {\n      if (Object.keys(dayPopover.value).length > 0)\n      {\n        forceUpdateHandlers(calendarDay.value, dayPopover.value);\n        forceUpdateHandlers(dayContent.value, dayPopover.value);\n      }\n    });\n\n    return {\n      attributes,\n      attributeCells,\n      bars,\n      dayClasses,\n      dayContentProps,\n      dayContentEvents,\n      dayPopover,\n      glyphs,\n      dots,\n      hasDots,\n      hasBars,\n      highlights,\n      hasHighlights,\n      locale,\n      popovers,\n      calendarDay,\n      dayContent\n    };\n  },\n});\n</script>\n\n<style>\n.vc-day {\n  position: relative;\n  min-height: 32px;\n  z-index: 1;\n  /* &.is-not-in-month * {\n    opacity: 0;\n    pointer-events: none;\n  } */\n}\n\n.vc-monthly .is-not-in-month * {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.vc-day-layer {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  pointer-events: none;\n}\n\n.vc-day-box-center-center {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  transform-origin: 50% 50%;\n}\n\n.vc-day-box-left-center {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  transform-origin: 0% 50%;\n}\n\n.vc-day-box-right-center {\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  transform-origin: 100% 50%;\n}\n\n.vc-day-box-center-bottom {\n  display: flex;\n  justify-content: center;\n  align-items: flex-end;\n}\n\n.vc-day-content {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-size: var(--vc-text-sm);\n  font-weight: var(--vc-font-medium);\n  width: 28px;\n  height: 28px;\n  line-height: 28px;\n  border-radius: var(--vc-rounded-full);\n  user-select: none;\n  cursor: pointer;\n\n  &:hover {\n    background-color: var(--vc-day-content-hover-bg);\n  }\n\n  &.vc-disabled {\n    color: var(--vc-day-content-disabled-color);\n  }\n}\n\n/* ----Content---- */\n\n.vc-content:not(.vc-base) {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-content-color);\n}\n\n/* ----Highlights---- */\n\n.vc-highlights {\n  overflow: hidden;\n  pointer-events: none;\n  z-index: -1;\n}\n\n.vc-highlight {\n  width: 28px;\n  height: 28px;\n\n  &.vc-highlight-base-start {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-right-width: 0 !important;\n  }\n\n  &.vc-highlight-base-end {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-left-width: 0 !important;\n  }\n\n  &.vc-highlight-base-middle {\n    width: 100%;\n    border-radius: 0 !important;\n    border-left-width: 0 !important;\n    border-right-width: 0 !important;\n    margin: 0 -1px;\n  }\n}\n\n.vc-highlight-bg-outline,\n.vc-highlight-bg-none {\n  background-color: var(--vc-highlight-outline-bg);\n  border: 2px solid;\n  border-color: var(--vc-highlight-outline-border);\n  border-radius: var(--vc-rounded-full);\n}\n\n.vc-highlight-bg-light {\n  background-color: var(--vc-highlight-light-bg);\n  border-radius: var(--vc-rounded-full);\n}\n\n.vc-highlight-bg-solid {\n  background-color: var(--vc-highlight-solid-bg);\n  border-radius: var(--vc-rounded-full);\n}\n\n.vc-highlight-content-outline,\n.vc-highlight-content-none {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-outline-content-color);\n}\n\n.vc-highlight-content-light {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-light-content-color);\n}\n\n.vc-highlight-content-solid {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-solid-content-color);\n}\n\n/* ----Dots---- */\n\n.vc-dots {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.vc-dot {\n  width: 5px;\n  height: 5px;\n  border-radius: 9999px;\n  transition: var(--vc-day-content-transition);\n\n  &:not(:last-child) {\n    margin-right: 3px;\n  }\n}\n\n/* ----Bars---- */\n\n.vc-bars {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  width: 75%;\n}\n\n.vc-bar {\n  flex-grow: 1;\n  height: 3px;\n  transition: var(--vc-day-content-transition);\n}\n\n.vc-dot {\n  background-color: var(--vc-dot-bg);\n}\n\n.vc-bar {\n  background-color: var(--vc-bar-bg);\n}\n</style>\n","<template>\r\n  <div\r\n    :class=\"[\r\n      'vc-pane',\r\n      `row-${page.row}`,\r\n      `row-from-end-${page.rowFromEnd}`,\r\n      `column-${page.column}`,\r\n      `column-from-end-${page.columnFromEnd}`,\r\n    ]\"\r\n    ref=\"pane\"\r\n  >\r\n    <CalendarHeader :page=\"page\" is-lg hide-arrows />\r\n    <div\r\n      class=\"vc-weeks\"\r\n      :class=\"{\r\n        [`vc-show-weeknumbers-${page.weeknumberPosition}`]:\r\n          page.weeknumberPosition,\r\n      }\"\r\n    >\r\n      <div class=\"vc-weekdays\">\r\n        <!--Weekday labels-->\r\n        <div\r\n          v-for=\"({ weekday, label }, i) in page.weekdays\"\r\n          :key=\"i\"\r\n          :class=\"`vc-weekday vc-weekday-${weekday}`\"\r\n        >\r\n          {{ label }}\r\n        </div>\r\n      </div>\r\n      <!--Weeks-->\r\n      <div\r\n        v-for=\"week in page.viewWeeks\"\r\n        :key=\"`weeknumber-${week.weeknumber}`\"\r\n        class=\"vc-week\"\r\n      >\r\n        <!--Weeknumber-->\r\n        <div\r\n          v-if=\"page.weeknumberPosition\"\r\n          :class=\"['vc-weeknumber', `is-${page.weeknumberPosition}`]\"\r\n        >\r\n          <span\r\n            :class=\"['vc-weeknumber-content']\"\r\n            @click=\"onWeeknumberClick(week, $event)\"\r\n            >{{ week.weeknumberDisplay }}</span\r\n          >\r\n        </div>\r\n        <!--Week days-->\r\n        <CalendarDay v-for=\"day in week.days\" :key=\"day.id\" :day=\"day\" />\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  inheritAttrs: false,\r\n};\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport CalendarDay from './CalendarDay.vue';\r\nimport CalendarHeader from './CalendarHeader.vue';\r\nimport { useCalendar } from '../../use/calendar';\r\nimport { usePage } from '../../use/page';\r\n\r\nconst { page } = usePage();\r\nconst { onWeeknumberClick } = useCalendar();\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-pane {\r\n  min-width: 250px;\r\n}\r\n\r\n.vc-weeknumber {\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  position: absolute;\r\n  &.is-left {\r\n    left: calc(var(--vc-weeknumber-offset-inside) * -1);\r\n  }\r\n  &.is-right {\r\n    right: calc(var(--vc-weeknumber-offset-inside) * -1);\r\n  }\r\n  &.is-left-outside {\r\n    left: calc(var(--vc-weeknumber-offset-outside) * -1);\r\n  }\r\n  &.is-right-outside {\r\n    right: calc(var(--vc-weeknumber-offset-outside) * -1);\r\n  }\r\n}\r\n\r\n.vc-weeknumber-content {\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  font-size: var(--vc-text-xs);\r\n  font-weight: var(--vc-font-medium);\r\n  font-style: italic;\r\n  width: 28px;\r\n  height: 28px;\r\n  margin-top: 2px;\r\n  color: var(--vc-weeknumber-color);\r\n  user-select: none;\r\n}\r\n\r\n.vc-weeks {\r\n  position: relative;\r\n  /* overflow: auto; */\r\n  -webkit-overflow-scrolling: touch;\r\n  padding: 6px;\r\n  min-width: 232px;\r\n  &.vc-show-weeknumbers-left {\r\n    margin-left: var(--vc-weeknumber-offset-inside);\r\n  }\r\n  &.vc-show-weeknumbers-right {\r\n    margin-right: var(--vc-weeknumber-offset-inside);\r\n  }\r\n}\r\n\r\n.vc-weekday {\r\n  text-align: center;\r\n  color: var(--vc-weekday-color);\r\n  font-size: var(--vc-text-sm);\r\n  font-weight: var(--vc-font-bold);\r\n  line-height: 14px;\r\n  padding-top: 4px;\r\n  padding-bottom: 8px;\r\n  cursor: default;\r\n  user-select: none;\r\n}\r\n\r\n.vc-week,\r\n.vc-weekdays {\r\n  display: grid;\r\n  grid-template-columns: repeat(7, 1fr);\r\n  position: relative;\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    data-helptext=\"Press the arrow keys to navigate by day, Home and End to navigate to week ends, PageUp and PageDown to navigate by month, Alt+PageUp and Alt+PageDown to navigate by year\"\r\n    v-bind=\"$attrs\"\r\n    :class=\"[\r\n      'vc-container',\r\n      `vc-${view}`,\r\n      `vc-${color}`,\r\n      `vc-${displayMode}`,\r\n      {\r\n        'vc-expanded': expanded,\r\n        'vc-bordered': !borderless,\r\n        'vc-transparent': transparent,\r\n      },\r\n    ]\"\r\n    @mouseup.prevent\r\n    ref=\"containerRef\"\r\n  >\r\n    <!--Calendar Container-->\r\n    <div :class=\"['vc-pane-container', { 'in-transition': inTransition }]\">\r\n      <div class=\"vc-pane-header-wrapper\">\r\n        <CalendarHeader v-if=\"firstPage\" :page=\"firstPage!\" is-lg hide-title />\r\n      </div>\r\n      <Transition\r\n        :name=\"`vc-${transitionName}`\"\r\n        @before-enter=\"onTransitionBeforeEnter\"\r\n        @after-enter=\"onTransitionAfterEnter\"\r\n      >\r\n        <!--Calendar Layout-->\r\n        <div\r\n          :key=\"pages[0].id\"\r\n          class=\"vc-pane-layout\"\r\n          :style=\"{\r\n            gridTemplateColumns: `repeat(${columns}, 1fr)`,\r\n          }\"\r\n        >\r\n          <!--Calendar pages-->\r\n          <CalendarPageProvider\r\n            v-for=\"page in pages\"\r\n            :key=\"page.id\"\r\n            :page=\"page\"\r\n          >\r\n            <CalendarSlot name=\"page\" :page=\"page\">\r\n              <CalendarPage />\r\n            </CalendarSlot>\r\n          </CalendarPageProvider>\r\n        </div>\r\n      </Transition>\r\n      <CalendarSlot name=\"footer\" />\r\n    </div>\r\n  </div>\r\n  <!--Day popover-->\r\n  <CalendarDayPopover />\r\n  <!--Nav popover-->\r\n  <CalendarNavPopover />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent } from 'vue';\r\nimport { createCalendar, emitsDef, propsDef } from '../../use/calendar';\r\nimport CalendarDayPopover from './CalendarDayPopover.vue';\r\nimport CalendarHeader from './CalendarHeader.vue';\r\nimport CalendarNavPopover from './CalendarNavPopover.vue';\r\nimport CalendarPage from './CalendarPage.vue';\r\nimport CalendarPageProvider from './CalendarPageProvider.vue';\r\nimport CalendarSlot from './CalendarSlot.vue';\r\n\r\nexport default defineComponent({\r\n  components: {\r\n    CalendarHeader,\r\n    CalendarPage,\r\n    CalendarNavPopover,\r\n    CalendarDayPopover,\r\n    CalendarPageProvider,\r\n    CalendarSlot,\r\n  },\r\n  props: propsDef,\r\n  emit: emitsDef,\r\n  setup(props, { emit, slots }) {\r\n    return createCalendar(props, { emit, slots });\r\n  },\r\n});\r\n</script>\r\n\r\n<style>\r\n.vc-pane-container {\r\n  width: 100%;\r\n  position: relative;\r\n  &.in-transition {\r\n    overflow: hidden;\r\n  }\r\n}\r\n\r\n.vc-pane-layout {\r\n  display: grid;\r\n}\r\n\r\n.vc-pane-header-wrapper {\r\n  position: absolute;\r\n  top: 0;\r\n  width: 100%;\r\n  pointer-events: none;\r\n}\r\n\r\n.vc-day-popover-container {\r\n  font-size: var(--vc-text-xs);\r\n  font-weight: var(--vc-font-medium);\r\n}\r\n\r\n.vc-day-popover-header {\r\n  font-size: var(--vc-text-xs);\r\n  color: var(--vc-day-popover-header-color);\r\n  font-weight: var(--vc-font-semibold);\r\n  text-align: center;\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    data-helptext=\"Press the arrow keys to navigate by day, Home and End to navigate to week ends, PageUp and PageDown to navigate by month, Alt+PageUp and Alt+PageDown to navigate by year\"\r\n    v-bind=\"$attrs\"\r\n    :class=\"[\r\n      'vc-container',\r\n      `vc-${view}`,\r\n      `vc-${color}`,\r\n      `vc-${displayMode}`,\r\n      {\r\n        'vc-expanded': expanded,\r\n        'vc-bordered': !borderless,\r\n        'vc-transparent': transparent,\r\n      },\r\n    ]\"\r\n    @mouseup.prevent\r\n    ref=\"containerRef\"\r\n  >\r\n    <!--Calendar Container-->\r\n    <div :class=\"['vc-pane-container', { 'in-transition': inTransition }]\">\r\n      <div class=\"vc-pane-header-wrapper\">\r\n        <CalendarHeader v-if=\"firstPage\" :page=\"firstPage!\" is-lg hide-title />\r\n      </div>\r\n      <Transition\r\n        :name=\"`vc-${transitionName}`\"\r\n        @before-enter=\"onTransitionBeforeEnter\"\r\n        @after-enter=\"onTransitionAfterEnter\"\r\n      >\r\n        <!--Calendar Layout-->\r\n        <div\r\n          :key=\"pages[0].id\"\r\n          class=\"vc-pane-layout\"\r\n          :style=\"{\r\n            gridTemplateColumns: `repeat(${columns}, 1fr)`,\r\n          }\"\r\n        >\r\n          <!--Calendar pages-->\r\n          <CalendarPageProvider\r\n            v-for=\"page in pages\"\r\n            :key=\"page.id\"\r\n            :page=\"page\"\r\n          >\r\n            <CalendarSlot name=\"page\" :page=\"page\">\r\n              <CalendarPage />\r\n            </CalendarSlot>\r\n          </CalendarPageProvider>\r\n        </div>\r\n      </Transition>\r\n      <CalendarSlot name=\"footer\" />\r\n    </div>\r\n  </div>\r\n  <!--Day popover-->\r\n  <CalendarDayPopover />\r\n  <!--Nav popover-->\r\n  <CalendarNavPopover />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent } from 'vue';\r\nimport { createCalendar, emitsDef, propsDef } from '../../use/calendar';\r\nimport CalendarDayPopover from './CalendarDayPopover.vue';\r\nimport CalendarHeader from './CalendarHeader.vue';\r\nimport CalendarNavPopover from './CalendarNavPopover.vue';\r\nimport CalendarPage from './CalendarPage.vue';\r\nimport CalendarPageProvider from './CalendarPageProvider.vue';\r\nimport CalendarSlot from './CalendarSlot.vue';\r\n\r\nexport default defineComponent({\r\n  components: {\r\n    CalendarHeader,\r\n    CalendarPage,\r\n    CalendarNavPopover,\r\n    CalendarDayPopover,\r\n    CalendarPageProvider,\r\n    CalendarSlot,\r\n  },\r\n  props: propsDef,\r\n  emit: emitsDef,\r\n  setup(props, { emit, slots }) {\r\n    return createCalendar(props, { emit, slots });\r\n  },\r\n});\r\n</script>\r\n\r\n<style>\r\n.vc-pane-container {\r\n  width: 100%;\r\n  position: relative;\r\n  &.in-transition {\r\n    overflow: hidden;\r\n  }\r\n}\r\n\r\n.vc-pane-layout {\r\n  display: grid;\r\n}\r\n\r\n.vc-pane-header-wrapper {\r\n  position: absolute;\r\n  top: 0;\r\n  width: 100%;\r\n  pointer-events: none;\r\n}\r\n\r\n.vc-day-popover-container {\r\n  font-size: var(--vc-text-xs);\r\n  font-weight: var(--vc-font-medium);\r\n}\r\n\r\n.vc-day-popover-header {\r\n  font-size: var(--vc-text-xs);\r\n  color: var(--vc-day-popover-header-color);\r\n  font-weight: var(--vc-font-semibold);\r\n  text-align: center;\r\n}\r\n</style>\r\n","import {\r\n  type SetupContext,\r\n  type ExtractPropTypes,\r\n  type PropType,\r\n  ref,\r\n  computed,\r\n  watch,\r\n  onMounted,\r\n  nextTick,\r\n  toRef,\r\n  inject,\r\n  provide,\r\n} from 'vue';\r\nimport Calendar from '../components/Calendar/Calendar.vue';\r\nimport Popover from '../components/Popover/Popover.vue';\r\nimport { getDefault } from '../utils/defaults';\r\nimport type { AttributeConfig } from '../utils/attribute';\r\nimport { type CalendarDay, getPageAddressForDate } from '../utils/page';\r\nimport {\r\n  defaultsDeep,\r\n  isArray,\r\n  isDate,\r\n  isNumber,\r\n  isObject,\r\n  isString,\r\n} from '../utils/helpers';\r\nimport {\r\n  type DatePatch,\r\n  type DateParts,\r\n  type DatePartsRules,\r\n  type DateSource,\r\n  type SimpleDateParts,\r\n  isDateParts,\r\n} from '../utils/date/helpers';\r\nimport type { SimpleDateRange } from '../utils/date/range';\r\nimport {\r\n  type PopoverOptions,\r\n  showPopover as sp,\r\n  hidePopover as hp,\r\n  togglePopover as tp,\r\n  getPopoverEventHandlers,\r\n} from '../utils/popovers';\r\nimport { propsDef as basePropsDef, createBase } from './base';\r\nimport type { MoveTarget, MoveOptions } from './calendar';\r\nimport { provideSlots } from './slots';\r\n\r\nexport type DateType = 'date' | 'string' | 'number';\r\n\r\nexport interface DateConfig {\r\n  type: DateType;\r\n  rules: DatePartsRules;\r\n  mask?: string;\r\n}\r\n\r\nconst contextKey = Symbol('__vc_date_picker_context__');\r\n\r\nexport type DateModes = 'date' | 'datetime' | 'time';\r\n\r\nexport type ValueTarget = 'start' | 'end';\r\n\r\nexport interface UpdateOptions {\r\n  config: any;\r\n  patch: DatePatch;\r\n  debounce: number;\r\n  clearIfEqual: boolean;\r\n  formatInput: boolean;\r\n  hidePopover: boolean;\r\n  dragging: boolean;\r\n  targetPriority: ValueTarget;\r\n  moveToValue: boolean;\r\n}\r\n\r\nexport interface ModelModifiers {\r\n  number?: boolean;\r\n  string?: boolean;\r\n  range?: boolean;\r\n}\r\n\r\nexport type DatePickerDate = DateSource | Partial<SimpleDateParts> | null;\r\nexport type DatePickerRangeArray = [DatePickerDate, DatePickerDate];\r\nexport type DatePickerRangeObject = {\r\n  start: Exclude<DatePickerDate, null>;\r\n  end: Exclude<DatePickerDate, null>;\r\n};\r\nexport type DatePickerModel = DatePickerDate | DatePickerRangeObject;\r\n\r\nexport type DatePickerContext = ReturnType<typeof createDatePicker>;\r\n\r\nexport type DatePickerProps = Readonly<ExtractPropTypes<typeof propsDef>>;\r\n\r\nexport const propsDef = {\r\n  ...basePropsDef,\r\n  mode: { type: String, default: 'date' },\r\n  modelValue: {\r\n    type: [Number, String, Date, Object] as PropType<DatePickerModel>,\r\n  },\r\n  modelModifiers: {\r\n    type: Object as PropType<ModelModifiers>,\r\n    default: () => ({}),\r\n  },\r\n  rules: [String, Object] as PropType<'auto' | DatePartsRules>,\r\n  is24hr: Boolean,\r\n  hideTimeHeader: Boolean,\r\n  timeAccuracy: { type: Number, default: 2 },\r\n  isRequired: Boolean,\r\n  isRange: Boolean,\r\n  updateOnInput: {\r\n    type: Boolean,\r\n    default: () => getDefault('datePicker.updateOnInput'),\r\n  },\r\n  inputDebounce: {\r\n    type: Number,\r\n    default: () => getDefault('datePicker.inputDebounce'),\r\n  },\r\n  popover: {\r\n    type: [Boolean, Object] as PropType<boolean | Partial<PopoverOptions>>,\r\n    default: true,\r\n  },\r\n  dragAttribute: Object as PropType<AttributeConfig>,\r\n  selectAttribute: Object as PropType<AttributeConfig>,\r\n  attributes: [Object, Array],\r\n};\r\n\r\nexport const emits = [\r\n  'update:modelValue',\r\n  'drag',\r\n  'dayclick',\r\n  'daykeydown',\r\n  'popover-will-show',\r\n  'popover-did-show',\r\n  'popover-will-hide',\r\n  'popover-did-hide',\r\n];\r\n\r\nexport function createDatePicker(\r\n  props: DatePickerProps,\r\n  { emit, slots }: SetupContext<string[]>,\r\n) {\r\n  provideSlots(slots, { footer: 'dp-footer' });\r\n\r\n  const baseCtx = createBase(props);\r\n  const { locale, masks, disabledAttribute } = baseCtx;\r\n\r\n  const showCalendar = ref(false);\r\n  const datePickerPopoverId = ref(Symbol());\r\n  const dateValue = ref<null | Date | SimpleDateRange>(null);\r\n  const dragValue = ref<null | SimpleDateRange>(null);\r\n  const inputValues = ref<string[]>(['', '']);\r\n  const popoverRef = ref<InstanceType<typeof Popover> | null>(null);\r\n  const calendarRef = ref<InstanceType<typeof Calendar> | null>(null);\r\n\r\n  let updateTimeout: undefined | number = undefined;\r\n  let dragTrackingValue: null | SimpleDateRange;\r\n  let watchValue = true;\r\n\r\n  // #region Computed\r\n\r\n  const isRange = computed(() => {\r\n    return props.isRange || props.modelModifiers.range === true;\r\n  });\r\n\r\n  const valueStart = computed(() =>\r\n    isRange.value && dateValue.value != null\r\n      ? (dateValue.value as SimpleDateRange).start\r\n      : null,\r\n  );\r\n\r\n  const valueEnd = computed(() =>\r\n    isRange.value && dateValue.value != null\r\n      ? (dateValue.value as SimpleDateRange).end\r\n      : null,\r\n  );\r\n\r\n  const isDateMode = computed(() => props.mode.toLowerCase() === 'date');\r\n  const isDateTimeMode = computed(\r\n    () => props.mode.toLowerCase() === 'datetime',\r\n  );\r\n  const isTimeMode = computed(() => props.mode.toLowerCase() === 'time');\r\n\r\n  const isDragging = computed(() => !!dragValue.value);\r\n\r\n  const modelConfig = computed(() => {\r\n    let type: DateType = 'date';\r\n    if (props.modelModifiers.number) type = 'number';\r\n    if (props.modelModifiers.string) type = 'string';\r\n    const mask = masks.value.modelValue || 'iso';\r\n    return normalizeConfig(<DateConfig>{ type, mask });\r\n  });\r\n\r\n  const dateParts = computed(() =>\r\n    getDateParts(dragValue.value ?? dateValue.value),\r\n  );\r\n\r\n  const inputMask = computed(() => {\r\n    if (isTimeMode.value) {\r\n      return props.is24hr ? masks.value.inputTime24hr : masks.value.inputTime;\r\n    }\r\n    if (isDateTimeMode.value) {\r\n      return props.is24hr\r\n        ? masks.value.inputDateTime24hr\r\n        : masks.value.inputDateTime;\r\n    }\r\n    return masks.value.input;\r\n  });\r\n\r\n  const inputMaskHasTime = computed(() => /[Hh]/g.test(inputMask.value));\r\n\r\n  const inputMaskHasDate = computed(() =>\r\n    /[dD]{1,2}|Do|W{1,4}|M{1,4}|YY(?:YY)?/g.test(inputMask.value),\r\n  );\r\n\r\n  const inputMaskPatch = computed(() => {\r\n    if (inputMaskHasTime.value && inputMaskHasDate.value) {\r\n      return 'dateTime';\r\n    }\r\n    if (inputMaskHasDate.value) return 'date';\r\n    if (inputMaskHasTime.value) return 'time';\r\n    return undefined;\r\n  });\r\n\r\n  const popover = computed(() => {\r\n    const target = popoverRef.value?.$el.previousElementSibling ?? undefined;\r\n    return defaultsDeep({}, props.popover, getDefault('datePicker.popover'), {\r\n      target,\r\n    }) as Partial<PopoverOptions>;\r\n  });\r\n\r\n  const popoverEvents = computed(() =>\r\n    getPopoverEventHandlers({\r\n      ...popover.value,\r\n      id: datePickerPopoverId.value,\r\n    }),\r\n  );\r\n\r\n  const inputValue = computed(() => {\r\n    return isRange.value\r\n      ? {\r\n          start: inputValues.value[0],\r\n          end: inputValues.value[1],\r\n        }\r\n      : inputValues.value[0];\r\n  });\r\n\r\n  const inputEvents = computed(() => {\r\n    const events = (['start', 'end'] as const).map(target => ({\r\n      input: onInputInput(target),\r\n      change: onInputChange(target),\r\n      keyup: onInputKeyup,\r\n      ...(props.popover && popoverEvents.value),\r\n    }));\r\n    return isRange.value\r\n      ? {\r\n          start: events[0],\r\n          end: events[1],\r\n        }\r\n      : events[0];\r\n  });\r\n\r\n  const selectAttribute = computed(() => {\r\n    if (!hasValue(dateValue.value)) return null;\r\n    const attribute = {\r\n      key: 'select-drag',\r\n      ...props.selectAttribute,\r\n      dates: dateValue.value,\r\n      pinPage: true,\r\n    };\r\n    const { dot, bar, highlight, content } = attribute;\r\n    if (!dot && !bar && !highlight && !content) {\r\n      attribute.highlight = true;\r\n    }\r\n    return attribute;\r\n  });\r\n\r\n  const dragAttribute = computed(() => {\r\n    if (!isRange.value || !hasValue(dragValue.value)) {\r\n      return null;\r\n    }\r\n    const attribute = {\r\n      key: 'select-drag',\r\n      ...props.dragAttribute,\r\n      dates: dragValue.value,\r\n    };\r\n    const { dot, bar, highlight, content } = attribute;\r\n    if (!dot && !bar && !highlight && !content) {\r\n      attribute.highlight = {\r\n        startEnd: {\r\n          fillMode: 'outline',\r\n        },\r\n      };\r\n    }\r\n    return attribute;\r\n  });\r\n\r\n  const attributes = computed(() => {\r\n    const attrs = isArray(props.attributes) ? [...props.attributes] : [];\r\n    if (dragAttribute.value) {\r\n      attrs.unshift(dragAttribute.value);\r\n    } else if (selectAttribute.value) {\r\n      attrs.unshift(selectAttribute.value);\r\n    }\r\n    return attrs;\r\n  });\r\n\r\n  const rules = computed(() => {\r\n    return normalizeConfig(\r\n      props.rules === 'auto' ? getAutoRules() : props.rules ?? {},\r\n    );\r\n  });\r\n\r\n  // #endregion Computed\r\n\r\n  function getAutoRules() {\r\n    const _rules = {\r\n      ms: [0, 999],\r\n      sec: [0, 59],\r\n      min: [0, 59],\r\n      hr: [0, 23],\r\n    };\r\n    const accuracy = isDateMode.value ? 0 : props.timeAccuracy;\r\n    return [0, 1].map(i => {\r\n      switch (accuracy) {\r\n        case 0:\r\n          return {\r\n            hours: _rules.hr[i],\r\n            minutes: _rules.min[i],\r\n            seconds: _rules.sec[i],\r\n            milliseconds: _rules.ms[i],\r\n          };\r\n        case 1:\r\n          return {\r\n            minutes: _rules.min[i],\r\n            seconds: _rules.sec[i],\r\n            milliseconds: _rules.ms[i],\r\n          };\r\n        case 3:\r\n          return { milliseconds: _rules.ms[i] };\r\n        case 4:\r\n          return {};\r\n        default:\r\n          return { seconds: _rules.sec[i], milliseconds: _rules.ms[i] };\r\n      }\r\n    });\r\n  }\r\n\r\n  function normalizeConfig<T>(config: T | T[]): T[] {\r\n    if (isArray(config)) {\r\n      if (config.length === 1) return [config[0], config[0]];\r\n      return config;\r\n    }\r\n    return [config, config];\r\n  }\r\n\r\n  function normalizeDateConfig(\r\n    config: Partial<DateConfig> | Partial<DateConfig>[],\r\n  ): DateConfig[] {\r\n    return normalizeConfig(config).map(\r\n      (c, i) =>\r\n        ({\r\n          ...c,\r\n          rules: rules.value[i],\r\n        }) as DateConfig,\r\n    );\r\n  }\r\n\r\n  function hasDateValue(\r\n    value: DatePickerDate,\r\n  ): value is Exclude<DatePickerDate, null> {\r\n    if (value == null) return false;\r\n    if (isNumber(value)) return !isNaN(value);\r\n    if (isDate(value)) return !isNaN(value.getTime());\r\n    if (isString(value)) return value !== '';\r\n    return isDateParts(value);\r\n  }\r\n\r\n  function hasRangeValue(value: unknown): value is DatePickerRangeObject {\r\n    return (\r\n      isObject(value) &&\r\n      'start' in value &&\r\n      'end' in value &&\r\n      hasDateValue(value.start ?? null) &&\r\n      hasDateValue(value.end ?? null)\r\n    );\r\n  }\r\n\r\n  function hasValue(\r\n    value: DatePickerModel,\r\n  ): value is Exclude<DatePickerDate, null> | DatePickerRangeObject {\r\n    return hasRangeValue(value) || hasDateValue(value);\r\n  }\r\n\r\n  function valuesAreEqual(\r\n    a: null | Date | SimpleDateRange,\r\n    b: null | Date | SimpleDateRange,\r\n  ): boolean {\r\n    if (a == null && b == null) return true;\r\n    if (a == null || b == null) return false;\r\n    const aIsDate = isDate(a);\r\n    const bIsDate = isDate(b);\r\n    if (aIsDate && bIsDate) return a.getTime() === b.getTime();\r\n    if (aIsDate || bIsDate) return false;\r\n    return valuesAreEqual(a.start, b.start) && valuesAreEqual(a.end, b.end);\r\n  }\r\n\r\n  function valueIsDisabled(value: Date | SimpleDateRange | null) {\r\n    if (!hasValue(value) || !disabledAttribute.value) return false;\r\n    return disabledAttribute.value.intersectsRange(locale.value.range(value));\r\n  }\r\n\r\n  function normalizeValue(\r\n    value: DatePickerModel,\r\n    config: DateConfig[],\r\n    patch: DatePatch,\r\n    targetPriority?: ValueTarget,\r\n  ): Date | SimpleDateRange | null {\r\n    if (!hasValue(value)) return null;\r\n    if (hasRangeValue(value)) {\r\n      const start = locale.value.toDate(value.start, {\r\n        ...config[0],\r\n        fillDate: valueStart.value ?? undefined,\r\n        patch,\r\n      });\r\n      const end = locale.value.toDate(value.end, {\r\n        ...config[1],\r\n        fillDate: valueEnd.value ?? undefined,\r\n        patch,\r\n      });\r\n      return sortRange({ start, end }, targetPriority);\r\n    }\r\n    return locale.value.toDateOrNull(value, {\r\n      ...config[0],\r\n      fillDate: dateValue.value as Date,\r\n      patch,\r\n    });\r\n  }\r\n\r\n  function denormalizeValue(\r\n    value: null | Date | SimpleDateRange,\r\n    config: DateConfig[],\r\n  ) {\r\n    if (hasRangeValue(value)) {\r\n      return {\r\n        start: locale.value.fromDate(value.start, config[0]),\r\n        end: locale.value.fromDate(value.end, config[1]),\r\n      };\r\n    }\r\n    if (isRange.value) {\r\n      return null;\r\n    }\r\n    return locale.value.fromDate(value, config[0]);\r\n  }\r\n\r\n  function updateValue(\r\n    value: any,\r\n    opts: Partial<UpdateOptions> = {},\r\n  ): Promise<ReturnType<typeof forceUpdateValue>> {\r\n    clearTimeout(updateTimeout);\r\n    return new Promise(resolve => {\r\n      const { debounce = 0, ...args } = opts;\r\n      if (debounce > 0) {\r\n        updateTimeout = window.setTimeout(() => {\r\n          resolve(forceUpdateValue(value, args));\r\n        }, debounce);\r\n      } else {\r\n        resolve(forceUpdateValue(value, args));\r\n      }\r\n    });\r\n  }\r\n\r\n  function forceUpdateValue(\r\n    value: any,\r\n    {\r\n      config = modelConfig.value,\r\n      patch = 'dateTime',\r\n      clearIfEqual = false,\r\n      formatInput: fInput = true,\r\n      hidePopover: hPopover = false,\r\n      dragging = isDragging.value,\r\n      targetPriority,\r\n      moveToValue: mValue = false,\r\n    }: Partial<UpdateOptions> = {},\r\n  ) {\r\n    // 1. Normalization\r\n    const normalizedConfig = normalizeDateConfig(config);\r\n    let normalizedValue = normalizeValue(\r\n      value,\r\n      normalizedConfig,\r\n      patch,\r\n      targetPriority,\r\n    );\r\n\r\n    // 2a. Validation against disabled dates\r\n    const isDisabled = valueIsDisabled(normalizedValue);\r\n    if (isDisabled) {\r\n      if (dragging) return null;\r\n      normalizedValue = dateValue.value;\r\n      // Don't allow hiding popover\r\n      hPopover = false;\r\n      // 2b. Validation against is-required or clearIfEqual\r\n    } else if (normalizedValue == null && props.isRequired) {\r\n      // Reset to previous value if it was cleared but is required\r\n      normalizedValue = dateValue.value;\r\n      // 2c. Validation against clearIfEqual\r\n    } else if (\r\n      // Clear value if same value was passed\r\n      normalizedValue != null &&\r\n      valuesAreEqual(dateValue.value, normalizedValue) &&\r\n      clearIfEqual\r\n    ) {\r\n      normalizedValue = null;\r\n    }\r\n\r\n    // 3. Assignment\r\n    const valueRef = dragging ? dragValue : dateValue;\r\n    const notify = !valuesAreEqual(valueRef.value, normalizedValue);\r\n    valueRef.value = normalizedValue;\r\n    // Clear drag value if needed\r\n    if (!dragging) dragValue.value = null;\r\n    // Denormalize value using the model config\r\n    const denormalizedValue = denormalizeValue(\r\n      normalizedValue,\r\n      modelConfig.value,\r\n    );\r\n\r\n    // 4. Notification\r\n    if (notify) {\r\n      watchValue = false;\r\n      emit(dragging ? 'drag' : 'update:modelValue', denormalizedValue);\r\n      nextTick(() => (watchValue = true));\r\n    }\r\n\r\n    // 5. Hide popover if needed\r\n    if (hPopover && !dragging) hidePopover();\r\n\r\n    // 6. Format inputs if needed\r\n    if (fInput) formatInput();\r\n\r\n    // 7. Move to range target if needed\r\n    if (mValue) {\r\n      nextTick(() => moveToValue(targetPriority ?? 'start'));\r\n    }\r\n\r\n    return denormalizedValue;\r\n  }\r\n\r\n  function formatInput() {\r\n    nextTick(() => {\r\n      const config = normalizeDateConfig({\r\n        type: 'string',\r\n        mask: inputMask.value,\r\n      });\r\n      const value = denormalizeValue(\r\n        dragValue.value ?? dateValue.value,\r\n        config,\r\n      );\r\n      if (isRange.value) {\r\n        // @ts-ignore\r\n        inputValues.value = [value && value.start, value && value.end];\r\n      } else {\r\n        inputValues.value = [value as string, ''];\r\n      }\r\n    });\r\n  }\r\n\r\n  function onInputUpdate(\r\n    inputValue: string,\r\n    target: ValueTarget,\r\n    opts: Partial<UpdateOptions>,\r\n  ) {\r\n    inputValues.value.splice(target === 'start' ? 0 : 1, 1, inputValue);\r\n    const value = isRange.value\r\n      ? {\r\n          start: inputValues.value[0],\r\n          end: inputValues.value[1] || inputValues.value[0],\r\n        }\r\n      : inputValue;\r\n    const config = {\r\n      type: 'string',\r\n      mask: inputMask.value,\r\n    };\r\n    updateValue(value, {\r\n      ...opts,\r\n      config,\r\n      patch: inputMaskPatch.value,\r\n      targetPriority: target,\r\n      moveToValue: true,\r\n    });\r\n  }\r\n\r\n  function onInputInput(target: ValueTarget) {\r\n    return (e: InputEvent) => {\r\n      if (!props.updateOnInput) return;\r\n      onInputUpdate((<HTMLInputElement>e.currentTarget).value, target, {\r\n        formatInput: false,\r\n        hidePopover: false,\r\n        debounce: props.inputDebounce,\r\n      });\r\n    };\r\n  }\r\n\r\n  function onInputChange(target: ValueTarget) {\r\n    return (e: InputEvent) => {\r\n      onInputUpdate((<HTMLInputElement>e.currentTarget).value, target, {\r\n        formatInput: true,\r\n        hidePopover: false,\r\n      });\r\n    };\r\n  }\r\n\r\n  function onInputKeyup(e: KeyboardEvent) {\r\n    // Escape key only\r\n    if (e.key !== 'Escape') return;\r\n    updateValue(dateValue.value, {\r\n      formatInput: true,\r\n      hidePopover: true,\r\n    });\r\n  }\r\n\r\n  function getDateParts(value: any): (DateParts | null)[] {\r\n    if (isRange.value) {\r\n      return [\r\n        value && value.start ? locale.value.getDateParts(value.start) : null,\r\n        value && value.end ? locale.value.getDateParts(value.end) : null,\r\n      ];\r\n    }\r\n    return [value ? locale.value.getDateParts(value) : null];\r\n  }\r\n\r\n  function cancelDrag() {\r\n    dragValue.value = null;\r\n    formatInput();\r\n  }\r\n\r\n  function onPopoverBeforeShow(el: HTMLElement) {\r\n    emit('popover-will-show', el);\r\n  }\r\n\r\n  function onPopoverAfterShow(el: HTMLElement) {\r\n    emit('popover-did-show', el);\r\n  }\r\n\r\n  function onPopoverBeforeHide(el: HTMLElement) {\r\n    cancelDrag();\r\n    emit('popover-will-hide', el);\r\n  }\r\n\r\n  function onPopoverAfterHide(el: HTMLElement) {\r\n    emit('popover-did-hide', el);\r\n  }\r\n\r\n  function handleDayClick(day: CalendarDay) {\r\n    const opts: Partial<UpdateOptions> = {\r\n      patch: 'date',\r\n      formatInput: true,\r\n      hidePopover: true,\r\n    };\r\n    if (isRange.value) {\r\n      const dragging = !isDragging.value;\r\n      if (dragging) {\r\n        dragTrackingValue = { start: day.startDate, end: day.endDate };\r\n      } else if (dragTrackingValue != null) {\r\n        dragTrackingValue.end = day.date;\r\n      }\r\n      updateValue(dragTrackingValue, {\r\n        ...opts,\r\n        dragging,\r\n      });\r\n    } else {\r\n      updateValue(day.date, {\r\n        ...opts,\r\n        clearIfEqual: !props.isRequired,\r\n      });\r\n    }\r\n  }\r\n\r\n  function onDayClick(day: CalendarDay, event: MouseEvent) {\r\n    handleDayClick(day);\r\n    // Re-emit event\r\n    emit('dayclick', day, event);\r\n  }\r\n\r\n  function onDayKeydown(day: CalendarDay, event: KeyboardEvent) {\r\n    switch (event.key) {\r\n      case ' ':\r\n      case 'Enter': {\r\n        handleDayClick(day);\r\n        event.preventDefault();\r\n        break;\r\n      }\r\n      case 'Escape': {\r\n        hidePopover();\r\n      }\r\n    }\r\n    // Re-emit event\r\n    emit('daykeydown', day, event);\r\n  }\r\n\r\n  function onDayMouseEnter(day: CalendarDay, event: MouseEvent) {\r\n    if (!isDragging.value || dragTrackingValue == null) return;\r\n    dragTrackingValue.end = day.date;\r\n    updateValue(sortRange(dragTrackingValue), {\r\n      patch: 'date',\r\n      formatInput: true,\r\n    });\r\n  }\r\n\r\n  function showPopover(opts: Partial<PopoverOptions> = {}) {\r\n    sp({\r\n      ...popover.value,\r\n      ...opts,\r\n      isInteractive: true,\r\n      id: datePickerPopoverId.value,\r\n    });\r\n  }\r\n\r\n  function hidePopover(opts: Partial<PopoverOptions> = {}) {\r\n    hp({\r\n      hideDelay: 10,\r\n      force: true,\r\n      ...popover.value,\r\n      ...opts,\r\n      id: datePickerPopoverId.value,\r\n    });\r\n  }\r\n\r\n  function togglePopover(opts: Partial<PopoverOptions>) {\r\n    tp({\r\n      ...popover.value,\r\n      ...opts,\r\n      isInteractive: true,\r\n      id: datePickerPopoverId.value,\r\n    });\r\n  }\r\n\r\n  function sortRange(range: SimpleDateRange, priority?: ValueTarget) {\r\n    const { start, end } = range;\r\n    if (start > end) {\r\n      switch (priority) {\r\n        case 'start':\r\n          return { start, end: start };\r\n        case 'end':\r\n          return { start: end, end };\r\n        default:\r\n          return { start: end, end: start };\r\n      }\r\n    }\r\n    return { start, end };\r\n  }\r\n\r\n  async function move(target: MoveTarget, opts: Partial<MoveOptions> = {}) {\r\n    if (calendarRef.value == null) return false;\r\n    return calendarRef.value.move(target, opts);\r\n  }\r\n\r\n  async function moveBy(pages: number, opts: Partial<MoveOptions> = {}) {\r\n    if (calendarRef.value == null) return false;\r\n    return calendarRef.value.moveBy(pages, opts);\r\n  }\r\n\r\n  async function moveToValue(\r\n    target: ValueTarget,\r\n    opts: Partial<MoveOptions> = {},\r\n  ) {\r\n    const dValue = dateValue.value;\r\n    if (calendarRef.value == null || !hasValue(dValue)) return false;\r\n    const start = target !== 'end';\r\n    const position = start ? 1 : -1;\r\n    const date = hasRangeValue(dValue)\r\n      ? start\r\n        ? dValue.start\r\n        : dValue.end\r\n      : dValue;\r\n    const page = getPageAddressForDate(date, 'monthly', locale.value);\r\n    return calendarRef.value.move(page, { position, ...opts });\r\n  }\r\n\r\n  // #endregion Methods\r\n\r\n  // #region Watch\r\n\r\n  watch(\r\n    () => props.isRange,\r\n    val => {\r\n      if (val) {\r\n        console.warn(\r\n          'The `is-range` prop will be deprecated in future releases. Please use the `range` modifier.',\r\n        );\r\n      }\r\n    },\r\n    { immediate: true },\r\n  );\r\n\r\n  watch(\r\n    () => isRange.value,\r\n    () => {\r\n      forceUpdateValue(null, { formatInput: true });\r\n    },\r\n  );\r\n\r\n  watch(\r\n    () => inputMask.value,\r\n    () => formatInput(),\r\n  );\r\n\r\n  watch(\r\n    () => props.modelValue,\r\n    val => {\r\n      if (!watchValue) return;\r\n      forceUpdateValue(val, {\r\n        formatInput: true,\r\n        hidePopover: false,\r\n      });\r\n    },\r\n  );\r\n\r\n  watch(\r\n    () => rules.value,\r\n    () => {\r\n      if (isObject(props.rules)) {\r\n        forceUpdateValue(props.modelValue, {\r\n          formatInput: true,\r\n          hidePopover: false,\r\n        });\r\n      }\r\n    },\r\n  );\r\n\r\n  watch(\r\n    () => props.timezone,\r\n    () => {\r\n      forceUpdateValue(dateValue.value, { formatInput: true });\r\n    },\r\n  );\r\n\r\n  // #endregion Watch\r\n\r\n  // #region Lifecycle\r\n\r\n  // Set initial date value (no validation applied)\r\n  const config = normalizeConfig(modelConfig.value);\r\n  dateValue.value = normalizeValue(\r\n    props.modelValue ?? null,\r\n    config,\r\n    'dateTime',\r\n  );\r\n\r\n  onMounted(() => {\r\n    forceUpdateValue(props.modelValue, {\r\n      formatInput: true,\r\n      hidePopover: false,\r\n    });\r\n  });\r\n\r\n  // Created\r\n  // Waiting a tick allows calendar to initialize page\r\n  nextTick(() => (showCalendar.value = true));\r\n\r\n  // #endregion Lifecycle\r\n\r\n  const context = {\r\n    ...baseCtx,\r\n    showCalendar,\r\n    datePickerPopoverId,\r\n    popoverRef,\r\n    popoverEvents,\r\n    calendarRef,\r\n    isRange,\r\n    isTimeMode,\r\n    isDateTimeMode,\r\n    is24hr: toRef(props, 'is24hr'),\r\n    hideTimeHeader: toRef(props, 'hideTimeHeader'),\r\n    timeAccuracy: toRef(props, 'timeAccuracy'),\r\n    isDragging,\r\n    inputValue,\r\n    inputEvents,\r\n    dateParts,\r\n    attributes,\r\n    rules,\r\n    move,\r\n    moveBy,\r\n    moveToValue,\r\n    updateValue,\r\n    showPopover,\r\n    hidePopover,\r\n    togglePopover,\r\n    onDayClick,\r\n    onDayKeydown,\r\n    onDayMouseEnter,\r\n    onPopoverBeforeShow,\r\n    onPopoverAfterShow,\r\n    onPopoverBeforeHide,\r\n    onPopoverAfterHide,\r\n  };\r\n  provide(contextKey, context);\r\n  return context;\r\n}\r\n\r\nexport function useDatePicker() {\r\n  const context = inject<DatePickerContext>(contextKey);\r\n  if (context) return context;\r\n  throw new Error(\r\n    'DatePicker context missing. Please verify this component is nested within a valid context provider.',\r\n  );\r\n}\r\n","import { computed } from 'vue';\r\nimport { useDatePicker } from '../use/datePicker';\r\nimport {\r\n  type DateParts,\r\n  type SimpleDateParts,\r\n  getDatePartsOptions,\r\n  isDateParts,\r\n} from '../utils/date/helpers';\r\nimport { arrayHasItems } from '../utils/helpers';\r\n\r\nconst _amOptions = [\r\n  { value: 0, label: '12' },\r\n  { value: 1, label: '1' },\r\n  { value: 2, label: '2' },\r\n  { value: 3, label: '3' },\r\n  { value: 4, label: '4' },\r\n  { value: 5, label: '5' },\r\n  { value: 6, label: '6' },\r\n  { value: 7, label: '7' },\r\n  { value: 8, label: '8' },\r\n  { value: 9, label: '9' },\r\n  { value: 10, label: '10' },\r\n  { value: 11, label: '11' },\r\n];\r\nconst _pmOptions = [\r\n  { value: 12, label: '12' },\r\n  { value: 13, label: '1' },\r\n  { value: 14, label: '2' },\r\n  { value: 15, label: '3' },\r\n  { value: 16, label: '4' },\r\n  { value: 17, label: '5' },\r\n  { value: 18, label: '6' },\r\n  { value: 19, label: '7' },\r\n  { value: 20, label: '8' },\r\n  { value: 21, label: '9' },\r\n  { value: 22, label: '10' },\r\n  { value: 23, label: '11' },\r\n];\r\n\r\nexport interface TimePickerProps {\r\n  position: number;\r\n}\r\n\r\nexport type TimePickerContext = ReturnType<typeof createTimePicker>;\r\n\r\nexport function createTimePicker(props: TimePickerProps) {\r\n  const ctx = useDatePicker();\r\n  const {\r\n    locale,\r\n    isRange,\r\n    isTimeMode,\r\n    dateParts,\r\n    rules,\r\n    is24hr,\r\n    hideTimeHeader,\r\n    timeAccuracy,\r\n    updateValue: updateDpValue,\r\n  } = ctx;\r\n\r\n  function updateParts(newParts: Partial<DateParts>) {\r\n    newParts = Object.assign(parts.value, newParts);\r\n    let newValue = null;\r\n    if (isRange.value) {\r\n      const start = isStart.value ? newParts : dateParts.value[0];\r\n      const end = isStart.value ? dateParts.value[1] : newParts;\r\n      newValue = { start, end };\r\n    } else {\r\n      newValue = newParts;\r\n    }\r\n    updateDpValue(newValue, {\r\n      patch: 'time',\r\n      targetPriority: isStart.value ? 'start' : 'end',\r\n      moveToValue: true,\r\n    });\r\n  }\r\n\r\n  const isStart = computed(() => props.position === 0);\r\n  const parts = computed(\r\n    () => dateParts.value[props.position] || { isValid: false },\r\n  );\r\n  const partsValid = computed(() => isDateParts(parts.value));\r\n  const isValid = computed(() => !!parts.value.isValid);\r\n  const showHeader = computed(() => {\r\n    return !hideTimeHeader.value && isValid.value;\r\n  });\r\n\r\n  const date = computed(() => {\r\n    if (!partsValid.value) return null;\r\n    let date = locale.value.toDate(parts.value as Partial<SimpleDateParts>);\r\n    if ((parts.value as DateParts).hours === 24) {\r\n      date = new Date(date.getTime() - 1);\r\n    }\r\n    return date;\r\n  });\r\n\r\n  const hours = computed({\r\n    get() {\r\n      return (parts.value as DateParts).hours;\r\n    },\r\n    set(val) {\r\n      updateParts({ hours: val });\r\n    },\r\n  });\r\n\r\n  const minutes = computed({\r\n    get() {\r\n      return (parts.value as DateParts).minutes;\r\n    },\r\n    set(val) {\r\n      updateParts({ minutes: val });\r\n    },\r\n  });\r\n\r\n  const seconds = computed({\r\n    get() {\r\n      return (parts.value as DateParts).seconds;\r\n    },\r\n    set(val) {\r\n      updateParts({ seconds: val });\r\n    },\r\n  });\r\n\r\n  const milliseconds = computed({\r\n    get() {\r\n      return (parts.value as DateParts).milliseconds;\r\n    },\r\n    set(val) {\r\n      updateParts({ milliseconds: val });\r\n    },\r\n  });\r\n\r\n  const isAM = computed({\r\n    get() {\r\n      return (parts.value as DateParts).hours < 12;\r\n    },\r\n    set(value) {\r\n      value = String(value).toLowerCase() == 'true';\r\n      let hValue = hours.value;\r\n      if (value && hValue >= 12) {\r\n        hValue -= 12;\r\n      } else if (!value && hValue < 12) {\r\n        hValue += 12;\r\n      }\r\n      updateParts({ hours: hValue });\r\n    },\r\n  });\r\n\r\n  const options = computed(() =>\r\n    getDatePartsOptions(parts.value as DateParts, rules.value[props.position]),\r\n  );\r\n\r\n  const amHourOptions = computed(() => {\r\n    return _amOptions.filter(opt =>\r\n      options.value.hours.some(ho => ho.value === opt.value),\r\n    );\r\n  });\r\n\r\n  const pmHourOptions = computed(() => {\r\n    return _pmOptions.filter(opt =>\r\n      options.value.hours.some(ho => ho.value === opt.value),\r\n    );\r\n  });\r\n\r\n  const hourOptions = computed(() => {\r\n    if (is24hr.value) return options.value.hours;\r\n    if (isAM.value) return amHourOptions.value;\r\n    return pmHourOptions.value;\r\n  });\r\n\r\n  const isAMOptions = computed(() => {\r\n    const result = [];\r\n    if (arrayHasItems(amHourOptions.value))\r\n      result.push({ value: true, label: 'AM' });\r\n    if (arrayHasItems(pmHourOptions.value))\r\n      result.push({ value: false, label: 'PM' });\r\n    return result;\r\n  });\r\n\r\n  return {\r\n    ...ctx,\r\n    showHeader,\r\n    timeAccuracy,\r\n    parts,\r\n    isValid,\r\n    date,\r\n    hours,\r\n    minutes,\r\n    seconds,\r\n    milliseconds,\r\n    options,\r\n    hourOptions,\r\n    isAM,\r\n    isAMOptions,\r\n    is24hr,\r\n  };\r\n}\r\n","<template>\r\n  <div\r\n    class=\"vc-base-select\"\r\n    :class=\"{\r\n      'vc-fit-content': fitContent,\r\n      'vc-has-icon': showIcon,\r\n    }\"\r\n  >\r\n    <select\r\n      v-bind=\"$attrs\"\r\n      :value=\"modelValue\"\r\n      class=\"vc-focus\"\r\n      :class=\"{\r\n        'vc-align-right': alignRight,\r\n        'vc-align-left': alignLeft,\r\n      }\"\r\n      @change=\"\r\n        $emit('update:modelValue', ($event.target as HTMLSelectElement).value)\r\n      \"\r\n    >\r\n      <option\r\n        v-for=\"option in options\"\r\n        :key=\"option.value\"\r\n        :value=\"option.value\"\r\n        :disabled=\"option.disabled\"\r\n      >\r\n        {{ option.label }}\r\n      </option>\r\n    </select>\r\n    <BaseIcon v-if=\"showIcon\" name=\"ChevronDown\" size=\"18\" />\r\n    <div v-if=\"fitContent\" class=\"vc-base-sizer\" aria-hidden=\"true\">\r\n      {{ selectedLabel }}\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\ninterface BaseOption {\r\n  value: any;\r\n  label: string;\r\n  disabled?: boolean;\r\n}\r\n\r\nexport default {\r\n  inheritAttrs: false,\r\n};\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\r\n\r\nconst props = defineProps<{\r\n  options: BaseOption[];\r\n  modelValue: any;\r\n  alignRight?: boolean;\r\n  alignLeft?: boolean;\r\n  showIcon?: boolean;\r\n  fitContent?: boolean;\r\n}>();\r\ndefineEmits(['update:modelValue']);\r\n\r\nconst selectedLabel = computed(() => {\r\n  const option = props.options.find(opt => opt.value === props.modelValue);\r\n  return option?.label;\r\n});\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-base-select {\r\n  position: relative;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  height: 30px;\r\n  font-size: var(--vc-text-base);\r\n  font-weight: var(--vc-font-medium);\r\n  &.vc-has-icon {\r\n    & select {\r\n      padding: 0 27px 0 9px;\r\n    }\r\n    & .vc-base-sizer {\r\n      padding: 0 28px 0 10px;\r\n    }\r\n  }\r\n  &.vc-fit-content {\r\n    & select {\r\n      position: absolute;\r\n      top: 0;\r\n      left: 0;\r\n      width: 100%;\r\n    }\r\n  }\r\n  & .vc-base-icon {\r\n    position: absolute;\r\n    top: 6px;\r\n    right: 4px;\r\n    opacity: 0.6;\r\n    pointer-events: none;\r\n  }\r\n  & .vc-base-sizer {\r\n    font-size: var(--vc-text-base);\r\n    font-weight: var(--vc-font-medium);\r\n    color: transparent;\r\n    padding: 0px 8px;\r\n    margin: 0;\r\n  }\r\n  & select {\r\n    display: inline-flex;\r\n    justify-content: center;\r\n    color: var(--vc-select-color);\r\n    display: block;\r\n    appearance: none;\r\n    background-color: var(--vc-select-bg);\r\n    border-radius: var(--vc-rounded);\r\n    height: 30px;\r\n    width: max-content;\r\n    padding: 0px 7px;\r\n    margin: 0;\r\n    line-height: var(--leading-none);\r\n    text-indent: 0px;\r\n    background-image: none;\r\n    cursor: pointer;\r\n    text-align: center;\r\n    &:hover {\r\n      background-color: var(--vc-select-hover-bg);\r\n    }\r\n    &.vc-align-left {\r\n      text-align: left;\r\n    }\r\n    &.vc-align-right {\r\n      text-align: right;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    class=\"vc-time-picker\"\r\n    :class=\"[{ 'vc-invalid': !isValid, 'vc-attached': !isTimeMode }]\"\r\n  >\r\n    <CalendarSlot name=\"time-header\">\r\n      <div v-if=\"showHeader && date\" class=\"vc-time-header\">\r\n        <span class=\"vc-time-weekday\">\r\n          {{ locale.formatDate(date, 'WWW') }}\r\n        </span>\r\n        <span class=\"vc-time-month\">\r\n          {{ locale.formatDate(date, 'MMM') }}\r\n        </span>\r\n        <span class=\"vc-time-day\">\r\n          {{ locale.formatDate(date, 'D') }}\r\n        </span>\r\n        <span class=\"vc-time-year\">\r\n          {{ locale.formatDate(date, 'YYYY') }}\r\n        </span>\r\n      </div>\r\n    </CalendarSlot>\r\n    <div class=\"vc-time-select-group\">\r\n      <BaseIcon name=\"Clock\" size=\"17\" />\r\n      <BaseSelect\r\n        v-model.number=\"hours\"\r\n        :options=\"hourOptions\"\r\n        class=\"vc-time-select-hours\"\r\n        align-right\r\n      />\r\n      <template v-if=\"timeAccuracy > 1\">\r\n        <span class=\"vc-time-colon\">:</span>\r\n        <BaseSelect\r\n          v-model.number=\"minutes\"\r\n          :options=\"options.minutes\"\r\n          class=\"vc-time-select-minutes\"\r\n          :align-left=\"timeAccuracy === 2\"\r\n        />\r\n      </template>\r\n      <template v-if=\"timeAccuracy > 2\">\r\n        <span class=\"vc-time-colon\">:</span>\r\n        <BaseSelect\r\n          v-model.number=\"seconds\"\r\n          :options=\"options.seconds\"\r\n          class=\"vc-time-select-seconds\"\r\n          :align-left=\"timeAccuracy === 3\"\r\n        />\r\n      </template>\r\n      <template v-if=\"timeAccuracy > 3\">\r\n        <span class=\"vc-time-decimal\">.</span>\r\n        <BaseSelect\r\n          v-model.number=\"milliseconds\"\r\n          :options=\"options.milliseconds\"\r\n          class=\"vc-time-select-milliseconds\"\r\n          align-left\r\n        />\r\n      </template>\r\n      <BaseSelect v-if=\"!is24hr\" v-model=\"isAM\" :options=\"isAMOptions\" />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { createTimePicker } from '../../use/timePicker';\r\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\r\nimport BaseSelect from '../BaseSelect/BaseSelect.vue';\r\nimport CalendarSlot from '../Calendar/CalendarSlot.vue';\r\n\r\nconst props = defineProps<{\r\n  position: number;\r\n}>();\r\n\r\nconst timePicker = createTimePicker(props);\r\ndefineExpose(timePicker);\r\nconst {\r\n  locale,\r\n  isValid,\r\n  date,\r\n  hours,\r\n  minutes,\r\n  seconds,\r\n  milliseconds,\r\n  options,\r\n  hourOptions,\r\n  isTimeMode,\r\n  isAM,\r\n  isAMOptions,\r\n  is24hr,\r\n  showHeader,\r\n  timeAccuracy,\r\n} = timePicker;\r\n</script>\r\n\r\n<style lang=\"css\">\r\n.vc-time-picker {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  padding: 8px 4px;\r\n  &.vc-invalid {\r\n    pointer-events: none;\r\n    opacity: 0.5;\r\n  }\r\n  &.vc-attached {\r\n    border-top: 1px solid var(--vc-time-picker-border);\r\n  }\r\n  > * + * {\r\n    margin-top: 4px;\r\n  }\r\n}\r\n\r\n.vc-time-header {\r\n  display: flex;\r\n  align-items: center;\r\n  font-size: var(--vc-text-sm);\r\n  font-weight: var(--vc-font-semibold);\r\n  text-transform: uppercase;\r\n  margin-top: -4px;\r\n  padding-left: 4px;\r\n  padding-right: 4px;\r\n  line-height: 21px;\r\n}\r\n\r\n.vc-time-select-group {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  padding: 0 4px;\r\n  background: var(--vc-time-select-group-bg);\r\n  border-radius: var(--vc-rounded-md);\r\n  border: 1px solid var(--vc-time-select-group-border);\r\n  .vc-base-icon {\r\n    margin-right: 4px;\r\n    color: var(--vc-time-select-group-icon-color);\r\n  }\r\n  select {\r\n    background: transparent;\r\n    padding: 0px 4px;\r\n  }\r\n}\r\n\r\n.vc-time-weekday {\r\n  color: var(--vc-time-weekday-color);\r\n  letter-spacing: var(--tracking-wide);\r\n}\r\n\r\n.vc-time-month {\r\n  color: var(--vc-time-month-color);\r\n  margin-left: 8px;\r\n}\r\n\r\n.vc-time-day {\r\n  color: var(--vc-time-day-color);\r\n  margin-left: 4px;\r\n}\r\n\r\n.vc-time-year {\r\n  color: var(--vc-time-year-color);\r\n  margin-left: 8px;\r\n}\r\n\r\n.vc-time-colon {\r\n  margin: 0 1px 2px 2px;\r\n}\r\n\r\n.vc-time-decimal {\r\n  margin: 0 0 0 1px;\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    v-if=\"isTimeMode\"\r\n    :class=\"`vc-container vc-bordered vc-${color} vc-${displayMode}`\"\r\n  >\r\n    <TimePicker\r\n      v-for=\"position in positions\"\r\n      :key=\"position\"\r\n      :position=\"position\"\r\n    />\r\n  </div>\r\n  <Calendar\r\n    v-else\r\n    :attributes=\"attributes\"\r\n    ref=\"calendarRef\"\r\n    @dayclick=\"onDayClick\"\r\n    @daymouseenter=\"onDayMouseEnter\"\r\n    @daykeydown=\"onDayKeydown\"\r\n  >\r\n    <template #footer>\r\n      <template v-if=\"isDateTimeMode\">\r\n        <TimePicker\r\n          v-for=\"position in positions\"\r\n          :key=\"position\"\r\n          :position=\"position\"\r\n        />\r\n      </template>\r\n      <CalendarSlot name=\"dp-footer\" />\r\n    </template>\r\n  </Calendar>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useDatePicker } from '../../use/datePicker';\r\nimport Calendar from '../Calendar/Calendar.vue';\r\nimport CalendarSlot from '../Calendar/CalendarSlot.vue';\r\nimport TimePicker from './TimePicker.vue';\r\n\r\nconst {\r\n  attributes,\r\n  calendarRef,\r\n  color,\r\n  displayMode,\r\n  isDateTimeMode,\r\n  isTimeMode,\r\n  isRange,\r\n  onDayClick,\r\n  onDayMouseEnter,\r\n  onDayKeydown,\r\n} = useDatePicker();\r\n\r\nconst positions = isRange.value ? [0, 1] : [0];\r\n</script>\r\n","<template>\r\n  <Popover\r\n    :id=\"datePickerPopoverId\"\r\n    placement=\"bottom-start\"\r\n    :class=\"`vc-date-picker-content vc-${color} vc-${displayMode}`\"\r\n    ref=\"popoverRef\"\r\n    @before-show=\"onPopoverBeforeShow\"\r\n    @after-show=\"onPopoverAfterShow\"\r\n    @before-hide=\"onPopoverBeforeHide\"\r\n    @after-hide=\"onPopoverAfterHide\"\r\n  >\r\n    <DatePickerBase v-bind=\"$attrs\" />\r\n  </Popover>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  inheritAttrs: false,\r\n};\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useDatePicker } from '../../use/datePicker';\r\nimport Popover from '../Popover/Popover.vue';\r\nimport DatePickerBase from './DatePickerBase.vue';\r\n\r\nconst {\r\n  datePickerPopoverId,\r\n  color,\r\n  displayMode,\r\n  popoverRef,\r\n  onPopoverBeforeShow,\r\n  onPopoverAfterShow,\r\n  onPopoverBeforeHide,\r\n  onPopoverAfterHide,\r\n} = useDatePicker();\r\n</script>\r\n","<template>\r\n  <template v-if=\"$slots.default\">\r\n    <slot v-bind=\"slotCtx\" />\r\n    <DatePickerPopover v-bind=\"$attrs\" />\r\n  </template>\r\n  <DatePickerBase v-else v-bind=\"$attrs\" />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, reactive } from 'vue';\r\nimport { createDatePicker, emits, propsDef } from '../../use/datePicker';\r\nimport { omit } from '../../utils/helpers';\r\nimport DatePickerBase from './DatePickerBase.vue';\r\nimport DatePickerPopover from './DatePickerPopover.vue';\r\n\r\nexport default defineComponent({\r\n  inheritAttrs: false,\r\n  emits,\r\n  props: propsDef,\r\n  components: { DatePickerBase, DatePickerPopover },\r\n  setup(props, ctx) {\r\n    const datePicker = createDatePicker(props, ctx);\r\n    const slotCtx = reactive(omit(datePicker, 'calendarRef', 'popoverRef'));\r\n    return { ...datePicker, slotCtx };\r\n  },\r\n});\r\n</script>\r\n","<template>\r\n  <template v-if=\"$slots.default\">\r\n    <slot v-bind=\"slotCtx\" />\r\n    <DatePickerPopover v-bind=\"$attrs\" />\r\n  </template>\r\n  <DatePickerBase v-else v-bind=\"$attrs\" />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, reactive } from 'vue';\r\nimport { createDatePicker, emits, propsDef } from '../../use/datePicker';\r\nimport { omit } from '../../utils/helpers';\r\nimport DatePickerBase from './DatePickerBase.vue';\r\nimport DatePickerPopover from './DatePickerPopover.vue';\r\n\r\nexport default defineComponent({\r\n  inheritAttrs: false,\r\n  emits,\r\n  props: propsDef,\r\n  components: { DatePickerBase, DatePickerPopover },\r\n  setup(props, ctx) {\r\n    const datePicker = createDatePicker(props, ctx);\r\n    const slotCtx = reactive(omit(datePicker, 'calendarRef', 'popoverRef'));\r\n    return { ...datePicker, slotCtx };\r\n  },\r\n});\r\n</script>\r\n","import type { App } from 'vue';\r\nimport * as components from './components/index';\r\nimport './styles/index.css';\r\nimport { setVueInstance } from './utils/config/index';\r\nimport { type Defaults, setupDefaults } from './utils/defaults';\r\n\r\nconst install = (app: App, defaults: Defaults = {}) => {\r\n  setVueInstance(app);\r\n  app.use(setupDefaults, defaults);\r\n  const prefix = app.config.globalProperties.$VCalendar.componentPrefix;\r\n  for (const componentKey in components) {\r\n    const component = (components as any)[componentKey];\r\n    app.component(`${prefix}${componentKey}`, component);\r\n  }\r\n};\r\n\r\nexport default { install };\r\nexport * from './components';\r\nexport { setupDefaults as setupCalendar } from './utils/defaults';\r\nexport { popoverDirective } from './utils/popovers';\r\n\r\nexport { createCalendar, useCalendar } from './use/calendar';\r\nexport { createDatePicker, useDatePicker } from './use/datePicker';\r\n"],"names":["objectProto","hasOwnProperty","baseHas","isArray","freeGlobal","global","require$$0","root","Symbol","nativeObjectToString","symToStringTag","getRawTag","objectToString","require$$1","require$$2","baseGetTag","isObjectLike","symbolTag","isSymbol","isKey","isObject","funcTag","isFunction","coreJsData","isMasked","funcProto","funcToString","toSource","require$$3","baseIsNative","getValue","getNative","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","require$$4","Hash","index","listCacheClear","eq","assocIndexOf","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","memoize","memoizeCapped","stringToPath","arrayMap","INFINITY","symbolProto","baseToString","toString","castPath","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","MAX_SAFE_INTEGER","isIndex","isLength","toKey","require$$5","hasPath","has","dateTag","baseIsDate","baseUnary","nodeUtil","isDate","stringTag","arraySome","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","setCacheAdd","setCacheHas","SetCache","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","othValue","Uint8Array","mapToArray","setToArray","boolTag","errorTag","mapTag","numberTag","regexpTag","setTag","arrayBufferTag","dataViewTag","equalByTag","arrayPush","baseGetAllKeys","arrayFilter","stubArray","getSymbols","baseTimes","stubFalse","Buffer","isBuffer","arrayTag","objectTag","weakMapTag","baseIsTypedArray","isTypedArray","arrayLikeKeys","isPrototype","overArg","nativeKeys","baseKeys","isArrayLike","keys","getAllKeys","equalObjects","DataView","Promise","Set","WeakMap","require$$6","getTag","require$$7","baseIsEqualDeep","baseIsEqual","baseIsMatch","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseGet","get","baseHasIn","hasIn","baseMatchesProperty","identity","baseProperty","basePropertyDeep","property","baseIteratee","createBaseFor","baseFor","baseForOwn","createBaseEach","baseEach","baseSome","collection","isIterateeCall","defineProperty","baseAssignValue","assignValue","object","apply","overRest","constant","baseSetToString","shortOut","setToString","baseRest","nativeKeysIn","baseKeysIn","keysIn","assignMergeValue","cloneBuffer","cloneArrayBuffer","cloneTypedArray","copyArray","baseCreate","getPrototype","initCloneObject","isArrayLikeObject","isPlainObject","safeGet","copyObject","toPlainObject","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","baseMergeDeep","baseMerge","customDefaultsMerge","createAssigner","mergeWith","_isDate","_has","_some","isString","toInteger","getTimezoneOffsetInMilliseconds","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_MINUTE","patterns","token","hours","tzPattern","toDate","parseDate","_typeof","obj","startOfWeek","defaultOptions","MILLISECONDS_IN_WEEK","result","weekdays","_a","_b","locales","mapValues","defaultsDeep","masks","isNumber","GroupRuleType","IntervalRuleType","ComponentRuleType","OrdinalComponentRuleType","components","maxSwipeTime","minHorizontalSwipeDistance","maxVerticalSwipeDistance","config","contextKey","propsDef","basePropsDef","removeHandlers","head","last","addPages","count","_addPages","showWeeknumbers","isBoolean","attr","moveNext","movePrev","position","state","alignment","_sfc_render","_openBlock","_createElementBlock","_normalizeClass","_createVNode","_Transition","_withCtx","_mergeProps","_renderSlot","_createTextVNode","_toDisplayString","__default__","_hoisted_1","_hoisted_3","title","CalendarSlot","popovers","defaults","dayPopover","_hoisted_2","_hoisted_4","_resolveDirective","_Fragment","_renderList","_createCommentVNode","_createElementVNode","_hoisted_5","CalendarHeader","CalendarPage","CalendarNavPopover","CalendarDayPopover","CalendarPageProvider","_createBlock","normalizeConfig","getDateParts","hidePopover","inputValue","showPopover","sp","hp","togglePopover","tp","date","DatePickerBase","DatePickerPopover","_resolveComponent","_normalizeProps","_guardReactiveProps"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,206]}