{"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';\nimport _isDate from 'lodash/isDate';\nimport isFunction from 'lodash/isFunction';\nimport isString from 'lodash/isString';\nimport _some from 'lodash/some';\nimport type { ComponentPublicInstance } from 'vue';\n\nexport { isFunction, isString };\nexport { default as isBoolean } from 'lodash/isBoolean';\nexport { default as isNumber } from 'lodash/isNumber';\nexport { default as isUndefined } from 'lodash/isUndefined';\nexport { default as get } from 'lodash/get';\nexport { default as set } from 'lodash/set';\nexport { default as mapValues } from 'lodash/mapValues';\nexport { default as defaults } from 'lodash/defaults';\nexport { default as defaultsDeep } from 'lodash/defaultsDeep';\nexport { default as map } from 'lodash/map';\nexport { default as head } from 'lodash/head';\nexport { default as last } from 'lodash/last';\n\n// Type checkers\nexport const getType = (value: any) =>\n  Object.prototype.toString.call(value).slice(8, -1);\nexport const isDate = (value: unknown): value is Date =>\n  _isDate(value) && !isNaN(value.getTime());\nexport const isObject = (value: unknown): value is Object =>\n  getType(value) === 'Object';\n\n// Object utils\nexport const has = _has;\nexport const hasAny = (obj: object, props: string[]) =>\n  _some(props, p => _has(obj, p));\n\n// Collection utils\nexport const some = _some;\n\nexport const pad = (val: string | number, len: number, char = '0') => {\n  val = val !== null && val !== undefined ? String(val) : '';\n  len = len || 2;\n  while (val.length < len) {\n    val = `${char}${val}`;\n  }\n  return val;\n};\n\nexport const roundTenth = (n: number) => {\n  return Math.round(n * 100) / 100;\n};\n\nexport const isArray = (val: any): val is any[] => Array.isArray(val);\n\nexport const arrayHasItems = (array: any): boolean =>\n  isArray(array) && array.length > 0;\n\nexport const resolveEl = (target: unknown): Node | null => {\n  if (target == null) return null;\n  if (document && isString(target)) return document.querySelector(target);\n  return (target as ComponentPublicInstance).$el ?? target;\n};\n\nexport interface ElementPosition {\n  top: number;\n  left: number;\n}\n\nexport interface CustomElement {\n  addEventListener: Function;\n  removeEventListener: Function;\n  dispatchEvent: Function;\n}\n\nexport const off = (\n  element: CustomElement,\n  event: string,\n  handler: (e: any) => void,\n  opts: boolean | EventListenerOptions | undefined = undefined,\n) => {\n  element.removeEventListener(event, handler, opts);\n};\n\nexport const on = (\n  element: CustomElement,\n  event: string,\n  handler: (e: any) => void,\n  opts: boolean | AddEventListenerOptions | undefined = undefined,\n) => {\n  element.addEventListener(event, handler, opts);\n  return () => off(element, event, handler, opts);\n};\n\nexport const elementContains = (element: Node, child: Node) =>\n  !!element && !!child && (element === child || element.contains(child));\n\nexport const onSpaceOrEnter = (\n  event: KeyboardEvent,\n  handler: (e: KeyboardEvent) => void,\n) => {\n  if (event.key === ' ' || event.key === 'Enter') {\n    handler(event);\n    event.preventDefault();\n  }\n};\n\nexport const capitalize = (str: string) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport const omit = <T extends object, K extends [...(keyof T)[]]>(\n  obj: T,\n  ...keys: K\n) => {\n  const ret = {} as {\n    [K in keyof typeof obj]: (typeof obj)[K];\n  };\n  let key: keyof typeof obj;\n  for (key in obj) {\n    if (!keys.includes(key)) {\n      ret[key] = obj[key];\n    }\n  }\n  return ret;\n};\n\nexport const pick = <T extends object, K extends keyof T>(\n  obj: T,\n  keys: K[],\n): Pick<T, K> => {\n  const ret: any = {};\n  keys.forEach(key => {\n    if (key in obj) ret[key] = obj[key];\n  });\n  return ret;\n};\n\nexport function extend<T extends object, E extends object>(\n  value: T,\n  ext: E,\n): T & E {\n  const handler = {\n    get(target: T, prop: keyof (T | E)) {\n      if ((prop as string) in target) {\n        return target[prop];\n      }\n      return ext[prop];\n    },\n  };\n  // @ts-ignore\n  return new Proxy(value, handler) as T & E;\n}\n\nexport function clamp(num: number, min: number, max: number) {\n  return Math.min(Math.max(num, min), max);\n}\n\n/* eslint-disable no-bitwise */\n\nexport function hash(str: string): number {\n  let hashcode = 0;\n  let i = 0;\n  let chr;\n  if (str.length === 0) return hashcode;\n  for (i = 0; i < str.length; i++) {\n    chr = str.charCodeAt(i);\n    hashcode = (hashcode << 5) - hashcode + chr;\n    hashcode |= 0; // Convert to 32bit integer\n  }\n  return hashcode;\n}\n\n/* eslint-enable no-bitwise */\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 {\n  type DateParts,\n  type DateSource,\n  type DayParts,\n  type MonthParts,\n  addDays,\n  addMonths,\n  daysInWeek,\n  getDayIndex,\n  weeksInMonth,\n} from './date/helpers';\nimport { pad, pick } from './helpers';\nimport Locale from './locale';\n\nexport interface CalendarDay extends DayParts {\n  id: string;\n  position: number;\n  label: string;\n  ariaLabel: string;\n  weekdayPosition: number;\n  weekdayPositionFromEnd: number;\n  weekPosition: number;\n  isoWeeknumber: number;\n  startDate: Date;\n  noonDate: Date;\n  endDate: Date;\n  isToday: boolean;\n  isFirstDay: boolean;\n  isLastDay: boolean;\n  isDisabled: boolean;\n  isFocusable: boolean;\n  isFocused: boolean;\n  inMonth: boolean;\n  inPrevMonth: boolean;\n  inNextMonth: boolean;\n  onTop: boolean;\n  onBottom: boolean;\n  onLeft: boolean;\n  onRight: boolean;\n  classes: Array<string | Object>;\n  locale: Locale;\n}\n\nexport interface CalendarWeek {\n  id: string;\n  week: number;\n  weekPosition: number;\n  weeknumber: number;\n  isoWeeknumber: number;\n  weeknumberDisplay?: number;\n  days: CalendarDay[];\n  title: string;\n}\n\nexport interface CalendarWeekday {\n  weekday: number;\n  label: string;\n}\n\nexport type PageView = 'daily' | 'weekly' | 'monthly';\n\nexport type TitlePosition = 'center' | 'left' | 'right';\n\nexport interface Page {\n  id: string;\n  day?: number;\n  week?: number;\n  month: number;\n  year: number;\n  view: PageView;\n  trimWeeks: boolean;\n  position: number;\n  row: number;\n  rowFromEnd: number;\n  column: number;\n  columnFromEnd: number;\n  showWeeknumbers: boolean;\n  showIsoWeeknumbers: boolean;\n  weeknumberPosition: string;\n  monthTitle: string;\n  weekTitle?: string;\n  dayTitle?: string;\n  title: string;\n  titlePosition: TitlePosition;\n  shortMonthLabel: string;\n  monthLabel: string;\n  shortYearLabel: string;\n  yearLabel: string;\n  monthComps: MonthParts;\n  prevMonthComps: MonthParts;\n  nextMonthComps: MonthParts;\n  days: CalendarDay[];\n  weeks: CalendarWeek[];\n  weekdays: CalendarWeekday[];\n  viewDays: CalendarDay[];\n  viewWeeks: CalendarWeek[];\n}\n\nexport type PageAddress = Pick<Page, 'day' | 'week' | 'month' | 'year'>;\n\nexport type PageConfig = Pick<\n  Page,\n  | 'day'\n  | 'week'\n  | 'month'\n  | 'year'\n  | 'view'\n  | 'titlePosition'\n  | 'trimWeeks'\n  | 'position'\n  | 'row'\n  | 'rowFromEnd'\n  | 'column'\n  | 'columnFromEnd'\n  | 'showWeeknumbers'\n  | 'showIsoWeeknumbers'\n  | 'weeknumberPosition'\n>;\n\nexport type CachedPage = Pick<\n  Page,\n  | 'id'\n  | 'month'\n  | 'year'\n  | 'monthTitle'\n  | 'shortMonthLabel'\n  | 'monthLabel'\n  | 'shortYearLabel'\n  | 'yearLabel'\n  | 'monthComps'\n  | 'prevMonthComps'\n  | 'nextMonthComps'\n  | 'days'\n  | 'weeks'\n  | 'weekdays'\n>;\n\nconst viewAddressKeys: Record<PageView, (keyof DateParts)[]> = {\n  daily: ['year', 'month', 'day'],\n  weekly: ['year', 'month', 'week'],\n  monthly: ['year', 'month'],\n};\n\nfunction getDays(\n  {\n    monthComps,\n    prevMonthComps,\n    nextMonthComps,\n  }: Pick<Page, 'monthComps' | 'prevMonthComps' | 'nextMonthComps'>,\n  locale: Locale,\n): CalendarDay[] {\n  const days: CalendarDay[] = [];\n  const {\n    firstDayOfWeek,\n    firstWeekday,\n    isoWeeknumbers,\n    weeknumbers,\n    numDays,\n    numWeeks,\n  } = monthComps;\n  const prevMonthDaysToShow =\n    firstWeekday +\n    (firstWeekday < firstDayOfWeek ? daysInWeek : 0) -\n    firstDayOfWeek;\n  let prevMonth = true;\n  let thisMonth = false;\n  let nextMonth = false;\n  let position = 0;\n  // Formatter for aria labels\n  const formatter = new Intl.DateTimeFormat(locale.id, {\n    weekday: 'long',\n    year: 'numeric',\n    month: 'short',\n    day: 'numeric',\n  });\n  // Init counters with previous month's data\n  let day = prevMonthComps.numDays - prevMonthDaysToShow + 1;\n  let dayFromEnd = prevMonthComps.numDays - day + 1;\n  let weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\n  let weekdayOrdinalFromEnd = 1;\n  let week = prevMonthComps.numWeeks;\n  let weekFromEnd = 1;\n  let month = prevMonthComps.month;\n  let year = prevMonthComps.year;\n  // Store todays comps\n  const today = new Date();\n  const todayDay = today.getDate();\n  const todayMonth = today.getMonth() + 1;\n  const todayYear = today.getFullYear();\n  // Cycle through max weeks in month\n  for (let w = 1; w <= weeksInMonth; w++) {\n    // Cycle through days in week\n    for (\n      let i = 1, weekday = firstDayOfWeek;\n      i <= daysInWeek;\n      i++, weekday += weekday === daysInWeek ? 1 - daysInWeek : 1\n    ) {\n      // We need to know when to start counting actual month days\n      if (prevMonth && weekday === firstWeekday) {\n        // Reset counters for current month\n        day = 1;\n        dayFromEnd = monthComps.numDays;\n        weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\n        week = 1;\n        weekFromEnd = numWeeks;\n        month = monthComps.month;\n        year = monthComps.year;\n        // ...and flag we're tracking actual month days\n        prevMonth = false;\n        thisMonth = true;\n      }\n      const startDate = locale.getDateFromParams(year, month, day, 0, 0, 0, 0);\n      const noonDate = locale.getDateFromParams(year, month, day, 12, 0, 0, 0);\n      const endDate = locale.getDateFromParams(\n        year,\n        month,\n        day,\n        23,\n        59,\n        59,\n        999,\n      );\n      const date = startDate;\n      const id = `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;\n      const weekdayPosition = i;\n      const weekdayPositionFromEnd = daysInWeek - i;\n      const weeknumber = weeknumbers[w - 1];\n      const isoWeeknumber = isoWeeknumbers[w - 1];\n      const isToday =\n        day === todayDay && month === todayMonth && year === todayYear;\n      const isFirstDay = thisMonth && day === 1;\n      const isLastDay = thisMonth && day === numDays;\n      const onTop = w === 1;\n      const onBottom = w === numWeeks;\n      const onLeft = i === 1;\n      const onRight = i === daysInWeek;\n      const dayIndex = getDayIndex(year, month, day);\n      days.push({\n        locale,\n        id,\n        position: ++position,\n        label: day.toString(),\n        ariaLabel: formatter.format(new Date(year, month - 1, day)),\n        day,\n        dayFromEnd,\n        weekday,\n        weekdayPosition,\n        weekdayPositionFromEnd,\n        weekdayOrdinal,\n        weekdayOrdinalFromEnd,\n        week,\n        weekFromEnd,\n        weekPosition: w,\n        weeknumber,\n        isoWeeknumber,\n        month,\n        year,\n        date,\n        startDate,\n        endDate,\n        noonDate,\n        dayIndex,\n        isToday,\n        isFirstDay,\n        isLastDay,\n        isDisabled: !thisMonth,\n        isFocusable: !thisMonth,\n        isFocused: false,\n        inMonth: thisMonth,\n        inPrevMonth: prevMonth,\n        inNextMonth: nextMonth,\n        onTop,\n        onBottom,\n        onLeft,\n        onRight,\n        classes: [\n          `id-${id}`,\n          `day-${day}`,\n          `day-from-end-${dayFromEnd}`,\n          `weekday-${weekday}`,\n          `weekday-position-${weekdayPosition}`,\n          `weekday-ordinal-${weekdayOrdinal}`,\n          `weekday-ordinal-from-end-${weekdayOrdinalFromEnd}`,\n          `week-${week}`,\n          `week-from-end-${weekFromEnd}`,\n          {\n            'is-today': isToday,\n            'is-first-day': isFirstDay,\n            'is-last-day': isLastDay,\n            'in-month': thisMonth,\n            'in-prev-month': prevMonth,\n            'in-next-month': nextMonth,\n            'on-top': onTop,\n            'on-bottom': onBottom,\n            'on-left': onLeft,\n            'on-right': onRight,\n          },\n        ],\n      });\n      // See if we've hit the last day of the month\n      if (thisMonth && isLastDay) {\n        thisMonth = false;\n        nextMonth = true;\n        // Reset counters to next month's data\n        day = 1;\n        dayFromEnd = numDays;\n        weekdayOrdinal = 1;\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\n        week = 1;\n        weekFromEnd = nextMonthComps.numWeeks;\n        month = nextMonthComps.month;\n        year = nextMonthComps.year;\n        // Still in the middle of the month (hasn't ended yet)\n      } else {\n        day++;\n        dayFromEnd--;\n        weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\n      }\n    }\n    // Append week days\n    week++;\n    weekFromEnd--;\n  }\n  return days;\n}\n\nfunction getWeeks(\n  days: CalendarDay[],\n  showWeeknumbers: boolean,\n  showIsoWeeknumbers: boolean,\n  locale: Locale,\n): CalendarWeek[] {\n  const result = days.reduce((result: CalendarWeek[], day: CalendarDay, i) => {\n    const weekIndex = Math.floor(i / 7);\n    let week = result[weekIndex];\n    if (!week) {\n      week = {\n        id: `week-${weekIndex + 1}`,\n        title: '',\n        week: day.week,\n        weekPosition: day.weekPosition,\n        weeknumber: day.weeknumber,\n        isoWeeknumber: day.isoWeeknumber,\n        weeknumberDisplay: showWeeknumbers\n          ? day.weeknumber\n          : showIsoWeeknumbers\n          ? day.isoWeeknumber\n          : undefined,\n        days: [],\n      };\n      result[weekIndex] = week;\n    }\n    week.days.push(day);\n    return result;\n  }, Array(days.length / daysInWeek));\n  result.forEach(week => {\n    const fromDay = week.days[0];\n    const toDay = week.days[week.days.length - 1];\n    if (fromDay.month === toDay.month) {\n      week.title = `${locale.formatDate(fromDay.date, 'MMMM YYYY')}`;\n    } else if (fromDay.year === toDay.year) {\n      week.title = `${locale.formatDate(\n        fromDay.date,\n        'MMM',\n      )} - ${locale.formatDate(toDay.date, 'MMM YYYY')}`;\n    } else {\n      week.title = `${locale.formatDate(\n        fromDay.date,\n        'MMM YYYY',\n      )} - ${locale.formatDate(toDay.date, 'MMM YYYY')}`;\n    }\n  });\n  return result;\n}\n\nfunction getWeekdays(week: CalendarWeek, locale: Locale): CalendarWeekday[] {\n  return week.days.map(day => ({\n    label: locale.formatDate(day.date, locale.masks.weekdays),\n    weekday: day.weekday,\n  }));\n}\n\nexport function getPageId(month: number, year: number) {\n  return `${year}.${pad(month, 2)}`;\n}\n\nexport function getPageAddressForDate(\n  date: DateSource,\n  view: PageView,\n  locale: Locale,\n) {\n  return pick(\n    locale.getDateParts(locale.toDate(date)),\n    viewAddressKeys[view],\n  ) as PageAddress;\n}\n\nexport function addPages(\n  { day, week, month, year }: PageAddress,\n  count: number,\n  view: PageView,\n  locale: Locale,\n): PageAddress {\n  if (view === 'daily' && day) {\n    const date = new Date(year, month - 1, day);\n    const newDate = addDays(date, count);\n    return {\n      day: newDate.getDate(),\n      month: newDate.getMonth() + 1,\n      year: newDate.getFullYear(),\n    };\n  } else if (view === 'weekly' && week) {\n    const comps = locale.getMonthParts(month, year);\n    const date = comps.firstDayOfMonth;\n    const newDate = addDays(date, (week - 1 + count) * 7);\n    const parts = locale.getDateParts(newDate);\n    return {\n      week: parts.week,\n      month: parts.month,\n      year: parts.year,\n    };\n  } else {\n    const date = new Date(year, month - 1, 1);\n    const newDate = addMonths(date, count);\n    return {\n      month: newDate.getMonth() + 1,\n      year: newDate.getFullYear(),\n    };\n  }\n}\n\nexport function pageIsValid(page: PageAddress | null | undefined) {\n  return page != null && page.month != null && page.year != null;\n}\n\nexport function pageIsBeforePage(\n  page: PageAddress | null | undefined,\n  comparePage: PageAddress | null | undefined,\n) {\n  if (!pageIsValid(page) || !pageIsValid(comparePage)) return false;\n  page = page as PageAddress;\n  comparePage = comparePage as PageAddress;\n  if (page.year !== comparePage.year) return page.year < comparePage.year;\n  if (page.month && comparePage.month && page.month !== comparePage.month)\n    return page.month < comparePage.month;\n  if (page.week && comparePage.week && page.week !== comparePage.week) {\n    return page.week < comparePage.week;\n  }\n  if (page.day && comparePage.day && page.day !== comparePage.day) {\n    return page.day < comparePage.day;\n  }\n  return false;\n}\n\nexport function pageIsAfterPage(\n  page: PageAddress | null | undefined,\n  comparePage: PageAddress | null | undefined,\n) {\n  if (!pageIsValid(page) || !pageIsValid(comparePage)) return false;\n  page = page as PageAddress;\n  comparePage = comparePage as PageAddress;\n  if (page.year !== comparePage.year) {\n    return page.year > comparePage.year;\n  }\n  if (page.month && comparePage.month && page.month !== comparePage.month) {\n    return page.month > comparePage.month;\n  }\n  if (page.week && comparePage.week && page.week !== comparePage.week) {\n    return page.week > comparePage.week;\n  }\n  if (page.day && comparePage.day && page.day !== comparePage.day) {\n    return page.day > comparePage.day;\n  }\n  return false;\n}\n\nexport function pageIsBetweenPages(\n  page: PageAddress | null | undefined,\n  fromPage: PageAddress | null | undefined,\n  toPage: PageAddress | null | undefined,\n) {\n  return (\n    (page || false) &&\n    !pageIsBeforePage(page, fromPage) &&\n    !pageIsAfterPage(page, toPage)\n  );\n}\n\nexport function pageIsEqualToPage(\n  aPage: PageAddress | null | undefined,\n  bPage: PageAddress | null | undefined,\n) {\n  if (!aPage && bPage) return false;\n  if (aPage && !bPage) return false;\n  if (!aPage && !bPage) return true;\n  aPage = aPage as PageAddress;\n  bPage = bPage as PageAddress;\n  return (\n    aPage.year === bPage.year &&\n    aPage.month === bPage.month &&\n    aPage.week === bPage.week &&\n    aPage.day === bPage.day\n  );\n}\n\nexport function pageRangeToArray(\n  from: PageAddress,\n  to: PageAddress,\n  view: PageView,\n  locale: Locale,\n) {\n  if (!pageIsValid(from) || !pageIsValid(to)) return [];\n  const result = [];\n  while (!pageIsAfterPage(from, to)) {\n    result.push(from);\n    from = addPages(from, 1, view, locale);\n  }\n  return result;\n}\n\nexport function getPageKey(config: PageConfig) {\n  const { day, week, month, year } = config;\n  let id = `${year}-${pad(month, 2)}`;\n  if (week) id = `${id}-w${week}`;\n  if (day) id = `${id}-${pad(day, 2)}`;\n  return id;\n}\n\nexport function getCachedPage(config: PageConfig, locale: Locale): CachedPage {\n  const { month, year, showWeeknumbers, showIsoWeeknumbers } = config;\n  const date = new Date(year, month - 1, 15);\n  const monthComps = locale.getMonthParts(month, year);\n  const prevMonthComps = locale.getPrevMonthParts(month, year);\n  const nextMonthComps = locale.getNextMonthParts(month, year);\n  const days = getDays({ monthComps, prevMonthComps, nextMonthComps }, locale);\n  const weeks = getWeeks(days, showWeeknumbers, showIsoWeeknumbers, locale);\n  const weekdays = getWeekdays(weeks[0], locale);\n  return {\n    id: getPageKey(config),\n    month,\n    year,\n    monthTitle: locale.formatDate(date, locale.masks.title),\n    shortMonthLabel: locale.formatDate(date, 'MMM'),\n    monthLabel: locale.formatDate(date, 'MMMM'),\n    shortYearLabel: year.toString().substring(2),\n    yearLabel: year.toString(),\n    monthComps,\n    prevMonthComps,\n    nextMonthComps,\n    days,\n    weeks,\n    weekdays,\n  };\n}\n\nexport function getPage(config: PageConfig, cachedPage: CachedPage) {\n  const { day, week, view, trimWeeks } = config;\n  const page: Page = {\n    ...cachedPage,\n    ...config,\n    title: '',\n    viewDays: [],\n    viewWeeks: [],\n  };\n  switch (view) {\n    case 'daily': {\n      let dayObj = page.days.find(d => d.inMonth)!;\n      if (day) {\n        dayObj = page.days.find(d => d.day === day && d.inMonth) || dayObj;\n      } else if (week) {\n        dayObj = page.days.find(d => d.week === week && d.inMonth)!;\n      }\n      const weekObj = page.weeks[dayObj.week - 1];\n      page.viewWeeks = [weekObj];\n      page.viewDays = [dayObj];\n      page.week = dayObj.week;\n      page.weekTitle = weekObj.title;\n      page.day = dayObj.day;\n      page.dayTitle = dayObj.ariaLabel;\n      page.title = page.dayTitle;\n      break;\n    }\n    case 'weekly': {\n      page.week = week || 1;\n      const weekObj = page.weeks[page.week - 1];\n      page.viewWeeks = [weekObj];\n      page.viewDays = weekObj.days;\n      page.weekTitle = weekObj.title;\n      page.title = page.weekTitle;\n      break;\n    }\n    default: {\n      page.title = page.monthTitle;\n      page.viewWeeks = page.weeks.slice(\n        0,\n        trimWeeks ? page.monthComps.numWeeks : undefined,\n      );\n      page.viewDays = page.days;\n      break;\n    }\n  }\n  return page;\n}\n","export default class Cache<T> {\n  keys: string[] = [];\n  store: Record<string, T> = {};\n\n  constructor(\n    public size: number,\n    public createKey: (...args: any[]) => string,\n    public createItem: (...args: any[]) => T,\n  ) {}\n\n  get(...args: any[]) {\n    const key = this.createKey(...args);\n    return this.store[key];\n  }\n\n  getOrSet(...args: any[]): T {\n    const key = this.createKey(...args);\n    if (this.store[key]) return this.store[key];\n    const item = this.createItem(...args);\n    if (this.keys.length >= this.size) {\n      const removeKey = this.keys.shift();\n      if (removeKey != null) {\n        delete this.store[removeKey];\n      }\n    }\n    this.keys.push(key);\n    this.store[key] = item;\n    return item;\n  }\n}\n","import { isArray, isDate, isObject } from '../helpers';\nimport Locale from '../locale';\nimport type { CalendarDay } from '../page';\nimport { type DateParts, type DayParts, MS_PER_DAY, addDays } from './helpers';\nimport { DateRepeat, type DateRepeatConfig } from './repeat';\n\ntype DateRangeDate = Date | string | number | null;\n\ninterface DateRangeConfig {\n  start: DateRangeDate;\n  end: DateRangeDate;\n  span: number;\n  order: number;\n  repeat: Partial<DateRepeatConfig>;\n}\n\nexport type DateRangeSource =\n  | DateRange\n  | DateRangeDate\n  | [DateRangeDate, DateRangeDate]\n  | Partial<DateRangeConfig>;\n\nexport interface SimpleDateRange {\n  start: Date;\n  end: Date;\n}\n\nexport class DateRange {\n  order: number;\n  locale: Locale;\n  start: DateParts | null = null;\n  end: DateParts | null = null;\n  repeat: DateRepeat | null = null;\n\n  static fromMany(ranges: DateRangeSource | DateRangeSource[], locale: Locale) {\n    // Assign dates\n    return (isArray(ranges) ? ranges : [ranges])\n      .filter(d => d)\n      .map(d => DateRange.from(d, locale));\n  }\n\n  static from(source: DateRangeSource, locale: Locale) {\n    if (source instanceof DateRange) return source;\n    const config: Partial<DateRangeConfig> = {\n      start: null,\n      end: null,\n    };\n    if (source != null) {\n      if (isArray(source)) {\n        config.start = source[0] ?? null;\n        config.end = source[1] ?? null;\n      } else if (isObject(source)) {\n        Object.assign(config, source);\n      } else {\n        config.start = source;\n        config.end = source;\n      }\n    }\n    if (config.start != null) config.start = new Date(config.start);\n    if (config.end != null) config.end = new Date(config.end);\n    return new DateRange(config, locale);\n  }\n\n  private constructor(config: Partial<DateRangeConfig>, locale = new Locale()) {\n    this.locale = locale;\n    const { start, end, span, order, repeat } = config;\n\n    if (isDate(start)) {\n      this.start = locale.getDateParts(start);\n    }\n\n    if (isDate(end)) {\n      this.end = locale.getDateParts(end);\n    } else if (this.start != null && span) {\n      this.end = locale.getDateParts(addDays(this.start.date, span - 1));\n    }\n\n    this.order = order ?? 0;\n\n    if (repeat) {\n      this.repeat = new DateRepeat(\n        {\n          from: this.start?.date,\n          ...repeat,\n        },\n        {\n          locale: this.locale,\n        },\n      );\n    }\n  }\n\n  get opts() {\n    const { order, locale } = this;\n    return { order, locale };\n  }\n\n  get hasRepeat() {\n    return !!this.repeat;\n  }\n\n  get isSingleDay() {\n    const { start, end } = this;\n    return (\n      start &&\n      end &&\n      start.year === end.year &&\n      start.month === end.month &&\n      start.day === end.day\n    );\n  }\n\n  get isMultiDay() {\n    return !this.isSingleDay;\n  }\n\n  get daySpan() {\n    if (this.start == null || this.end == null) {\n      if (this.hasRepeat) return 1;\n      return Infinity;\n    }\n    return this.end.dayIndex - this.start.dayIndex;\n  }\n\n  startsOnDay(dayParts: DayParts) {\n    return (\n      this.start?.dayIndex === dayParts.dayIndex ||\n      !!this.repeat?.passes(dayParts)\n    );\n  }\n\n  intersectsDay(dayIndex: number) {\n    return this.intersectsDayRange(dayIndex, dayIndex);\n  }\n\n  intersectsRange(range: DateRange) {\n    return this.intersectsDayRange(\n      range.start?.dayIndex ?? -Infinity,\n      range.end?.dayIndex ?? Infinity,\n    );\n  }\n\n  intersectsDayRange(startDayIndex: number, endDayIndex: number) {\n    if (this.start && this.start.dayIndex > endDayIndex) return false;\n    if (this.end && this.end.dayIndex < startDayIndex) return false;\n    return true;\n  }\n}\n\ninterface DataRange {\n  startDay: number;\n  startTime: number;\n  endDay: number;\n  endTime: number;\n}\n\nexport interface RangeData {\n  key: string | number;\n  order?: number;\n}\n\ninterface DataRanges {\n  ranges: DataRange[];\n  data: RangeData;\n}\n\nexport interface DateRangeCell<T extends RangeData> extends DataRange {\n  data: T;\n  onStart: boolean;\n  onEnd: boolean;\n  startTime: number;\n  startDate: Date;\n  endTime: number;\n  endDate: Date;\n  allDay: boolean;\n  order: number;\n}\n\nexport class DateRangeContext {\n  private records: Record<string, DataRanges> = {};\n\n  render(data: RangeData, range: DateRange, days: DayParts[]) {\n    let result = null;\n    if (days?.length === 0) {\n      return result;\n    }\n    const startDayIndex = days[0].dayIndex;\n    const endDayIndex = days[days.length - 1].dayIndex;\n    if (range.hasRepeat) {\n      days.forEach(day => {\n        if (range.startsOnDay(day)) {\n          const span = range.daySpan < Infinity ? range.daySpan : 1;\n          result = {\n            startDay: day.dayIndex,\n            startTime: range.start?.time ?? 0,\n            endDay: day.dayIndex + span - 1,\n            endTime: range.end?.time ?? MS_PER_DAY,\n          };\n          this.getRangeRecords(data).push(result);\n        }\n      });\n    } else if (range.intersectsDayRange(startDayIndex, endDayIndex)) {\n      result = {\n        startDay: range.start?.dayIndex ?? -Infinity,\n        startTime: range.start?.time ?? -Infinity,\n        endDay: range.end?.dayIndex ?? Infinity,\n        endTime: range.end?.time ?? Infinity,\n      };\n      this.getRangeRecords(data).push(result);\n    }\n    return result;\n  }\n\n  private getRangeRecords(data: RangeData) {\n    let record = this.records[data.key];\n    if (!record) {\n      record = {\n        ranges: [],\n        data,\n      };\n      this.records[data.key] = record;\n    }\n    return record.ranges;\n  }\n\n  getCell(key: string | number, day: CalendarDay) {\n    const cells = this.getCells(day);\n    const result = cells.find(cell => cell.data.key === key);\n    return result;\n  }\n\n  cellExists(key: string | number, dayIndex: number) {\n    const records = this.records[key];\n    if (records == null) return false;\n    return records.ranges.some(\n      r => r.startDay <= dayIndex && r.endDay >= dayIndex,\n    );\n  }\n\n  getCells(day: CalendarDay) {\n    const records = Object.values(this.records);\n    const result: DateRangeCell<any>[] = [];\n    const { dayIndex } = day;\n    records.forEach(({ data, ranges }) => {\n      ranges\n        .filter(r => r.startDay <= dayIndex && r.endDay >= dayIndex)\n        .forEach(range => {\n          const onStart = dayIndex === range.startDay;\n          const onEnd = dayIndex === range.endDay;\n          const startTime = onStart ? range.startTime : 0;\n          const startDate = new Date(day.startDate.getTime() + startTime);\n          const endTime = onEnd ? range.endTime : MS_PER_DAY;\n          const endDate = new Date(day.endDate.getTime() + endTime);\n          const allDay = startTime === 0 && endTime === MS_PER_DAY;\n          const order = data.order || 0;\n          result.push({\n            ...range,\n            data,\n            onStart,\n            onEnd,\n            startTime,\n            startDate,\n            endTime,\n            endDate,\n            allDay,\n            order,\n          });\n        });\n    });\n    result.sort((a, b) => a.order - b.order);\n    return result;\n  }\n}\n","interface LocaleConfig {\n  dow: number;\n  L: string;\n}\n\ninterface LocaleSetting {\n  id: string;\n  firstDayOfWeek: number;\n  masks: {\n    L: string;\n  };\n}\n\nconst locales: Record<string, LocaleConfig> = {\n  // Arabic\n  ar: { dow: 7, L: 'D/\\u200FM/\\u200FYYYY' },\n  // Bulgarian\n  bg: { dow: 2, L: 'D.MM.YYYY' },\n  // Catalan\n  ca: { dow: 2, L: 'DD/MM/YYYY' },\n  // Chinese (China)\n  'zh-CN': { dow: 2, L: 'YYYY/MM/DD' },\n  // Chinese (Taiwan)\n  'zh-TW': { dow: 1, L: 'YYYY/MM/DD' },\n  // Croatian\n  hr: { dow: 2, L: 'DD.MM.YYYY' },\n  // Czech\n  cs: { dow: 2, L: 'DD.MM.YYYY' },\n  // Danish\n  da: { dow: 2, L: 'DD.MM.YYYY' },\n  // Dutch\n  nl: { dow: 2, L: 'DD-MM-YYYY' },\n  // English (US)\n  'en-US': { dow: 1, L: 'MM/DD/YYYY' },\n  // English (Australia)\n  'en-AU': { dow: 2, L: 'DD/MM/YYYY' },\n  // English (Canada)\n  'en-CA': { dow: 1, L: 'YYYY-MM-DD' },\n  // English (Great Britain)\n  'en-GB': { dow: 2, L: 'DD/MM/YYYY' },\n  // English (Ireland)\n  'en-IE': { dow: 2, L: 'DD-MM-YYYY' },\n  // English (New Zealand)\n  'en-NZ': { dow: 2, L: 'DD/MM/YYYY' },\n  // English (South Africa)\n  'en-ZA': { dow: 1, L: 'YYYY/MM/DD' },\n  // Esperanto\n  eo: { dow: 2, L: 'YYYY-MM-DD' },\n  // Estonian\n  et: { dow: 2, L: 'DD.MM.YYYY' },\n  // Finnish\n  fi: { dow: 2, L: 'DD.MM.YYYY' },\n  // French\n  fr: { dow: 2, L: 'DD/MM/YYYY' },\n  // French (Canada)\n  'fr-CA': { dow: 1, L: 'YYYY-MM-DD' },\n  // French (Switzerland)\n  'fr-CH': { dow: 2, L: 'DD.MM.YYYY' },\n  // German\n  de: { dow: 2, L: 'DD.MM.YYYY' },\n  // Hebrew\n  he: { dow: 1, L: 'DD.MM.YYYY' },\n  // Indonesian\n  id: { dow: 2, L: 'DD/MM/YYYY' },\n  // Italian\n  it: { dow: 2, L: 'DD/MM/YYYY' },\n  // Japanese\n  ja: { dow: 1, L: 'YYYY年M月D日' },\n  // Korean\n  ko: { dow: 1, L: 'YYYY.MM.DD' },\n  // Latvian\n  lv: { dow: 2, L: 'DD.MM.YYYY' },\n  // Lithuanian\n  lt: { dow: 2, L: 'DD.MM.YYYY' },\n  // Macedonian\n  mk: { dow: 2, L: 'D.MM.YYYY' },\n  // Norwegian\n  nb: { dow: 2, L: 'D. MMMM YYYY' },\n  nn: { dow: 2, L: 'D. MMMM YYYY' },\n  // Polish\n  pl: { dow: 2, L: 'DD.MM.YYYY' },\n  // Portuguese\n  pt: { dow: 2, L: 'DD/MM/YYYY' },\n  // Romanian\n  ro: { dow: 2, L: 'DD.MM.YYYY' },\n  // Russian\n  ru: { dow: 2, L: 'DD.MM.YYYY' },\n  // Slovak\n  sk: { dow: 2, L: 'DD.MM.YYYY' },\n  // Spanish (Spain)\n  'es-ES': { dow: 2, L: 'DD/MM/YYYY' },\n  // Spanish (Mexico)\n  'es-MX': { dow: 2, L: 'DD/MM/YYYY' },\n  // Swedish\n  sv: { dow: 2, L: 'YYYY-MM-DD' },\n  // Thai\n  th: { dow: 1, L: 'DD/MM/YYYY' },\n  // Turkish\n  tr: { dow: 2, L: 'DD.MM.YYYY' },\n  // Ukrainian\n  uk: { dow: 2, L: 'DD.MM.YYYY' },\n  // Vietnam\n  vi: { dow: 2, L: 'DD/MM/YYYY' },\n};\nlocales.en = locales['en-US'];\nlocales.es = locales['es-ES'];\nlocales.no = locales.nb;\nlocales.zh = locales['zh-CN'];\n\n// Remap from abbr. to intuitive property names\nconst localeSettings = Object.entries(locales).reduce(\n  (res, [id, { dow, L }]) => {\n    res[id] = {\n      id,\n      firstDayOfWeek: dow,\n      masks: { L },\n    };\n    return res;\n  },\n  {} as Record<string, LocaleSetting>,\n);\n\nexport default localeSettings;\n","import { type App, computed, reactive } from 'vue';\nimport type { DarkModeConfig } from 'vue-screen-utils';\nimport { defaultsDeep, get, has, mapValues } from '../helpers';\nimport locales from './locales';\nimport masks from './masks.json';\nimport touch from './touch.json';\n\ndeclare const window: any;\n\ninterface DatePickerPopoverDefaults {\n  visibility?: string;\n  placement?: string;\n  isInteractive?: boolean;\n}\n\ninterface DatePickerDefaults {\n  updateOnInput?: boolean;\n  inputDebounce?: number;\n  popover?: DatePickerPopoverDefaults;\n}\n\nexport interface Defaults {\n  componentPrefix?: string;\n  color?: string;\n  isDark?: DarkModeConfig;\n  navVisibility?: string;\n  titlePosition?: string;\n  transition?: string;\n  touch?: object;\n  masks?: object;\n  locales?: any;\n  datePicker?: DatePickerDefaults;\n}\n\nconst defaultConfig: Defaults = {\n  componentPrefix: 'V',\n  color: 'blue',\n  isDark: false,\n  navVisibility: 'click',\n  titlePosition: 'center',\n  transition: 'slide-h',\n  touch,\n  masks,\n  locales,\n  datePicker: {\n    updateOnInput: true,\n    inputDebounce: 1000,\n    popover: {\n      visibility: 'hover-focus',\n      placement: 'bottom-start',\n      isInteractive: true,\n    },\n  },\n};\n\nconst state = reactive(defaultConfig);\n\nconst defaultLocales = computed(() => {\n  return mapValues(state.locales, (l: any) => {\n    l.masks = defaultsDeep(l.masks, state.masks);\n    return l;\n  });\n});\n\nexport { defaultLocales };\n\nexport const getDefault = (path: string) => {\n  if (typeof window !== 'undefined' && has(window.__vcalendar__, path)) {\n    return get(window.__vcalendar__, path);\n  }\n  return get(state, path);\n};\n\nexport const setupDefaults = (app: App, userDefaults: Defaults | undefined) => {\n  app.config.globalProperties.$VCalendar = state;\n  return Object.assign(state, defaultsDeep(userDefaults, state));\n};\n","import {\n  type PageConfig,\n  type CachedPage,\n  getPageKey,\n  getCachedPage,\n  getPage,\n} from './page';\nimport {\n  type DateSource,\n  type DateOptions,\n  type DayOfWeek,\n  type MonthParts,\n  type MonthInYear,\n  type SimpleDateParts,\n  type TimeNames,\n  DatePatchKeys,\n  applyRulesForDateParts,\n  daysInWeek,\n  formatDate,\n  parseDate,\n  getDateParts,\n  getDateFromParts,\n  getDayNames,\n  getMonthNames,\n  getMonthParts,\n  getMonthPartsKey,\n  getHourDates,\n  getRelativeTimeNames,\n  isDateParts,\n} from './date/helpers';\nimport Cache from './cache';\nimport { type DateRangeSource, DateRange } from './date/range';\nimport { defaultLocales } from './defaults';\nimport {\n  isString,\n  isNumber,\n  isDate,\n  isObject,\n  has,\n  pick,\n  clamp,\n  defaultsDeep,\n} from './helpers';\n\nexport interface LocaleConfig {\n  id: string;\n  firstDayOfWeek: number;\n  masks: any;\n  monthCacheSize: number;\n  pageCacheSize: number;\n}\n\nconst DEFAULT_MONTH_CACHE_SIZE = 12;\nconst DEFAULT_PAGE_CACHE_SIZE = 5;\n\nexport function resolveConfig(\n  config: string | Partial<LocaleConfig> | undefined,\n  locales: any,\n) {\n  // Get the detected locale string\n  const detLocale = new Intl.DateTimeFormat().resolvedOptions().locale;\n  // Resolve the locale id\n  let id;\n  if (isString(config)) {\n    id = config;\n  } else if (has(config, 'id')) {\n    id = config!.id;\n  }\n  id = (id || detLocale).toLowerCase();\n  const localeKeys = Object.keys(locales);\n  const validKey = (k: string) => localeKeys.find(lk => lk.toLowerCase() === k);\n  id = validKey(id) || validKey(id.substring(0, 2)) || detLocale;\n  // Add fallback and spread default locale to prevent repetitive update loops\n  const defLocale: LocaleConfig = {\n    ...locales['en-IE'],\n    ...locales[id],\n    id,\n    monthCacheSize: DEFAULT_MONTH_CACHE_SIZE,\n    pageCacheSize: DEFAULT_PAGE_CACHE_SIZE,\n  };\n  // Assign or merge defaults with provided config\n  const result: LocaleConfig = isObject(config)\n    ? defaultsDeep(config, defLocale)\n    : defLocale;\n  // Return resolved config\n  return result;\n}\n\nexport default class Locale {\n  id: any;\n  daysInWeek: number;\n  firstDayOfWeek: DayOfWeek;\n  masks: any;\n  timezone: string | undefined;\n  hourLabels: string[];\n  dayNames: string[];\n  dayNamesShort: string[];\n  dayNamesShorter: string[];\n  dayNamesNarrow: string[];\n  monthNames: string[];\n  monthNamesShort: string[];\n  relativeTimeNames: TimeNames;\n  amPm: [string, string] = ['am', 'pm'];\n  monthCache: Cache<MonthParts>;\n  pageCache: Cache<CachedPage>;\n\n  constructor(\n    config: Partial<LocaleConfig> | string | undefined = undefined,\n    timezone?: string,\n  ) {\n    const { id, firstDayOfWeek, masks, monthCacheSize, pageCacheSize } =\n      resolveConfig(config, defaultLocales.value);\n    this.monthCache = new Cache(\n      monthCacheSize,\n      getMonthPartsKey,\n      getMonthParts,\n    );\n    this.pageCache = new Cache(pageCacheSize, getPageKey, getCachedPage);\n    this.id = id;\n    this.daysInWeek = daysInWeek;\n    this.firstDayOfWeek = clamp(firstDayOfWeek, 1, daysInWeek) as DayOfWeek;\n    this.masks = masks;\n    this.timezone = timezone || undefined;\n    this.hourLabels = this.getHourLabels();\n    this.dayNames = getDayNames('long', this.id);\n    this.dayNamesShort = getDayNames('short', this.id);\n    this.dayNamesShorter = this.dayNamesShort.map(s => s.substring(0, 2));\n    this.dayNamesNarrow = getDayNames('narrow', this.id);\n    this.monthNames = getMonthNames('long', this.id);\n    this.monthNamesShort = getMonthNames('short', this.id);\n    this.relativeTimeNames = getRelativeTimeNames(this.id);\n  }\n\n  formatDate(date: Date, masks: string | string[]) {\n    return formatDate(date, masks, this);\n  }\n\n  parseDate(dateString: string, mask: string | string[]) {\n    return parseDate(dateString, mask, this);\n  }\n\n  toDate(\n    d: DateSource | Partial<SimpleDateParts>,\n    opts: Partial<DateOptions> = {},\n  ): Date {\n    const nullDate = new Date(NaN);\n    let result = nullDate;\n    const { fillDate, mask, patch, rules } = opts;\n    if (isNumber(d)) {\n      opts.type = 'number';\n      result = new Date(+d);\n    } else if (isString(d)) {\n      opts.type = 'string';\n      result = d ? parseDate(d, mask || 'iso', this) : nullDate;\n    } else if (isDate(d)) {\n      opts.type = 'date';\n      result = new Date(d.getTime());\n    } else if (isDateParts(d)) {\n      opts.type = 'object';\n      result = this.getDateFromParts(d);\n    }\n    // Patch parts or apply rules if needed\n    if (result && (patch || rules)) {\n      let parts = this.getDateParts(result);\n      // Patch date parts\n      if (patch && fillDate != null) {\n        const fillParts = this.getDateParts(this.toDate(fillDate));\n        parts = this.getDateParts(\n          this.toDate({ ...fillParts, ...pick(parts, DatePatchKeys[patch]) }),\n        );\n      }\n      // Apply date part rules\n      if (rules) {\n        parts = applyRulesForDateParts(parts, rules);\n      }\n      result = this.getDateFromParts(parts);\n    }\n    return result || nullDate;\n  }\n\n  toDateOrNull(\n    d: DateSource | Partial<SimpleDateParts>,\n    opts: Partial<DateOptions> = {},\n  ): Date | null {\n    const dte = this.toDate(d, opts);\n    return isNaN(dte.getTime()) ? null : dte;\n  }\n\n  fromDate(date: Date | null, { type, mask }: Partial<DateOptions> = {}) {\n    switch (type) {\n      case 'number':\n        return date ? date.getTime() : NaN;\n      case 'string':\n        return date ? this.formatDate(date, mask || 'iso') : '';\n      case 'object':\n        return date ? this.getDateParts(date) : null;\n      default:\n        return date ? new Date(date) : null;\n    }\n  }\n\n  range(source: DateRangeSource) {\n    return DateRange.from(source, this);\n  }\n\n  ranges(ranges: DateRangeSource | DateRangeSource[]) {\n    return DateRange.fromMany(ranges, this);\n  }\n\n  getDateParts(date: Date) {\n    return getDateParts(date, this);\n  }\n\n  getDateFromParts(parts: Partial<SimpleDateParts>) {\n    return getDateFromParts(parts, this.timezone);\n  }\n\n  getDateFromParams(\n    year: number,\n    month: number,\n    day: number,\n    hours: number,\n    minutes: number,\n    seconds: number,\n    milliseconds: number,\n  ) {\n    return this.getDateFromParts({\n      year,\n      month,\n      day,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n    });\n  }\n\n  getPage(config: PageConfig) {\n    const cachedPage = this.pageCache.getOrSet(config, this);\n    return getPage(config, cachedPage);\n  }\n\n  getMonthParts(month: number, year: number) {\n    const { firstDayOfWeek } = this;\n    return this.monthCache.getOrSet(month, year, firstDayOfWeek);\n  }\n\n  getThisMonthParts() {\n    const date = new Date();\n    return this.getMonthParts(\n      <MonthInYear>(date.getMonth() + 1),\n      date.getFullYear(),\n    );\n  }\n\n  getPrevMonthParts(month: number, year: number) {\n    if (month === 1) return this.getMonthParts(12, year - 1);\n    return this.getMonthParts(month - 1, year);\n  }\n\n  getNextMonthParts(month: number, year: number) {\n    if (month === 12) return this.getMonthParts(1, year + 1);\n    return this.getMonthParts(month + 1, year);\n  }\n\n  getHourLabels() {\n    return getHourDates().map(d => {\n      return this.formatDate(d, this.masks.hours);\n    });\n  }\n\n  getDayId(date: Date) {\n    return this.formatDate(date, 'YYYY-MM-DD');\n  }\n}\n","import { isArray, isFunction, isNumber } from '../helpers';\nimport {\n  type DayOfWeek,\n  type DayParts,\n  type OrdinalWeekInMonth,\n  diffInDays,\n  diffInMonths,\n  diffInWeeks,\n  diffInYears,\n  isDayInMonth,\n  isDayOfWeek,\n  isMonthInYear,\n  isOrdinalWeekInMonth,\n  isWeekInMonth,\n} from './helpers';\n\nexport type SingleOrArray<T> = T | T[];\n\nexport enum GroupRuleType {\n  Any = 'any',\n  All = 'all',\n}\n\nexport enum IntervalRuleType {\n  Days = 'days',\n  Weeks = 'weeks',\n  Months = 'months',\n  Years = 'years',\n}\n\nexport enum ComponentRuleType {\n  Days = 'days',\n  Weekdays = 'weekdays',\n  Weeks = 'weeks',\n  Months = 'months',\n  Years = 'years',\n}\n\nexport enum OrdinalComponentRuleType {\n  OrdinalWeekdays = 'ordinalWeekdays',\n}\n\nexport enum FunctionRuleType {\n  Function = 'function',\n}\n\nexport type RuleType =\n  | GroupRuleType\n  | IntervalRuleType\n  | ComponentRuleType\n  | OrdinalComponentRuleType\n  | FunctionRuleType;\n\nexport type OrdinalArrayConfig = SingleOrArray<\n  [OrdinalWeekInMonth, ...DayOfWeek[]]\n>;\n\nexport interface Rule<T> {\n  type: T;\n  passes(dayParts: DayParts): boolean;\n}\n\nexport class IntervalRule implements Rule<IntervalRuleType> {\n  private validated = true;\n\n  constructor(\n    public type: IntervalRuleType,\n    public interval: number,\n    public from: DayParts,\n  ) {\n    // Start date needed for interval rules\n    if (!this.from) {\n      console.error(\n        `A valid \"from\" date is required for date interval rule. This rule will be skipped.`,\n      );\n      this.validated = false;\n    }\n  }\n\n  passes(dateParts: DayParts) {\n    if (!this.validated) return true;\n\n    const { date } = dateParts;\n    switch (this.type) {\n      case 'days': {\n        return diffInDays(this.from.date, date) % this.interval === 0;\n      }\n      case 'weeks': {\n        return diffInWeeks(this.from.date, date) % this.interval === 0;\n      }\n      case 'months': {\n        return diffInMonths(this.from.date, date) % this.interval === 0;\n      }\n      case 'years': {\n        return diffInYears(this.from.date, date) % this.interval === 0;\n      }\n      default: {\n        return false;\n      }\n    }\n  }\n}\n\nexport class ComponentRule implements Rule<ComponentRuleType> {\n  components: number[] = [];\n\n  static create(type: ComponentRuleType, config: unknown) {\n    switch (type) {\n      case ComponentRuleType.Days:\n        return new DaysRule(config);\n      case ComponentRuleType.Weekdays:\n        return new WeekdaysRule(config);\n      case ComponentRuleType.Weeks:\n        return new WeeksRule(config);\n      case ComponentRuleType.Months:\n        return new MonthsRule(config);\n      case ComponentRuleType.Years:\n        return new YearsRule(config);\n    }\n  }\n\n  constructor(\n    public type: ComponentRuleType,\n    components: unknown,\n    public validator: (component: unknown) => component is number,\n    public getter: (dayParts: DayParts) => number[],\n  ) {\n    this.components = this.normalizeComponents(components);\n  }\n\n  normalizeComponents(components: unknown) {\n    if (this.validator(components)) return [components];\n    if (!isArray(components)) return [];\n    const result: number[] = [];\n    components.forEach(component => {\n      if (!this.validator(component)) {\n        console.error(\n          `Component value ${component} in invalid for \"${this.type}\" rule. This rule will be skipped.`,\n        );\n        return;\n      }\n      result.push(component);\n    });\n    return result;\n  }\n\n  passes(dayParts: DayParts) {\n    const comps = this.getter(dayParts);\n    const result = comps.some(comp => this.components.includes(comp));\n    return result;\n  }\n}\n\nexport class DaysRule extends ComponentRule {\n  constructor(components: unknown) {\n    super(\n      ComponentRuleType.Days,\n      components,\n      isDayInMonth,\n      ({ day, dayFromEnd }) => [day, -dayFromEnd],\n    );\n  }\n}\n\nexport class WeekdaysRule extends ComponentRule {\n  constructor(components: unknown) {\n    super(\n      ComponentRuleType.Weekdays,\n      components,\n      isDayOfWeek,\n      ({ weekday }) => [weekday],\n    );\n  }\n}\n\nexport class WeeksRule extends ComponentRule {\n  constructor(components: unknown) {\n    super(\n      ComponentRuleType.Weeks,\n      components,\n      isWeekInMonth,\n      ({ week, weekFromEnd }) => [week, -weekFromEnd],\n    );\n  }\n}\n\nexport class MonthsRule extends ComponentRule {\n  constructor(components: unknown) {\n    super(ComponentRuleType.Months, components, isMonthInYear, ({ month }) => [\n      month,\n    ]);\n  }\n}\n\nexport class YearsRule extends ComponentRule {\n  constructor(components: unknown) {\n    super(ComponentRuleType.Years, components, isNumber, ({ year }) => [year]);\n  }\n}\n\nexport class OrdinalComponentRule implements Rule<OrdinalComponentRuleType> {\n  components: [OrdinalWeekInMonth, DayOfWeek][];\n\n  constructor(\n    public type: OrdinalComponentRuleType,\n    components: OrdinalArrayConfig,\n  ) {\n    this.components = this.normalizeComponents(components);\n  }\n\n  normalizeArrayConfig(config: OrdinalArrayConfig) {\n    const result: [OrdinalWeekInMonth, DayOfWeek][] = [];\n    config.forEach((numOrArray, i) => {\n      if (isNumber(numOrArray)) {\n        if (i === 0) return;\n        if (!isOrdinalWeekInMonth(config[0])) {\n          console.error(\n            `Ordinal range for \"${this.type}\" rule is from -5 to -1 or 1 to 5. This rule will be skipped.`,\n          );\n          return;\n        }\n        if (!isDayOfWeek(numOrArray)) {\n          console.error(\n            `Acceptable range for \"${this.type}\" rule is from 1 to 5. This rule will be skipped`,\n          );\n          return;\n        }\n        result.push([config[0], numOrArray]);\n      } else if (isArray(numOrArray)) {\n        result.push(...this.normalizeArrayConfig(numOrArray));\n      }\n    });\n    return result;\n  }\n\n  normalizeComponents(config: OrdinalArrayConfig) {\n    const result: [OrdinalWeekInMonth, DayOfWeek][] = [];\n    config.forEach((numOrArray, i) => {\n      if (isNumber(numOrArray)) {\n        if (i === 0) return;\n        if (!isOrdinalWeekInMonth(config[0])) {\n          console.error(\n            `Ordinal range for \"${this.type}\" rule is from -5 to -1 or 1 to 5. This rule will be skipped.`,\n          );\n          return;\n        }\n        if (!isDayOfWeek(numOrArray)) {\n          console.error(\n            `Acceptable range for \"${this.type}\" rule is from 1 to 5. This rule will be skipped`,\n          );\n          return;\n        }\n        result.push([config[0], numOrArray]);\n      } else if (isArray(numOrArray)) {\n        result.push(...this.normalizeArrayConfig(numOrArray));\n      }\n    });\n    return result;\n  }\n\n  passes(dayParts: DayParts) {\n    const { weekday, weekdayOrdinal, weekdayOrdinalFromEnd } = dayParts;\n    return this.components.some(\n      ([ordinalWeek, ordinalWeekday]) =>\n        (ordinalWeek === weekdayOrdinal ||\n          ordinalWeek === -weekdayOrdinalFromEnd) &&\n        weekday === ordinalWeekday,\n    );\n  }\n}\n\nexport class FunctionRule implements Rule<FunctionRuleType> {\n  type = FunctionRuleType.Function;\n  private validated = true;\n\n  constructor(public fn: Function) {\n    if (!isFunction(fn)) {\n      console.error(\n        `The function rule requires a valid function. This rule will be skipped.`,\n      );\n      this.validated = false;\n    }\n  }\n\n  passes(dayParts: DayParts) {\n    if (!this.validated) return true;\n\n    return this.fn(dayParts);\n  }\n}\n","import { isArray, isFunction, isObject, isString } from '../helpers';\nimport Locale from '../locale';\nimport type {\n  DateParts,\n  DayInMonth,\n  DayOfWeek,\n  DayParts,\n  MonthInYear,\n  WeekInMonth,\n} from './helpers';\nimport {\n  ComponentRule,\n  ComponentRuleType,\n  FunctionRule,\n  GroupRuleType,\n  IntervalRule,\n  IntervalRuleType,\n  OrdinalComponentRule,\n  OrdinalComponentRuleType,\n  type Rule,\n  type RuleType,\n  type SingleOrArray,\n} from './rules';\n\nexport type RepeatIntervalShort = 'day' | 'week' | 'month' | 'year';\n\nexport type RepeatInterval = 'days' | 'weeks' | 'months' | 'years';\nexport interface DateRepeatConfig {\n  every: RepeatIntervalShort | [number, RepeatInterval];\n  from: Date;\n  until: Date;\n  weekdays: SingleOrArray<DayOfWeek>;\n  days: SingleOrArray<DayInMonth>;\n  weeks: SingleOrArray<WeekInMonth>;\n  months: SingleOrArray<MonthInYear>;\n  years: SingleOrArray<number>;\n  ordinalWeekdays: SingleOrArray<number[]>;\n  on: SingleOrArray<DateRepeatFn | Partial<DateRepeatConfig>>;\n}\n\nexport type DateRepeatFn = (dayParts: DayParts) => boolean;\n\nexport interface DateRepeatOptions {\n  locale: Locale;\n}\n\nexport class DateRepeat implements Rule<GroupRuleType> {\n  validated = true;\n\n  config: Partial<DateRepeatConfig> | DateRepeatFn;\n  type = GroupRuleType.Any;\n  from: DateParts | undefined;\n  until: DateParts | undefined;\n  rules: Rule<RuleType>[] = [];\n  locale = new Locale();\n\n  constructor(\n    config: Partial<DateRepeatConfig> | DateRepeatFn,\n    options: Partial<DateRepeatOptions> = {},\n    private parent?: DateRepeat,\n  ) {\n    if (options.locale) this.locale = options.locale;\n\n    this.config = config;\n    if (isFunction(config)) {\n      this.type = GroupRuleType.All;\n      this.rules = [new FunctionRule(config)];\n    } else if (isArray(config)) {\n      this.type = GroupRuleType.Any;\n      this.rules = config.map(c => new DateRepeat(c, options, this));\n    } else if (isObject(config)) {\n      this.type = GroupRuleType.All;\n      // Assign bounding dates\n      this.from = config.from\n        ? this.locale.getDateParts(config.from)\n        : parent?.from;\n      this.until = config.until\n        ? this.locale.getDateParts(config.until)\n        : parent?.until;\n      this.rules = this.getObjectRules(config);\n    } else {\n      console.error('Rule group configuration must be an object or an array.');\n      this.validated = false;\n    }\n  }\n\n  getObjectRules(config: any) {\n    const rules: Rule<RuleType>[] = [];\n\n    // Add interval rule\n    if (config.every) {\n      if (isString(config.every)) {\n        config.every = [1, `${config.every}s`];\n      }\n      if (isArray(config.every)) {\n        const [interval = 1, type = IntervalRuleType.Days] = config.every;\n        rules.push(new IntervalRule(type, interval, this.from!));\n      }\n    }\n\n    // Add component rules\n    Object.values(ComponentRuleType).forEach(type => {\n      if (!(type in config)) return;\n      rules.push(ComponentRule.create(type, config[type]));\n    });\n\n    // Add ordinal component rules\n    Object.values(OrdinalComponentRuleType).forEach(type => {\n      if (!(type in config)) return;\n      rules.push(new OrdinalComponentRule(type, config[type]));\n    });\n\n    // Add group rules\n    if (config.on != null) {\n      if (!isArray(config.on)) config.on = [config.on];\n      rules.push(\n        new DateRepeat(config.on, { locale: this.locale }, this.parent),\n      );\n    }\n\n    return rules;\n  }\n\n  passes(dayParts: DayParts) {\n    if (!this.validated) return true;\n\n    if (this.from && dayParts.dayIndex <= this.from.dayIndex) return false;\n    if (this.until && dayParts.dayIndex >= this.until.dayIndex) return false;\n\n    if (this.type === GroupRuleType.Any) {\n      return this.rules.some(r => r.passes(dayParts));\n    }\n    return this.rules.every(r => r.passes(dayParts));\n  }\n}\n","import {\n  pad,\n  isNumber,\n  isString,\n  isDate,\n  isArray,\n  arrayHasItems,\n  isFunction,\n  isObject,\n} from '../helpers';\nimport { toDate } from 'date-fns-tz';\nimport getWeeksInMonth from 'date-fns/getWeeksInMonth';\nimport getWeek from 'date-fns/getWeek';\nimport getISOWeek from 'date-fns/getISOWeek';\nimport addDays from 'date-fns/addDays';\nimport addMonths from 'date-fns/addMonths';\nimport addYears from 'date-fns/addYears';\nimport { type LocaleConfig, default as Locale } from '../locale';\n\nexport { addDays, addMonths, addYears };\nexport { DateRepeat } from './repeat';\n\n// #region Types\n\ntype DayNameLength = 'narrow' | 'short' | 'long';\ntype MonthNameLength = 'short' | 'long';\n\nexport type DayInMonth =\n  | 1\n  | 2\n  | 3\n  | 4\n  | 5\n  | 6\n  | 7\n  | 8\n  | 9\n  | 10\n  | 11\n  | 12\n  | 13\n  | 14\n  | 15\n  | 16\n  | 17\n  | 18\n  | 19\n  | 20\n  | 21\n  | 22\n  | 23\n  | 24\n  | 25\n  | 26\n  | 27\n  | 28\n  | 29\n  | 30\n  | 31\n  | -1\n  | -2\n  | -3\n  | -4\n  | -5\n  | -6\n  | -7\n  | -8\n  | -9\n  | -10\n  | -11\n  | -12\n  | -13\n  | -14\n  | -15\n  | -16\n  | -17\n  | -18\n  | -19\n  | -20\n  | -21\n  | -22\n  | -23\n  | -24\n  | -25\n  | -26\n  | -27\n  | -28\n  | -29\n  | -30\n  | -31;\nexport type DayOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;\nexport type WeekInMonth = 1 | 2 | 3 | 4 | 5 | 6;\nexport type WeekInMonthFromEnd = -6 | -5 | -4 | -3 | -2 | -1;\nexport type OrdinalWeekInMonth = -5 | -4 | -3 | -2 | -1 | 1 | 2 | 3 | 4 | 5;\nexport type MonthInYear = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\nexport type StartOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;\nexport type DateSource = Date | string | number;\nexport type TimeNames = Partial<Record<Intl.RelativeTimeFormatUnit, string>>;\n\n// #endregion Types\n\nexport function isDayInMonth(dayInMonth: unknown): dayInMonth is DayInMonth {\n  if (!isNumber(dayInMonth)) return false;\n  return dayInMonth >= 1 && dayInMonth <= 31;\n}\n\nexport function isDayOfWeek(dayOfWeek: unknown): dayOfWeek is DayOfWeek {\n  if (!isNumber(dayOfWeek)) return false;\n  return dayOfWeek >= 1 && dayOfWeek <= 7;\n}\n\nexport function isWeekInMonth(\n  weekInMonth: unknown,\n): weekInMonth is WeekInMonth {\n  if (!isNumber(weekInMonth)) return false;\n  return (\n    (weekInMonth >= -6 && weekInMonth <= -1) ||\n    (weekInMonth >= 1 && weekInMonth <= 6)\n  );\n}\n\nexport function isMonthInYear(\n  monthInYear: unknown,\n): monthInYear is MonthInYear {\n  if (!isNumber(monthInYear)) return false;\n  return monthInYear >= 1 && monthInYear <= 12;\n}\n\nexport function isOrdinalWeekInMonth(\n  weekInMonth: unknown,\n): weekInMonth is OrdinalWeekInMonth {\n  if (!isNumber(weekInMonth)) return false;\n  if (weekInMonth < -5 || weekInMonth > 5 || weekInMonth === 0) return false;\n  return true;\n}\n\ninterface NumberRuleConfig {\n  min?: number;\n  max?: number;\n  interval?: number;\n}\n\ntype DatePartsRuleFunction = (part: number, parts: TimeParts) => boolean;\n\ntype DatePartsRule =\n  | number\n  | Array<number>\n  | NumberRuleConfig\n  | DatePartsRuleFunction;\n\nexport interface DatePartsRules {\n  hours?: DatePartsRule;\n  minutes?: DatePartsRule;\n  seconds?: DatePartsRule;\n  milliseconds?: DatePartsRule;\n}\n\nexport interface DatePartOption {\n  value: number;\n  label: string;\n  disabled?: boolean;\n}\n\nexport interface FormatParseOptions {\n  locale?: Locale | LocaleConfig | string;\n  timezone?: string;\n}\n\nexport interface DateOptions {\n  type: string;\n  fillDate: DateSource;\n  mask: string;\n  patch: DatePatch;\n  rules: DatePartsRules;\n}\n\nexport interface PageAddress {\n  day?: number;\n  week?: number;\n  month: number;\n  year: number;\n}\n\nexport interface TimeParts {\n  hours: number;\n  minutes: number;\n  seconds: number;\n  milliseconds: number;\n}\n\nexport interface SimpleDateParts {\n  year: number;\n  month: number;\n  day: number;\n  hours: number;\n  minutes: number;\n  seconds: number;\n  milliseconds: number;\n}\n\nexport interface DayParts {\n  dayIndex: number;\n  day: number;\n  dayFromEnd: number;\n  weekday: number;\n  weekdayOrdinal: number;\n  weekdayOrdinalFromEnd: number;\n  week: number;\n  weekFromEnd: number;\n  weeknumber: number;\n  month: number;\n  year: number;\n  date: Date;\n}\n\nexport interface DateParts extends DayParts {\n  milliseconds: number;\n  seconds: number;\n  minutes: number;\n  hours: number;\n  time: number;\n  dateTime: number;\n  isValid: boolean;\n  timezoneOffset: number;\n  isPm?: boolean;\n}\n\nexport interface MonthParts {\n  firstDayOfWeek: DayOfWeek;\n  firstDayOfMonth: Date;\n  inLeapYear: boolean;\n  firstWeekday: number;\n  numDays: number;\n  numWeeks: number;\n  month: number;\n  year: number;\n  weeknumbers: number[];\n  isoWeeknumbers: number[];\n}\n\nexport type DatePatch = 'dateTime' | 'date' | 'time';\n\nexport const DatePatchKeys: Record<DatePatch, (keyof SimpleDateParts)[]> = {\n  dateTime: [\n    'year',\n    'month',\n    'day',\n    'hours',\n    'minutes',\n    'seconds',\n    'milliseconds',\n  ],\n  date: ['year', 'month', 'day'],\n  time: ['hours', 'minutes', 'seconds', 'milliseconds'],\n};\n\nexport const daysInWeek = 7;\nexport const weeksInMonth = 6;\nexport const MS_PER_SECOND = 1000;\nexport const MS_PER_MINUTE = MS_PER_SECOND * 60;\nexport const MS_PER_HOUR = MS_PER_MINUTE * 60;\nexport const MS_PER_DAY = MS_PER_HOUR * 24;\n\nconst daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst maskMacros = ['L', 'iso'];\n\ntype DatePartsRange = Readonly<[number, number, number]>;\ntype TimePartsKey = 'milliseconds' | 'seconds' | 'minutes' | 'hours';\nconst DATE_PART_RANGES: Record<TimePartsKey, DatePartsRange> = {\n  milliseconds: [0, 999, 3],\n  seconds: [0, 59, 2],\n  minutes: [0, 59, 2],\n  hours: [0, 23, 2],\n} as const;\n\n// #region Format constants\n\nconst token =\n  /d{1,2}|W{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|Z{1,4}|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nconst literal = /\\[([^]*?)\\]/gm;\nconst formatFlags: any = {\n  D(d: DateParts) {\n    return d.day;\n  },\n  DD(d: DateParts) {\n    return pad(d.day, 2);\n  },\n  // Do(d: DateParts, l: Locale) {\n  //   return l.DoFn(d.day);\n  // },\n  d(d: DateParts) {\n    return d.weekday - 1;\n  },\n  dd(d: DateParts) {\n    return pad(d.weekday - 1, 2);\n  },\n  W(d: DateParts, l: Locale) {\n    return l.dayNamesNarrow[d.weekday - 1];\n  },\n  WW(d: DateParts, l: Locale) {\n    return l.dayNamesShorter[d.weekday - 1];\n  },\n  WWW(d: DateParts, l: Locale) {\n    return l.dayNamesShort[d.weekday - 1];\n  },\n  WWWW(d: DateParts, l: Locale) {\n    return l.dayNames[d.weekday - 1];\n  },\n  M(d: DateParts) {\n    return d.month;\n  },\n  MM(d: DateParts) {\n    return pad(d.month, 2);\n  },\n  MMM(d: DateParts, l: Locale) {\n    return l.monthNamesShort[d.month - 1];\n  },\n  MMMM(d: DateParts, l: Locale) {\n    return l.monthNames[d.month - 1];\n  },\n  YY(d: DateParts) {\n    return String(d.year).substr(2);\n  },\n  YYYY(d: DateParts) {\n    return pad(d.year, 4);\n  },\n  h(d: DateParts) {\n    return d.hours % 12 || 12;\n  },\n  hh(d: DateParts) {\n    return pad(d.hours % 12 || 12, 2);\n  },\n  H(d: DateParts) {\n    return d.hours;\n  },\n  HH(d: DateParts) {\n    return pad(d.hours, 2);\n  },\n  m(d: DateParts) {\n    return d.minutes;\n  },\n  mm(d: DateParts) {\n    return pad(d.minutes, 2);\n  },\n  s(d: DateParts) {\n    return d.seconds;\n  },\n  ss(d: DateParts) {\n    return pad(d.seconds, 2);\n  },\n  S(d: DateParts) {\n    return Math.round(d.milliseconds / 100);\n  },\n  SS(d: DateParts) {\n    return pad(Math.round(d.milliseconds / 10), 2);\n  },\n  SSS(d: DateParts) {\n    return pad(d.milliseconds, 3);\n  },\n  a(d: DateParts, l: Locale) {\n    return d.hours < 12 ? l.amPm[0] : l.amPm[1];\n  },\n  A(d: DateParts, l: Locale) {\n    return d.hours < 12 ? l.amPm[0].toUpperCase() : l.amPm[1].toUpperCase();\n  },\n  Z() {\n    return 'Z';\n  },\n  ZZ(d: DateParts) {\n    const o = d.timezoneOffset;\n    return `${o > 0 ? '-' : '+'}${pad(Math.floor(Math.abs(o) / 60), 2)}`;\n  },\n  ZZZ(d: DateParts) {\n    const o = d.timezoneOffset;\n    return `${o > 0 ? '-' : '+'}${pad(\n      Math.floor(Math.abs(o) / 60) * 100 + (Math.abs(o) % 60),\n      4,\n    )}`;\n  },\n  ZZZZ(d: DateParts) {\n    const o = d.timezoneOffset;\n    return `${o > 0 ? '-' : '+'}${pad(Math.floor(Math.abs(o) / 60), 2)}:${pad(\n      Math.abs(o) % 60,\n      2,\n    )}`;\n  },\n};\n\n// #endregion Format constants\n\n// #region Parse constants\n\nconst twoDigits = /\\d\\d?/;\nconst threeDigits = /\\d{3}/;\nconst fourDigits = /\\d{4}/;\nconst word =\n  /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\nconst monthUpdate = (arrName: string) => (d: DateParts, v: string, l: any) => {\n  const index = l[arrName].indexOf(\n    v.charAt(0).toUpperCase() + v.substr(1).toLowerCase(),\n  );\n  if (~index) {\n    d.month = index;\n  }\n};\nconst parseFlags: any = {\n  D: [\n    twoDigits,\n    (d: DateParts, v: number) => {\n      d.day = v;\n    },\n  ],\n  Do: [\n    new RegExp(twoDigits.source + word.source),\n    (d: DateParts, v: string) => {\n      d.day = parseInt(v, 10);\n    },\n  ],\n  d: [twoDigits, noop],\n  W: [word, noop],\n  M: [\n    twoDigits,\n    (d: DateParts, v: number) => {\n      d.month = v - 1;\n    },\n  ],\n  MMM: [word, monthUpdate('monthNamesShort')],\n  MMMM: [word, monthUpdate('monthNames')],\n  YY: [\n    twoDigits,\n    (d: DateParts, v: number) => {\n      const da = new Date();\n      const cent = +da.getFullYear().toString().substr(0, 2);\n      d.year = +`${v > 68 ? cent - 1 : cent}${v}`;\n    },\n  ],\n  YYYY: [\n    fourDigits,\n    (d: DateParts, v: number) => {\n      d.year = v;\n    },\n  ],\n  S: [\n    /\\d/,\n    (d: DateParts, v: number) => {\n      d.milliseconds = v * 100;\n    },\n  ],\n  SS: [\n    /\\d{2}/,\n    (d: DateParts, v: number) => {\n      d.milliseconds = v * 10;\n    },\n  ],\n  SSS: [\n    threeDigits,\n    (d: DateParts, v: number) => {\n      d.milliseconds = v;\n    },\n  ],\n  h: [\n    twoDigits,\n    (d: DateParts, v: number) => {\n      d.hours = v;\n    },\n  ],\n  m: [\n    twoDigits,\n    (d: DateParts, v: number) => {\n      d.minutes = v;\n    },\n  ],\n  s: [\n    twoDigits,\n    (d: DateParts, v: number) => {\n      d.seconds = v;\n    },\n  ],\n  a: [\n    word,\n    (d: DateParts, v: string, l: Locale) => {\n      const val = v.toLowerCase();\n      if (val === l.amPm[0]) {\n        d.isPm = false;\n      } else if (val === l.amPm[1]) {\n        d.isPm = true;\n      }\n    },\n  ],\n  Z: [\n    /[^\\s]*?[+-]\\d\\d:?\\d\\d|[^\\s]*?Z?/,\n    (d: DateParts, v: string) => {\n      if (v === 'Z') v = '+00:00';\n      const parts = `${v}`.match(/([+-]|\\d\\d)/gi);\n      if (parts) {\n        const minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n        d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\n      }\n    },\n  ],\n};\nparseFlags.DD = parseFlags.D;\nparseFlags.dd = parseFlags.d;\nparseFlags.WWWW = parseFlags.WWW = parseFlags.WW = parseFlags.W;\nparseFlags.MM = parseFlags.M;\nparseFlags.mm = parseFlags.m;\nparseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\nparseFlags.ss = parseFlags.s;\nparseFlags.A = parseFlags.a;\nparseFlags.ZZZZ = parseFlags.ZZZ = parseFlags.ZZ = parseFlags.Z;\n\n// #endregion Parse constants\n\nfunction normalizeMasks(masks: string | string[], locale: Locale): string[] {\n  return (\n    ((arrayHasItems(masks) && masks) || [\n      (isString(masks) && masks) || 'YYYY-MM-DD',\n    ]) as string[]\n  ).map(m =>\n    maskMacros.reduce(\n      (prev, curr) => prev.replace(curr, locale.masks[curr] || ''),\n      m,\n    ),\n  );\n}\n\nexport function isDateParts(parts: unknown): parts is Partial<DateParts> {\n  return (\n    isObject(parts) && 'year' in parts && 'month' in parts && 'day' in parts\n  );\n}\n\nexport function isDateSource(date: unknown): date is DateSource {\n  if (date == null) return false;\n  return isString(date) || isNumber(date) || isDate(date);\n}\n\nexport function roundDate(dateMs: number, snapMs = 0) {\n  if (snapMs > 0) return new Date(Math.round(dateMs / snapMs) * snapMs);\n  return new Date(dateMs);\n}\n\nexport function startOfWeek(date: Date, firstDayOfWeek: DayOfWeek = 1) {\n  const day = date.getDay() + 1;\n  const daysToAdd =\n    day >= firstDayOfWeek\n      ? firstDayOfWeek - day\n      : -(7 - (firstDayOfWeek - day));\n  return addDays(date, daysToAdd);\n}\n\nexport function getStartOfWeek(date: Date, firstDayOfWeek: DayOfWeek = 1) {\n  const day = date.getDay() + 1;\n  const daysToAdd =\n    day >= firstDayOfWeek\n      ? firstDayOfWeek - day\n      : -(7 - (firstDayOfWeek - day));\n  return addDays(date, daysToAdd);\n}\n\nexport function getDayIndex(year: number, month: number, day: number) {\n  const utcDate = Date.UTC(year, month - 1, day);\n  return diffInDays(new Date(0), new Date(utcDate));\n}\n\nexport function diffInDays(d1: Date, d2: Date) {\n  return Math.round((d2.getTime() - d1.getTime()) / MS_PER_DAY);\n}\n\nexport function diffInWeeks(d1: Date, d2: Date) {\n  return Math.ceil(diffInDays(startOfWeek(d1), startOfWeek(d2)) / 7);\n}\n\nexport function diffInYears(d1: Date, d2: Date) {\n  return d2.getUTCFullYear() - d1.getUTCFullYear();\n}\n\nexport function diffInMonths(d1: Date, d2: Date) {\n  return diffInYears(d1, d2) * 12 + (d2.getMonth() - d1.getMonth());\n}\n\nexport function getDateFromParts(\n  parts: Partial<SimpleDateParts>,\n  timezone = '',\n) {\n  const d = new Date();\n  const {\n    year = d.getFullYear(),\n    month = d.getMonth() + 1,\n    day = d.getDate(),\n    hours: hrs = 0,\n    minutes: min = 0,\n    seconds: sec = 0,\n    milliseconds: ms = 0,\n  } = parts;\n\n  if (timezone) {\n    const dateString = `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}T${pad(\n      hrs,\n      2,\n    )}:${pad(min, 2)}:${pad(sec, 2)}.${pad(ms, 3)}`;\n    return toDate(dateString, { timeZone: timezone });\n  }\n  return new Date(year, month - 1, day, hrs, min, sec, ms);\n}\n\nexport function getTimezoneOffset(\n  parts: Partial<SimpleDateParts>,\n  timezone = '',\n) {\n  const {\n    year: y = 0,\n    month: m = 0,\n    day: d = 0,\n    hours: hrs = 0,\n    minutes: min = 0,\n    seconds: sec = 0,\n    milliseconds: ms = 0,\n  } = parts;\n  let date;\n  const utcDate = new Date(Date.UTC(y, m - 1, d, hrs, min, sec, ms));\n  if (timezone) {\n    const dateString = `${pad(y, 4)}-${pad(m, 2)}-${pad(d, 2)}T${pad(\n      hrs,\n      2,\n    )}:${pad(min, 2)}:${pad(sec, 2)}.${pad(ms, 3)}`;\n    date = toDate(dateString, { timeZone: timezone });\n  } else {\n    date = new Date(y, m - 1, d, hrs, min, sec, ms);\n  }\n  return (date.getTime() - utcDate.getTime()) / 60000;\n}\n\nexport function getDateParts(date: Date, locale: Locale): DateParts {\n  let tzDate = new Date(date.getTime());\n  if (locale.timezone) {\n    tzDate = new Date(\n      date.toLocaleString('en-US', { timeZone: locale.timezone }),\n    );\n    tzDate.setMilliseconds(date.getMilliseconds());\n  }\n  const milliseconds = tzDate.getMilliseconds();\n  const seconds = tzDate.getSeconds();\n  const minutes = tzDate.getMinutes();\n  const hours = tzDate.getHours();\n  const time =\n    milliseconds +\n    seconds * MS_PER_SECOND +\n    minutes * MS_PER_MINUTE +\n    hours * MS_PER_HOUR;\n  const month = <MonthInYear>(tzDate.getMonth() + 1);\n  const year = tzDate.getFullYear();\n  const monthParts = locale.getMonthParts(month, year);\n  const day = <DayInMonth>tzDate.getDate();\n  const dayFromEnd = monthParts.numDays - day + 1;\n  const weekday = tzDate.getDay() + 1;\n  const weekdayOrdinal = Math.floor((day - 1) / 7 + 1);\n  const weekdayOrdinalFromEnd = Math.floor((monthParts.numDays - day) / 7 + 1);\n  const week = Math.ceil(\n    (day + Math.abs(monthParts.firstWeekday - monthParts.firstDayOfWeek)) / 7,\n  );\n  const weekFromEnd = monthParts.numWeeks - week + 1;\n  const weeknumber = monthParts.weeknumbers[week];\n  const dayIndex = getDayIndex(year, month, day);\n  const parts: DateParts = {\n    milliseconds,\n    seconds,\n    minutes,\n    hours,\n    time,\n    day,\n    dayFromEnd,\n    weekday,\n    weekdayOrdinal,\n    weekdayOrdinalFromEnd,\n    week,\n    weekFromEnd,\n    weeknumber,\n    month,\n    year,\n    date: tzDate,\n    dateTime: tzDate.getTime(),\n    dayIndex,\n    timezoneOffset: 0,\n    isValid: true,\n  };\n  return parts;\n}\n\nexport function getMonthPartsKey(\n  month: number,\n  year: number,\n  firstDayOfWeek: DayOfWeek,\n) {\n  return `${year}-${month}-${firstDayOfWeek}`;\n}\n\nexport function getMonthParts(\n  month: number,\n  year: number,\n  firstDayOfWeek: DayOfWeek,\n) {\n  const inLeapYear = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n  const firstDayOfMonth = new Date(year, month - 1, 1);\n  const firstWeekday = firstDayOfMonth.getDay() + 1;\n  const numDays = month === 2 && inLeapYear ? 29 : daysInMonths[month - 1];\n  const weekStartsOn: WeekStartsOn = (firstDayOfWeek - 1) as WeekStartsOn;\n  const numWeeks = getWeeksInMonth(firstDayOfMonth, {\n    weekStartsOn,\n  });\n  const weeknumbers = [];\n  const isoWeeknumbers = [];\n  for (let i = 0; i < numWeeks; i++) {\n    const date = addDays(firstDayOfMonth, i * 7);\n    weeknumbers.push(getWeek(date, { weekStartsOn }));\n    isoWeeknumbers.push(getISOWeek(date));\n  }\n  return {\n    firstDayOfWeek,\n    firstDayOfMonth,\n    inLeapYear,\n    firstWeekday,\n    numDays,\n    numWeeks,\n    month,\n    year,\n    weeknumbers,\n    isoWeeknumbers,\n  };\n}\n\nexport function getWeekdayDates() {\n  const dates = [];\n  const year = 2020;\n  const month = 1;\n  const day = 5;\n  for (let i = 0; i < daysInWeek; i++) {\n    dates.push(\n      getDateFromParts({\n        year,\n        month,\n        day: day + i,\n        hours: 12,\n      }),\n    );\n  }\n  return dates;\n}\n\nexport function getDayNames(\n  length: DayNameLength,\n  localeId: string | undefined = undefined,\n) {\n  const dtf = new Intl.DateTimeFormat(localeId, {\n    weekday: length,\n  });\n  return getWeekdayDates().map(d => dtf.format(d));\n}\n\nexport function getHourDates() {\n  const dates = [];\n  for (let i = 0; i <= 24; i++) {\n    dates.push(new Date(2000, 0, 1, i));\n  }\n  return dates;\n}\n\nexport function getRelativeTimeNames(localeId = undefined): TimeNames {\n  const units: Intl.RelativeTimeFormatUnit[] = [\n    'second',\n    'minute',\n    'hour',\n    'day',\n    'week',\n    'month',\n    'quarter',\n    'year',\n  ];\n  const rtf = new Intl.RelativeTimeFormat(localeId);\n  return units.reduce<TimeNames>((names, unit) => {\n    const parts = rtf.formatToParts(100, unit);\n    // @ts-ignore\n    names[unit] = parts[1].unit;\n    return names;\n  }, {});\n}\n\nexport function getMonthDates() {\n  const dates = [];\n  for (let i = 0; i < 12; i++) {\n    dates.push(new Date(2000, i, 15));\n  }\n  return dates;\n}\n\nexport function getMonthNames(length: MonthNameLength, localeId = undefined) {\n  const dtf = new Intl.DateTimeFormat(localeId, {\n    month: length,\n    timeZone: 'UTC',\n  });\n  return getMonthDates().map(d => dtf.format(d));\n}\n\nexport function datePartIsValid(\n  part: number,\n  rule: DatePartsRule,\n  parts: DateParts,\n): boolean {\n  if (isNumber(rule)) return rule === part;\n  if (isArray(rule)) return (rule as number[]).includes(part);\n  if (isFunction(rule)) return rule(part, parts);\n  if (rule.min != null && rule.min > part) return false;\n  if (rule.max != null && rule.max < part) return false;\n  if (rule.interval != null && part % rule.interval !== 0) return false;\n  return true;\n}\n\nexport function getDatePartOptions(\n  parts: DateParts,\n  range: DatePartsRange,\n  rule: DatePartsRule | undefined,\n) {\n  const options: DatePartOption[] = [];\n  const [min, max, padding] = range;\n  for (let i = min; i <= max; i++) {\n    if (rule == null || datePartIsValid(i, rule, parts)) {\n      options.push({\n        value: i,\n        label: pad(i, padding),\n      });\n    }\n  }\n  return options;\n}\n\nexport function getDatePartsOptions(parts: DateParts, rules: DatePartsRules) {\n  return {\n    milliseconds: getDatePartOptions(\n      parts,\n      DATE_PART_RANGES.milliseconds,\n      rules.milliseconds,\n    ),\n    seconds: getDatePartOptions(parts, DATE_PART_RANGES.seconds, rules.seconds),\n    minutes: getDatePartOptions(parts, DATE_PART_RANGES.minutes, rules.minutes),\n    hours: getDatePartOptions(parts, DATE_PART_RANGES.hours, rules.hours),\n  };\n}\n\nexport function getNearestDatePart(\n  parts: DateParts,\n  range: DatePartsRange,\n  value: number,\n  rule: DatePartsRule,\n) {\n  const options = getDatePartOptions(parts, range, rule);\n  const result = options.reduce((prev, opt) => {\n    if (opt.disabled) return prev;\n    if (isNaN(prev)) return opt.value;\n    const diffPrev = Math.abs(prev - value);\n    const diffCurr = Math.abs(opt.value - value);\n    return diffCurr < diffPrev ? opt.value : prev;\n  }, NaN);\n  return isNaN(result) ? value : result;\n}\n\nexport function applyRulesForDateParts(\n  dateParts: DateParts,\n  rules: DatePartsRules,\n) {\n  const result = <DateParts>{ ...dateParts };\n  Object.entries(rules).forEach(([key, rule]) => {\n    const range = DATE_PART_RANGES[key as TimePartsKey];\n    const value = dateParts[key as TimePartsKey];\n    result[key as TimePartsKey] = getNearestDatePart(\n      dateParts,\n      range,\n      value,\n      rule,\n    );\n  });\n  return result;\n}\n\nexport function parseDate(\n  dateString: string,\n  mask: string | string[],\n  locale: Locale,\n) {\n  const masks = normalizeMasks(mask, locale);\n  return (\n    masks\n      .map(m => {\n        if (typeof m !== 'string') {\n          throw new Error('Invalid mask');\n        }\n        // Reset string value\n        let str = dateString;\n        // Avoid regular expression denial of service, fail early for really long strings\n        // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n        if (str.length > 1000) {\n          return false;\n        }\n\n        let isValid = true;\n        const dp: Partial<DateParts> = {};\n        m.replace(token, $0 => {\n          if (parseFlags[$0]) {\n            const info = parseFlags[$0];\n            const index = str.search(info[0]);\n            if (!~index) {\n              isValid = false;\n            } else {\n              str.replace(info[0], result => {\n                info[1](dp, result, locale);\n                str = str.substr(index + result.length);\n                return result;\n              });\n            }\n          }\n\n          return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);\n        });\n\n        if (!isValid) {\n          return false;\n        }\n\n        const today = new Date();\n        if (dp.hours != null) {\n          if (dp.isPm === true && +dp.hours !== 12) {\n            dp.hours = +dp.hours + 12;\n          } else if (dp.isPm === false && +dp.hours === 12) {\n            dp.hours = 0;\n          }\n        }\n\n        let date;\n        if (dp.timezoneOffset != null) {\n          dp.minutes = +(dp.minutes || 0) - +dp.timezoneOffset;\n          date = new Date(\n            Date.UTC(\n              dp.year || today.getFullYear(),\n              dp.month || 0,\n              dp.day || 1,\n              dp.hours || 0,\n              dp.minutes || 0,\n              dp.seconds || 0,\n              dp.milliseconds || 0,\n            ),\n          );\n        } else {\n          date = locale.getDateFromParts({\n            year: dp.year || today.getFullYear(),\n            month: (dp.month || 0) + 1,\n            day: dp.day || 1,\n            hours: dp.hours || 0,\n            minutes: dp.minutes || 0,\n            seconds: dp.seconds || 0,\n            milliseconds: dp.milliseconds || 0,\n          });\n        }\n        return date;\n      })\n      .find(d => d) || new Date(dateString)\n  );\n}\n\nexport function formatDate(\n  date: Date,\n  masks: string | string[],\n  locale: Locale,\n) {\n  if (date == null) return '';\n  let mask = normalizeMasks(masks, locale)[0];\n  // Convert timezone to utc if needed\n  if (/Z$/.test(mask)) locale.timezone = 'utc';\n  const literals: string[] = [];\n  // Make literals inactive by replacing them with ??\n  mask = mask.replace(literal, ($0, $1: string) => {\n    literals.push($1);\n    return '??';\n  });\n  const dateParts = locale.getDateParts(date);\n  // Apply formatting rules\n  mask = mask.replace(token, $0 =>\n    $0 in formatFlags\n      ? formatFlags[$0](dateParts, locale)\n      : $0.slice(1, $0.length - 1),\n  );\n  // Inline literal values back into the formatted value\n  return mask.replace(/\\?\\?/g, () => literals.shift()!);\n}\n","import type { Placement } from '@popperjs/core';\nimport { addDays } from './date/helpers';\nimport { DateRange, type DateRangeSource } from './date/range';\nimport {\n  Bar,\n  BarConfig,\n  Content,\n  ContentConfig,\n  Dot,\n  DotConfig,\n  Highlight,\n  HighlightConfig,\n  Profile,\n} from './glyph';\nimport { arrayHasItems } from './helpers';\nimport Locale from './locale';\nimport type { PopoverVisibility } from './popovers';\nimport { Theme } from './theme';\n\nexport type PopoverConfig = Partial<{\n  label: string;\n  visibility: PopoverVisibility;\n  placement: Placement;\n  hideIndicator: boolean;\n  isInteractive: boolean;\n}>;\n\nexport type EventConfig = Partial<{\n  label: string;\n}>;\n\nexport type AttributeConfig = Partial<{\n  key: string | number;\n  hashcode: string;\n  content: ContentConfig;\n  highlight: HighlightConfig;\n  dot: DotConfig;\n  bar: BarConfig;\n  popover: PopoverConfig;\n  event: EventConfig;\n  dates: DateRangeSource[];\n  customData: any;\n  order: number;\n  pinPage: boolean;\n}>;\n\nlet attrKey = 0;\n\nexport class Attribute {\n  key: string | number = '';\n  hashcode = '';\n  highlight: Profile<Highlight> | null = null;\n  content: Profile<Content> | null = null;\n  dot: Profile<Dot> | null = null;\n  bar: Profile<Bar> | null = null;\n  event: EventConfig | null = null;\n  popover: PopoverConfig | null = null;\n  customData: any = null;\n  ranges: DateRange[];\n  hasRanges = false;\n  order = 0;\n  pinPage = false;\n  maxRepeatSpan = 0;\n  locale: Locale;\n\n  constructor(config: Partial<AttributeConfig>, theme: Theme, locale: Locale) {\n    const { dates } = Object.assign(\n      this,\n      { hashcode: '', order: 0, pinPage: false },\n      config,\n    );\n    this.key ||= ++attrKey;\n    this.locale = locale;\n    // Normalize attribute\n    theme.normalizeGlyphs(this);\n    // Assign dates\n    this.ranges = locale.ranges(dates ?? []);\n    this.hasRanges = !!arrayHasItems(this.ranges);\n    this.maxRepeatSpan = this.ranges\n      .filter(r => r.hasRepeat)\n      .map(r => r.daySpan)\n      .reduce((res, curr) => Math.max(res, curr), 0);\n  }\n\n  intersectsRange({ start, end }: DateRange) {\n    if (start == null || end == null) return false;\n    const simpleRanges = this.ranges.filter(r => !r.hasRepeat);\n    for (const range of simpleRanges) {\n      if (range.intersectsDayRange(start.dayIndex, end.dayIndex)) {\n        return true;\n      }\n    }\n    const repeatRanges = this.ranges.filter(r => r.hasRepeat);\n    if (!repeatRanges.length) return false;\n    let day = start;\n    if (this.maxRepeatSpan > 1) {\n      day = this.locale.getDateParts(addDays(day.date, -this.maxRepeatSpan));\n    }\n    while (day.dayIndex <= end.dayIndex) {\n      for (const range of repeatRanges) {\n        if (range.startsOnDay(day)) return true;\n      }\n      day = this.locale.getDateParts(addDays(day.date, 1));\n    }\n    return false;\n  }\n}\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  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  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  detail: Partial<PopoverOptions>;\n}\n\nexport interface PopoverEventHandlers {\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  if (document) {\n    document.dispatchEvent(\n      new CustomEvent('show-popover', {\n        detail: opts,\n      }),\n    );\n  }\n}\n\nexport function hidePopover(opts: Partial<PopoverOptions>) {\n  if (document) {\n    document.dispatchEvent(\n      new CustomEvent('hide-popover', {\n        detail: opts,\n      }),\n    );\n  }\n}\n\nexport function togglePopover(opts: Partial<PopoverOptions>) {\n  if (document) {\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  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    if (click) {\n      togglePopover({\n        ...opts,\n        target: opts.target || (e.currentTarget as HTMLElement),\n      });\n      e.stopPropagation();\n    }\n  };\n  const mouseMoveHandler = (e: MouseEvent) => {\n    if (!hovered) {\n      hovered = true;\n      if (hover || hoverFocus) {\n        showPopover({\n          ...opts,\n          target: opts.target || (e.currentTarget as HTMLElement),\n        });\n      }\n    }\n  };\n  const mouseLeaveHandler = () => {\n    if (hovered) {\n      hovered = false;\n      if (hover || (hoverFocus && !focused)) {\n        hidePopover(opts);\n      }\n    }\n  };\n  const focusInHandler = (e: FocusEvent) => {\n    if (!focused) {\n      focused = true;\n      if (focus || hoverFocus) {\n        showPopover({\n          ...opts,\n          target: opts.target || (e.currentTarget as HTMLElement),\n        });\n      }\n    }\n  };\n  const focusOutHandler = (e: FocusEvent) => {\n    if (\n      focused &&\n      !elementContains(e.currentTarget as Node, e.relatedTarget as Element)\n    ) {\n      focused = false;\n      if (focus || (hoverFocus && !hovered)) {\n        hidePopover(opts);\n      }\n    }\n  };\n\n  const handlers: Record<string, Function> = {};\n  switch (opts.visibility) {\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  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  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    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    const { value } = binding;\n    if (!value) return;\n    addHandlers(el, value);\n  },\n  updated(el: any, binding: DirectiveBinding<PopoverOptions>) {\n    const { oldValue, value } = binding;\n    const oldVisibility = oldValue?.visibility;\n    const newVisibility = value?.visibility;\n    if (oldVisibility !== newVisibility) {\n      if (oldVisibility) {\n        removeHandlers(el);\n        if (!newVisibility) hidePopover(oldValue);\n      }\n      if (newVisibility) {\n        addHandlers(el, value);\n      }\n    }\n  },\n  unmounted(el: Element) {\n    removeHandlers(el);\n  },\n};\n","import { isFunction, off, on } from './helpers';\nimport type { CustomElement } from './helpers';\n\ninterface SwipeHandlerOptions {\n  maxSwipeTime: number;\n  minHorizontalSwipeDistance: number;\n  maxVerticalSwipeDistance: number;\n}\n\nexport const addHorizontalSwipeHandler = (\n  element: CustomElement,\n  handler: Function,\n  {\n    maxSwipeTime,\n    minHorizontalSwipeDistance,\n    maxVerticalSwipeDistance,\n  }: SwipeHandlerOptions,\n) => {\n  if (!element || !element.addEventListener || !isFunction(handler)) {\n    return null;\n  }\n  // State variables\n  let startX = 0;\n  let startY = 0;\n  let startTime: number | null = null;\n  let isSwiping = false;\n  // Touch start handler\n  function touchStart(e: TouchEvent) {\n    const t = e.changedTouches[0];\n    startX = t.screenX;\n    startY = t.screenY;\n    startTime = new Date().getTime();\n    isSwiping = true;\n  }\n  // Touch end handler\n  function touchEnd(e: TouchEvent) {\n    if (!isSwiping || !startTime) return;\n    isSwiping = false;\n    const t = e.changedTouches[0];\n    const deltaX = t.screenX - startX;\n    const deltaY = t.screenY - startY;\n    const deltaTime = new Date().getTime() - startTime;\n    if (deltaTime < maxSwipeTime) {\n      if (\n        Math.abs(deltaX) >= minHorizontalSwipeDistance &&\n        Math.abs(deltaY) <= maxVerticalSwipeDistance\n      ) {\n        const arg = { toLeft: false, toRight: false };\n        if (deltaX < 0) {\n          // Swipe to the left\n          arg.toLeft = true;\n        } else {\n          // Swipe to the right\n          arg.toRight = true;\n        }\n        handler(arg);\n      }\n    }\n  }\n  // Add event handlers\n  on(element, 'touchstart', touchStart, { passive: true });\n  // on(element, 'touchmove', touchmove);\n  on(element, 'touchend', touchEnd, { passive: true });\n  // Return function that removes event handlers\n  return () => {\n    off(element, 'touchstart', touchStart);\n    // off(element, 'touchmove', touchmove);\n    off(element, 'touchend', touchEnd);\n  };\n};\n","const watchSkippers: Partial<Record<string, number>> = {};\n\nexport const skipWatcher = (watcher: string, durationMs = 10) => {\n  watchSkippers[watcher] = Date.now() + durationMs;\n};\n\nexport const unskipWatcher = (watcher: string) => {\n  delete watchSkippers[watcher];\n};\n\nexport const handleWatcher = (watcher: string, handler: Function) => {\n  if (watcher in watchSkippers) {\n    const dateTime = watchSkippers[watcher] as number;\n    if (Date.now() < dateTime) return;\n    delete watchSkippers[watcher];\n  }\n  handler();\n};\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';\nimport type { DateRangeCell } from './date/range';\nimport { defaultsDeep, hasAny, isObject, isString } from './helpers';\n\ntype GlyphTarget = 'base' | 'start' | 'end' | 'startEnd';\ntype ThemeProp =\n  | 'class'\n  | 'wrapperClass'\n  | 'contentClass'\n  | 'style'\n  | 'contentStyle'\n  | 'color'\n  | 'fillMode';\n\nconst targetProps: GlyphTarget[] = ['base', 'start', 'end', 'startEnd'];\nconst displayProps: ThemeProp[] = [\n  'class',\n  'wrapperClass',\n  'contentClass',\n  'style',\n  'contentStyle',\n  'color',\n  'fillMode',\n];\n\nexport interface Glyph {\n  key: string | number;\n  color: string;\n  class: string | any[];\n  style: Record<string, any>;\n}\n\nexport interface Profile<T> {\n  start: T;\n  base: T;\n  end: T;\n  startEnd?: T;\n}\n\n// Highlights\nexport type HighlightFillMode = 'solid' | 'light' | 'outline';\nexport interface Highlight extends Glyph {\n  fillMode: HighlightFillMode;\n  wrapperClass: string | any[];\n  contentClass: string | any[];\n  contentStyle: Record<string, any>;\n}\nexport type HighlightConfig =\n  | boolean\n  | string\n  | Partial<Highlight | Profile<Partial<Highlight>>>;\n\n// Dots\nexport type Dot = Glyph;\nexport type DotConfig = boolean | string | Partial<Dot | Profile<Partial<Dot>>>;\n\n// Bars\nexport type Bar = Glyph;\nexport type BarConfig = boolean | string | Partial<Bar | Profile<Partial<Bar>>>;\n\n// Content\nexport type Content = Glyph;\nexport type ContentConfig =\n  | string\n  | Partial<Content | Profile<Partial<Content>>>;\n\nconst _defaultProfile = { base: {}, start: {}, end: {} };\n\nfunction normalizeConfig(\n  color: string,\n  config: any,\n  defaultProfile: any = _defaultProfile,\n): Profile<Glyph> {\n  let rootColor = color;\n  let root: any = {};\n  // Get the normalized root config\n  if (config === true || isString(config)) {\n    // Assign default color for booleans or strings\n    rootColor = isString(config) ? config : rootColor;\n    // Set the default root\n    root = { ...defaultProfile };\n  } else if (isObject(config)) {\n    if (hasAny(config as Record<string, any>, targetProps)) {\n      // Mixin target configs\n      root = { ...config };\n    } else {\n      // Mixin display configs\n      root = {\n        base: { ...(config as Record<string, any>) },\n        start: { ...(config as Record<string, any>) },\n        end: { ...(config as Record<string, any>) },\n      };\n    }\n  }\n  // Fill in missing targets\n  const result = defaultsDeep(\n    root,\n    { start: root.startEnd, end: root.startEnd },\n    defaultProfile,\n  ) as Profile<any>;\n  // Normalize each target\n  Object.entries(result).forEach(([targetType, targetConfig]) => {\n    let targetColor = rootColor;\n    if (targetConfig === true || isString(targetConfig)) {\n      targetColor = isString(targetConfig) ? targetConfig : targetColor;\n      // @ts-ignore\n      result[targetType] = { color: targetColor };\n    } else if (isObject(targetConfig)) {\n      if (hasAny(targetConfig, displayProps)) {\n        // @ts-ignore\n        result[targetType] = { ...targetConfig };\n      } else {\n        // @ts-ignore\n        result[targetType] = {};\n      }\n    }\n    // Set the theme color if it is missing\n    // @ts-ignore\n    defaultsDeep(result[targetType], { color: targetColor });\n  });\n  return result;\n}\n\nexport interface GlyphRenderer<P extends Partial<Glyph>> {\n  type: string;\n  normalizeConfig(color: string, config: any): Profile<P>;\n  prepareRender(glyphs: Record<string, P[]>): void;\n  render(attr: DateRangeCell<Attribute>, glyphs: Record<string, P[]>): void;\n}\n\nexport class HighlightRenderer implements GlyphRenderer<Highlight> {\n  type = 'highlight';\n\n  normalizeConfig(color: string, config: any) {\n    return normalizeConfig(color, config, {\n      base: { fillMode: 'light' },\n      start: { fillMode: 'solid' },\n      end: { fillMode: 'solid' },\n    }) as Profile<Highlight>;\n  }\n\n  prepareRender(glyphs: Record<string, Glyph[]>) {\n    glyphs.highlights = [];\n    if (!glyphs.content) glyphs.content = [];\n  }\n\n  render(\n    { data, onStart, onEnd }: DateRangeCell<Attribute>,\n    glyphs: Record<string, Highlight[]>,\n  ) {\n    const { key, highlight } = data;\n    if (!highlight) return;\n    const { highlights } = glyphs;\n    const { base, start, end } = highlight;\n    if (onStart && onEnd) {\n      highlights.push({\n        ...start,\n        key,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${start.color}`,\n        class: [`vc-highlight vc-highlight-bg-${start.fillMode}`, start.class],\n        contentClass: [\n          `vc-attr vc-highlight-content-${start.fillMode} vc-${start.color}`,\n          start.contentClass,\n        ],\n      });\n    } else if (onStart) {\n      highlights.push({\n        ...base,\n        key: `${key}-base`,\n        wrapperClass: `vc-day-layer vc-day-box-right-center vc-attr vc-${base.color}`,\n        class: [\n          `vc-highlight vc-highlight-base-start vc-highlight-bg-${base.fillMode}`,\n          base.class,\n        ],\n      });\n      highlights.push({\n        ...start,\n        key,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${start.color}`,\n        class: [`vc-highlight vc-highlight-bg-${start.fillMode}`, start.class],\n        contentClass: [\n          `vc-attr vc-highlight-content-${start.fillMode} vc-${start.color}`,\n          start.contentClass,\n        ],\n      });\n    } else if (onEnd) {\n      highlights.push({\n        ...base,\n        key: `${key}-base`,\n        wrapperClass: `vc-day-layer vc-day-box-left-center vc-attr vc-${base.color}`,\n        class: [\n          `vc-highlight vc-highlight-base-end vc-highlight-bg-${base.fillMode}`,\n          base.class,\n        ],\n      });\n      highlights.push({\n        ...end,\n        key,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${end.color}`,\n        class: [`vc-highlight vc-highlight-bg-${end.fillMode}`, end.class],\n        contentClass: [\n          `vc-attr vc-highlight-content-${end.fillMode} vc-${end.color}`,\n          end.contentClass,\n        ],\n      });\n    } else {\n      highlights.push({\n        ...base,\n        key: `${key}-middle`,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${base.color}`,\n        class: [\n          `vc-highlight vc-highlight-base-middle vc-highlight-bg-${base.fillMode}`,\n          base.class,\n        ],\n        contentClass: [\n          `vc-attr vc-highlight-content-${base.fillMode} vc-${base.color}`,\n          base.contentClass,\n        ],\n      });\n    }\n  }\n}\n\nexport class BaseRenderer<T extends Partial<Glyph>>\n  implements GlyphRenderer<T>\n{\n  type = '';\n  collectionType = '';\n\n  constructor(type: string, collectionType: string) {\n    this.type = type;\n    this.collectionType = collectionType;\n  }\n\n  normalizeConfig(color: string, config: any) {\n    return normalizeConfig(color, config) as Profile<T>;\n  }\n\n  prepareRender(glyphs: Record<string, T[]>) {\n    glyphs[this.collectionType] = [];\n  }\n\n  render(\n    { data, onStart, onEnd }: DateRangeCell<Attribute>,\n    glyphs: Record<string, T[]>,\n  ) {\n    const { key } = data;\n    const item = data[this.type as keyof Attribute];\n    if (!key || !item) {\n      return;\n    }\n    const collection = glyphs[this.collectionType];\n    const { base, start, end } = item;\n    if (onStart) {\n      collection.push({\n        ...start,\n        key,\n        class: [\n          `vc-${this.type} vc-${this.type}-start vc-${start.color} vc-attr`,\n          start.class,\n        ],\n      });\n    } else if (onEnd) {\n      collection.push({\n        ...end,\n        key,\n        class: [\n          `vc-${this.type} vc-${this.type}-end vc-${end.color} vc-attr`,\n          end.class,\n        ],\n      });\n    } else {\n      collection.push({\n        ...base,\n        key,\n        class: [\n          `vc-${this.type} vc-${this.type}-base vc-${base.color} vc-attr`,\n          base.class,\n        ],\n      });\n    }\n  }\n}\n\nexport class ContentRenderer extends BaseRenderer<Content> {\n  constructor() {\n    super('content', 'content');\n  }\n\n  normalizeConfig(_: string, config: any) {\n    return normalizeConfig('base', config) as Profile<Content>;\n  }\n}\n\nexport class DotRenderer extends BaseRenderer<Dot> {\n  constructor() {\n    super('dot', 'dots');\n  }\n}\n\nexport class BarRenderer extends BaseRenderer<Dot> {\n  constructor() {\n    super('bar', 'bars');\n  }\n}\n","import type { DateRangeCell } from '@/utils/date/range';\nimport { Attribute } from './attribute';\nimport {\n  type Bar,\n  BarRenderer,\n  type Content,\n  ContentRenderer,\n  type Dot,\n  DotRenderer,\n  type Glyph,\n  type GlyphRenderer,\n  type Highlight,\n  HighlightRenderer,\n} from './glyph';\n\nexport interface Glyphs {\n  highlights: Highlight[];\n  dots: Dot[];\n  bars: Bar[];\n  content: Content[];\n}\n\nexport class Theme {\n  color: string;\n  renderers: GlyphRenderer<Glyph>[] = [\n    new ContentRenderer(),\n    new HighlightRenderer(),\n    new DotRenderer(),\n    new BarRenderer(),\n  ];\n\n  constructor(color: string) {\n    this.color = color;\n  }\n\n  normalizeGlyphs(attr: Attribute) {\n    this.renderers.forEach(renderer => {\n      const type = renderer.type as keyof Attribute;\n      if (attr[type] != null) {\n        // @ts-ignore\n        attr[type] = renderer.normalizeConfig(this.color, attr[type]);\n      }\n    });\n  }\n\n  prepareRender(glyphs: Partial<Glyphs> = {}) {\n    this.renderers.forEach(renderer => {\n      renderer.prepareRender(glyphs);\n    });\n    return glyphs;\n  }\n\n  render(cell: DateRangeCell<Attribute>, glyphs: Partial<Glyphs>) {\n    this.renderers.forEach(renderer => {\n      renderer.render(cell, glyphs);\n    });\n  }\n}\n","import {\n  type ExtractPropTypes,\n  type PropType,\n  computed,\n  inject,\n  provide,\n} from 'vue';\nimport { type DarkModeClassConfig, useDarkMode } from 'vue-screen-utils';\nimport { Attribute } from '../utils/attribute';\nimport { type DayOfWeek, addDays } from '../utils/date/helpers';\nimport { getDefault } from '../utils/defaults';\nimport { isObject } from '../utils/helpers';\nimport { default as Locale, type LocaleConfig } from '../utils/locale';\nimport { Theme } from '../utils/theme';\n\nconst contextKey = Symbol('__vc_base_context__');\n\nexport const propsDef = {\n  color: {\n    type: String,\n    default: () => getDefault('color'),\n  },\n  isDark: {\n    type: [Boolean, String, Object] as PropType<\n      boolean | 'system' | DarkModeClassConfig\n    >,\n    default: () => getDefault('isDark'),\n  },\n  firstDayOfWeek: Number as PropType<DayOfWeek>,\n  masks: Object,\n  locale: [String, Object] as PropType<string | Record<string, any> | Locale>,\n  timezone: String,\n  minDate: null,\n  maxDate: null,\n  disabledDates: null,\n};\n\nexport type BaseProps = Readonly<ExtractPropTypes<typeof propsDef>>;\n\nexport type BaseContext = ReturnType<typeof createBase>;\n\nexport function createBase(props: BaseProps) {\n  // #region Computed\n\n  const color = computed(() => props.color ?? '');\n  const isDark = computed(() => props.isDark ?? false);\n  const { displayMode } = useDarkMode(isDark);\n  const theme = computed(() => new Theme(color.value));\n\n  const locale = computed(() => {\n    // Return the locale prop if it is an instance of the Locale class\n    if (props.locale instanceof Locale) return props.locale;\n    // Build up a base config from component props\n    const config = (\n      isObject(props.locale)\n        ? props.locale\n        : {\n            id: props.locale,\n            firstDayOfWeek: props.firstDayOfWeek,\n            masks: props.masks,\n          }\n    ) as Partial<LocaleConfig>;\n    // Return new locale\n    return new Locale(config, props.timezone);\n  });\n\n  const masks = computed(() => locale.value.masks);\n\n  const minDate = computed(() => props.minDate);\n  const maxDate = computed(() => props.maxDate);\n\n  const disabledDates = computed(() => {\n    const dates: any[] = props.disabledDates ? [...props.disabledDates] : [];\n    // Add disabled range for min date\n    if (minDate.value != null) {\n      dates.push({\n        start: null,\n        end: addDays(locale.value.toDate(minDate.value), -1),\n      });\n    }\n    // Add disabled range for max date\n    if (maxDate.value != null) {\n      dates.push({\n        start: addDays(locale.value.toDate(maxDate.value), 1),\n        end: null,\n      });\n    }\n    return locale.value.ranges(dates);\n  });\n\n  const disabledAttribute = computed(() => {\n    return new Attribute(\n      {\n        key: 'disabled',\n        dates: disabledDates.value,\n        order: 100,\n      },\n      theme.value,\n      locale.value,\n    );\n  });\n\n  // #endregion Computed\n\n  const context = {\n    color,\n    isDark,\n    displayMode,\n    theme,\n    locale,\n    masks,\n    minDate,\n    maxDate,\n    disabledDates,\n    disabledAttribute,\n  };\n  provide(contextKey, context);\n  return context;\n}\n\nexport function useBase() {\n  const context = inject<BaseContext>(contextKey);\n  if (context) return context;\n  throw new Error(\n    'Base context missing. Please verify this component is nested within a valid context provider.',\n  );\n}\n\nexport function useOrCreateBase(props: BaseProps) {\n  return inject<BaseContext>(contextKey, () => createBase(props), true);\n}\n","import { type SetupContext, inject, provide } from 'vue';\n\ntype Slots = SetupContext['slots'];\n\nfunction contextKey(slotKey: string) {\n  return `__vc_slot_${slotKey}__`;\n}\n\nexport function provideSlots(slots: Slots, remap: Record<string, string> = {}) {\n  Object.keys(slots).forEach(slotKey => {\n    provide(contextKey(remap[slotKey] ?? slotKey), slots[slotKey]);\n  });\n}\n\nexport function useSlot(slotKey: string) {\n  return inject(contextKey(slotKey), null);\n}\n","import {\n  type ExtractPropTypes,\n  type PropType,\n  type SetupContext,\n  computed,\n  inject,\n  onMounted,\n  onUnmounted,\n  provide,\n  ref,\n  watch,\n  watchEffect,\n} from 'vue';\nimport { Attribute, type AttributeConfig } from '../utils/attribute';\nimport {\n  type DateSource,\n  addDays,\n  addMonths,\n  addYears,\n} from '../utils/date/helpers';\nimport { type DateRangeCell, DateRangeContext } from '../utils/date/range';\nimport { getDefault } from '../utils/defaults';\nimport {\n  type CustomElement,\n  arrayHasItems,\n  has,\n  head,\n  isBoolean,\n  last,\n} from '../utils/helpers';\nimport {\n  type CalendarDay,\n  type CalendarWeek,\n  type Page,\n  type PageAddress,\n  type TitlePosition,\n  addPages as _addPages,\n  getPageAddressForDate,\n  pageIsAfterPage,\n  pageIsBeforePage,\n  pageIsBetweenPages,\n  pageIsEqualToPage,\n  pageIsValid,\n  pageRangeToArray,\n} from '../utils/page';\nimport { type PopoverVisibility, hidePopover } from '../utils/popovers';\nimport { addHorizontalSwipeHandler } from '../utils/touch';\nimport { handleWatcher, skipWatcher } from '../utils/watchers';\nimport { propsDef as basePropsDef, useOrCreateBase } from './base';\nimport { provideSlots } from './slots';\n\nexport type CalendarView = 'daily' | 'weekly' | 'monthly';\n\nexport type MoveTarget = DateSource | PageAddress;\n\nexport type MoveTransition = 'none' | 'fade' | 'slide-v' | 'slide-h';\n\nexport interface MoveOptions {\n  position: number;\n  view: CalendarView;\n  transition: MoveTransition;\n  force: boolean;\n  fromPage: PageAddress;\n  toPage: PageAddress;\n}\n\nexport interface RefreshOptions {\n  page: PageAddress;\n  position: number;\n  force: boolean;\n  transition: MoveTransition;\n}\n\nexport type DayCells = Record<\n  number,\n  { day: CalendarDay; cells: DateRangeCell<Attribute>[] }\n>;\n\nexport type CalendarProps = Readonly<ExtractPropTypes<typeof propsDef>>;\n\ntype IContainer = Pick<Element, 'querySelector'> & CustomElement;\n\nexport type CalendarContext = ReturnType<typeof createCalendar>;\n\nexport const propsDef = {\n  ...basePropsDef,\n  view: {\n    type: String as PropType<CalendarView>,\n    default: 'monthly',\n    validator(value: string) {\n      return ['daily', 'weekly', 'monthly'].includes(value);\n    },\n  },\n  rows: {\n    type: Number,\n    default: 1,\n  },\n  columns: {\n    type: Number,\n    default: 1,\n  },\n  step: Number,\n  titlePosition: {\n    type: String as PropType<TitlePosition>,\n    default: () => getDefault('titlePosition') as TitlePosition,\n  },\n  navVisibility: {\n    type: String as PropType<PopoverVisibility>,\n    default: () => getDefault('navVisibility') as PopoverVisibility,\n  },\n  showWeeknumbers: [Boolean, String],\n  showIsoWeeknumbers: [Boolean, String],\n  expanded: Boolean,\n  borderless: Boolean,\n  transparent: Boolean,\n  initialPage: Object as PropType<PageAddress>,\n  initialPagePosition: { type: Number, default: 1 },\n  minPage: Object as PropType<PageAddress>,\n  maxPage: Object as PropType<PageAddress>,\n  transition: String as PropType<MoveTransition>,\n  attributes: Array as PropType<Array<AttributeConfig>>,\n  trimWeeks: Boolean,\n  disablePageSwipe: Boolean,\n};\n\nexport const emitsDef = [\n  'dayclick',\n  'daymouseenter',\n  'daymouseleave',\n  'dayfocusin',\n  'dayfocusout',\n  'daykeydown',\n  'weeknumberclick',\n  'transition-start',\n  'transition-end',\n  'did-move',\n  'update:view',\n  'update:pages',\n];\n\nconst contextKey = Symbol('__vc_calendar_context__');\n\nexport function createCalendar(\n  props: CalendarProps,\n  { slots, emit }: Pick<SetupContext, 'slots' | 'emit'>,\n) {\n  // #region Refs\n\n  const containerRef = ref<IContainer | null>(null);\n  const focusedDay = ref<CalendarDay | null>(null);\n  const focusableDay = ref(new Date().getDate());\n  const inTransition = ref(false);\n  const navPopoverId = ref(Symbol());\n  const dayPopoverId = ref(Symbol());\n  const _view = ref(props.view);\n  const _pages = ref<Page[]>([]);\n  const transitionName = ref('');\n\n  // #endregion\n\n  // Non-reactive util vars\n  let transitionPromise: any = null;\n  let removeHandlers: any = null;\n\n  provideSlots(slots);\n\n  const {\n    theme,\n    color,\n    displayMode,\n    locale,\n    masks,\n    minDate,\n    maxDate,\n    disabledAttribute,\n    disabledDates,\n  } = useOrCreateBase(props);\n\n  // #region Computed\n\n  const count = computed(() => props.rows * props.columns);\n\n  const step = computed(() => props.step || count.value);\n\n  const firstPage = computed(() => head(_pages.value) ?? null);\n\n  const lastPage = computed(() => last(_pages.value) ?? null);\n\n  const minPage = computed(\n    () =>\n      props.minPage || (minDate.value ? getDateAddress(minDate.value) : null),\n  );\n\n  const maxPage = computed(\n    () =>\n      props.maxPage || (maxDate.value ? getDateAddress(maxDate.value) : null),\n  );\n\n  const navVisibility = computed(() => props.navVisibility);\n\n  const showWeeknumbers = computed(() => !!props.showWeeknumbers);\n\n  const showIsoWeeknumbers = computed(() => !!props.showIsoWeeknumbers);\n\n  const isMonthly = computed(() => _view.value === 'monthly');\n  const isWeekly = computed(() => _view.value === 'weekly');\n  const isDaily = computed(() => _view.value === 'daily');\n\n  // #endregion Computed\n\n  // #region Methods\n\n  const onTransitionBeforeEnter = () => {\n    inTransition.value = true;\n    emit('transition-start');\n  };\n\n  const onTransitionAfterEnter = () => {\n    inTransition.value = false;\n    emit('transition-end');\n    if (transitionPromise) {\n      transitionPromise.resolve(true);\n      transitionPromise = null;\n    }\n  };\n\n  const addPages = (\n    address: PageAddress,\n    count: number,\n    view = _view.value,\n  ) => {\n    return _addPages(address, count, view, locale.value);\n  };\n\n  const getDateAddress = (date: DateSource) => {\n    return getPageAddressForDate(date, _view.value, locale.value);\n  };\n\n  const refreshDisabled = (day: CalendarDay) => {\n    if (!disabledAttribute.value || !attributeContext.value) return;\n    day.isDisabled = attributeContext.value.cellExists(\n      disabledAttribute.value.key,\n      day.dayIndex,\n    );\n  };\n\n  const refreshFocusable = (day: CalendarDay) => {\n    day.isFocusable = day.inMonth && day.day === focusableDay.value;\n  };\n\n  const forDays = (pages: Page[], fn: (day: CalendarDay) => boolean | void) => {\n    for (const page of pages) {\n      for (const day of page.days) {\n        if (fn(day) === false) return;\n      }\n    }\n  };\n\n  const days = computed(() =>\n    _pages.value.reduce((result: CalendarDay[], page: Page) => {\n      result.push(...page.viewDays);\n      return result;\n    }, [] as CalendarDay[]),\n  );\n\n  const attributes = computed(() => {\n    const result: Attribute[] = [];\n    (props.attributes || []).forEach((attr, i) => {\n      if (!attr || !attr.dates) return;\n      result.push(\n        new Attribute(\n          {\n            ...attr,\n            order: attr.order || 0,\n          },\n          theme.value,\n          locale.value,\n        ),\n      );\n    });\n    if (disabledAttribute.value) {\n      result.push(disabledAttribute.value);\n    }\n    return result;\n  });\n\n  const hasAttributes = computed(() => arrayHasItems(attributes.value));\n\n  const attributeContext = computed(() => {\n    const ctx = new DateRangeContext();\n    attributes.value.forEach(attr => {\n      attr.ranges.forEach(range => {\n        ctx.render(attr, range, days.value);\n      });\n    });\n    return ctx;\n  });\n\n  const dayCells = computed(() => {\n    return days.value.reduce((result, day) => {\n      result[day.dayIndex] = { day, cells: [] };\n      result[day.dayIndex].cells.push(...attributeContext.value.getCells(day));\n      return result;\n    }, {} as DayCells);\n  });\n\n  const getWeeknumberPosition = (column: number, columnFromEnd: number) => {\n    const showWeeknumbers = props.showWeeknumbers || props.showIsoWeeknumbers;\n    if (showWeeknumbers == null) return '';\n    if (isBoolean(showWeeknumbers)) {\n      return showWeeknumbers ? 'left' : '';\n    }\n    if (showWeeknumbers.startsWith('right')) {\n      return columnFromEnd > 1 ? 'right' : showWeeknumbers;\n    }\n    return column > 1 ? 'left' : showWeeknumbers;\n  };\n\n  const getPageForAttributes = () => {\n    if (!hasAttributes.value) return null;\n    const attr =\n      attributes.value.find(attr => attr.pinPage) || attributes.value[0];\n    if (!attr || !attr.hasRanges) return null;\n    const [range] = attr.ranges;\n    const date = range.start?.date || range.end?.date;\n    return date ? getDateAddress(date) : null;\n  };\n\n  const getDefaultInitialPage = () => {\n    // 1. Try existing first page\n    if (pageIsValid(firstPage.value)) return firstPage.value as PageAddress;\n    // 2. Try the first attribute\n    const page = getPageForAttributes();\n    if (pageIsValid(page)) return page as PageAddress;\n    // 3. Use today's page\n    return getDateAddress(new Date());\n  };\n\n  const getTargetPageRange = (\n    page: PageAddress,\n    opts: Partial<MoveOptions> = {},\n  ) => {\n    const { view = _view.value, position = 1, force } = opts;\n    const pagesToAdd = position > 0 ? 1 - position : -(count.value + position);\n    let fromPage = addPages(page, pagesToAdd, view);\n    let toPage = addPages(fromPage!, count.value - 1, view);\n\n    // Adjust range for min/max if not forced\n    if (!force) {\n      if (pageIsBeforePage(fromPage, minPage.value)) {\n        fromPage = minPage.value!;\n      } else if (pageIsAfterPage(toPage, maxPage.value)) {\n        fromPage = addPages(maxPage.value!, 1 - count.value);\n      }\n      toPage = addPages(fromPage!, count.value - 1);\n    }\n    return { fromPage, toPage };\n  };\n\n  const getPageTransition = (\n    oldPage: Page,\n    newPage: Page,\n    defaultTransition = '',\n  ) => {\n    if (defaultTransition === 'none' || defaultTransition === 'fade')\n      return defaultTransition;\n    // Moving to a different view\n    if (oldPage?.view !== newPage?.view) return 'fade';\n    // Moving to a previous page\n    const moveNext = pageIsAfterPage(newPage, oldPage);\n    const movePrev = pageIsBeforePage(newPage, oldPage);\n    if (!moveNext && !movePrev) {\n      return 'fade';\n    }\n    // Vertical slide\n    if (defaultTransition === 'slide-v') {\n      return movePrev ? 'slide-down' : 'slide-up';\n    }\n    // Horizontal slide\n    return movePrev ? 'slide-right' : 'slide-left';\n  };\n\n  const refreshPages = (opts: Partial<RefreshOptions> = {}) => {\n    return new Promise((resolve, reject) => {\n      const { position = 1, force = false, transition } = opts;\n      const page = pageIsValid(opts.page)\n        ? opts.page!\n        : getDefaultInitialPage();\n      const { fromPage } = getTargetPageRange(page, {\n        position,\n        force,\n      });\n      // Create the new pages\n      const pages: Page[] = [];\n      for (let i = 0; i < count.value; i++) {\n        const newPage = addPages(fromPage!, i);\n        const position = i + 1;\n        const row = Math.ceil(position / props.columns);\n        const rowFromEnd = props.rows - row + 1;\n        const column = position % props.columns || props.columns;\n        const columnFromEnd = props.columns - column + 1;\n        const weeknumberPosition = getWeeknumberPosition(column, columnFromEnd);\n        pages.push(\n          locale.value.getPage({\n            ...newPage,\n            view: _view.value,\n            titlePosition: props.titlePosition,\n            trimWeeks: props.trimWeeks,\n            position,\n            row,\n            rowFromEnd,\n            column,\n            columnFromEnd,\n            showWeeknumbers: showWeeknumbers.value,\n            showIsoWeeknumbers: showIsoWeeknumbers.value,\n            weeknumberPosition,\n          }),\n        );\n      }\n      // Assign the transition\n      transitionName.value = getPageTransition(\n        _pages.value[0],\n        pages[0],\n        transition,\n      );\n      // Assign the new pages\n      _pages.value = pages;\n      // Cache or resolve transition promise\n      if (transitionName.value && transitionName.value !== 'none') {\n        transitionPromise = {\n          resolve,\n          reject,\n        };\n      } else {\n        resolve(true);\n      }\n    });\n  };\n\n  const targetBy = (pages: number) => {\n    const fromPage = firstPage.value ?? getDateAddress(new Date());\n    return addPages(fromPage, pages);\n  };\n\n  const canMove = (target: MoveTarget, opts: Partial<MoveOptions> = {}) => {\n    const page = pageIsValid(target as PageAddress)\n      ? (target as Page)\n      : getDateAddress(target as DateSource);\n    // Calculate new page range without adjusting to min/max\n    Object.assign(\n      opts,\n      getTargetPageRange(page, {\n        ...opts,\n        force: true,\n      }),\n    );\n    // Verify we can move to any pages in the target range\n    const pagesInRange = pageRangeToArray(\n      opts.fromPage!,\n      opts.toPage!,\n      _view.value,\n      locale.value,\n    ).map(p => pageIsBetweenPages(p, minPage.value, maxPage.value));\n    return pagesInRange.some(val => val);\n  };\n\n  const canMoveBy = (pages: number, opts: Partial<MoveOptions> = {}) => {\n    return canMove(targetBy(pages), opts);\n  };\n\n  const canMovePrev = computed(() => canMoveBy(-step.value));\n\n  const canMoveNext = computed(() => canMoveBy(step.value));\n\n  const move = async (target: MoveTarget, opts: Partial<MoveOptions> = {}) => {\n    // Return if we can't move to this page\n    if (!opts.force && !canMove(target, opts)) return false;\n    // Move to new `fromPage` if it's different from the current one\n    if (opts.fromPage && !pageIsEqualToPage(opts.fromPage, firstPage.value)) {\n      // Hide nav popover for good measure\n      hidePopover({ id: navPopoverId.value, hideDelay: 0 });\n      // Quietly change view if needed\n      if (opts.view) {\n        skipWatcher('view', 10);\n        _view.value = opts.view;\n      }\n      await refreshPages({\n        ...opts,\n        page: opts.fromPage,\n        position: 1,\n        force: true,\n      });\n      emit('did-move', _pages.value);\n    }\n    return true;\n  };\n\n  const moveBy = (pages: number, opts: Partial<MoveOptions> = {}) => {\n    return move(targetBy(pages), opts);\n  };\n\n  const movePrev = () => {\n    return moveBy(-step.value);\n  };\n\n  const moveNext = () => {\n    return moveBy(step.value);\n  };\n\n  const tryFocusDate = (date: Date) => {\n    const inMonth = isMonthly.value ? '.in-month' : '';\n    const daySelector = `.id-${locale.value.getDayId(date)}${inMonth}`;\n    const selector = `${daySelector}.vc-focusable, ${daySelector} .vc-focusable`;\n    const el = containerRef.value;\n    if (el) {\n      const focusableEl = el.querySelector(selector) as HTMLElement;\n      if (focusableEl) {\n        focusableEl.focus();\n        return true;\n      }\n    }\n    return false;\n  };\n\n  const focusDate = async (date: Date, opts: Partial<MoveOptions> = {}) => {\n    if (tryFocusDate(date)) return true;\n    // Move to the given date\n    await move(date, opts);\n    return tryFocusDate(date);\n  };\n\n  const onDayClick = (day: CalendarDay, event: MouseEvent) => {\n    focusableDay.value = day.day;\n    emit('dayclick', day, event);\n  };\n\n  const onDayMouseenter = (day: CalendarDay, event: MouseEvent) => {\n    emit('daymouseenter', day, event);\n  };\n\n  const onDayMouseleave = (day: CalendarDay, event: MouseEvent) => {\n    emit('daymouseleave', day, event);\n  };\n\n  const onDayFocusin = (day: CalendarDay, event: FocusEvent | null) => {\n    focusableDay.value = day.day;\n    focusedDay.value = day;\n    day.isFocused = true;\n    emit('dayfocusin', day, event);\n  };\n\n  const onDayFocusout = (day: CalendarDay, event: FocusEvent) => {\n    focusedDay.value = null;\n    day.isFocused = false;\n    emit('dayfocusout', day, event);\n  };\n\n  const onDayKeydown = (day: CalendarDay, event: KeyboardEvent) => {\n    emit('daykeydown', day, event);\n    const date = day.noonDate;\n    let newDate = null;\n    switch (event.key) {\n      case 'ArrowLeft': {\n        // Move to previous day\n        newDate = addDays(date, -1);\n        break;\n      }\n      case 'ArrowRight': {\n        // Move to next day\n        newDate = addDays(date, 1);\n        break;\n      }\n      case 'ArrowUp': {\n        // Move to previous week\n        newDate = addDays(date, -7);\n        break;\n      }\n      case 'ArrowDown': {\n        // Move to next week\n        newDate = addDays(date, 7);\n        break;\n      }\n      case 'Home': {\n        // Move to first weekday position\n        newDate = addDays(date, -day.weekdayPosition + 1);\n        break;\n      }\n      case 'End': {\n        // Move to last weekday position\n        newDate = addDays(date, day.weekdayPositionFromEnd);\n        break;\n      }\n      case 'PageUp': {\n        if (event.altKey) {\n          // Move to previous year w/ Alt/Option key\n          newDate = addYears(date, -1);\n        } else {\n          // Move to previous month\n          newDate = addMonths(date, -1);\n        }\n        break;\n      }\n      case 'PageDown': {\n        if (event.altKey) {\n          // Move to next year w/ Alt/Option key\n          newDate = addYears(date, 1);\n        } else {\n          // Move to next month\n          newDate = addMonths(date, 1);\n        }\n        break;\n      }\n    }\n    if (newDate) {\n      event.preventDefault();\n      focusDate(newDate).catch();\n    }\n  };\n\n  const onKeydown = (event: KeyboardEvent) => {\n    const day = focusedDay.value;\n    if (day != null) {\n      onDayKeydown(day, event);\n    }\n  };\n\n  const onWeeknumberClick = (week: CalendarWeek, event: MouseEvent) => {\n    emit('weeknumberclick', week, event);\n  };\n\n  // #endregion Methods\n\n  // #region Lifecycle methods\n\n  // Created\n\n  refreshPages({\n    page: props.initialPage,\n    position: props.initialPagePosition,\n  });\n\n  // Mounted\n\n  onMounted(() => {\n    if (!props.disablePageSwipe && containerRef.value) {\n      // Add swipe handler to move to next and previous pages\n      removeHandlers = addHorizontalSwipeHandler(\n        containerRef.value,\n        ({ toLeft = false, toRight = false }) => {\n          if (toLeft) {\n            moveNext();\n          } else if (toRight) {\n            movePrev();\n          }\n        },\n        getDefault('touch'),\n      );\n    }\n  });\n\n  // Unmounted\n  onUnmounted(() => {\n    _pages.value = [];\n    if (removeHandlers) removeHandlers();\n  });\n\n  // #endregion Lifecycle methods\n\n  // #region Watch\n\n  watch(\n    () => locale.value,\n    () => {\n      refreshPages();\n    },\n  );\n\n  watch(\n    () => count.value,\n    () => refreshPages(),\n  );\n\n  watch(\n    () => props.view,\n    () => (_view.value = props.view),\n  );\n\n  watch(\n    () => _view.value,\n    () => {\n      handleWatcher('view', () => {\n        refreshPages();\n      });\n      emit('update:view', _view.value);\n    },\n  );\n\n  watch(\n    () => focusableDay.value,\n    () => {\n      forDays(_pages.value, day => refreshFocusable(day));\n    },\n  );\n\n  watchEffect(() => {\n    emit('update:pages', _pages.value);\n    // Refresh state for days\n    forDays(_pages.value, day => {\n      // Refresh disabled state\n      refreshDisabled(day);\n      // Refresh focusable state\n      refreshFocusable(day);\n    });\n  });\n\n  // #endregion Watch\n\n  const context = {\n    emit,\n    containerRef,\n    focusedDay,\n    inTransition,\n    navPopoverId,\n    dayPopoverId,\n    view: _view,\n    pages: _pages,\n    transitionName,\n    theme,\n    color,\n    displayMode,\n    locale,\n    masks,\n    attributes,\n    disabledAttribute,\n    disabledDates,\n    attributeContext,\n    days,\n    dayCells,\n    count,\n    step,\n    firstPage,\n    lastPage,\n    canMovePrev,\n    canMoveNext,\n    minPage,\n    maxPage,\n    isMonthly,\n    isWeekly,\n    isDaily,\n    navVisibility,\n    showWeeknumbers,\n    showIsoWeeknumbers,\n    getDateAddress,\n    canMove,\n    canMoveBy,\n    move,\n    moveBy,\n    movePrev,\n    moveNext,\n    onTransitionBeforeEnter,\n    onTransitionAfterEnter,\n    tryFocusDate,\n    focusDate,\n    onKeydown,\n    onDayKeydown,\n    onDayClick,\n    onDayMouseenter,\n    onDayMouseleave,\n    onDayFocusin,\n    onDayFocusout,\n    onWeeknumberClick,\n  };\n  provide(contextKey, context);\n  return context;\n}\n\nexport function useCalendar(): CalendarContext {\n  const context = inject<CalendarContext>(contextKey);\n  if (context) return context;\n  throw new Error(\n    'Calendar context missing. Please verify this component is nested within a valid context provider.',\n  );\n}\n","<template>\n  <div\n    class=\"vc-popover-content-wrapper\"\n    :class=\"{ 'is-interactive': isInteractive }\"\n    ref=\"popoverRef\"\n    @click=\"onClick\"\n    @mouseover=\"onMouseOver\"\n    @mouseleave=\"onMouseLeave\"\n    @focusin=\"onFocusIn\"\n    @focusout=\"onFocusOut\"\n  >\n    <Transition\n      :name=\"`vc-${transition}`\"\n      appear\n      @before-enter=\"beforeEnter\"\n      @after-enter=\"afterEnter\"\n      @before-leave=\"beforeLeave\"\n      @after-leave=\"afterLeave\"\n    >\n      <div\n        v-if=\"isVisible\"\n        tabindex=\"-1\"\n        :class=\"`vc-popover-content direction-${direction}`\"\n        v-bind=\"$attrs\"\n      >\n        <slot\n          :direction=\"direction\"\n          :alignment=\"alignment\"\n          :data=\"data\"\n          :hide=\"hide\"\n        >\n          {{ data }}\n        </slot>\n        <span\n          :class=\"[\n            'vc-popover-caret',\n            `direction-${direction}`,\n            `align-${alignment}`,\n          ]\"\n        />\n      </div>\n    </Transition>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  type Instance,\n  type OptionsGeneric,\n  type State as PopperState,\n  type PositioningStrategy,\n  createPopper,\n} from '@popperjs/core';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  onUnmounted,\n  reactive,\n  ref,\n  toRefs,\n  watch,\n} from 'vue';\nimport { elementContains, off, omit, on, resolveEl } from '../../utils/helpers';\nimport type {\n  PopoverEvent,\n  PopoverOptions,\n  PopoverState,\n} from '../../utils/popovers';\n\nexport default defineComponent({\n  inheritAttrs: false,\n  emits: ['before-show', 'after-show', 'before-hide', 'after-hide'],\n  props: {\n    id: { type: [Number, String, Symbol], required: true },\n    showDelay: { type: Number, default: 0 },\n    hideDelay: { type: Number, default: 110 },\n    boundarySelector: { type: String },\n  },\n  setup(props, { emit }) {\n    let timeout: number | undefined = undefined;\n    const popoverRef = ref<HTMLElement>();\n    let resizeObserver: ResizeObserver | null = null;\n    let popper: Instance | null = null;\n\n    const state: PopoverState = reactive({\n      isVisible: false,\n      target: null,\n      data: null,\n      transition: 'slide-fade',\n      placement: 'bottom',\n      direction: '',\n      positionFixed: false,\n      modifiers: [],\n      isInteractive: true,\n      visibility: 'click',\n      isHovered: false,\n      isFocused: false,\n      autoHide: false,\n      force: false,\n    });\n\n    function updateDirection(placement?: string) {\n      if (placement) state.direction = placement.split('-')[0];\n    }\n\n    function onPopperUpdate({ placement, options }: Partial<PopperState>) {\n      updateDirection(placement || options?.placement);\n    }\n\n    const popperOptions = computed<Partial<OptionsGeneric<any>>>(() => {\n      return {\n        placement: state.placement,\n        strategy: (state.positionFixed\n          ? 'fixed'\n          : 'absolute') as PositioningStrategy,\n        boundary: '',\n        modifiers: [\n          {\n            name: 'onUpdate',\n            enabled: true,\n            phase: 'afterWrite',\n            fn: onPopperUpdate,\n          },\n          ...(state.modifiers || []),\n        ],\n        onFirstUpdate: onPopperUpdate,\n      };\n      // if (props.boundarySelector) {\n      //   const boundary = document.querySelector(props.boundarySelector);\n      //   modifiers.push({\n      //     name: 'boundary',\n      //     enabled: true,\n      //     phase: 'main',\n      //     requiresIfExists: ['offset'],\n      //     fn({ state }) {\n      //       console.log(\n      //         detectOverflow(state, {\n      //           boundary,\n      //           altBoundary: true,\n      //         }),\n      //       );\n      //     },\n      //   });\n      // }\n    });\n\n    const alignment = computed(() => {\n      const isLeftRight =\n        state.direction === 'left' || state.direction === 'right';\n      let alignment = '';\n      if (state.placement) {\n        const parts = state.placement.split('-');\n        if (parts.length > 1) alignment = parts[1];\n      }\n      if (['start', 'top', 'left'].includes(alignment)) {\n        return isLeftRight ? 'top' : 'left';\n      }\n      if (['end', 'bottom', 'right'].includes(alignment)) {\n        return isLeftRight ? 'bottom' : 'right';\n      }\n      return isLeftRight ? 'middle' : 'center';\n    });\n\n    function destroyPopper() {\n      if (popper) {\n        popper.destroy();\n        popper = null;\n      }\n    }\n\n    function setupPopper() {\n      nextTick(() => {\n        const el = resolveEl(state.target);\n        if (!el || !popoverRef.value) return;\n        if (popper && popper.state.elements.reference !== el) {\n          destroyPopper();\n        }\n        if (!popper) {\n          popper = createPopper(\n            el as Element,\n            popoverRef.value,\n            popperOptions.value,\n          );\n        } else {\n          popper.update();\n        }\n      });\n    }\n\n    function updateState(newState: Partial<PopoverState>) {\n      Object.assign(state, omit(newState, 'force'));\n    }\n\n    function setTimer(delay: number, fn: Function) {\n      clearTimeout(timeout);\n      if (delay > 0) {\n        timeout = setTimeout(fn, delay);\n      } else {\n        fn();\n      }\n    }\n\n    function isCurrentTarget(target: unknown) {\n      if (!target || !popper) return false;\n      const el = resolveEl(target);\n      return el === popper.state.elements.reference;\n    }\n\n    async function show(opts: Partial<PopoverOptions> = {}) {\n      if (state.force) return;\n      if (opts.force) state.force = true;\n\n      setTimer(opts.showDelay ?? props.showDelay, () => {\n        if (state.isVisible) {\n          state.force = false;\n        }\n        updateState({\n          ...opts,\n          isVisible: true,\n        });\n        setupPopper();\n      });\n    }\n\n    function hide(opts: Partial<PopoverOptions> = {}) {\n      if (!popper) return;\n      if (opts.target && !isCurrentTarget(opts.target)) return;\n\n      if (state.force) return;\n      if (opts.force) state.force = true;\n\n      setTimer(opts.hideDelay ?? props.hideDelay, () => {\n        if (!state.isVisible) state.force = false;\n        state.isVisible = false;\n      });\n    }\n\n    function toggle(opts: Partial<PopoverOptions> = {}) {\n      if (opts.target == null) return;\n      if (state.isVisible && isCurrentTarget(opts.target)) {\n        hide(opts);\n      } else {\n        show(opts);\n      }\n    }\n\n    function onDocumentClick(e: CustomEvent) {\n      if (!popper) return;\n      const popperRef = popper.state.elements.reference;\n      if (!popoverRef.value || !popperRef) {\n        return;\n      }\n      // Don't hide if target element is contained within popover ref or content\n      const target = e.target as Node;\n      if (\n        elementContains(popoverRef.value, target) ||\n        elementContains(popperRef as Node, target)\n      ) {\n        return;\n      }\n      // Hide the popover\n      hide({ force: true });\n    }\n\n    function onDocumentKeydown(e: KeyboardEvent) {\n      if (e.key === 'Esc' || e.key === 'Escape') {\n        hide();\n      }\n    }\n\n    function onDocumentShowPopover({ detail }: PopoverEvent) {\n      if (!detail.id || detail.id !== props.id) return;\n      show(detail);\n    }\n\n    function onDocumentHidePopover({ detail }: PopoverEvent) {\n      if (!detail.id || detail.id !== props.id) return;\n      hide(detail);\n    }\n\n    function onDocumentTogglePopover({ detail }: PopoverEvent) {\n      if (!detail.id || detail.id !== props.id) return;\n      toggle(detail);\n    }\n\n    function addEvents() {\n      on(document, 'keydown', onDocumentKeydown);\n      on(document, 'click', onDocumentClick);\n      on(document, 'show-popover', onDocumentShowPopover);\n      on(document, 'hide-popover', onDocumentHidePopover);\n      on(document, 'toggle-popover', onDocumentTogglePopover);\n    }\n\n    function removeEvents() {\n      off(document, 'keydown', onDocumentKeydown);\n      off(document, 'click', onDocumentClick);\n      off(document, 'show-popover', onDocumentShowPopover);\n      off(document, 'hide-popover', onDocumentHidePopover);\n      off(document, 'toggle-popover', onDocumentTogglePopover);\n    }\n\n    function beforeEnter(el: Element) {\n      emit('before-show', el);\n    }\n\n    function afterEnter(el: Element) {\n      state.force = false;\n      emit('after-show', el);\n    }\n\n    function beforeLeave(el: Element) {\n      emit('before-hide', el);\n    }\n\n    function afterLeave(el: Element) {\n      state.force = false;\n      destroyPopper();\n      emit('after-hide', el);\n    }\n\n    function onClick(e: MouseEvent) {\n      e.stopPropagation();\n    }\n\n    function onMouseOver() {\n      state.isHovered = true;\n      if (\n        state.isInteractive &&\n        ['hover', 'hover-focus'].includes(state.visibility)\n      ) {\n        show();\n      }\n    }\n\n    function onMouseLeave() {\n      state.isHovered = false;\n      if (!popper) return;\n      const popperRef = popper.state.elements.reference;\n      if (\n        state.autoHide &&\n        !state.isFocused &&\n        (!popperRef || popperRef !== document.activeElement) &&\n        ['hover', 'hover-focus'].includes(state.visibility)\n      ) {\n        hide();\n      }\n    }\n\n    function onFocusIn() {\n      state.isFocused = true;\n      if (\n        state.isInteractive &&\n        ['focus', 'hover-focus'].includes(state.visibility)\n      ) {\n        show();\n      }\n    }\n\n    function onFocusOut(e: FocusEvent) {\n      if (\n        ['focus', 'hover-focus'].includes(state.visibility) &&\n        (!e.relatedTarget ||\n          !elementContains(popoverRef.value!, e.relatedTarget as Node))\n      ) {\n        state.isFocused = false;\n        if (!state.isHovered && state.autoHide) hide();\n      }\n    }\n\n    function cleanupRO() {\n      if (resizeObserver != null) {\n        resizeObserver.disconnect();\n        resizeObserver = null;\n      }\n    }\n\n    watch(\n      () => popoverRef.value,\n      val => {\n        cleanupRO();\n        if (!val) return;\n        resizeObserver = new ResizeObserver(() => {\n          if (popper) popper.update();\n        });\n        resizeObserver.observe(val);\n      },\n    );\n\n    watch(() => state.placement, updateDirection, {\n      immediate: true,\n    });\n\n    onMounted(() => {\n      addEvents();\n    });\n\n    onUnmounted(() => {\n      destroyPopper();\n      cleanupRO();\n      removeEvents();\n    });\n\n    return {\n      ...toRefs(state),\n      popoverRef,\n      alignment,\n      hide,\n      setupPopper,\n      beforeEnter,\n      afterEnter,\n      beforeLeave,\n      afterLeave,\n      onClick,\n      onMouseOver,\n      onMouseLeave,\n      onFocusIn,\n      onFocusOut,\n    };\n  },\n});\n</script>\n\n<style lang=\"css\">\n.vc-popover-content-wrapper {\n  --popover-horizontal-content-offset: 8px;\n  --popover-vertical-content-offset: 10px;\n  --popover-caret-horizontal-offset: 18px;\n  --popover-caret-vertical-offset: 8px;\n\n  position: absolute;\n  display: block;\n  outline: none;\n  z-index: 10;\n  &:not(.is-interactive) {\n    pointer-events: none;\n  }\n}\n\n.vc-popover-content {\n  position: relative;\n  color: var(--vc-popover-content-color);\n  font-weight: var(--vc-font-medium);\n  background-color: var(--vc-popover-content-bg);\n  border: 1px solid;\n  border-color: var(--vc-popover-content-border);\n  border-radius: var(--vc-rounded-lg);\n  padding: 4px;\n  outline: none;\n  z-index: 10;\n  box-shadow: var(--vc-shadow-lg);\n  &.direction-bottom {\n    margin-top: var(--popover-vertical-content-offset);\n  }\n  &.direction-top {\n    margin-bottom: var(--popover-vertical-content-offset);\n  }\n  &.direction-left {\n    margin-right: var(--popover-horizontal-content-offset);\n  }\n  &.direction-right {\n    margin-left: var(--popover-horizontal-content-offset);\n  }\n}\n\n.vc-popover-caret {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 12px;\n  height: 12px;\n  border-top: inherit;\n  border-left: inherit;\n  background-color: inherit;\n  z-index: -1;\n  &.direction-bottom {\n    top: 0;\n    &.align-left {\n      transform: translateY(-50%) rotate(45deg);\n    }\n    &.align-center {\n      transform: translateX(-50%) translateY(-50%) rotate(45deg);\n    }\n    &.align-right {\n      transform: translateY(-50%) rotate(45deg);\n    }\n  }\n  &.direction-top {\n    top: 100%;\n    &.align-left {\n      transform: translateY(-50%) rotate(-135deg);\n    }\n    &.align-center {\n      transform: translateX(-50%) translateY(-50%) rotate(-135deg);\n    }\n    &.align-right {\n      transform: translateY(-50%) rotate(-135deg);\n    }\n  }\n  &.direction-left {\n    left: 100%;\n    &.align-top {\n      transform: translateX(-50%) rotate(135deg);\n    }\n    &.align-middle {\n      transform: translateY(-50%) translateX(-50%) rotate(135deg);\n    }\n    &.align-bottom {\n      transform: translateX(-50%) rotate(135deg);\n    }\n  }\n  &.direction-right {\n    left: 0;\n    &.align-top {\n      transform: translateX(-50%) rotate(-45deg);\n    }\n    &.align-middle {\n      transform: translateY(-50%) translateX(-50%) rotate(-45deg);\n    }\n    &.align-bottom {\n      transform: translateX(-50%) rotate(-45deg);\n    }\n  }\n  &.align-left {\n    left: var(--popover-caret-horizontal-offset);\n  }\n  &.align-center {\n    left: 50%;\n  }\n  &.align-right {\n    right: var(--popover-caret-horizontal-offset);\n  }\n  &.align-top {\n    top: var(--popover-caret-vertical-offset);\n  }\n  &.align-middle {\n    top: 50%;\n  }\n  &.align-bottom {\n    bottom: var(--popover-caret-vertical-offset);\n  }\n}\n</style>\n","<template>\n  <div\n    class=\"vc-popover-content-wrapper\"\n    :class=\"{ 'is-interactive': isInteractive }\"\n    ref=\"popoverRef\"\n    @click=\"onClick\"\n    @mouseover=\"onMouseOver\"\n    @mouseleave=\"onMouseLeave\"\n    @focusin=\"onFocusIn\"\n    @focusout=\"onFocusOut\"\n  >\n    <Transition\n      :name=\"`vc-${transition}`\"\n      appear\n      @before-enter=\"beforeEnter\"\n      @after-enter=\"afterEnter\"\n      @before-leave=\"beforeLeave\"\n      @after-leave=\"afterLeave\"\n    >\n      <div\n        v-if=\"isVisible\"\n        tabindex=\"-1\"\n        :class=\"`vc-popover-content direction-${direction}`\"\n        v-bind=\"$attrs\"\n      >\n        <slot\n          :direction=\"direction\"\n          :alignment=\"alignment\"\n          :data=\"data\"\n          :hide=\"hide\"\n        >\n          {{ data }}\n        </slot>\n        <span\n          :class=\"[\n            'vc-popover-caret',\n            `direction-${direction}`,\n            `align-${alignment}`,\n          ]\"\n        />\n      </div>\n    </Transition>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  type Instance,\n  type OptionsGeneric,\n  type State as PopperState,\n  type PositioningStrategy,\n  createPopper,\n} from '@popperjs/core';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  onUnmounted,\n  reactive,\n  ref,\n  toRefs,\n  watch,\n} from 'vue';\nimport { elementContains, off, omit, on, resolveEl } from '../../utils/helpers';\nimport type {\n  PopoverEvent,\n  PopoverOptions,\n  PopoverState,\n} from '../../utils/popovers';\n\nexport default defineComponent({\n  inheritAttrs: false,\n  emits: ['before-show', 'after-show', 'before-hide', 'after-hide'],\n  props: {\n    id: { type: [Number, String, Symbol], required: true },\n    showDelay: { type: Number, default: 0 },\n    hideDelay: { type: Number, default: 110 },\n    boundarySelector: { type: String },\n  },\n  setup(props, { emit }) {\n    let timeout: number | undefined = undefined;\n    const popoverRef = ref<HTMLElement>();\n    let resizeObserver: ResizeObserver | null = null;\n    let popper: Instance | null = null;\n\n    const state: PopoverState = reactive({\n      isVisible: false,\n      target: null,\n      data: null,\n      transition: 'slide-fade',\n      placement: 'bottom',\n      direction: '',\n      positionFixed: false,\n      modifiers: [],\n      isInteractive: true,\n      visibility: 'click',\n      isHovered: false,\n      isFocused: false,\n      autoHide: false,\n      force: false,\n    });\n\n    function updateDirection(placement?: string) {\n      if (placement) state.direction = placement.split('-')[0];\n    }\n\n    function onPopperUpdate({ placement, options }: Partial<PopperState>) {\n      updateDirection(placement || options?.placement);\n    }\n\n    const popperOptions = computed<Partial<OptionsGeneric<any>>>(() => {\n      return {\n        placement: state.placement,\n        strategy: (state.positionFixed\n          ? 'fixed'\n          : 'absolute') as PositioningStrategy,\n        boundary: '',\n        modifiers: [\n          {\n            name: 'onUpdate',\n            enabled: true,\n            phase: 'afterWrite',\n            fn: onPopperUpdate,\n          },\n          ...(state.modifiers || []),\n        ],\n        onFirstUpdate: onPopperUpdate,\n      };\n      // if (props.boundarySelector) {\n      //   const boundary = document.querySelector(props.boundarySelector);\n      //   modifiers.push({\n      //     name: 'boundary',\n      //     enabled: true,\n      //     phase: 'main',\n      //     requiresIfExists: ['offset'],\n      //     fn({ state }) {\n      //       console.log(\n      //         detectOverflow(state, {\n      //           boundary,\n      //           altBoundary: true,\n      //         }),\n      //       );\n      //     },\n      //   });\n      // }\n    });\n\n    const alignment = computed(() => {\n      const isLeftRight =\n        state.direction === 'left' || state.direction === 'right';\n      let alignment = '';\n      if (state.placement) {\n        const parts = state.placement.split('-');\n        if (parts.length > 1) alignment = parts[1];\n      }\n      if (['start', 'top', 'left'].includes(alignment)) {\n        return isLeftRight ? 'top' : 'left';\n      }\n      if (['end', 'bottom', 'right'].includes(alignment)) {\n        return isLeftRight ? 'bottom' : 'right';\n      }\n      return isLeftRight ? 'middle' : 'center';\n    });\n\n    function destroyPopper() {\n      if (popper) {\n        popper.destroy();\n        popper = null;\n      }\n    }\n\n    function setupPopper() {\n      nextTick(() => {\n        const el = resolveEl(state.target);\n        if (!el || !popoverRef.value) return;\n        if (popper && popper.state.elements.reference !== el) {\n          destroyPopper();\n        }\n        if (!popper) {\n          popper = createPopper(\n            el as Element,\n            popoverRef.value,\n            popperOptions.value,\n          );\n        } else {\n          popper.update();\n        }\n      });\n    }\n\n    function updateState(newState: Partial<PopoverState>) {\n      Object.assign(state, omit(newState, 'force'));\n    }\n\n    function setTimer(delay: number, fn: Function) {\n      clearTimeout(timeout);\n      if (delay > 0) {\n        timeout = setTimeout(fn, delay);\n      } else {\n        fn();\n      }\n    }\n\n    function isCurrentTarget(target: unknown) {\n      if (!target || !popper) return false;\n      const el = resolveEl(target);\n      return el === popper.state.elements.reference;\n    }\n\n    async function show(opts: Partial<PopoverOptions> = {}) {\n      if (state.force) return;\n      if (opts.force) state.force = true;\n\n      setTimer(opts.showDelay ?? props.showDelay, () => {\n        if (state.isVisible) {\n          state.force = false;\n        }\n        updateState({\n          ...opts,\n          isVisible: true,\n        });\n        setupPopper();\n      });\n    }\n\n    function hide(opts: Partial<PopoverOptions> = {}) {\n      if (!popper) return;\n      if (opts.target && !isCurrentTarget(opts.target)) return;\n\n      if (state.force) return;\n      if (opts.force) state.force = true;\n\n      setTimer(opts.hideDelay ?? props.hideDelay, () => {\n        if (!state.isVisible) state.force = false;\n        state.isVisible = false;\n      });\n    }\n\n    function toggle(opts: Partial<PopoverOptions> = {}) {\n      if (opts.target == null) return;\n      if (state.isVisible && isCurrentTarget(opts.target)) {\n        hide(opts);\n      } else {\n        show(opts);\n      }\n    }\n\n    function onDocumentClick(e: CustomEvent) {\n      if (!popper) return;\n      const popperRef = popper.state.elements.reference;\n      if (!popoverRef.value || !popperRef) {\n        return;\n      }\n      // Don't hide if target element is contained within popover ref or content\n      const target = e.target as Node;\n      if (\n        elementContains(popoverRef.value, target) ||\n        elementContains(popperRef as Node, target)\n      ) {\n        return;\n      }\n      // Hide the popover\n      hide({ force: true });\n    }\n\n    function onDocumentKeydown(e: KeyboardEvent) {\n      if (e.key === 'Esc' || e.key === 'Escape') {\n        hide();\n      }\n    }\n\n    function onDocumentShowPopover({ detail }: PopoverEvent) {\n      if (!detail.id || detail.id !== props.id) return;\n      show(detail);\n    }\n\n    function onDocumentHidePopover({ detail }: PopoverEvent) {\n      if (!detail.id || detail.id !== props.id) return;\n      hide(detail);\n    }\n\n    function onDocumentTogglePopover({ detail }: PopoverEvent) {\n      if (!detail.id || detail.id !== props.id) return;\n      toggle(detail);\n    }\n\n    function addEvents() {\n      on(document, 'keydown', onDocumentKeydown);\n      on(document, 'click', onDocumentClick);\n      on(document, 'show-popover', onDocumentShowPopover);\n      on(document, 'hide-popover', onDocumentHidePopover);\n      on(document, 'toggle-popover', onDocumentTogglePopover);\n    }\n\n    function removeEvents() {\n      off(document, 'keydown', onDocumentKeydown);\n      off(document, 'click', onDocumentClick);\n      off(document, 'show-popover', onDocumentShowPopover);\n      off(document, 'hide-popover', onDocumentHidePopover);\n      off(document, 'toggle-popover', onDocumentTogglePopover);\n    }\n\n    function beforeEnter(el: Element) {\n      emit('before-show', el);\n    }\n\n    function afterEnter(el: Element) {\n      state.force = false;\n      emit('after-show', el);\n    }\n\n    function beforeLeave(el: Element) {\n      emit('before-hide', el);\n    }\n\n    function afterLeave(el: Element) {\n      state.force = false;\n      destroyPopper();\n      emit('after-hide', el);\n    }\n\n    function onClick(e: MouseEvent) {\n      e.stopPropagation();\n    }\n\n    function onMouseOver() {\n      state.isHovered = true;\n      if (\n        state.isInteractive &&\n        ['hover', 'hover-focus'].includes(state.visibility)\n      ) {\n        show();\n      }\n    }\n\n    function onMouseLeave() {\n      state.isHovered = false;\n      if (!popper) return;\n      const popperRef = popper.state.elements.reference;\n      if (\n        state.autoHide &&\n        !state.isFocused &&\n        (!popperRef || popperRef !== document.activeElement) &&\n        ['hover', 'hover-focus'].includes(state.visibility)\n      ) {\n        hide();\n      }\n    }\n\n    function onFocusIn() {\n      state.isFocused = true;\n      if (\n        state.isInteractive &&\n        ['focus', 'hover-focus'].includes(state.visibility)\n      ) {\n        show();\n      }\n    }\n\n    function onFocusOut(e: FocusEvent) {\n      if (\n        ['focus', 'hover-focus'].includes(state.visibility) &&\n        (!e.relatedTarget ||\n          !elementContains(popoverRef.value!, e.relatedTarget as Node))\n      ) {\n        state.isFocused = false;\n        if (!state.isHovered && state.autoHide) hide();\n      }\n    }\n\n    function cleanupRO() {\n      if (resizeObserver != null) {\n        resizeObserver.disconnect();\n        resizeObserver = null;\n      }\n    }\n\n    watch(\n      () => popoverRef.value,\n      val => {\n        cleanupRO();\n        if (!val) return;\n        resizeObserver = new ResizeObserver(() => {\n          if (popper) popper.update();\n        });\n        resizeObserver.observe(val);\n      },\n    );\n\n    watch(() => state.placement, updateDirection, {\n      immediate: true,\n    });\n\n    onMounted(() => {\n      addEvents();\n    });\n\n    onUnmounted(() => {\n      destroyPopper();\n      cleanupRO();\n      removeEvents();\n    });\n\n    return {\n      ...toRefs(state),\n      popoverRef,\n      alignment,\n      hide,\n      setupPopper,\n      beforeEnter,\n      afterEnter,\n      beforeLeave,\n      afterLeave,\n      onClick,\n      onMouseOver,\n      onMouseLeave,\n      onFocusIn,\n      onFocusOut,\n    };\n  },\n});\n</script>\n\n<style lang=\"css\">\n.vc-popover-content-wrapper {\n  --popover-horizontal-content-offset: 8px;\n  --popover-vertical-content-offset: 10px;\n  --popover-caret-horizontal-offset: 18px;\n  --popover-caret-vertical-offset: 8px;\n\n  position: absolute;\n  display: block;\n  outline: none;\n  z-index: 10;\n  &:not(.is-interactive) {\n    pointer-events: none;\n  }\n}\n\n.vc-popover-content {\n  position: relative;\n  color: var(--vc-popover-content-color);\n  font-weight: var(--vc-font-medium);\n  background-color: var(--vc-popover-content-bg);\n  border: 1px solid;\n  border-color: var(--vc-popover-content-border);\n  border-radius: var(--vc-rounded-lg);\n  padding: 4px;\n  outline: none;\n  z-index: 10;\n  box-shadow: var(--vc-shadow-lg);\n  &.direction-bottom {\n    margin-top: var(--popover-vertical-content-offset);\n  }\n  &.direction-top {\n    margin-bottom: var(--popover-vertical-content-offset);\n  }\n  &.direction-left {\n    margin-right: var(--popover-horizontal-content-offset);\n  }\n  &.direction-right {\n    margin-left: var(--popover-horizontal-content-offset);\n  }\n}\n\n.vc-popover-caret {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 12px;\n  height: 12px;\n  border-top: inherit;\n  border-left: inherit;\n  background-color: inherit;\n  z-index: -1;\n  &.direction-bottom {\n    top: 0;\n    &.align-left {\n      transform: translateY(-50%) rotate(45deg);\n    }\n    &.align-center {\n      transform: translateX(-50%) translateY(-50%) rotate(45deg);\n    }\n    &.align-right {\n      transform: translateY(-50%) rotate(45deg);\n    }\n  }\n  &.direction-top {\n    top: 100%;\n    &.align-left {\n      transform: translateY(-50%) rotate(-135deg);\n    }\n    &.align-center {\n      transform: translateX(-50%) translateY(-50%) rotate(-135deg);\n    }\n    &.align-right {\n      transform: translateY(-50%) rotate(-135deg);\n    }\n  }\n  &.direction-left {\n    left: 100%;\n    &.align-top {\n      transform: translateX(-50%) rotate(135deg);\n    }\n    &.align-middle {\n      transform: translateY(-50%) translateX(-50%) rotate(135deg);\n    }\n    &.align-bottom {\n      transform: translateX(-50%) rotate(135deg);\n    }\n  }\n  &.direction-right {\n    left: 0;\n    &.align-top {\n      transform: translateX(-50%) rotate(-45deg);\n    }\n    &.align-middle {\n      transform: translateY(-50%) translateX(-50%) rotate(-45deg);\n    }\n    &.align-bottom {\n      transform: translateX(-50%) rotate(-45deg);\n    }\n  }\n  &.align-left {\n    left: var(--popover-caret-horizontal-offset);\n  }\n  &.align-center {\n    left: 50%;\n  }\n  &.align-right {\n    right: var(--popover-caret-horizontal-offset);\n  }\n  &.align-top {\n    top: var(--popover-caret-vertical-offset);\n  }\n  &.align-middle {\n    top: 50%;\n  }\n  &.align-bottom {\n    bottom: var(--popover-caret-vertical-offset);\n  }\n}\n</style>\n","<template>\n  <!-- Content row -->\n  <div class=\"vc-day-popover-row\">\n    <!-- Indicator -->\n    <div v-if=\"indicator\" class=\"vc-day-popover-row-indicator\">\n      <span :class=\"indicator.class\" />\n    </div>\n    <!-- Content -->\n    <div class=\"vc-day-popover-row-label\">\n      <slot>{{\n        attribute.popover ? attribute.popover.label : 'No content provided'\n      }}</slot>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Attribute } from '../../utils/attribute';\n\nconst props = defineProps<{\n  attribute: Attribute;\n}>();\n\nconst indicator = computed(() => {\n  const { content, highlight, dot, bar, popover } = props.attribute;\n  if (popover && popover.hideIndicator) return null;\n  if (content) {\n    return {\n      class: `vc-bar vc-day-popover-row-bar vc-attr vc-${content.base.color}`,\n    };\n  }\n  if (highlight) {\n    return {\n      class: `vc-highlight-bg-solid vc-day-popover-row-highlight vc-attr vc-${highlight.base.color}`,\n    };\n  }\n  if (dot) {\n    return {\n      class: `vc-dot vc-attr vc-${dot.base.color}`,\n    };\n  }\n  if (bar) {\n    return {\n      class: `vc-bar vc-day-popover-row-bar vc-attr vc-${bar.base.color}`,\n    };\n  }\n  return null;\n});\n</script>\n\n<style lang=\"css\">\n.vc-day-popover-row {\n  display: flex;\n  align-items: center;\n  transition: var(--vc-day-content-transition);\n}\n\n.vc-day-popover-row-indicator {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  flex-grow: 0;\n  width: 15px;\n  & span {\n    transition: var(--vc-day-content-transition);\n  }\n}\n\n.vc-day-popover-row-label {\n  display: flex;\n  align-items: center;\n  flex-wrap: none;\n  flex-grow: 1;\n  width: max-content;\n  margin-left: 4px;\n  margin-right: 4px;\n  font-size: var(--vc-text-xs);\n  line-height: var(--vc-leading-normal);\n}\n\n.vc-day-popover-row-highlight {\n  width: 8px;\n  height: 5px;\n  border-radius: 3px;\n}\n\n.vc-day-popover-row-dot {\n}\n.vc-day-popover-row-bar {\n  width: 10px;\n  height: 3px;\n}\n</style>\n","<template>\n  <Component v-if=\"slot\" :is=\"slot\" v-bind=\"$attrs\" />\n  <slot v-else />\n</template>\n\n<script lang=\"ts\">\nexport default {\n  inheritAttrs: false,\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useSlot } from '../../use/slots';\n\nexport type CalendarSlotName =\n  | 'day-content'\n  | 'day-popover'\n  | 'dp-footer'\n  | 'footer'\n  | 'header-title-wrapper'\n  | 'header-title'\n  | 'header-prev-button'\n  | 'header-next-button'\n  | 'nav'\n  | 'nav-prev-button'\n  | 'nav-next-button'\n  | 'page'\n  | 'time-header';\n\nconst props = defineProps<{\n  name: CalendarSlotName;\n}>();\n\nconst slot = useSlot(props.name);\n</script>\n","<template>\n  <Popover :id=\"dayPopoverId\" :class=\"[`vc-${color}`, `vc-${displayMode}`]\">\n    <template #default=\"{ data: { day, attributes }, hide }\">\n      <CalendarSlot\n        name=\"day-popover\"\n        :day=\"day\"\n        :day-title=\"dayTitle(day)\"\n        :attributes=\"attributes\"\n        :format=\"format\"\n        :masks=\"masks\"\n        :hide=\"hide\"\n      >\n        <div class=\"vc-day-popover-container\">\n          <div v-if=\"masks.dayPopover\" class=\"vc-day-popover-header\">\n            {{ dayTitle(day) }}\n          </div>\n          <PopoverRow\n            v-for=\"attribute in attributes\"\n            :key=\"attribute.key\"\n            :attribute=\"attribute\"\n          />\n        </div>\n      </CalendarSlot>\n    </template>\n  </Popover>\n</template>\n\n<script setup lang=\"ts\">\nimport { useCalendar } from '../../use/calendar';\nimport { CalendarDay } from '../../utils/page';\nimport Popover from '../Popover/Popover.vue';\nimport PopoverRow from '../Popover/PopoverRow.vue';\nimport CalendarSlot from './CalendarSlot.vue';\n\nconst { dayPopoverId, displayMode, color, masks, locale } = useCalendar();\n\nfunction format(date: Date, mask: string) {\n  return locale.value.formatDate(date, mask);\n}\n\nfunction dayTitle(day: CalendarDay) {\n  return locale.value.formatDate(day.date, masks.value.dayPopover);\n}\n</script>\n","<template>\n  <svg stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n    <polyline points=\"9 18 15 12 9 6\"></polyline>\n  </svg>\n</template>\n","<template>\n  <svg stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n    <polyline points=\"15 18 9 12 15 6\"></polyline>\n  </svg>\n</template>\n","<template>\n  <svg stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n    <polyline points=\"6 9 12 15 18 9\"></polyline>\n  </svg>\n</template>\n","<template>\n  <svg\n    fill=\"none\"\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n    stroke-width=\"2\"\n    viewBox=\"0 0 24 24\"\n  >\n    <path d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n  </svg>\n</template>\n","<template>\n  <component :is=\"icon\" :width=\"width\" :height=\"height\" class=\"vc-base-icon\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport * as icons from './icons';\n\nconst props = defineProps({\n  name: { type: String, required: true },\n  width: { type: String },\n  height: { type: String },\n  size: { type: String, default: '26' },\n  viewBox: { type: String },\n});\n\nconst width = computed(() => props.width || props.size);\nconst height = computed(() => props.height || props.size);\nconst icon = computed(() => (icons as any)[`Icon${props.name}`]);\n</script>\n\n<style lang=\"css\">\n.vc-base-icon {\n  display: inline-block;\n  stroke: currentColor;\n  stroke-width: 2;\n  fill: none;\n}\n</style>\n","<template>\n  <div\n    class=\"vc-header\"\n    :class=\"{ 'is-lg': isLg, 'is-xl': isXl, 'is-2xl': is2xl }\"\n    :style=\"gridStyle\"\n  >\n    <button\n      v-if=\"show.prev\"\n      type=\"button\"\n      class=\"vc-arrow vc-prev vc-focus\"\n      :disabled=\"!canMovePrev\"\n      @click=\"movePrev\"\n      @keydown.space.enter=\"movePrev\"\n    >\n      <CalendarSlot name=\"header-prev-button\" :disabled=\"!canMovePrev\">\n        <BaseIcon name=\"ChevronLeft\" size=\"24\" />\n      </CalendarSlot>\n    </button>\n    <div v-if=\"show.title\" class=\"vc-title-wrapper\">\n      <CalendarSlot name=\"header-title-wrapper\">\n        <button type=\"button\" class=\"vc-title\" v-popover=\"navPopoverOptions\">\n          <CalendarSlot name=\"header-title\" :title=\"page.title\">\n            <span>{{ page.title }}</span>\n          </CalendarSlot>\n        </button>\n      </CalendarSlot>\n    </div>\n    <button\n      v-if=\"show.next\"\n      type=\"button\"\n      class=\"vc-arrow vc-next vc-focus\"\n      :disabled=\"!canMoveNext\"\n      @click=\"moveNext\"\n      @keydown.space.enter=\"moveNext\"\n    >\n      <CalendarSlot name=\"header-next-button\" :disabled=\"!canMoveNext\">\n        <BaseIcon name=\"ChevronRight\" size=\"24\" />\n      </CalendarSlot>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useCalendar } from '../../use/calendar';\nimport { Page } from '../../utils/page';\nimport { popoverDirective as vPopover } from '../../utils/popovers';\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\nimport CalendarSlot from './CalendarSlot.vue';\n\nconst props = defineProps<{\n  page: Page;\n  layout?: string;\n  isLg?: boolean;\n  isXl?: boolean;\n  is2xl?: boolean;\n  hideTitle?: boolean;\n  hideArrows?: boolean;\n}>();\n\nconst {\n  navPopoverId,\n  navVisibility,\n  canMovePrev,\n  movePrev,\n  canMoveNext,\n  moveNext,\n} = useCalendar();\n\nconst navPlacement = computed(() => {\n  switch (props.page.titlePosition) {\n    case 'left':\n      return 'bottom-start';\n    case 'right':\n      return 'bottom-end';\n    default:\n      return 'bottom';\n  }\n});\nconst navPopoverOptions = computed(() => {\n  const { page } = props;\n  return {\n    id: navPopoverId.value,\n    visibility: navVisibility.value,\n    placement: navPlacement.value,\n    modifiers: [{ name: 'flip', options: { fallbackPlacements: ['bottom'] } }],\n    data: { page },\n    isInteractive: true,\n  };\n});\nconst titleLeft = computed(() => props.page.titlePosition.includes('left'));\nconst titleRight = computed(() => props.page.titlePosition.includes('right'));\nconst layout_ = computed(() => {\n  if (props.layout) return props.layout;\n  if (titleLeft.value) return 'tu-pn';\n  if (titleRight.value) return 'pn-tu';\n  return 'p-tu-n;';\n});\nconst show = computed(() => {\n  return {\n    prev: layout_.value.includes('p') && !props.hideArrows,\n    title: layout_.value.includes('t') && !props.hideTitle,\n    next: layout_.value.includes('n') && !props.hideArrows,\n  };\n});\nconst gridStyle = computed(() => {\n  const gridTemplateColumns = layout_.value\n    .split('')\n    .map(l => {\n      switch (l) {\n        case 'p':\n          return '[prev] auto';\n        case 'n':\n          return '[next] auto';\n        case 't':\n          return '[title] auto';\n        case '-':\n          return '1fr';\n        default:\n          return '';\n      }\n    })\n    .join(' ');\n  return { gridTemplateColumns };\n});\n</script>\n\n<style lang=\"css\">\n.vc-header {\n  display: grid;\n  grid-gap: 4px;\n  align-items: center;\n  height: 30px;\n  margin-top: 10px;\n  padding-left: 10px;\n  padding-right: 10px;\n\n  &.is-lg {\n    font-size: var(--vc-text-lg);\n  }\n  &.is-xl {\n    font-size: var(--vc-text-xl);\n  }\n  &.is-2xl {\n    font-size: var(--vc-text-2xl);\n  }\n\n  .vc-title-wrapper {\n    grid-row: 1;\n    grid-column: title;\n  }\n  .vc-prev {\n    grid-row: 1;\n    grid-column: prev;\n  }\n  .vc-next {\n    grid-row: 1;\n    grid-column: next;\n  }\n\n  .vc-title,\n  .vc-prev,\n  .vc-next {\n    display: flex;\n    align-items: center;\n    border: 0;\n    border-radius: var(--vc-rounded);\n    pointer-events: auto;\n    user-select: none;\n    cursor: pointer;\n  }\n\n  .vc-title {\n    color: var(--vc-header-title-color);\n    font-weight: var(--vc-font-semibold);\n    white-space: nowrap;\n    padding: 0 8px;\n    margin: 0;\n    line-height: 30px;\n    &:hover {\n      opacity: 0.75;\n    }\n  }\n\n  .vc-arrow {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    color: var(--vc-header-arrow-color);\n    width: 28px;\n    height: 30px;\n    margin: 0;\n    padding: 0;\n    &:hover {\n      background: var(--vc-header-arrow-hover-bg);\n    }\n    &:disabled {\n      opacity: 0.25;\n      pointer-events: none;\n    }\n  }\n}\n</style>\n","import { type Ref, inject, provide } from 'vue';\nimport { useCalendar } from '..';\nimport { getMonthDates } from '../utils/date/helpers';\nimport { type Page, getPageId } from '../utils/page';\n\nexport interface MonthNavItem {\n  month: number;\n  year: number;\n  id: string;\n  label: string;\n  ariaLabel: string;\n  isActive: boolean;\n  isCurrent: boolean;\n  isDisabled: boolean;\n}\n\nexport type YearNavItem = Omit<MonthNavItem, 'month'>;\n\nexport type CalendarPageContext = ReturnType<typeof createPage>;\n\nconst contextKey = Symbol('__vc_page_context__');\n\nexport function createPage(page: Ref<Page>) {\n  const { locale, getDateAddress, canMove } = useCalendar();\n\n  function getMonthItems(year: number, mask: string): MonthNavItem[] {\n    const { month: thisMonth, year: thisYear } = getDateAddress(new Date());\n    return getMonthDates().map((d, i: number) => {\n      const month = i + 1;\n      return {\n        month,\n        year,\n        id: getPageId(month, year),\n        label: locale.value.formatDate(d, mask),\n        ariaLabel: locale.value.formatDate(d, 'MMMM'),\n        isActive: month === page.value.month && year === page.value.year,\n        isCurrent: month === thisMonth && year === thisYear,\n        isDisabled: !canMove(\n          { month, year },\n          { position: page.value.position },\n        ),\n      };\n    });\n  }\n\n  function getYearItems(startYear: number, endYear: number): YearNavItem[] {\n    const { year: thisYear } = getDateAddress(new Date());\n    const { position } = page.value;\n    const items = [];\n    for (let year = startYear; year <= endYear; year += 1) {\n      const enabled = [...Array(12).keys()].some(m =>\n        canMove({ month: m + 1, year }, { position }),\n      );\n      items.push({\n        year,\n        id: year.toString(),\n        label: year.toString(),\n        ariaLabel: year.toString(),\n        isActive: year === page.value.year,\n        isCurrent: year === thisYear,\n        isDisabled: !enabled,\n      });\n    }\n    return items;\n  }\n\n  const context = { page, getMonthItems, getYearItems };\n  provide(contextKey, context);\n  return context;\n}\n\nexport function usePage(): CalendarPageContext {\n  const context = inject<CalendarPageContext>(contextKey);\n  if (context) return context;\n  throw new Error(\n    'Page context missing. Please verify this component is nested within a valid context provider.',\n  );\n}\n","<template>\n  <!--Nav panel-->\n  <div class=\"vc-nav-container\" ref=\"navContainer\">\n    <!--Nav header-->\n    <div class=\"vc-nav-header\">\n      <!--Move prev button-->\n      <button\n        type=\"button\"\n        class=\"vc-nav-arrow is-left vc-focus\"\n        :disabled=\"!prevItemsEnabled\"\n        @click=\"movePrev\"\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, movePrev)\"\n      >\n        <CalendarSlot\n          name=\"nav-prev-button\"\n          :move=\"movePrev\"\n          :disabled=\"!prevItemsEnabled\"\n        >\n          <BaseIcon name=\"ChevronLeft\" width=\"22px\" height=\"24px\" />\n        </CalendarSlot>\n      </button>\n      <!--Mode switch button-->\n      <button\n        type=\"button\"\n        class=\"vc-nav-title vc-focus\"\n        @click=\"toggleMode\"\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, toggleMode)\"\n      >\n        {{ title }}\n      </button>\n      <!--Move next button-->\n      <button\n        type=\"button\"\n        class=\"vc-nav-arrow is-right vc-focus\"\n        :disabled=\"!nextItemsEnabled\"\n        @click=\"moveNext\"\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, moveNext)\"\n      >\n        <CalendarSlot\n          name=\"nav-next-button\"\n          :move=\"moveNext\"\n          :disabled=\"!nextItemsEnabled\"\n        >\n          <BaseIcon name=\"ChevronRight\" width=\"22px\" height=\"24px\" />\n        </CalendarSlot>\n      </button>\n    </div>\n    <!--Navigation items-->\n    <div class=\"vc-nav-items\">\n      <button\n        v-for=\"item in activeItems\"\n        :key=\"item.label\"\n        type=\"button\"\n        :data-id=\"item.id\"\n        :aria-label=\"item.ariaLabel\"\n        class=\"vc-nav-item vc-focus\"\n        :class=\"[\n          item.isActive ? 'is-active' : item.isCurrent ? 'is-current' : '',\n        ]\"\n        :disabled=\"item.isDisabled\"\n        @click=\"item.click\"\n        @keydown=\"(e: KeyboardEvent) => onSpaceOrEnter(e, item.click)\"\n      >\n        {{ item.label }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch, watchEffect } from 'vue';\nimport { useCalendar } from '../../use/calendar';\nimport { usePage } from '../../use/page';\nimport { head, last, onSpaceOrEnter } from '../../utils/helpers';\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\nimport CalendarSlot from './CalendarSlot.vue';\n\nexport type IQuerySelector = Pick<HTMLElement, 'querySelector'>;\n\nconst { masks, move } = useCalendar();\nconst { page, getMonthItems, getYearItems } = usePage();\n\nconst monthMode = ref(true);\nconst yearGroupCount = 12;\n\nconst selectedYear = ref(page.value.year);\nconst selectedYearGroup = ref(getYearGroupIndex(page.value.year));\nconst navContainer = ref<IQuerySelector | null>(null);\n\nfunction focusFirstItem() {\n  // Use setTimeout instead of $nextTick so it plays nice with popperjs\n  setTimeout(() => {\n    if (navContainer.value == null) return;\n    // Set focus on the first enabled nav item\n    const focusableEl = navContainer.value.querySelector(\n      '.vc-nav-item:not(:disabled)',\n    ) as HTMLElement;\n    if (focusableEl) {\n      focusableEl.focus();\n    }\n  }, 10);\n}\n\nfunction getYearGroupIndex(year: number) {\n  return Math.floor(year / yearGroupCount);\n}\n\nfunction toggleMode() {\n  monthMode.value = !monthMode.value;\n}\n\nfunction getStartYear(groupIndex: number) {\n  return groupIndex * yearGroupCount;\n}\n\nfunction getEndYear(groupIndex: number) {\n  return yearGroupCount * (groupIndex + 1) - 1;\n}\n\n// #region Move methods\n\nfunction movePrev() {\n  if (!prevItemsEnabled.value) return;\n  if (monthMode.value) {\n    movePrevYear();\n  }\n  movePrevYearGroup();\n}\n\nfunction moveNext() {\n  if (!nextItemsEnabled.value) return;\n  if (monthMode.value) {\n    moveNextYear();\n  }\n  moveNextYearGroup();\n}\n\nfunction movePrevYear() {\n  selectedYear.value--;\n}\n\nfunction moveNextYear() {\n  selectedYear.value++;\n}\n\nfunction movePrevYearGroup() {\n  selectedYearGroup.value--;\n}\n\nfunction moveNextYearGroup() {\n  selectedYearGroup.value++;\n}\n\n// #endregion Move methods\n\nconst monthItems = computed(() =>\n  getMonthItems(selectedYear.value, masks.value.navMonths).map(item => ({\n    ...item,\n    click: () =>\n      move(\n        { month: item.month, year: item.year },\n        { position: page.value.position },\n      ),\n  })),\n);\n\nconst prevMonthItems = computed(() =>\n  getMonthItems(selectedYear.value - 1, masks.value.navMonths),\n);\n\nconst prevMonthItemsEnabled = computed(() =>\n  prevMonthItems.value.some(i => !i.isDisabled),\n);\n\nconst nextMonthItems = computed(() =>\n  getMonthItems(selectedYear.value + 1, masks.value.navMonths),\n);\n\nconst nextMonthItemsEnabled = computed(() =>\n  nextMonthItems.value.some(i => !i.isDisabled),\n);\n\nconst yearItems = computed(() =>\n  getYearItems(\n    getStartYear(selectedYearGroup.value),\n    getEndYear(selectedYearGroup.value),\n  ).map(item => {\n    return {\n      ...item,\n      click: () => {\n        selectedYear.value = item.year;\n        monthMode.value = true;\n        focusFirstItem();\n      },\n    };\n  }),\n);\n\nconst prevYearItems = computed(() =>\n  getYearItems(\n    getStartYear(selectedYearGroup.value - 1),\n    getEndYear(selectedYearGroup.value - 1),\n  ),\n);\n\nconst prevYearItemsEnabled = computed(() =>\n  prevYearItems.value.some(i => !i.isDisabled),\n);\n\nconst nextYearItems = computed(() =>\n  getYearItems(\n    getStartYear(selectedYearGroup.value + 1),\n    getEndYear(selectedYearGroup.value + 1),\n  ),\n);\n\nconst nextYearItemsEnabled = computed(() =>\n  nextYearItems.value.some(i => !i.isDisabled),\n);\n\nconst activeItems = computed(() =>\n  monthMode.value ? monthItems.value : yearItems.value,\n);\n\nconst prevItemsEnabled = computed(() =>\n  monthMode.value ? prevMonthItemsEnabled.value : prevYearItemsEnabled.value,\n);\n\nconst nextItemsEnabled = computed(() =>\n  monthMode.value ? nextMonthItemsEnabled.value : nextYearItemsEnabled.value,\n);\n\nconst firstYear = computed(() => head(yearItems.value.map(i => i.year)));\n\nconst lastYear = computed(() => last(yearItems.value.map(i => i.year)));\n\nconst title = computed(() => {\n  return monthMode.value\n    ? selectedYear.value\n    : `${firstYear.value} - ${lastYear.value}`;\n});\n\nwatchEffect(() => {\n  selectedYear.value = page.value.year;\n  focusFirstItem();\n});\n\nwatch(\n  () => selectedYear.value,\n  val => (selectedYearGroup.value = getYearGroupIndex(val)),\n);\n\nonMounted(() => focusFirstItem());\n</script>\n\n<style lang=\"css\">\n.vc-nav-header {\n  display: flex;\n  justify-content: space-between;\n}\n\n.vc-nav-title,\n.vc-nav-arrow,\n.vc-nav-item {\n  font-size: var(--vc-text-sm);\n  margin: 0;\n  cursor: pointer;\n  user-select: none;\n  border: 0;\n  border-radius: var(--vc-rounded);\n  white-space: nowrap;\n  &:hover {\n    background-color: var(--vc-nav-hover-bg);\n  }\n  &:disabled {\n    opacity: 0.25;\n    pointer-events: none;\n  }\n}\n\n.vc-nav-title {\n  color: var(--vc-nav-title-color);\n  font-weight: var(--vc-font-bold);\n  line-height: var(--vc-leading-snug);\n  height: 30px;\n  padding: 0 6px;\n}\n\n.vc-nav-arrow {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  color: var(--vc-header-arrow-color);\n  width: 26px;\n  height: 30px;\n  padding: 0;\n}\n\n.vc-nav-items {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-row-gap: 2px;\n  grid-column-gap: 5px;\n  margin-top: 2px;\n}\n\n.vc-nav-item {\n  width: 48px;\n  text-align: center;\n  font-weight: var(--vc-font-semibold);\n  line-height: var(--vc-leading-snug);\n  padding: 6px 0;\n  &.is-active {\n    color: var(--vc-nav-item-active-color);\n    background-color: var(--vc-nav-item-active-bg);\n    font-weight: var(--vc-font-bold);\n    &:not(:focus) {\n      box-shadow: var(--vc-nav-item-active-box-shadow);\n    }\n  }\n  &.is-current {\n    color: var(--vc-nav-item-current-color);\n  }\n}\n</style>\n","<template>\n  <slot />\n</template>\n\n<script setup lang=\"ts\">\nimport { toRef } from 'vue';\nimport { createPage } from '../../use/page';\nimport type { Page } from '../../utils/page';\n\nconst props = defineProps<{\n  page: Page;\n}>();\n\ncreatePage(toRef(props, 'page'));\n</script>\n","<template>\n  <Popover\n    :id=\"navPopoverId\"\n    :class=\"['vc-nav-popover-container', `vc-${color}`, `vc-${displayMode}`]\"\n  >\n    <template #default=\"{ data }\">\n      <CalendarPageProvider :page=\"data.page\">\n        <CalendarSlot name=\"nav\">\n          <CalendarNav />\n        </CalendarSlot>\n      </CalendarPageProvider>\n    </template>\n  </Popover>\n</template>\n\n<script setup lang=\"ts\">\nimport { useCalendar } from '../../use/calendar';\nimport Popover from '../Popover/Popover.vue';\nimport CalendarNav from './CalendarNav.vue';\nimport CalendarPageProvider from './CalendarPageProvider.vue';\nimport CalendarSlot from './CalendarSlot.vue';\n\nconst { navPopoverId, color, displayMode } = useCalendar();\n</script>\n","<template>\n  <div :class=\"dayClasses\">\n    <!--Highlights-->\n    <div v-if=\"hasHighlights\" class=\"vc-highlights vc-day-layer\">\n      <div\n        v-for=\"{ key, wrapperClass, class: bgClass, style } in highlights\"\n        :key=\"key\"\n        :class=\"wrapperClass\"\n      >\n        <div :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n    <!--Content-->\n    <CalendarSlot\n      name=\"day-content\"\n      :day=\"day\"\n      :attributes=\"attributes\"\n      :attribute-cells=\"attributeCells\"\n      :dayProps=\"dayContentProps\"\n      :dayEvents=\"dayContentEvents\"\n      :locale=\"locale\"\n    >\n      <div\n        v-bind=\"dayContentProps\"\n        v-on=\"dayContentEvents\"\n        v-popover=\"dayPopover\"\n      >\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\n          v-for=\"{ key, class: bgClass, style } in dots\"\n          :key=\"key\"\n          :class=\"bgClass\"\n          :style=\"style\"\n        />\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\n          v-for=\"{ key, class: bgClass, style } in bars\"\n          :key=\"key\"\n          :class=\"bgClass\"\n          :style=\"style\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { type PropType, computed, defineComponent } 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 { 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    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 day = computed(() => props.day);\n    const attributeCells = computed(() => {\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      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      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      const result = {\n        ...theme.value.prepareRender({}),\n        popovers: [],\n      };\n      attributeCells.value.forEach(cell => {\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      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      let tabindex;\n      if (day.value.isFocusable) {\n        tabindex = '0';\n      } else {\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      return {\n        click(event: MouseEvent) {\n          onDayClick(attributedDay.value, event);\n        },\n        mouseenter(event: MouseEvent) {\n          onDayMouseenter(attributedDay.value, event);\n        },\n        mouseleave(event: MouseEvent) {\n          onDayMouseleave(attributedDay.value, event);\n        },\n        focusin(event: FocusEvent) {\n          onDayFocusin(attributedDay.value, event);\n        },\n        focusout(event: FocusEvent) {\n          onDayFocusout(attributedDay.value, event);\n        },\n        keydown(event: KeyboardEvent) {\n          onDayKeydown(attributedDay.value, event);\n        },\n      };\n    });\n\n    const dayPopover = computed(() => {\n      if (!arrayHasItems(popovers.value)) return null;\n      return defaults(\n        {\n          id: dayPopoverId.value,\n          data: { day, attributes: popoverAttrs.value },\n        },\n        ...popovers.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    };\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  &:hover {\n    background-color: var(--vc-day-content-hover-bg);\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  &.vc-highlight-base-start {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-right-width: 0 !important;\n  }\n  &.vc-highlight-base-end {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-left-width: 0 !important;\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.vc-highlight-bg-light {\n  background-color: var(--vc-highlight-light-bg);\n  border-radius: var(--vc-rounded-full);\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.vc-highlight-content-light {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-light-content-color);\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  &: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.vc-bar {\n  background-color: var(--vc-bar-bg);\n}\n</style>\n","<template>\n  <div :class=\"dayClasses\">\n    <!--Highlights-->\n    <div v-if=\"hasHighlights\" class=\"vc-highlights vc-day-layer\">\n      <div\n        v-for=\"{ key, wrapperClass, class: bgClass, style } in highlights\"\n        :key=\"key\"\n        :class=\"wrapperClass\"\n      >\n        <div :class=\"bgClass\" :style=\"style\" />\n      </div>\n    </div>\n    <!--Content-->\n    <CalendarSlot\n      name=\"day-content\"\n      :day=\"day\"\n      :attributes=\"attributes\"\n      :attribute-cells=\"attributeCells\"\n      :dayProps=\"dayContentProps\"\n      :dayEvents=\"dayContentEvents\"\n      :locale=\"locale\"\n    >\n      <div\n        v-bind=\"dayContentProps\"\n        v-on=\"dayContentEvents\"\n        v-popover=\"dayPopover\"\n      >\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\n          v-for=\"{ key, class: bgClass, style } in dots\"\n          :key=\"key\"\n          :class=\"bgClass\"\n          :style=\"style\"\n        />\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\n          v-for=\"{ key, class: bgClass, style } in bars\"\n          :key=\"key\"\n          :class=\"bgClass\"\n          :style=\"style\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { type PropType, computed, defineComponent } 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 { 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    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 day = computed(() => props.day);\n    const attributeCells = computed(() => {\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      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      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      const result = {\n        ...theme.value.prepareRender({}),\n        popovers: [],\n      };\n      attributeCells.value.forEach(cell => {\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      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      let tabindex;\n      if (day.value.isFocusable) {\n        tabindex = '0';\n      } else {\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      return {\n        click(event: MouseEvent) {\n          onDayClick(attributedDay.value, event);\n        },\n        mouseenter(event: MouseEvent) {\n          onDayMouseenter(attributedDay.value, event);\n        },\n        mouseleave(event: MouseEvent) {\n          onDayMouseleave(attributedDay.value, event);\n        },\n        focusin(event: FocusEvent) {\n          onDayFocusin(attributedDay.value, event);\n        },\n        focusout(event: FocusEvent) {\n          onDayFocusout(attributedDay.value, event);\n        },\n        keydown(event: KeyboardEvent) {\n          onDayKeydown(attributedDay.value, event);\n        },\n      };\n    });\n\n    const dayPopover = computed(() => {\n      if (!arrayHasItems(popovers.value)) return null;\n      return defaults(\n        {\n          id: dayPopoverId.value,\n          data: { day, attributes: popoverAttrs.value },\n        },\n        ...popovers.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    };\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  &:hover {\n    background-color: var(--vc-day-content-hover-bg);\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  &.vc-highlight-base-start {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-right-width: 0 !important;\n  }\n  &.vc-highlight-base-end {\n    width: 50% !important;\n    border-radius: 0 !important;\n    border-left-width: 0 !important;\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.vc-highlight-bg-light {\n  background-color: var(--vc-highlight-light-bg);\n  border-radius: var(--vc-rounded-full);\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.vc-highlight-content-light {\n  font-weight: var(--vc-font-bold);\n  color: var(--vc-highlight-light-content-color);\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  &: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.vc-bar {\n  background-color: var(--vc-bar-bg);\n}\n</style>\n","<template>\n  <div\n    :class=\"[\n      'vc-pane',\n      `row-${page.row}`,\n      `row-from-end-${page.rowFromEnd}`,\n      `column-${page.column}`,\n      `column-from-end-${page.columnFromEnd}`,\n    ]\"\n    ref=\"pane\"\n  >\n    <CalendarHeader :page=\"page\" is-lg hide-arrows />\n    <div\n      class=\"vc-weeks\"\n      :class=\"{\n        [`vc-show-weeknumbers-${page.weeknumberPosition}`]:\n          page.weeknumberPosition,\n      }\"\n    >\n      <div class=\"vc-weekdays\">\n        <!--Weekday labels-->\n        <div\n          v-for=\"({ weekday, label }, i) in page.weekdays\"\n          :key=\"i\"\n          :class=\"`vc-weekday vc-weekday-${weekday}`\"\n        >\n          {{ label }}\n        </div>\n      </div>\n      <!--Weeks-->\n      <div\n        v-for=\"week in page.viewWeeks\"\n        :key=\"`weeknumber-${week.weeknumber}`\"\n        class=\"vc-week\"\n      >\n        <!--Weeknumber-->\n        <div\n          v-if=\"page.weeknumberPosition\"\n          :class=\"['vc-weeknumber', `is-${page.weeknumberPosition}`]\"\n        >\n          <span\n            :class=\"['vc-weeknumber-content']\"\n            @click=\"onWeeknumberClick(week, $event)\"\n            >{{ week.weeknumberDisplay }}</span\n          >\n        </div>\n        <!--Week days-->\n        <CalendarDay v-for=\"day in week.days\" :key=\"day.id\" :day=\"day\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nexport default {\n  inheritAttrs: false,\n};\n</script>\n\n<script setup lang=\"ts\">\nimport CalendarDay from './CalendarDay.vue';\nimport CalendarHeader from './CalendarHeader.vue';\nimport { useCalendar } from '../../use/calendar';\nimport { usePage } from '../../use/page';\n\nconst { page } = usePage();\nconst { onWeeknumberClick } = useCalendar();\n</script>\n\n<style lang=\"css\">\n.vc-pane {\n  min-width: 250px;\n}\n\n.vc-weeknumber {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: absolute;\n  &.is-left {\n    left: calc(var(--vc-weeknumber-offset-inside) * -1);\n  }\n  &.is-right {\n    right: calc(var(--vc-weeknumber-offset-inside) * -1);\n  }\n  &.is-left-outside {\n    left: calc(var(--vc-weeknumber-offset-outside) * -1);\n  }\n  &.is-right-outside {\n    right: calc(var(--vc-weeknumber-offset-outside) * -1);\n  }\n}\n\n.vc-weeknumber-content {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-size: var(--vc-text-xs);\n  font-weight: var(--vc-font-medium);\n  font-style: italic;\n  width: 28px;\n  height: 28px;\n  margin-top: 2px;\n  color: var(--vc-weeknumber-color);\n  user-select: none;\n}\n\n.vc-weeks {\n  position: relative;\n  /* overflow: auto; */\n  -webkit-overflow-scrolling: touch;\n  padding: 6px;\n  min-width: 232px;\n  &.vc-show-weeknumbers-left {\n    margin-left: var(--vc-weeknumber-offset-inside);\n  }\n  &.vc-show-weeknumbers-right {\n    margin-right: var(--vc-weeknumber-offset-inside);\n  }\n}\n\n.vc-weekday {\n  text-align: center;\n  color: var(--vc-weekday-color);\n  font-size: var(--vc-text-sm);\n  font-weight: var(--vc-font-bold);\n  line-height: 14px;\n  padding-top: 4px;\n  padding-bottom: 8px;\n  cursor: default;\n  user-select: none;\n}\n\n.vc-week,\n.vc-weekdays {\n  display: grid;\n  grid-template-columns: repeat(7, 1fr);\n  position: relative;\n}\n</style>\n","<template>\n  <div\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\"\n    v-bind=\"$attrs\"\n    :class=\"[\n      'vc-container',\n      `vc-${view}`,\n      `vc-${color}`,\n      `vc-${displayMode}`,\n      {\n        'vc-expanded': expanded,\n        'vc-bordered': !borderless,\n        'vc-transparent': transparent,\n      },\n    ]\"\n    @mouseup.prevent\n    ref=\"containerRef\"\n  >\n    <!--Calendar Container-->\n    <div :class=\"['vc-pane-container', { 'in-transition': inTransition }]\">\n      <div class=\"vc-pane-header-wrapper\">\n        <CalendarHeader v-if=\"firstPage\" :page=\"firstPage!\" is-lg hide-title />\n      </div>\n      <Transition\n        :name=\"`vc-${transitionName}`\"\n        @before-enter=\"onTransitionBeforeEnter\"\n        @after-enter=\"onTransitionAfterEnter\"\n      >\n        <!--Calendar Layout-->\n        <div\n          :key=\"pages[0].id\"\n          class=\"vc-pane-layout\"\n          :style=\"{\n            gridTemplateColumns: `repeat(${columns}, 1fr)`,\n          }\"\n        >\n          <!--Calendar pages-->\n          <CalendarPageProvider\n            v-for=\"page in pages\"\n            :key=\"page.id\"\n            :page=\"page\"\n          >\n            <CalendarSlot name=\"page\" :page=\"page\">\n              <CalendarPage />\n            </CalendarSlot>\n          </CalendarPageProvider>\n        </div>\n      </Transition>\n      <CalendarSlot name=\"footer\" />\n    </div>\n  </div>\n  <!--Day popover-->\n  <CalendarDayPopover />\n  <!--Nav popover-->\n  <CalendarNavPopover />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { createCalendar, emitsDef, propsDef } from '../../use/calendar';\nimport CalendarDayPopover from './CalendarDayPopover.vue';\nimport CalendarHeader from './CalendarHeader.vue';\nimport CalendarNavPopover from './CalendarNavPopover.vue';\nimport CalendarPage from './CalendarPage.vue';\nimport CalendarPageProvider from './CalendarPageProvider.vue';\nimport CalendarSlot from './CalendarSlot.vue';\n\nexport default defineComponent({\n  components: {\n    CalendarHeader,\n    CalendarPage,\n    CalendarNavPopover,\n    CalendarDayPopover,\n    CalendarPageProvider,\n    CalendarSlot,\n  },\n  props: propsDef,\n  emit: emitsDef,\n  setup(props, { emit, slots }) {\n    return createCalendar(props, { emit, slots });\n  },\n});\n</script>\n\n<style>\n.vc-pane-container {\n  width: 100%;\n  position: relative;\n  &.in-transition {\n    overflow: hidden;\n  }\n}\n\n.vc-pane-layout {\n  display: grid;\n}\n\n.vc-pane-header-wrapper {\n  position: absolute;\n  top: 0;\n  width: 100%;\n  pointer-events: none;\n}\n\n.vc-day-popover-container {\n  font-size: var(--vc-text-xs);\n  font-weight: var(--vc-font-medium);\n}\n\n.vc-day-popover-header {\n  font-size: var(--vc-text-xs);\n  color: var(--vc-day-popover-header-color);\n  font-weight: var(--vc-font-semibold);\n  text-align: center;\n}\n</style>\n","<template>\n  <div\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\"\n    v-bind=\"$attrs\"\n    :class=\"[\n      'vc-container',\n      `vc-${view}`,\n      `vc-${color}`,\n      `vc-${displayMode}`,\n      {\n        'vc-expanded': expanded,\n        'vc-bordered': !borderless,\n        'vc-transparent': transparent,\n      },\n    ]\"\n    @mouseup.prevent\n    ref=\"containerRef\"\n  >\n    <!--Calendar Container-->\n    <div :class=\"['vc-pane-container', { 'in-transition': inTransition }]\">\n      <div class=\"vc-pane-header-wrapper\">\n        <CalendarHeader v-if=\"firstPage\" :page=\"firstPage!\" is-lg hide-title />\n      </div>\n      <Transition\n        :name=\"`vc-${transitionName}`\"\n        @before-enter=\"onTransitionBeforeEnter\"\n        @after-enter=\"onTransitionAfterEnter\"\n      >\n        <!--Calendar Layout-->\n        <div\n          :key=\"pages[0].id\"\n          class=\"vc-pane-layout\"\n          :style=\"{\n            gridTemplateColumns: `repeat(${columns}, 1fr)`,\n          }\"\n        >\n          <!--Calendar pages-->\n          <CalendarPageProvider\n            v-for=\"page in pages\"\n            :key=\"page.id\"\n            :page=\"page\"\n          >\n            <CalendarSlot name=\"page\" :page=\"page\">\n              <CalendarPage />\n            </CalendarSlot>\n          </CalendarPageProvider>\n        </div>\n      </Transition>\n      <CalendarSlot name=\"footer\" />\n    </div>\n  </div>\n  <!--Day popover-->\n  <CalendarDayPopover />\n  <!--Nav popover-->\n  <CalendarNavPopover />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { createCalendar, emitsDef, propsDef } from '../../use/calendar';\nimport CalendarDayPopover from './CalendarDayPopover.vue';\nimport CalendarHeader from './CalendarHeader.vue';\nimport CalendarNavPopover from './CalendarNavPopover.vue';\nimport CalendarPage from './CalendarPage.vue';\nimport CalendarPageProvider from './CalendarPageProvider.vue';\nimport CalendarSlot from './CalendarSlot.vue';\n\nexport default defineComponent({\n  components: {\n    CalendarHeader,\n    CalendarPage,\n    CalendarNavPopover,\n    CalendarDayPopover,\n    CalendarPageProvider,\n    CalendarSlot,\n  },\n  props: propsDef,\n  emit: emitsDef,\n  setup(props, { emit, slots }) {\n    return createCalendar(props, { emit, slots });\n  },\n});\n</script>\n\n<style>\n.vc-pane-container {\n  width: 100%;\n  position: relative;\n  &.in-transition {\n    overflow: hidden;\n  }\n}\n\n.vc-pane-layout {\n  display: grid;\n}\n\n.vc-pane-header-wrapper {\n  position: absolute;\n  top: 0;\n  width: 100%;\n  pointer-events: none;\n}\n\n.vc-day-popover-container {\n  font-size: var(--vc-text-xs);\n  font-weight: var(--vc-font-medium);\n}\n\n.vc-day-popover-header {\n  font-size: var(--vc-text-xs);\n  color: var(--vc-day-popover-header-color);\n  font-weight: var(--vc-font-semibold);\n  text-align: center;\n}\n</style>\n","import {\n  type SetupContext,\n  type ExtractPropTypes,\n  type PropType,\n  ref,\n  computed,\n  watch,\n  onMounted,\n  nextTick,\n  toRef,\n  inject,\n  provide,\n} from 'vue';\nimport Calendar from '../components/Calendar/Calendar.vue';\nimport Popover from '../components/Popover/Popover.vue';\nimport { getDefault } from '../utils/defaults';\nimport type { AttributeConfig } from '../utils/attribute';\nimport { type CalendarDay, getPageAddressForDate } from '../utils/page';\nimport {\n  defaultsDeep,\n  isArray,\n  isDate,\n  isNumber,\n  isObject,\n  isString,\n} from '../utils/helpers';\nimport {\n  type DatePatch,\n  type DateParts,\n  type DatePartsRules,\n  type DateSource,\n  type SimpleDateParts,\n  isDateParts,\n} from '../utils/date/helpers';\nimport type { SimpleDateRange } from '../utils/date/range';\nimport {\n  type PopoverOptions,\n  showPopover as sp,\n  hidePopover as hp,\n  togglePopover as tp,\n  getPopoverEventHandlers,\n} from '../utils/popovers';\nimport { propsDef as basePropsDef, createBase } from './base';\nimport type { MoveTarget, MoveOptions } from './calendar';\nimport { provideSlots } from './slots';\n\nexport type DateType = 'date' | 'string' | 'number';\n\nexport interface DateConfig {\n  type: DateType;\n  rules: DatePartsRules;\n  mask?: string;\n}\n\nconst contextKey = Symbol('__vc_date_picker_context__');\n\nexport type DateModes = 'date' | 'datetime' | 'time';\n\nexport type ValueTarget = 'start' | 'end';\n\nexport interface UpdateOptions {\n  config: any;\n  patch: DatePatch;\n  debounce: number;\n  clearIfEqual: boolean;\n  formatInput: boolean;\n  hidePopover: boolean;\n  dragging: boolean;\n  targetPriority: ValueTarget;\n  moveToValue: boolean;\n}\n\nexport interface ModelModifiers {\n  number?: boolean;\n  string?: boolean;\n  range?: boolean;\n}\n\nexport type DatePickerDate = DateSource | Partial<SimpleDateParts> | null;\nexport type DatePickerRangeArray = [DatePickerDate, DatePickerDate];\nexport type DatePickerRangeObject = {\n  start: Exclude<DatePickerDate, null>;\n  end: Exclude<DatePickerDate, null>;\n};\nexport type DatePickerModel = DatePickerDate | DatePickerRangeObject;\n\nexport type DatePickerContext = ReturnType<typeof createDatePicker>;\n\nexport type DatePickerProps = Readonly<ExtractPropTypes<typeof propsDef>>;\n\nexport const propsDef = {\n  ...basePropsDef,\n  mode: { type: String, default: 'date' },\n  modelValue: {\n    type: [Number, String, Date, Object] as PropType<DatePickerModel>,\n  },\n  modelModifiers: {\n    type: Object as PropType<ModelModifiers>,\n    default: () => ({}),\n  },\n  rules: [String, Object] as PropType<'auto' | DatePartsRules>,\n  is24hr: Boolean,\n  hideTimeHeader: Boolean,\n  timeAccuracy: { type: Number, default: 2 },\n  isRequired: Boolean,\n  isRange: Boolean,\n  updateOnInput: {\n    type: Boolean,\n    default: () => getDefault('datePicker.updateOnInput'),\n  },\n  inputDebounce: {\n    type: Number,\n    default: () => getDefault('datePicker.inputDebounce'),\n  },\n  popover: {\n    type: [Boolean, Object] as PropType<boolean | Partial<PopoverOptions>>,\n    default: true,\n  },\n  dragAttribute: Object as PropType<AttributeConfig>,\n  selectAttribute: Object as PropType<AttributeConfig>,\n  attributes: [Object, Array],\n};\n\nexport const emits = [\n  'update:modelValue',\n  'drag',\n  'dayclick',\n  'daykeydown',\n  'popover-will-show',\n  'popover-did-show',\n  'popover-will-hide',\n  'popover-did-hide',\n];\n\nexport function createDatePicker(\n  props: DatePickerProps,\n  { emit, slots }: SetupContext<string[]>,\n) {\n  provideSlots(slots, { footer: 'dp-footer' });\n\n  const baseCtx = createBase(props);\n  const { locale, masks, disabledAttribute } = baseCtx;\n\n  const showCalendar = ref(false);\n  const datePickerPopoverId = ref(Symbol());\n  const dateValue = ref<null | Date | SimpleDateRange>(null);\n  const dragValue = ref<null | SimpleDateRange>(null);\n  const inputValues = ref<string[]>(['', '']);\n  const popoverRef = ref<InstanceType<typeof Popover> | null>(null);\n  const calendarRef = ref<InstanceType<typeof Calendar> | null>(null);\n\n  let updateTimeout: undefined | number = undefined;\n  let dragTrackingValue: null | SimpleDateRange;\n  let watchValue = true;\n\n  // #region Computed\n\n  const isRange = computed(() => {\n    return props.isRange || props.modelModifiers.range === true;\n  });\n\n  const valueStart = computed(() =>\n    isRange.value && dateValue.value != null\n      ? (dateValue.value as SimpleDateRange).start\n      : null,\n  );\n\n  const valueEnd = computed(() =>\n    isRange.value && dateValue.value != null\n      ? (dateValue.value as SimpleDateRange).end\n      : null,\n  );\n\n  const isDateMode = computed(() => props.mode.toLowerCase() === 'date');\n  const isDateTimeMode = computed(\n    () => props.mode.toLowerCase() === 'datetime',\n  );\n  const isTimeMode = computed(() => props.mode.toLowerCase() === 'time');\n\n  const isDragging = computed(() => !!dragValue.value);\n\n  const modelConfig = computed(() => {\n    let type: DateType = 'date';\n    if (props.modelModifiers.number) type = 'number';\n    if (props.modelModifiers.string) type = 'string';\n    const mask = masks.value.modelValue || 'iso';\n    return normalizeConfig(<DateConfig>{ type, mask });\n  });\n\n  const dateParts = computed(() =>\n    getDateParts(dragValue.value ?? dateValue.value),\n  );\n\n  const inputMask = computed(() => {\n    if (isTimeMode.value) {\n      return props.is24hr ? masks.value.inputTime24hr : masks.value.inputTime;\n    }\n    if (isDateTimeMode.value) {\n      return props.is24hr\n        ? masks.value.inputDateTime24hr\n        : masks.value.inputDateTime;\n    }\n    return masks.value.input;\n  });\n\n  const inputMaskHasTime = computed(() => /[Hh]/g.test(inputMask.value));\n\n  const inputMaskHasDate = computed(() =>\n    /[dD]{1,2}|Do|W{1,4}|M{1,4}|YY(?:YY)?/g.test(inputMask.value),\n  );\n\n  const inputMaskPatch = computed(() => {\n    if (inputMaskHasTime.value && inputMaskHasDate.value) {\n      return 'dateTime';\n    }\n    if (inputMaskHasDate.value) return 'date';\n    if (inputMaskHasTime.value) return 'time';\n    return undefined;\n  });\n\n  const popover = computed(() => {\n    const target = popoverRef.value?.$el.previousElementSibling ?? undefined;\n    return defaultsDeep({}, props.popover, getDefault('datePicker.popover'), {\n      target,\n    }) as Partial<PopoverOptions>;\n  });\n\n  const popoverEvents = computed(() =>\n    getPopoverEventHandlers({\n      ...popover.value,\n      id: datePickerPopoverId.value,\n    }),\n  );\n\n  const inputValue = computed(() => {\n    return isRange.value\n      ? {\n          start: inputValues.value[0],\n          end: inputValues.value[1],\n        }\n      : inputValues.value[0];\n  });\n\n  const inputEvents = computed(() => {\n    const events = (['start', 'end'] as const).map(target => ({\n      input: onInputInput(target),\n      change: onInputChange(target),\n      keyup: onInputKeyup,\n      ...(props.popover && popoverEvents.value),\n    }));\n    return isRange.value\n      ? {\n          start: events[0],\n          end: events[1],\n        }\n      : events[0];\n  });\n\n  const selectAttribute = computed(() => {\n    if (!hasValue(dateValue.value)) return null;\n    const attribute = {\n      key: 'select-drag',\n      ...props.selectAttribute,\n      dates: dateValue.value,\n      pinPage: true,\n    };\n    const { dot, bar, highlight, content } = attribute;\n    if (!dot && !bar && !highlight && !content) {\n      attribute.highlight = true;\n    }\n    return attribute;\n  });\n\n  const dragAttribute = computed(() => {\n    if (!isRange.value || !hasValue(dragValue.value)) {\n      return null;\n    }\n    const attribute = {\n      key: 'select-drag',\n      ...props.dragAttribute,\n      dates: dragValue.value,\n    };\n    const { dot, bar, highlight, content } = attribute;\n    if (!dot && !bar && !highlight && !content) {\n      attribute.highlight = {\n        startEnd: {\n          fillMode: 'outline',\n        },\n      };\n    }\n    return attribute;\n  });\n\n  const attributes = computed(() => {\n    const attrs = isArray(props.attributes) ? [...props.attributes] : [];\n    if (dragAttribute.value) {\n      attrs.unshift(dragAttribute.value);\n    } else if (selectAttribute.value) {\n      attrs.unshift(selectAttribute.value);\n    }\n    return attrs;\n  });\n\n  const rules = computed(() => {\n    return normalizeConfig(\n      props.rules === 'auto' ? getAutoRules() : props.rules ?? {},\n    );\n  });\n\n  // #endregion Computed\n\n  function getAutoRules() {\n    const _rules = {\n      ms: [0, 999],\n      sec: [0, 59],\n      min: [0, 59],\n      hr: [0, 23],\n    };\n    const accuracy = isDateMode.value ? 0 : props.timeAccuracy;\n    return [0, 1].map(i => {\n      switch (accuracy) {\n        case 0:\n          return {\n            hours: _rules.hr[i],\n            minutes: _rules.min[i],\n            seconds: _rules.sec[i],\n            milliseconds: _rules.ms[i],\n          };\n        case 1:\n          return {\n            minutes: _rules.min[i],\n            seconds: _rules.sec[i],\n            milliseconds: _rules.ms[i],\n          };\n        case 3:\n          return { milliseconds: _rules.ms[i] };\n        case 4:\n          return {};\n        default:\n          return { seconds: _rules.sec[i], milliseconds: _rules.ms[i] };\n      }\n    });\n  }\n\n  function normalizeConfig<T>(config: T | T[]): T[] {\n    if (isArray(config)) {\n      if (config.length === 1) return [config[0], config[0]];\n      return config;\n    }\n    return [config, config];\n  }\n\n  function normalizeDateConfig(\n    config: Partial<DateConfig> | Partial<DateConfig>[],\n  ): DateConfig[] {\n    return normalizeConfig(config).map(\n      (c, i) =>\n        ({\n          ...c,\n          rules: rules.value[i],\n        }) as DateConfig,\n    );\n  }\n\n  function hasDateValue(\n    value: DatePickerDate,\n  ): value is Exclude<DatePickerDate, null> {\n    if (value == null) return false;\n    if (isNumber(value)) return !isNaN(value);\n    if (isDate(value)) return !isNaN(value.getTime());\n    if (isString(value)) return value !== '';\n    return isDateParts(value);\n  }\n\n  function hasRangeValue(value: unknown): value is DatePickerRangeObject {\n    return (\n      isObject(value) &&\n      'start' in value &&\n      'end' in value &&\n      hasDateValue(value.start ?? null) &&\n      hasDateValue(value.end ?? null)\n    );\n  }\n\n  function hasValue(\n    value: DatePickerModel,\n  ): value is Exclude<DatePickerDate, null> | DatePickerRangeObject {\n    return hasRangeValue(value) || hasDateValue(value);\n  }\n\n  function valuesAreEqual(\n    a: null | Date | SimpleDateRange,\n    b: null | Date | SimpleDateRange,\n  ): boolean {\n    if (a == null && b == null) return true;\n    if (a == null || b == null) return false;\n    const aIsDate = isDate(a);\n    const bIsDate = isDate(b);\n    if (aIsDate && bIsDate) return a.getTime() === b.getTime();\n    if (aIsDate || bIsDate) return false;\n    return valuesAreEqual(a.start, b.start) && valuesAreEqual(a.end, b.end);\n  }\n\n  function valueIsDisabled(value: Date | SimpleDateRange | null) {\n    if (!hasValue(value) || !disabledAttribute.value) return false;\n    return disabledAttribute.value.intersectsRange(locale.value.range(value));\n  }\n\n  function normalizeValue(\n    value: DatePickerModel,\n    config: DateConfig[],\n    patch: DatePatch,\n    targetPriority?: ValueTarget,\n  ): Date | SimpleDateRange | null {\n    if (!hasValue(value)) return null;\n    if (hasRangeValue(value)) {\n      const start = locale.value.toDate(value.start, {\n        ...config[0],\n        fillDate: valueStart.value ?? undefined,\n        patch,\n      });\n      const end = locale.value.toDate(value.end, {\n        ...config[1],\n        fillDate: valueEnd.value ?? undefined,\n        patch,\n      });\n      return sortRange({ start, end }, targetPriority);\n    }\n    return locale.value.toDateOrNull(value, {\n      ...config[0],\n      fillDate: dateValue.value as Date,\n      patch,\n    });\n  }\n\n  function denormalizeValue(\n    value: null | Date | SimpleDateRange,\n    config: DateConfig[],\n  ) {\n    if (hasRangeValue(value)) {\n      return {\n        start: locale.value.fromDate(value.start, config[0]),\n        end: locale.value.fromDate(value.end, config[1]),\n      };\n    }\n    if (isRange.value) {\n      return null;\n    }\n    return locale.value.fromDate(value, config[0]);\n  }\n\n  function updateValue(\n    value: any,\n    opts: Partial<UpdateOptions> = {},\n  ): Promise<ReturnType<typeof forceUpdateValue>> {\n    clearTimeout(updateTimeout);\n    return new Promise(resolve => {\n      const { debounce = 0, ...args } = opts;\n      if (debounce > 0) {\n        updateTimeout = window.setTimeout(() => {\n          resolve(forceUpdateValue(value, args));\n        }, debounce);\n      } else {\n        resolve(forceUpdateValue(value, args));\n      }\n    });\n  }\n\n  function forceUpdateValue(\n    value: any,\n    {\n      config = modelConfig.value,\n      patch = 'dateTime',\n      clearIfEqual = false,\n      formatInput: fInput = true,\n      hidePopover: hPopover = false,\n      dragging = isDragging.value,\n      targetPriority,\n      moveToValue: mValue = false,\n    }: Partial<UpdateOptions> = {},\n  ) {\n    // 1. Normalization\n    const normalizedConfig = normalizeDateConfig(config);\n    let normalizedValue = normalizeValue(\n      value,\n      normalizedConfig,\n      patch,\n      targetPriority,\n    );\n\n    // 2a. Validation against disabled dates\n    const isDisabled = valueIsDisabled(normalizedValue);\n    if (isDisabled) {\n      if (dragging) return null;\n      normalizedValue = dateValue.value;\n      // Don't allow hiding popover\n      hPopover = false;\n      // 2b. Validation against is-required or clearIfEqual\n    } else if (normalizedValue == null && props.isRequired) {\n      // Reset to previous value if it was cleared but is required\n      normalizedValue = dateValue.value;\n      // 2c. Validation against clearIfEqual\n    } else if (\n      // Clear value if same value was passed\n      normalizedValue != null &&\n      valuesAreEqual(dateValue.value, normalizedValue) &&\n      clearIfEqual\n    ) {\n      normalizedValue = null;\n    }\n\n    // 3. Assignment\n    const valueRef = dragging ? dragValue : dateValue;\n    const notify = !valuesAreEqual(valueRef.value, normalizedValue);\n    valueRef.value = normalizedValue;\n    // Clear drag value if needed\n    if (!dragging) dragValue.value = null;\n    // Denormalize value using the model config\n    const denormalizedValue = denormalizeValue(\n      normalizedValue,\n      modelConfig.value,\n    );\n\n    // 4. Notification\n    if (notify) {\n      watchValue = false;\n      emit(dragging ? 'drag' : 'update:modelValue', denormalizedValue);\n      nextTick(() => (watchValue = true));\n    }\n\n    // 5. Hide popover if needed\n    if (hPopover && !dragging) hidePopover();\n\n    // 6. Format inputs if needed\n    if (fInput) formatInput();\n\n    // 7. Move to range target if needed\n    if (mValue) {\n      nextTick(() => moveToValue(targetPriority ?? 'start'));\n    }\n\n    return denormalizedValue;\n  }\n\n  function formatInput() {\n    nextTick(() => {\n      const config = normalizeDateConfig({\n        type: 'string',\n        mask: inputMask.value,\n      });\n      const value = denormalizeValue(\n        dragValue.value ?? dateValue.value,\n        config,\n      );\n      if (isRange.value) {\n        // @ts-ignore\n        inputValues.value = [value && value.start, value && value.end];\n      } else {\n        inputValues.value = [value as string, ''];\n      }\n    });\n  }\n\n  function onInputUpdate(\n    inputValue: string,\n    target: ValueTarget,\n    opts: Partial<UpdateOptions>,\n  ) {\n    inputValues.value.splice(target === 'start' ? 0 : 1, 1, inputValue);\n    const value = isRange.value\n      ? {\n          start: inputValues.value[0],\n          end: inputValues.value[1] || inputValues.value[0],\n        }\n      : inputValue;\n    const config = {\n      type: 'string',\n      mask: inputMask.value,\n    };\n    updateValue(value, {\n      ...opts,\n      config,\n      patch: inputMaskPatch.value,\n      targetPriority: target,\n      moveToValue: true,\n    });\n  }\n\n  function onInputInput(target: ValueTarget) {\n    return (e: InputEvent) => {\n      if (!props.updateOnInput) return;\n      onInputUpdate((<HTMLInputElement>e.currentTarget).value, target, {\n        formatInput: false,\n        hidePopover: false,\n        debounce: props.inputDebounce,\n      });\n    };\n  }\n\n  function onInputChange(target: ValueTarget) {\n    return (e: InputEvent) => {\n      onInputUpdate((<HTMLInputElement>e.currentTarget).value, target, {\n        formatInput: true,\n        hidePopover: false,\n      });\n    };\n  }\n\n  function onInputKeyup(e: KeyboardEvent) {\n    // Escape key only\n    if (e.key !== 'Escape') return;\n    updateValue(dateValue.value, {\n      formatInput: true,\n      hidePopover: true,\n    });\n  }\n\n  function getDateParts(value: any): (DateParts | null)[] {\n    if (isRange.value) {\n      return [\n        value && value.start ? locale.value.getDateParts(value.start) : null,\n        value && value.end ? locale.value.getDateParts(value.end) : null,\n      ];\n    }\n    return [value ? locale.value.getDateParts(value) : null];\n  }\n\n  function cancelDrag() {\n    dragValue.value = null;\n    formatInput();\n  }\n\n  function onPopoverBeforeShow(el: HTMLElement) {\n    emit('popover-will-show', el);\n  }\n\n  function onPopoverAfterShow(el: HTMLElement) {\n    emit('popover-did-show', el);\n  }\n\n  function onPopoverBeforeHide(el: HTMLElement) {\n    cancelDrag();\n    emit('popover-will-hide', el);\n  }\n\n  function onPopoverAfterHide(el: HTMLElement) {\n    emit('popover-did-hide', el);\n  }\n\n  function handleDayClick(day: CalendarDay) {\n    const opts: Partial<UpdateOptions> = {\n      patch: 'date',\n      formatInput: true,\n      hidePopover: true,\n    };\n    if (isRange.value) {\n      const dragging = !isDragging.value;\n      if (dragging) {\n        dragTrackingValue = { start: day.startDate, end: day.endDate };\n      } else if (dragTrackingValue != null) {\n        dragTrackingValue.end = day.date;\n      }\n      updateValue(dragTrackingValue, {\n        ...opts,\n        dragging,\n      });\n    } else {\n      updateValue(day.date, {\n        ...opts,\n        clearIfEqual: !props.isRequired,\n      });\n    }\n  }\n\n  function onDayClick(day: CalendarDay, event: MouseEvent) {\n    handleDayClick(day);\n    // Re-emit event\n    emit('dayclick', day, event);\n  }\n\n  function onDayKeydown(day: CalendarDay, event: KeyboardEvent) {\n    switch (event.key) {\n      case ' ':\n      case 'Enter': {\n        handleDayClick(day);\n        event.preventDefault();\n        break;\n      }\n      case 'Escape': {\n        hidePopover();\n      }\n    }\n    // Re-emit event\n    emit('daykeydown', day, event);\n  }\n\n  function onDayMouseEnter(day: CalendarDay, event: MouseEvent) {\n    if (!isDragging.value || dragTrackingValue == null) return;\n    dragTrackingValue.end = day.date;\n    updateValue(sortRange(dragTrackingValue), {\n      patch: 'date',\n      formatInput: true,\n    });\n  }\n\n  function showPopover(opts: Partial<PopoverOptions> = {}) {\n    sp({\n      ...popover.value,\n      ...opts,\n      isInteractive: true,\n      id: datePickerPopoverId.value,\n    });\n  }\n\n  function hidePopover(opts: Partial<PopoverOptions> = {}) {\n    hp({\n      hideDelay: 10,\n      force: true,\n      ...popover.value,\n      ...opts,\n      id: datePickerPopoverId.value,\n    });\n  }\n\n  function togglePopover(opts: Partial<PopoverOptions>) {\n    tp({\n      ...popover.value,\n      ...opts,\n      isInteractive: true,\n      id: datePickerPopoverId.value,\n    });\n  }\n\n  function sortRange(range: SimpleDateRange, priority?: ValueTarget) {\n    const { start, end } = range;\n    if (start > end) {\n      switch (priority) {\n        case 'start':\n          return { start, end: start };\n        case 'end':\n          return { start: end, end };\n        default:\n          return { start: end, end: start };\n      }\n    }\n    return { start, end };\n  }\n\n  async function move(target: MoveTarget, opts: Partial<MoveOptions> = {}) {\n    if (calendarRef.value == null) return false;\n    return calendarRef.value.move(target, opts);\n  }\n\n  async function moveBy(pages: number, opts: Partial<MoveOptions> = {}) {\n    if (calendarRef.value == null) return false;\n    return calendarRef.value.moveBy(pages, opts);\n  }\n\n  async function moveToValue(\n    target: ValueTarget,\n    opts: Partial<MoveOptions> = {},\n  ) {\n    const dValue = dateValue.value;\n    if (calendarRef.value == null || !hasValue(dValue)) return false;\n    const start = target !== 'end';\n    const position = start ? 1 : -1;\n    const date = hasRangeValue(dValue)\n      ? start\n        ? dValue.start\n        : dValue.end\n      : dValue;\n    const page = getPageAddressForDate(date, 'monthly', locale.value);\n    return calendarRef.value.move(page, { position, ...opts });\n  }\n\n  // #endregion Methods\n\n  // #region Watch\n\n  watch(\n    () => props.isRange,\n    val => {\n      if (val) {\n        console.warn(\n          'The `is-range` prop will be deprecated in future releases. Please use the `range` modifier.',\n        );\n      }\n    },\n    { immediate: true },\n  );\n\n  watch(\n    () => isRange.value,\n    () => {\n      forceUpdateValue(null, { formatInput: true });\n    },\n  );\n\n  watch(\n    () => inputMask.value,\n    () => formatInput(),\n  );\n\n  watch(\n    () => props.modelValue,\n    val => {\n      if (!watchValue) return;\n      forceUpdateValue(val, {\n        formatInput: true,\n        hidePopover: false,\n      });\n    },\n  );\n\n  watch(\n    () => rules.value,\n    () => {\n      if (isObject(props.rules)) {\n        forceUpdateValue(props.modelValue, {\n          formatInput: true,\n          hidePopover: false,\n        });\n      }\n    },\n  );\n\n  watch(\n    () => props.timezone,\n    () => {\n      forceUpdateValue(dateValue.value, { formatInput: true });\n    },\n  );\n\n  // #endregion Watch\n\n  // #region Lifecycle\n\n  // Set initial date value (no validation applied)\n  const config = normalizeConfig(modelConfig.value);\n  dateValue.value = normalizeValue(\n    props.modelValue ?? null,\n    config,\n    'dateTime',\n  );\n\n  onMounted(() => {\n    forceUpdateValue(props.modelValue, {\n      formatInput: true,\n      hidePopover: false,\n    });\n  });\n\n  // Created\n  // Waiting a tick allows calendar to initialize page\n  nextTick(() => (showCalendar.value = true));\n\n  // #endregion Lifecycle\n\n  const context = {\n    ...baseCtx,\n    showCalendar,\n    datePickerPopoverId,\n    popoverRef,\n    popoverEvents,\n    calendarRef,\n    isRange,\n    isTimeMode,\n    isDateTimeMode,\n    is24hr: toRef(props, 'is24hr'),\n    hideTimeHeader: toRef(props, 'hideTimeHeader'),\n    timeAccuracy: toRef(props, 'timeAccuracy'),\n    isDragging,\n    inputValue,\n    inputEvents,\n    dateParts,\n    attributes,\n    rules,\n    move,\n    moveBy,\n    moveToValue,\n    updateValue,\n    showPopover,\n    hidePopover,\n    togglePopover,\n    onDayClick,\n    onDayKeydown,\n    onDayMouseEnter,\n    onPopoverBeforeShow,\n    onPopoverAfterShow,\n    onPopoverBeforeHide,\n    onPopoverAfterHide,\n  };\n  provide(contextKey, context);\n  return context;\n}\n\nexport function useDatePicker() {\n  const context = inject<DatePickerContext>(contextKey);\n  if (context) return context;\n  throw new Error(\n    'DatePicker context missing. Please verify this component is nested within a valid context provider.',\n  );\n}\n","import { computed } from 'vue';\nimport { useDatePicker } from '../use/datePicker';\nimport {\n  type DateParts,\n  type SimpleDateParts,\n  getDatePartsOptions,\n  isDateParts,\n} from '../utils/date/helpers';\nimport { arrayHasItems } from '../utils/helpers';\n\nconst _amOptions = [\n  { value: 0, label: '12' },\n  { value: 1, label: '1' },\n  { value: 2, label: '2' },\n  { value: 3, label: '3' },\n  { value: 4, label: '4' },\n  { value: 5, label: '5' },\n  { value: 6, label: '6' },\n  { value: 7, label: '7' },\n  { value: 8, label: '8' },\n  { value: 9, label: '9' },\n  { value: 10, label: '10' },\n  { value: 11, label: '11' },\n];\nconst _pmOptions = [\n  { value: 12, label: '12' },\n  { value: 13, label: '1' },\n  { value: 14, label: '2' },\n  { value: 15, label: '3' },\n  { value: 16, label: '4' },\n  { value: 17, label: '5' },\n  { value: 18, label: '6' },\n  { value: 19, label: '7' },\n  { value: 20, label: '8' },\n  { value: 21, label: '9' },\n  { value: 22, label: '10' },\n  { value: 23, label: '11' },\n];\n\nexport interface TimePickerProps {\n  position: number;\n}\n\nexport type TimePickerContext = ReturnType<typeof createTimePicker>;\n\nexport function createTimePicker(props: TimePickerProps) {\n  const ctx = useDatePicker();\n  const {\n    locale,\n    isRange,\n    isTimeMode,\n    dateParts,\n    rules,\n    is24hr,\n    hideTimeHeader,\n    timeAccuracy,\n    updateValue: updateDpValue,\n  } = ctx;\n\n  function updateParts(newParts: Partial<DateParts>) {\n    newParts = Object.assign(parts.value, newParts);\n    let newValue = null;\n    if (isRange.value) {\n      const start = isStart.value ? newParts : dateParts.value[0];\n      const end = isStart.value ? dateParts.value[1] : newParts;\n      newValue = { start, end };\n    } else {\n      newValue = newParts;\n    }\n    updateDpValue(newValue, {\n      patch: 'time',\n      targetPriority: isStart.value ? 'start' : 'end',\n      moveToValue: true,\n    });\n  }\n\n  const isStart = computed(() => props.position === 0);\n  const parts = computed(\n    () => dateParts.value[props.position] || { isValid: false },\n  );\n  const partsValid = computed(() => isDateParts(parts.value));\n  const isValid = computed(() => !!parts.value.isValid);\n  const showHeader = computed(() => {\n    return !hideTimeHeader.value && isValid.value;\n  });\n\n  const date = computed(() => {\n    if (!partsValid.value) return null;\n    let date = locale.value.toDate(parts.value as Partial<SimpleDateParts>);\n    if ((parts.value as DateParts).hours === 24) {\n      date = new Date(date.getTime() - 1);\n    }\n    return date;\n  });\n\n  const hours = computed({\n    get() {\n      return (parts.value as DateParts).hours;\n    },\n    set(val) {\n      updateParts({ hours: val });\n    },\n  });\n\n  const minutes = computed({\n    get() {\n      return (parts.value as DateParts).minutes;\n    },\n    set(val) {\n      updateParts({ minutes: val });\n    },\n  });\n\n  const seconds = computed({\n    get() {\n      return (parts.value as DateParts).seconds;\n    },\n    set(val) {\n      updateParts({ seconds: val });\n    },\n  });\n\n  const milliseconds = computed({\n    get() {\n      return (parts.value as DateParts).milliseconds;\n    },\n    set(val) {\n      updateParts({ milliseconds: val });\n    },\n  });\n\n  const isAM = computed({\n    get() {\n      return (parts.value as DateParts).hours < 12;\n    },\n    set(value) {\n      value = String(value).toLowerCase() == 'true';\n      let hValue = hours.value;\n      if (value && hValue >= 12) {\n        hValue -= 12;\n      } else if (!value && hValue < 12) {\n        hValue += 12;\n      }\n      updateParts({ hours: hValue });\n    },\n  });\n\n  const options = computed(() =>\n    getDatePartsOptions(parts.value as DateParts, rules.value[props.position]),\n  );\n\n  const amHourOptions = computed(() => {\n    return _amOptions.filter(opt =>\n      options.value.hours.some(ho => ho.value === opt.value),\n    );\n  });\n\n  const pmHourOptions = computed(() => {\n    return _pmOptions.filter(opt =>\n      options.value.hours.some(ho => ho.value === opt.value),\n    );\n  });\n\n  const hourOptions = computed(() => {\n    if (is24hr.value) return options.value.hours;\n    if (isAM.value) return amHourOptions.value;\n    return pmHourOptions.value;\n  });\n\n  const isAMOptions = computed(() => {\n    const result = [];\n    if (arrayHasItems(amHourOptions.value))\n      result.push({ value: true, label: 'AM' });\n    if (arrayHasItems(pmHourOptions.value))\n      result.push({ value: false, label: 'PM' });\n    return result;\n  });\n\n  return {\n    ...ctx,\n    showHeader,\n    timeAccuracy,\n    parts,\n    isValid,\n    date,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    options,\n    hourOptions,\n    isAM,\n    isAMOptions,\n    is24hr,\n  };\n}\n","<template>\n  <div\n    class=\"vc-base-select\"\n    :class=\"{\n      'vc-fit-content': fitContent,\n      'vc-has-icon': showIcon,\n    }\"\n  >\n    <select\n      v-bind=\"$attrs\"\n      :value=\"modelValue\"\n      class=\"vc-focus\"\n      :class=\"{\n        'vc-align-right': alignRight,\n        'vc-align-left': alignLeft,\n      }\"\n      @change=\"\n        $emit('update:modelValue', ($event.target as HTMLSelectElement).value)\n      \"\n    >\n      <option\n        v-for=\"option in options\"\n        :key=\"option.value\"\n        :value=\"option.value\"\n        :disabled=\"option.disabled\"\n      >\n        {{ option.label }}\n      </option>\n    </select>\n    <BaseIcon v-if=\"showIcon\" name=\"ChevronDown\" size=\"18\" />\n    <div v-if=\"fitContent\" class=\"vc-base-sizer\" aria-hidden=\"true\">\n      {{ selectedLabel }}\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\ninterface BaseOption {\n  value: any;\n  label: string;\n  disabled?: boolean;\n}\n\nexport default {\n  inheritAttrs: false,\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\n\nconst props = defineProps<{\n  options: BaseOption[];\n  modelValue: any;\n  alignRight?: boolean;\n  alignLeft?: boolean;\n  showIcon?: boolean;\n  fitContent?: boolean;\n}>();\ndefineEmits(['update:modelValue']);\n\nconst selectedLabel = computed(() => {\n  const option = props.options.find(opt => opt.value === props.modelValue);\n  return option?.label;\n});\n</script>\n\n<style lang=\"css\">\n.vc-base-select {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  height: 30px;\n  font-size: var(--vc-text-base);\n  font-weight: var(--vc-font-medium);\n  &.vc-has-icon {\n    & select {\n      padding: 0 27px 0 9px;\n    }\n    & .vc-base-sizer {\n      padding: 0 28px 0 10px;\n    }\n  }\n  &.vc-fit-content {\n    & select {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n    }\n  }\n  & .vc-base-icon {\n    position: absolute;\n    top: 6px;\n    right: 4px;\n    opacity: 0.6;\n    pointer-events: none;\n  }\n  & .vc-base-sizer {\n    font-size: var(--vc-text-base);\n    font-weight: var(--vc-font-medium);\n    color: transparent;\n    padding: 0px 8px;\n    margin: 0;\n  }\n  & select {\n    display: inline-flex;\n    justify-content: center;\n    color: var(--vc-select-color);\n    display: block;\n    appearance: none;\n    background-color: var(--vc-select-bg);\n    border-radius: var(--vc-rounded);\n    height: 30px;\n    width: max-content;\n    padding: 0px 7px;\n    margin: 0;\n    line-height: var(--leading-none);\n    text-indent: 0px;\n    background-image: none;\n    cursor: pointer;\n    text-align: center;\n    &:hover {\n      background-color: var(--vc-select-hover-bg);\n    }\n    &.vc-align-left {\n      text-align: left;\n    }\n    &.vc-align-right {\n      text-align: right;\n    }\n  }\n}\n</style>\n","<template>\n  <div\n    class=\"vc-time-picker\"\n    :class=\"[{ 'vc-invalid': !isValid, 'vc-attached': !isTimeMode }]\"\n  >\n    <CalendarSlot name=\"time-header\">\n      <div v-if=\"showHeader && date\" class=\"vc-time-header\">\n        <span class=\"vc-time-weekday\">\n          {{ locale.formatDate(date, 'WWW') }}\n        </span>\n        <span class=\"vc-time-month\">\n          {{ locale.formatDate(date, 'MMM') }}\n        </span>\n        <span class=\"vc-time-day\">\n          {{ locale.formatDate(date, 'D') }}\n        </span>\n        <span class=\"vc-time-year\">\n          {{ locale.formatDate(date, 'YYYY') }}\n        </span>\n      </div>\n    </CalendarSlot>\n    <div class=\"vc-time-select-group\">\n      <BaseIcon name=\"Clock\" size=\"17\" />\n      <BaseSelect\n        v-model.number=\"hours\"\n        :options=\"hourOptions\"\n        class=\"vc-time-select-hours\"\n        align-right\n      />\n      <template v-if=\"timeAccuracy > 1\">\n        <span class=\"vc-time-colon\">:</span>\n        <BaseSelect\n          v-model.number=\"minutes\"\n          :options=\"options.minutes\"\n          class=\"vc-time-select-minutes\"\n          :align-left=\"timeAccuracy === 2\"\n        />\n      </template>\n      <template v-if=\"timeAccuracy > 2\">\n        <span class=\"vc-time-colon\">:</span>\n        <BaseSelect\n          v-model.number=\"seconds\"\n          :options=\"options.seconds\"\n          class=\"vc-time-select-seconds\"\n          :align-left=\"timeAccuracy === 3\"\n        />\n      </template>\n      <template v-if=\"timeAccuracy > 3\">\n        <span class=\"vc-time-decimal\">.</span>\n        <BaseSelect\n          v-model.number=\"milliseconds\"\n          :options=\"options.milliseconds\"\n          class=\"vc-time-select-milliseconds\"\n          align-left\n        />\n      </template>\n      <BaseSelect v-if=\"!is24hr\" v-model=\"isAM\" :options=\"isAMOptions\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { createTimePicker } from '../../use/timePicker';\nimport BaseIcon from '../BaseIcon/BaseIcon.vue';\nimport BaseSelect from '../BaseSelect/BaseSelect.vue';\nimport CalendarSlot from '../Calendar/CalendarSlot.vue';\n\nconst props = defineProps<{\n  position: number;\n}>();\n\nconst timePicker = createTimePicker(props);\ndefineExpose(timePicker);\nconst {\n  locale,\n  isValid,\n  date,\n  hours,\n  minutes,\n  seconds,\n  milliseconds,\n  options,\n  hourOptions,\n  isTimeMode,\n  isAM,\n  isAMOptions,\n  is24hr,\n  showHeader,\n  timeAccuracy,\n} = timePicker;\n</script>\n\n<style lang=\"css\">\n.vc-time-picker {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 8px 4px;\n  &.vc-invalid {\n    pointer-events: none;\n    opacity: 0.5;\n  }\n  &.vc-attached {\n    border-top: 1px solid var(--vc-time-picker-border);\n  }\n  > * + * {\n    margin-top: 4px;\n  }\n}\n\n.vc-time-header {\n  display: flex;\n  align-items: center;\n  font-size: var(--vc-text-sm);\n  font-weight: var(--vc-font-semibold);\n  text-transform: uppercase;\n  margin-top: -4px;\n  padding-left: 4px;\n  padding-right: 4px;\n  line-height: 21px;\n}\n\n.vc-time-select-group {\n  display: inline-flex;\n  align-items: center;\n  padding: 0 4px;\n  background: var(--vc-time-select-group-bg);\n  border-radius: var(--vc-rounded-md);\n  border: 1px solid var(--vc-time-select-group-border);\n  .vc-base-icon {\n    margin-right: 4px;\n    color: var(--vc-time-select-group-icon-color);\n  }\n  select {\n    background: transparent;\n    padding: 0px 4px;\n  }\n}\n\n.vc-time-weekday {\n  color: var(--vc-time-weekday-color);\n  letter-spacing: var(--tracking-wide);\n}\n\n.vc-time-month {\n  color: var(--vc-time-month-color);\n  margin-left: 8px;\n}\n\n.vc-time-day {\n  color: var(--vc-time-day-color);\n  margin-left: 4px;\n}\n\n.vc-time-year {\n  color: var(--vc-time-year-color);\n  margin-left: 8px;\n}\n\n.vc-time-colon {\n  margin: 0 1px 2px 2px;\n}\n\n.vc-time-decimal {\n  margin: 0 0 0 1px;\n}\n</style>\n","<template>\n  <div\n    v-if=\"isTimeMode\"\n    :class=\"`vc-container vc-bordered vc-${color} vc-${displayMode}`\"\n  >\n    <TimePicker\n      v-for=\"position in positions\"\n      :key=\"position\"\n      :position=\"position\"\n    />\n  </div>\n  <Calendar\n    v-else\n    :attributes=\"attributes\"\n    ref=\"calendarRef\"\n    @dayclick=\"onDayClick\"\n    @daymouseenter=\"onDayMouseEnter\"\n    @daykeydown=\"onDayKeydown\"\n  >\n    <template #footer>\n      <template v-if=\"isDateTimeMode\">\n        <TimePicker\n          v-for=\"position in positions\"\n          :key=\"position\"\n          :position=\"position\"\n        />\n      </template>\n      <CalendarSlot name=\"dp-footer\" />\n    </template>\n  </Calendar>\n</template>\n\n<script setup lang=\"ts\">\nimport { useDatePicker } from '../../use/datePicker';\nimport Calendar from '../Calendar/Calendar.vue';\nimport CalendarSlot from '../Calendar/CalendarSlot.vue';\nimport TimePicker from './TimePicker.vue';\n\nconst {\n  attributes,\n  calendarRef,\n  color,\n  displayMode,\n  isDateTimeMode,\n  isTimeMode,\n  isRange,\n  onDayClick,\n  onDayMouseEnter,\n  onDayKeydown,\n} = useDatePicker();\n\nconst positions = isRange.value ? [0, 1] : [0];\n</script>\n","<template>\n  <Popover\n    :id=\"datePickerPopoverId\"\n    placement=\"bottom-start\"\n    :class=\"`vc-date-picker-content vc-${color} vc-${displayMode}`\"\n    ref=\"popoverRef\"\n    @before-show=\"onPopoverBeforeShow\"\n    @after-show=\"onPopoverAfterShow\"\n    @before-hide=\"onPopoverBeforeHide\"\n    @after-hide=\"onPopoverAfterHide\"\n  >\n    <DatePickerBase v-bind=\"$attrs\" />\n  </Popover>\n</template>\n\n<script lang=\"ts\">\nexport default {\n  inheritAttrs: false,\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useDatePicker } from '../../use/datePicker';\nimport Popover from '../Popover/Popover.vue';\nimport DatePickerBase from './DatePickerBase.vue';\n\nconst {\n  datePickerPopoverId,\n  color,\n  displayMode,\n  popoverRef,\n  onPopoverBeforeShow,\n  onPopoverAfterShow,\n  onPopoverBeforeHide,\n  onPopoverAfterHide,\n} = useDatePicker();\n</script>\n","<template>\n  <template v-if=\"$slots.default\">\n    <slot v-bind=\"slotCtx\" />\n    <DatePickerPopover v-bind=\"$attrs\" />\n  </template>\n  <DatePickerBase v-else v-bind=\"$attrs\" />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive } from 'vue';\nimport { createDatePicker, emits, propsDef } from '../../use/datePicker';\nimport { omit } from '../../utils/helpers';\nimport DatePickerBase from './DatePickerBase.vue';\nimport DatePickerPopover from './DatePickerPopover.vue';\n\nexport default defineComponent({\n  inheritAttrs: false,\n  emits,\n  props: propsDef,\n  components: { DatePickerBase, DatePickerPopover },\n  setup(props, ctx) {\n    const datePicker = createDatePicker(props, ctx);\n    const slotCtx = reactive(omit(datePicker, 'calendarRef', 'popoverRef'));\n    return { ...datePicker, slotCtx };\n  },\n});\n</script>\n","<template>\n  <template v-if=\"$slots.default\">\n    <slot v-bind=\"slotCtx\" />\n    <DatePickerPopover v-bind=\"$attrs\" />\n  </template>\n  <DatePickerBase v-else v-bind=\"$attrs\" />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive } from 'vue';\nimport { createDatePicker, emits, propsDef } from '../../use/datePicker';\nimport { omit } from '../../utils/helpers';\nimport DatePickerBase from './DatePickerBase.vue';\nimport DatePickerPopover from './DatePickerPopover.vue';\n\nexport default defineComponent({\n  inheritAttrs: false,\n  emits,\n  props: propsDef,\n  components: { DatePickerBase, DatePickerPopover },\n  setup(props, ctx) {\n    const datePicker = createDatePicker(props, ctx);\n    const slotCtx = reactive(omit(datePicker, 'calendarRef', 'popoverRef'));\n    return { ...datePicker, slotCtx };\n  },\n});\n</script>\n","import type { App } from 'vue';\nimport * as components from './components/index';\nimport './styles/index.css';\nimport { setVueInstance } from './utils/config/index';\nimport { type Defaults, setupDefaults } from './utils/defaults';\n\nconst install = (app: App, defaults: Defaults = {}) => {\n  setVueInstance(app);\n  app.use(setupDefaults, defaults);\n  const prefix = app.config.globalProperties.$VCalendar.componentPrefix;\n  for (const componentKey in components) {\n    const component = (components as any)[componentKey];\n    app.component(`${prefix}${componentKey}`, component);\n  }\n};\n\nexport default { install };\nexport * from './components';\nexport { setupDefaults as setupCalendar } from './utils/defaults';\nexport { popoverDirective } from './utils/popovers';\n\nexport { createCalendar, useCalendar } from './use/calendar';\nexport { createDatePicker, useDatePicker } from './use/datePicker';\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]}