import { createVNode, defineComponent, computed, unref, mergeProps, ref, Fragment, toRef, watch, watchEffect, shallowRef, provide, useAttrs, getCurrentScope, onScopeDispose, inject, getCurrentInstance, onMounted, nextTick, createTextVNode, useSSRContext } from 'vue'; import { ssrRenderComponent } from 'vue/server-renderer'; import { bE as D, bF as Y, bG as W, bH as MS, bI as Q, bJ as M, bK as FORMAT_DEFAULT, ba as Icon, av as dayjs, a as useConfigStore, C as useConfigInject, bv as useCompactItemContext, D as genComponentStyleHook, bk as useLocaleReceiver, bL as locale$1$1, E as omit, aC as CloseCircleFilled, F as classNames, Z as merge, a6 as genCompactItemStyle, bq as useState$1, a1 as Button, V as functionType, W as stringType, X as booleanType, K as objectType, aA as someType, G as arrayType, N as resetComponent, O as textEllipsis, bM as warningOnce, Q as KeyCode, ac as cloneElement, bN as noteOnce } from './server.mjs'; import _extends from '@babel/runtime/helpers/esm/extends'; import moment from 'moment-jalaali'; import jalaliday from 'dayjalali'; import _objectSpread$3 from '@babel/runtime/helpers/esm/objectSpread2'; import { T as Tag } from './index-BLBX3jXD.mjs'; import { r as roundedArrow, T as Trigger, h as isVisible } from './index-Dxyzjwb5.mjs'; import { w as wrapperRaf } from './raf-ruCY1ktO.mjs'; import { u as useMergedState } from './useMergedState-BZEfJ8Fl.mjs'; import { i as initMoveMotion, u as useMemo } from './move-BSi4LOZX.mjs'; import { s as shallowequal } from './shallowequal-DbdDzF9p.mjs'; import { u as useInjectFormItemContext, F as FormItemInputContext } from './FormItemContext-CDDW52IT.mjs'; import { a as getStatusClassNames, g as getMergedStatus } from './statusUtils-C3ZNzkeD.mjs'; import { TinyColor } from '@ctrl/tinycolor'; import { i as initInputToken, g as genBasicInputStyle, c as genActiveStyle, e as genHoverStyle } from './index-C1mihc8c.mjs'; import { i as initSlideMotion, a as slideUpOut, s as slideDownOut, c as slideUpIn, b as slideDownIn } from './slide-Bfj4jnqX.mjs'; var hookCallback; function hooks() { return hookCallback.apply(null, arguments); } // This is done to register the method called with moment() // without creating circular dependencies. function setHookCallback(callback) { hookCallback = callback; } function isArray(input) { return ( input instanceof Array || Object.prototype.toString.call(input) === '[object Array]' ); } function isObject(input) { // IE8 will treat undefined and null as object if it wasn't for // input != null return ( input != null && Object.prototype.toString.call(input) === '[object Object]' ); } function hasOwnProp(a, b) { return Object.prototype.hasOwnProperty.call(a, b); } function isObjectEmpty(obj) { if (Object.getOwnPropertyNames) { return Object.getOwnPropertyNames(obj).length === 0; } else { var k; for (k in obj) { if (hasOwnProp(obj, k)) { return false; } } return true; } } function isUndefined(input) { return input === void 0; } function isNumber(input) { return ( typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]' ); } function isDate(input) { return ( input instanceof Date || Object.prototype.toString.call(input) === '[object Date]' ); } function map(arr, fn) { var res = [], i, arrLen = arr.length; for (i = 0; i < arrLen; ++i) { res.push(fn(arr[i], i)); } return res; } function extend(a, b) { for (var i in b) { if (hasOwnProp(b, i)) { a[i] = b[i]; } } if (hasOwnProp(b, 'toString')) { a.toString = b.toString; } if (hasOwnProp(b, 'valueOf')) { a.valueOf = b.valueOf; } return a; } function createUTC(input, format, locale, strict) { return createLocalOrUTC(input, format, locale, strict, true).utc(); } function defaultParsingFlags() { // We need to deep clone this object. return { empty: false, unusedTokens: [], unusedInput: [], overflow: -2, charsLeftOver: 0, nullInput: false, invalidEra: null, invalidMonth: null, invalidFormat: false, userInvalidated: false, iso: false, parsedDateParts: [], era: null, meridiem: null, rfc2822: false, weekdayMismatch: false, }; } function getParsingFlags(m) { if (m._pf == null) { m._pf = defaultParsingFlags(); } return m._pf; } var some; if (Array.prototype.some) { some = Array.prototype.some; } else { some = function (fun) { var t = Object(this), len = t.length >>> 0, i; for (i = 0; i < len; i++) { if (i in t && fun.call(this, t[i], i, t)) { return true; } } return false; }; } function isValid$1(m) { var flags = null, parsedParts = false, isNowValid = m._d && !isNaN(m._d.getTime()); if (isNowValid) { flags = getParsingFlags(m); parsedParts = some.call(flags.parsedDateParts, function (i) { return i != null; }); isNowValid = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || (flags.meridiem && parsedParts)); if (m._strict) { isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined; } } if (Object.isFrozen == null || !Object.isFrozen(m)) { m._isValid = isNowValid; } else { return isNowValid; } return m._isValid; } function createInvalid$1(flags) { var m = createUTC(NaN); if (flags != null) { extend(getParsingFlags(m), flags); } else { getParsingFlags(m).userInvalidated = true; } return m; } // Plugins that add properties should also add the key here (null value), // so we can properly clone ourselves. var momentProperties = (hooks.momentProperties = []), updateInProgress = false; function copyConfig(to, from) { var i, prop, val, momentPropertiesLen = momentProperties.length; if (!isUndefined(from._isAMomentObject)) { to._isAMomentObject = from._isAMomentObject; } if (!isUndefined(from._i)) { to._i = from._i; } if (!isUndefined(from._f)) { to._f = from._f; } if (!isUndefined(from._l)) { to._l = from._l; } if (!isUndefined(from._strict)) { to._strict = from._strict; } if (!isUndefined(from._tzm)) { to._tzm = from._tzm; } if (!isUndefined(from._isUTC)) { to._isUTC = from._isUTC; } if (!isUndefined(from._offset)) { to._offset = from._offset; } if (!isUndefined(from._pf)) { to._pf = getParsingFlags(from); } if (!isUndefined(from._locale)) { to._locale = from._locale; } if (momentPropertiesLen > 0) { for (i = 0; i < momentPropertiesLen; i++) { prop = momentProperties[i]; val = from[prop]; if (!isUndefined(val)) { to[prop] = val; } } } return to; } // Moment prototype object function Moment(config) { copyConfig(this, config); this._d = new Date(config._d != null ? config._d.getTime() : NaN); if (!this.isValid()) { this._d = new Date(NaN); } // Prevent infinite loop in case updateOffset creates new moment // objects. if (updateInProgress === false) { updateInProgress = true; hooks.updateOffset(this); updateInProgress = false; } } function isMoment(obj) { return ( obj instanceof Moment || (obj != null && obj._isAMomentObject != null) ); } function warn(msg) { if ( hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn ) { console.warn('Deprecation warning: ' + msg); } } function deprecate(msg, fn) { var firstTime = true; return extend(function () { if (hooks.deprecationHandler != null) { hooks.deprecationHandler(null, msg); } if (firstTime) { var args = [], arg, i, key, argLen = arguments.length; for (i = 0; i < argLen; i++) { arg = ''; if (typeof arguments[i] === 'object') { arg += '\n[' + i + '] '; for (key in arguments[0]) { if (hasOwnProp(arguments[0], key)) { arg += key + ': ' + arguments[0][key] + ', '; } } arg = arg.slice(0, -2); // Remove trailing comma and space } else { arg = arguments[i]; } args.push(arg); } warn( msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + new Error().stack ); firstTime = false; } return fn.apply(this, arguments); }, fn); } var deprecations = {}; function deprecateSimple(name, msg) { if (hooks.deprecationHandler != null) { hooks.deprecationHandler(name, msg); } if (!deprecations[name]) { warn(msg); deprecations[name] = true; } } hooks.suppressDeprecationWarnings = false; hooks.deprecationHandler = null; function isFunction(input) { return ( (typeof Function !== 'undefined' && input instanceof Function) || Object.prototype.toString.call(input) === '[object Function]' ); } function mergeConfigs(parentConfig, childConfig) { var res = extend({}, parentConfig), prop; for (prop in childConfig) { if (hasOwnProp(childConfig, prop)) { if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { res[prop] = {}; extend(res[prop], parentConfig[prop]); extend(res[prop], childConfig[prop]); } else if (childConfig[prop] != null) { res[prop] = childConfig[prop]; } else { delete res[prop]; } } } for (prop in parentConfig) { if ( hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop]) ) { // make sure changes to properties don't modify parent config res[prop] = extend({}, res[prop]); } } return res; } function Locale(config) { if (config != null) { this.set(config); } } var keys; if (Object.keys) { keys = Object.keys; } else { keys = function (obj) { var i, res = []; for (i in obj) { if (hasOwnProp(obj, i)) { res.push(i); } } return res; }; } var defaultCalendar = { sameDay: '[Today at] LT', nextDay: '[Tomorrow at] LT', nextWeek: 'dddd [at] LT', lastDay: '[Yesterday at] LT', lastWeek: '[Last] dddd [at] LT', sameElse: 'L', }; function zeroFill(number, targetLength, forceSign) { var absNumber = '' + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign = number >= 0; return ( (sign ? (forceSign ? '+' : '') : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber ); } var formattingTokens$1 = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {}; // token: 'M' // padded: ['MM', 2] // ordinal: 'Mo' // callback: function () { this.month() + 1 } function addFormatToken(token, padded, ordinal, callback) { var func = callback; if (typeof callback === 'string') { func = function () { return this[callback](); }; } if (token) { formatTokenFunctions[token] = func; } if (padded) { formatTokenFunctions[padded[0]] = function () { return zeroFill(func.apply(this, arguments), padded[1], padded[2]); }; } if (ordinal) { formatTokenFunctions[ordinal] = function () { return this.localeData().ordinal( func.apply(this, arguments), token ); }; } } function removeFormattingTokens(input) { if (input.match(/\[[\s\S]/)) { return input.replace(/^\[|\]$/g, ''); } return input.replace(/\\/g, ''); } function makeFormatFunction(format) { var array = format.match(formattingTokens$1), i, length; for (i = 0, length = array.length; i < length; i++) { if (formatTokenFunctions[array[i]]) { array[i] = formatTokenFunctions[array[i]]; } else { array[i] = removeFormattingTokens(array[i]); } } return function (mom) { var output = '', i; for (i = 0; i < length; i++) { output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; } return output; }; } // format date using native date object function formatMoment(m, format) { if (!m.isValid()) { return m.localeData().invalidDate(); } format = expandFormat(format, m.localeData()); formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); return formatFunctions[format](m); } function expandFormat(format, locale) { var i = 5; function replaceLongDateFormatTokens(input) { return locale.longDateFormat(input) || input; } localFormattingTokens.lastIndex = 0; while (i >= 0 && localFormattingTokens.test(format)) { format = format.replace( localFormattingTokens, replaceLongDateFormatTokens ); localFormattingTokens.lastIndex = 0; i -= 1; } return format; } var defaultLongDateFormat = { LTS: 'h:mm:ss A', LT: 'h:mm A', L: 'MM/DD/YYYY', LL: 'MMMM D, YYYY', LLL: 'MMMM D, YYYY h:mm A', LLLL: 'dddd, MMMM D, YYYY h:mm A', }; var defaultInvalidDate = 'Invalid date'; var defaultOrdinal = '%d', defaultDayOfMonthOrdinalParse = /\d{1,2}/; var defaultRelativeTime = { future: 'in %s', past: '%s ago', s: 'a few seconds', ss: '%d seconds', m: 'a minute', mm: '%d minutes', h: 'an hour', hh: '%d hours', d: 'a day', dd: '%d days', w: 'a week', ww: '%d weeks', M: 'a month', MM: '%d months', y: 'a year', yy: '%d years', }; var aliases = { D: 'date', dates: 'date', date: 'date', d: 'day', days: 'day', day: 'day', e: 'weekday', weekdays: 'weekday', weekday: 'weekday', E: 'isoWeekday', isoweekdays: 'isoWeekday', isoweekday: 'isoWeekday', DDD: 'dayOfYear', dayofyears: 'dayOfYear', dayofyear: 'dayOfYear', h: 'hour', hours: 'hour', hour: 'hour', ms: 'millisecond', milliseconds: 'millisecond', millisecond: 'millisecond', m: 'minute', minutes: 'minute', minute: 'minute', M: 'month', months: 'month', month: 'month', Q: 'quarter', quarters: 'quarter', quarter: 'quarter', s: 'second', seconds: 'second', second: 'second', gg: 'weekYear', weekyears: 'weekYear', weekyear: 'weekYear', GG: 'isoWeekYear', isoweekyears: 'isoWeekYear', isoweekyear: 'isoWeekYear', w: 'week', weeks: 'week', week: 'week', W: 'isoWeek', isoweeks: 'isoWeek', isoweek: 'isoWeek', y: 'year', years: 'year', year: 'year', }; function normalizeUnits(units) { return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; } function normalizeObjectUnits(inputObject) { var normalizedInput = {}, normalizedProp, prop; for (prop in inputObject) { if (hasOwnProp(inputObject, prop)) { normalizedProp = normalizeUnits(prop); if (normalizedProp) { normalizedInput[normalizedProp] = inputObject[prop]; } } } return normalizedInput; } var priorities = { date: 9, day: 11, weekday: 11, isoWeekday: 11, dayOfYear: 4, hour: 13, millisecond: 16, minute: 14, month: 8, quarter: 7, second: 15, weekYear: 1, isoWeekYear: 1, week: 5, isoWeek: 5, year: 1, }; function getPrioritizedUnits(unitsObj) { var units = [], u; for (u in unitsObj) { if (hasOwnProp(unitsObj, u)) { units.push({ unit: u, priority: priorities[u] }); } } units.sort(function (a, b) { return a.priority - b.priority; }); return units; } var match1$1 = /\d/, // 0 - 9 match2$1 = /\d\d/, // 00 - 99 match3$1 = /\d{3}/, // 000 - 999 match4$1 = /\d{4}/, // 0000 - 9999 match6 = /[+-]?\d{6}/, // -999999 - 999999 match1to2$1 = /\d\d?/, // 0 - 99 match3to4 = /\d\d\d\d?/, // 999 - 9999 match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 match1to3 = /\d{1,3}/, // 0 - 999 match1to4 = /\d{1,4}/, // 0 - 9999 match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 matchUnsigned = /\d+/, // 0 - inf matchSigned$1 = /[+-]?\d+/, // -inf - inf matchOffset$1 = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99 match1to2HasZero = /^([1-9]\d|\d)/, // 0-99 regexes; regexes = {}; function addRegexToken(token, regex, strictRegex) { regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { return isStrict && strictRegex ? strictRegex : regex; }; } function getParseRegexForToken(token, config) { if (!hasOwnProp(regexes, token)) { return new RegExp(unescapeFormat(token)); } return regexes[token](config._strict, config._locale); } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript function unescapeFormat(s) { return regexEscape( s .replace('\\', '') .replace( /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { return p1 || p2 || p3 || p4; } ) ); } function regexEscape(s) { return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } function absFloor(number) { if (number < 0) { // -0 -> 0 return Math.ceil(number) || 0; } else { return Math.floor(number); } } function toInt(argumentForCoercion) { var coercedNumber = +argumentForCoercion, value = 0; if (coercedNumber !== 0 && isFinite(coercedNumber)) { value = absFloor(coercedNumber); } return value; } var tokens = {}; function addParseToken(token, callback) { var i, func = callback, tokenLen; if (typeof token === 'string') { token = [token]; } if (isNumber(callback)) { func = function (input, array) { array[callback] = toInt(input); }; } tokenLen = token.length; for (i = 0; i < tokenLen; i++) { tokens[token[i]] = func; } } function addWeekParseToken(token, callback) { addParseToken(token, function (input, array, config, token) { config._w = config._w || {}; callback(input, config._w, config, token); }); } function addTimeToArrayFromToken(token, input, config) { if (input != null && hasOwnProp(tokens, token)) { tokens[token](input, config._a, config, token); } } function isLeapYear(year) { return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; } var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8; // FORMATTING addFormatToken('Y', 0, 0, function () { var y = this.year(); return y <= 9999 ? zeroFill(y, 4) : '+' + y; }); addFormatToken(0, ['YY', 2], 0, function () { return this.year() % 100; }); addFormatToken(0, ['YYYY', 4], 0, 'year'); addFormatToken(0, ['YYYYY', 5], 0, 'year'); addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // PARSING addRegexToken('Y', matchSigned$1); addRegexToken('YY', match1to2$1, match2$1); addRegexToken('YYYY', match1to4, match4$1); addRegexToken('YYYYY', match1to6, match6); addRegexToken('YYYYYY', match1to6, match6); addParseToken(['YYYYY', 'YYYYYY'], YEAR); addParseToken('YYYY', function (input, array) { array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); }); addParseToken('YY', function (input, array) { array[YEAR] = hooks.parseTwoDigitYear(input); }); addParseToken('Y', function (input, array) { array[YEAR] = parseInt(input, 10); }); // HELPERS function daysInYear(year) { return isLeapYear(year) ? 366 : 365; } // HOOKS hooks.parseTwoDigitYear = function (input) { return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); }; // MOMENTS var getSetYear = makeGetSet('FullYear', true); function getIsLeapYear() { return isLeapYear(this.year()); } function makeGetSet(unit, keepTime) { return function (value) { if (value != null) { set(this, unit, value); hooks.updateOffset(this, keepTime); return this; } else { return get$1(this, unit); } }; } function get$1(mom, unit) { if (!mom.isValid()) { return NaN; } var d = mom._d, isUTC = mom._isUTC; switch (unit) { case 'Milliseconds': return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds(); case 'Seconds': return isUTC ? d.getUTCSeconds() : d.getSeconds(); case 'Minutes': return isUTC ? d.getUTCMinutes() : d.getMinutes(); case 'Hours': return isUTC ? d.getUTCHours() : d.getHours(); case 'Date': return isUTC ? d.getUTCDate() : d.getDate(); case 'Day': return isUTC ? d.getUTCDay() : d.getDay(); case 'Month': return isUTC ? d.getUTCMonth() : d.getMonth(); case 'FullYear': return isUTC ? d.getUTCFullYear() : d.getFullYear(); default: return NaN; // Just in case } } function set(mom, unit, value) { var d, isUTC, year, month, date; if (!mom.isValid() || isNaN(value)) { return; } d = mom._d; isUTC = mom._isUTC; switch (unit) { case 'Milliseconds': return void (isUTC ? d.setUTCMilliseconds(value) : d.setMilliseconds(value)); case 'Seconds': return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value)); case 'Minutes': return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value)); case 'Hours': return void (isUTC ? d.setUTCHours(value) : d.setHours(value)); case 'Date': return void (isUTC ? d.setUTCDate(value) : d.setDate(value)); // case 'Day': // Not real // return void (isUTC ? d.setUTCDay(value) : d.setDay(value)); // case 'Month': // Not used because we need to pass two variables // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value)); case 'FullYear': break; // See below ... default: return; // Just in case } year = value; month = mom.month(); date = mom.date(); date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date; void (isUTC ? d.setUTCFullYear(year, month, date) : d.setFullYear(year, month, date)); } // MOMENTS function stringGet(units) { units = normalizeUnits(units); if (isFunction(this[units])) { return this[units](); } return this; } function stringSet(units, value) { if (typeof units === 'object') { units = normalizeObjectUnits(units); var prioritized = getPrioritizedUnits(units), i, prioritizedLen = prioritized.length; for (i = 0; i < prioritizedLen; i++) { this[prioritized[i].unit](units[prioritized[i].unit]); } } else { units = normalizeUnits(units); if (isFunction(this[units])) { return this[units](value); } } return this; } function mod$1(n, x) { return ((n % x) + x) % x; } var indexOf; if (Array.prototype.indexOf) { indexOf = Array.prototype.indexOf; } else { indexOf = function (o) { // I know var i; for (i = 0; i < this.length; ++i) { if (this[i] === o) { return i; } } return -1; }; } function daysInMonth(year, month) { if (isNaN(year) || isNaN(month)) { return NaN; } var modMonth = mod$1(month, 12); year += (month - modMonth) / 12; return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - ((modMonth % 7) % 2); } // FORMATTING addFormatToken('M', ['MM', 2], 'Mo', function () { return this.month() + 1; }); addFormatToken('MMM', 0, 0, function (format) { return this.localeData().monthsShort(this, format); }); addFormatToken('MMMM', 0, 0, function (format) { return this.localeData().months(this, format); }); // PARSING addRegexToken('M', match1to2$1, match1to2NoLeadingZero); addRegexToken('MM', match1to2$1, match2$1); addRegexToken('MMM', function (isStrict, locale) { return locale.monthsShortRegex(isStrict); }); addRegexToken('MMMM', function (isStrict, locale) { return locale.monthsRegex(isStrict); }); addParseToken(['M', 'MM'], function (input, array) { array[MONTH] = toInt(input) - 1; }); addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid. if (month != null) { array[MONTH] = month; } else { getParsingFlags(config).invalidMonth = input; } }); // LOCALES var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( '_' ), defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); // MOMENTS function setMonth(mom, value) { if (!mom.isValid()) { // No op return mom; } if (typeof value === 'string') { if (/^\d+$/.test(value)) { value = toInt(value); } else { value = mom.localeData().monthsParse(value); // TODO: Another silent failure? if (!isNumber(value)) { return mom; } } } var month = value, date = mom.date(); date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month)); void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date)); return mom; } function getSetMonth(value) { if (value != null) { setMonth(this, value); hooks.updateOffset(this, true); return this; } else { return get$1(this, 'Month'); } } function getDaysInMonth() { return daysInMonth(this.year(), this.month()); } function createDate(y, m, d, h, M, s, ms) { // can't just apply() to create a date: // https://stackoverflow.com/q/181348 var date; // the date constructor remaps years 0-99 to 1900-1999 if (y < 100 && y >= 0) { // preserve leap years using a full 400 year cycle, then reset date = new Date(y + 400, m, d, h, M, s, ms); if (isFinite(date.getFullYear())) { date.setFullYear(y); } } else { date = new Date(y, m, d, h, M, s, ms); } return date; } function createUTCDate(y) { var date, args; // the Date.UTC function remaps years 0-99 to 1900-1999 if (y < 100 && y >= 0) { args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset args[0] = y + 400; date = new Date(Date.UTC.apply(null, args)); if (isFinite(date.getUTCFullYear())) { date.setUTCFullYear(y); } } else { date = new Date(Date.UTC.apply(null, arguments)); } return date; } // start-of-first-week - start-of-year function firstWeekOffset(year, dow, doy) { var // first-week day -- which january is always in the first week (4 for iso, 1 for other) fwd = 7 + dow - doy, // first-week day local weekday -- which local weekday is fwd fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; return -fwdlw + fwd - 1; } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday function dayOfYearFromWeeks(year, week, weekday, dow, doy) { var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear; if (dayOfYear <= 0) { resYear = year - 1; resDayOfYear = daysInYear(resYear) + dayOfYear; } else if (dayOfYear > daysInYear(year)) { resYear = year + 1; resDayOfYear = dayOfYear - daysInYear(year); } else { resYear = year; resDayOfYear = dayOfYear; } return { year: resYear, dayOfYear: resDayOfYear, }; } function weekOfYear$1(mom, dow, doy) { var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear; if (week < 1) { resYear = mom.year() - 1; resWeek = week + weeksInYear(resYear, dow, doy); } else if (week > weeksInYear(mom.year(), dow, doy)) { resWeek = week - weeksInYear(mom.year(), dow, doy); resYear = mom.year() + 1; } else { resYear = mom.year(); resWeek = week; } return { week: resWeek, year: resYear, }; } function weeksInYear(year, dow, doy) { var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy); return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; } // FORMATTING addFormatToken('w', ['ww', 2], 'wo', 'week'); addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // PARSING addRegexToken('w', match1to2$1, match1to2NoLeadingZero); addRegexToken('ww', match1to2$1, match2$1); addRegexToken('W', match1to2$1, match1to2NoLeadingZero); addRegexToken('WW', match1to2$1, match2$1); addWeekParseToken( ['w', 'ww', 'W', 'WW'], function (input, week, config, token) { week[token.substr(0, 1)] = toInt(input); } ); var defaultLocaleWeek = { dow: 0, // Sunday is the first day of the week. doy: 6, // The week that contains Jan 6th is the first week of the year. }; // MOMENTS function getSetWeek(input) { var week = this.localeData().week(this); return input == null ? week : this.add((input - week) * 7, 'd'); } function getSetISOWeek(input) { var week = weekOfYear$1(this, 1, 4).week; return input == null ? week : this.add((input - week) * 7, 'd'); } // FORMATTING addFormatToken('d', 0, 'do', 'day'); addFormatToken('dd', 0, 0, function (format) { return this.localeData().weekdaysMin(this, format); }); addFormatToken('ddd', 0, 0, function (format) { return this.localeData().weekdaysShort(this, format); }); addFormatToken('dddd', 0, 0, function (format) { return this.localeData().weekdays(this, format); }); addFormatToken('e', 0, 0, 'weekday'); addFormatToken('E', 0, 0, 'isoWeekday'); // PARSING addRegexToken('d', match1to2$1); addRegexToken('e', match1to2$1); addRegexToken('E', match1to2$1); addRegexToken('dd', function (isStrict, locale) { return locale.weekdaysMinRegex(isStrict); }); addRegexToken('ddd', function (isStrict, locale) { return locale.weekdaysShortRegex(isStrict); }); addRegexToken('dddd', function (isStrict, locale) { return locale.weekdaysRegex(isStrict); }); addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid if (weekday != null) { week.d = weekday; } else { getParsingFlags(config).invalidWeekday = input; } }); addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { week[token] = toInt(input); }); // HELPERS function parseWeekday(input, locale) { if (typeof input !== 'string') { return input; } if (!isNaN(input)) { return parseInt(input, 10); } input = locale.weekdaysParse(input); if (typeof input === 'number') { return input; } return null; } function parseIsoWeekday(input, locale) { if (typeof input === 'string') { return locale.weekdaysParse(input) % 7 || 7; } return isNaN(input) ? null : input; } var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); // MOMENTS function getSetDayOfWeek(input) { if (!this.isValid()) { return input != null ? this : NaN; } var day = get$1(this, 'Day'); if (input != null) { input = parseWeekday(input, this.localeData()); return this.add(input - day, 'd'); } else { return day; } } function getSetLocaleDayOfWeek(input) { if (!this.isValid()) { return input != null ? this : NaN; } var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; return input == null ? weekday : this.add(input - weekday, 'd'); } function getSetISODayOfWeek(input) { if (!this.isValid()) { return input != null ? this : NaN; } // behaves the same as moment#day except // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) // as a setter, sunday should belong to the previous week. if (input != null) { var weekday = parseIsoWeekday(input, this.localeData()); return this.day(this.day() % 7 ? weekday : weekday - 7); } else { return this.day() || 7; } } // FORMATTING function hFormat() { return this.hours() % 12 || 12; } function kFormat() { return this.hours() || 24; } addFormatToken('H', ['HH', 2], 0, 'hour'); addFormatToken('h', ['hh', 2], 0, hFormat); addFormatToken('k', ['kk', 2], 0, kFormat); addFormatToken('hmm', 0, 0, function () { return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); }); addFormatToken('hmmss', 0, 0, function () { return ( '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2) ); }); addFormatToken('Hmm', 0, 0, function () { return '' + this.hours() + zeroFill(this.minutes(), 2); }); addFormatToken('Hmmss', 0, 0, function () { return ( '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2) ); }); function meridiem(token, lowercase) { addFormatToken(token, 0, 0, function () { return this.localeData().meridiem( this.hours(), this.minutes(), lowercase ); }); } meridiem('a', true); meridiem('A', false); // PARSING function matchMeridiem(isStrict, locale) { return locale._meridiemParse; } addRegexToken('a', matchMeridiem); addRegexToken('A', matchMeridiem); addRegexToken('H', match1to2$1, match1to2HasZero); addRegexToken('h', match1to2$1, match1to2NoLeadingZero); addRegexToken('k', match1to2$1, match1to2NoLeadingZero); addRegexToken('HH', match1to2$1, match2$1); addRegexToken('hh', match1to2$1, match2$1); addRegexToken('kk', match1to2$1, match2$1); addRegexToken('hmm', match3to4); addRegexToken('hmmss', match5to6); addRegexToken('Hmm', match3to4); addRegexToken('Hmmss', match5to6); addParseToken(['H', 'HH'], HOUR); addParseToken(['k', 'kk'], function (input, array, config) { var kInput = toInt(input); array[HOUR] = kInput === 24 ? 0 : kInput; }); addParseToken(['a', 'A'], function (input, array, config) { config._isPm = config._locale.isPM(input); config._meridiem = input; }); addParseToken(['h', 'hh'], function (input, array, config) { array[HOUR] = toInt(input); getParsingFlags(config).bigHour = true; }); addParseToken('hmm', function (input, array, config) { var pos = input.length - 2; array[HOUR] = toInt(input.substr(0, pos)); array[MINUTE] = toInt(input.substr(pos)); getParsingFlags(config).bigHour = true; }); addParseToken('hmmss', function (input, array, config) { var pos1 = input.length - 4, pos2 = input.length - 2; array[HOUR] = toInt(input.substr(0, pos1)); array[MINUTE] = toInt(input.substr(pos1, 2)); array[SECOND] = toInt(input.substr(pos2)); getParsingFlags(config).bigHour = true; }); addParseToken('Hmm', function (input, array, config) { var pos = input.length - 2; array[HOUR] = toInt(input.substr(0, pos)); array[MINUTE] = toInt(input.substr(pos)); }); addParseToken('Hmmss', function (input, array, config) { var pos1 = input.length - 4, pos2 = input.length - 2; array[HOUR] = toInt(input.substr(0, pos1)); array[MINUTE] = toInt(input.substr(pos1, 2)); array[SECOND] = toInt(input.substr(pos2)); }); var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, // Setting the hour should keep the time, because the user explicitly // specified which hour they want. So trying to maintain the same hour (in // a new timezone) makes sense. Adding/subtracting hours does not follow // this rule. getSetHour = makeGetSet('Hours', true); var baseConfig = { calendar: defaultCalendar, longDateFormat: defaultLongDateFormat, invalidDate: defaultInvalidDate, ordinal: defaultOrdinal, dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, relativeTime: defaultRelativeTime, months: defaultLocaleMonths, monthsShort: defaultLocaleMonthsShort, week: defaultLocaleWeek, weekdays: defaultLocaleWeekdays, weekdaysMin: defaultLocaleWeekdaysMin, weekdaysShort: defaultLocaleWeekdaysShort, meridiemParse: defaultLocaleMeridiemParse, }; // internal storage for locale config files var locales = {}, localeFamilies = {}, globalLocale; function commonPrefix(arr1, arr2) { var i, minl = Math.min(arr1.length, arr2.length); for (i = 0; i < minl; i += 1) { if (arr1[i] !== arr2[i]) { return i; } } return minl; } function normalizeLocale(key) { return key ? key.toLowerCase().replace('_', '-') : key; } // pick the locale from the array // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root function chooseLocale(names) { var i = 0, j, next, locale, split; while (i < names.length) { split = normalizeLocale(names[i]).split('-'); j = split.length; next = normalizeLocale(names[i + 1]); next = next ? next.split('-') : null; while (j > 0) { locale = loadLocale(split.slice(0, j).join('-')); if (locale) { return locale; } if ( next && next.length >= j && commonPrefix(split, next) >= j - 1 ) { //the next array item is better than a shallower substring of this one break; } j--; } i++; } return globalLocale; } function isLocaleNameSane(name) { // Prevent names that look like filesystem paths, i.e contain '/' or '\' // Ensure name is available and function returns boolean return !!(name && name.match('^[^/\\\\]*$')); } function loadLocale(name) { var oldLocale = null, aliasedRequire; // TODO: Find a better way to register and load all the locales in Node if ( locales[name] === undefined && typeof module !== 'undefined' && module && module.exports && isLocaleNameSane(name) ) { try { oldLocale = globalLocale._abbr; aliasedRequire = require; aliasedRequire('./locale/' + name); getSetGlobalLocale(oldLocale); } catch (e) { // mark as not found to avoid repeating expensive file require call causing high CPU // when trying to find en-US, en_US, en-us for every format call locales[name] = null; // null means not found } } return locales[name]; } // This function will load locale and then set the global locale. If // no arguments are passed in, it will simply return the current global // locale key. function getSetGlobalLocale(key, values) { var data; if (key) { if (isUndefined(values)) { data = getLocale(key); } else { data = defineLocale(key, values); } if (data) { // moment.duration._locale = moment._locale = data; globalLocale = data; } else { if (typeof console !== 'undefined' && console.warn) { //warn user if arguments are passed but the locale could not be set console.warn( 'Locale ' + key + ' not found. Did you forget to load it?' ); } } } return globalLocale._abbr; } function defineLocale(name, config) { if (config !== null) { var locale, parentConfig = baseConfig; config.abbr = name; if (locales[name] != null) { deprecateSimple( 'defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' ); parentConfig = locales[name]._config; } else if (config.parentLocale != null) { if (locales[config.parentLocale] != null) { parentConfig = locales[config.parentLocale]._config; } else { locale = loadLocale(config.parentLocale); if (locale != null) { parentConfig = locale._config; } else { if (!localeFamilies[config.parentLocale]) { localeFamilies[config.parentLocale] = []; } localeFamilies[config.parentLocale].push({ name: name, config: config, }); return null; } } } locales[name] = new Locale(mergeConfigs(parentConfig, config)); if (localeFamilies[name]) { localeFamilies[name].forEach(function (x) { defineLocale(x.name, x.config); }); } // backwards compat for now: also set the locale // make sure we set the locale AFTER all child locales have been // created, so we won't end up with the child locale set. getSetGlobalLocale(name); return locales[name]; } else { // useful for testing delete locales[name]; return null; } } function updateLocale(name, config) { if (config != null) { var locale, tmpLocale, parentConfig = baseConfig; if (locales[name] != null && locales[name].parentLocale != null) { // Update existing child locale in-place to avoid memory-leaks locales[name].set(mergeConfigs(locales[name]._config, config)); } else { // MERGE tmpLocale = loadLocale(name); if (tmpLocale != null) { parentConfig = tmpLocale._config; } config = mergeConfigs(parentConfig, config); if (tmpLocale == null) { // updateLocale is called for creating a new locale // Set abbr so it will have a name (getters return // undefined otherwise). config.abbr = name; } locale = new Locale(config); locale.parentLocale = locales[name]; locales[name] = locale; } // backwards compat for now: also set the locale getSetGlobalLocale(name); } else { // pass null for config to unupdate, useful for tests if (locales[name] != null) { if (locales[name].parentLocale != null) { locales[name] = locales[name].parentLocale; if (name === getSetGlobalLocale()) { getSetGlobalLocale(name); } } else if (locales[name] != null) { delete locales[name]; } } } return locales[name]; } // returns locale data function getLocale(key) { var locale; if (key && key._locale && key._locale._abbr) { key = key._locale._abbr; } if (!key) { return globalLocale; } if (!isArray(key)) { //short-circuit everything else locale = loadLocale(key); if (locale) { return locale; } key = [key]; } return chooseLocale(key); } function listLocales() { return keys(locales); } function checkOverflow(m) { var overflow, a = m._a; if (a && getParsingFlags(m).overflow === -2) { overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1; if ( getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE) ) { overflow = DATE; } if (getParsingFlags(m)._overflowWeeks && overflow === -1) { overflow = WEEK; } if (getParsingFlags(m)._overflowWeekday && overflow === -1) { overflow = WEEKDAY; } getParsingFlags(m).overflow = overflow; } return m; } // iso 8601 regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], ['GGGG-[W]WW', /\d{4}-W\d\d/, false], ['YYYY-DDD', /\d{4}-\d{3}/], ['YYYY-MM', /\d{4}-\d\d/, false], ['YYYYYYMMDD', /[+-]\d{10}/], ['YYYYMMDD', /\d{8}/], ['GGGG[W]WWE', /\d{4}W\d{3}/], ['GGGG[W]WW', /\d{4}W\d{2}/, false], ['YYYYDDD', /\d{7}/], ['YYYYMM', /\d{6}/, false], ['YYYY', /\d{4}/, false], ], // iso time formats and regexes isoTimes = [ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], ['HH:mm:ss', /\d\d:\d\d:\d\d/], ['HH:mm', /\d\d:\d\d/], ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], ['HHmmss', /\d\d\d\d\d\d/], ['HHmm', /\d\d\d\d/], ['HH', /\d\d/], ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = { UT: 0, GMT: 0, EDT: -4 * 60, EST: -5 * 60, CDT: -5 * 60, CST: -6 * 60, MDT: -6 * 60, MST: -7 * 60, PDT: -7 * 60, PST: -8 * 60, }; // date from iso format function configFromISO(config) { var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length; if (match) { getParsingFlags(config).iso = true; for (i = 0, l = isoDatesLen; i < l; i++) { if (isoDates[i][1].exec(match[1])) { dateFormat = isoDates[i][0]; allowTime = isoDates[i][2] !== false; break; } } if (dateFormat == null) { config._isValid = false; return; } if (match[3]) { for (i = 0, l = isoTimesLen; i < l; i++) { if (isoTimes[i][1].exec(match[3])) { // match[2] should be 'T' or space timeFormat = (match[2] || ' ') + isoTimes[i][0]; break; } } if (timeFormat == null) { config._isValid = false; return; } } if (!allowTime && timeFormat != null) { config._isValid = false; return; } if (match[4]) { if (tzRegex.exec(match[4])) { tzFormat = 'Z'; } else { config._isValid = false; return; } } config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); configFromStringAndFormat(config); } else { config._isValid = false; } } function extractFromRFC2822Strings( yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr ) { var result = [ untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10), ]; if (secondStr) { result.push(parseInt(secondStr, 10)); } return result; } function untruncateYear(yearStr) { var year = parseInt(yearStr, 10); if (year <= 49) { return 2000 + year; } else if (year <= 999) { return 1900 + year; } return year; } function preprocessRFC2822(s) { // Remove comments and folding whitespace and replace multiple-spaces with a single space return s .replace(/\([^()]*\)|[\n\t]/g, ' ') .replace(/(\s\s+)/g, ' ') .replace(/^\s\s*/, '') .replace(/\s\s*$/, ''); } function checkWeekday(weekdayStr, parsedInput, config) { if (weekdayStr) { // TODO: Replace the vanilla JS Date object with an independent day-of-week check. var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date( parsedInput[0], parsedInput[1], parsedInput[2] ).getDay(); if (weekdayProvided !== weekdayActual) { getParsingFlags(config).weekdayMismatch = true; config._isValid = false; return false; } } return true; } function calculateOffset(obsOffset, militaryOffset, numOffset) { if (obsOffset) { return obsOffsets[obsOffset]; } else if (militaryOffset) { // the only allowed military tz is Z return 0; } else { var hm = parseInt(numOffset, 10), m = hm % 100, h = (hm - m) / 100; return h * 60 + m; } } // date and time from ref 2822 format function configFromRFC2822(config) { var match = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray; if (match) { parsedArray = extractFromRFC2822Strings( match[4], match[3], match[2], match[5], match[6], match[7] ); if (!checkWeekday(match[1], parsedArray, config)) { return; } config._a = parsedArray; config._tzm = calculateOffset(match[8], match[9], match[10]); config._d = createUTCDate.apply(null, config._a); config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); getParsingFlags(config).rfc2822 = true; } else { config._isValid = false; } } // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict function configFromString(config) { var matched = aspNetJsonRegex.exec(config._i); if (matched !== null) { config._d = new Date(+matched[1]); return; } configFromISO(config); if (config._isValid === false) { delete config._isValid; } else { return; } configFromRFC2822(config); if (config._isValid === false) { delete config._isValid; } else { return; } if (config._strict) { config._isValid = false; } else { // Final attempt, use Input Fallback hooks.createFromInputFallback(config); } } hooks.createFromInputFallback = deprecate( 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) { config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); } ); // Pick the first defined of two or three arguments. function defaults(a, b, c) { if (a != null) { return a; } if (b != null) { return b; } return c; } function currentDateArray(config) { // hooks is actually the exported moment object var nowValue = new Date(hooks.now()); if (config._useUTC) { return [ nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate(), ]; } return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; } // convert an array to a date. // the array should mirror the parameters below // note: all values past the year are optional and will default to the lowest possible value. // [year, month, day , hour, minute, second, millisecond] function configFromArray(config) { var i, date, input = [], currentDate, expectedWeekday, yearToUse; if (config._d) { return; } currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { dayOfYearFromWeekInfo(config); } //if the day of the year is set, figure out what it is if (config._dayOfYear != null) { yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); if ( config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0 ) { getParsingFlags(config)._overflowDayOfYear = true; } date = createUTCDate(yearToUse, 0, config._dayOfYear); config._a[MONTH] = date.getUTCMonth(); config._a[DATE] = date.getUTCDate(); } // Default to current date. // * if no year, month, day of month are given, default to today // * if day of month is given, default month and year // * if month is given, default only year // * if year is given, don't default anything for (i = 0; i < 3 && config._a[i] == null; ++i) { config._a[i] = input[i] = currentDate[i]; } // Zero out whatever was not defaulted, including time for (; i < 7; i++) { config._a[i] = input[i] = config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; } // Check for 24:00:00.000 if ( config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0 ) { config._nextDay = true; config._a[HOUR] = 0; } config._d = (config._useUTC ? createUTCDate : createDate).apply( null, input ); expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed // with parseZone. if (config._tzm != null) { config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); } if (config._nextDay) { config._a[HOUR] = 24; } // check for mismatching day of week if ( config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday ) { getParsingFlags(config).weekdayMismatch = true; } } function dayOfYearFromWeekInfo(config) { var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; w = config._w; if (w.GG != null || w.W != null || w.E != null) { dow = 1; doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on // how we interpret now (local, utc, fixed offset). So create // a now version of current config (take local/utc/offset flags, and // create now). weekYear = defaults( w.GG, config._a[YEAR], weekOfYear$1(createLocal(), 1, 4).year ); week = defaults(w.W, 1); weekday = defaults(w.E, 1); if (weekday < 1 || weekday > 7) { weekdayOverflow = true; } } else { dow = config._locale._week.dow; doy = config._locale._week.doy; curWeek = weekOfYear$1(createLocal(), dow, doy); weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week. week = defaults(w.w, curWeek.week); if (w.d != null) { // weekday -- low day numbers are considered next week weekday = w.d; if (weekday < 0 || weekday > 6) { weekdayOverflow = true; } } else if (w.e != null) { // local weekday -- counting starts from beginning of week weekday = w.e + dow; if (w.e < 0 || w.e > 6) { weekdayOverflow = true; } } else { // default to beginning of week weekday = dow; } } if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { getParsingFlags(config)._overflowWeeks = true; } else if (weekdayOverflow != null) { getParsingFlags(config)._overflowWeekday = true; } else { temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); config._a[YEAR] = temp.year; config._dayOfYear = temp.dayOfYear; } } // constant that refers to the ISO standard hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form hooks.RFC_2822 = function () {}; // date from string and format string function configFromStringAndFormat(config) { // TODO: Move this to another part of the creation flow to prevent circular deps if (config._f === hooks.ISO_8601) { configFromISO(config); return; } if (config._f === hooks.RFC_2822) { configFromRFC2822(config); return; } config._a = []; getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC` var string = '' + config._i, i, parsedInput, tokens, token, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen; tokens = expandFormat(config._f, config._locale).match(formattingTokens$1) || []; tokenLen = tokens.length; for (i = 0; i < tokenLen; i++) { token = tokens[i]; parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; if (parsedInput) { skipped = string.substr(0, string.indexOf(parsedInput)); if (skipped.length > 0) { getParsingFlags(config).unusedInput.push(skipped); } string = string.slice( string.indexOf(parsedInput) + parsedInput.length ); totalParsedInputLength += parsedInput.length; } // don't parse if it's not a known token if (formatTokenFunctions[token]) { if (parsedInput) { getParsingFlags(config).empty = false; } else { getParsingFlags(config).unusedTokens.push(token); } addTimeToArrayFromToken(token, parsedInput, config); } else if (config._strict && !parsedInput) { getParsingFlags(config).unusedTokens.push(token); } } // add remaining unparsed input length to the string getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; if (string.length > 0) { getParsingFlags(config).unusedInput.push(string); } // clear _12h flag if hour is <= 12 if ( config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0 ) { getParsingFlags(config).bigHour = undefined; } getParsingFlags(config).parsedDateParts = config._a.slice(0); getParsingFlags(config).meridiem = config._meridiem; // handle meridiem config._a[HOUR] = meridiemFixWrap( config._locale, config._a[HOUR], config._meridiem ); // handle era era = getParsingFlags(config).era; if (era !== null) { config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); } configFromArray(config); checkOverflow(config); } function meridiemFixWrap(locale, hour, meridiem) { var isPm; if (meridiem == null) { // nothing to do return hour; } if (locale.meridiemHour != null) { return locale.meridiemHour(hour, meridiem); } else if (locale.isPM != null) { // Fallback isPm = locale.isPM(meridiem); if (isPm && hour < 12) { hour += 12; } if (!isPm && hour === 12) { hour = 0; } return hour; } else { // this is not supposed to happen return hour; } } // date from string and array of format strings function configFromStringAndArray(config) { var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false, configfLen = config._f.length; if (configfLen === 0) { getParsingFlags(config).invalidFormat = true; config._d = new Date(NaN); return; } for (i = 0; i < configfLen; i++) { currentScore = 0; validFormatFound = false; tempConfig = copyConfig({}, config); if (config._useUTC != null) { tempConfig._useUTC = config._useUTC; } tempConfig._f = config._f[i]; configFromStringAndFormat(tempConfig); if (isValid$1(tempConfig)) { validFormatFound = true; } // if there is any input that was not parsed add a penalty for that format currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; getParsingFlags(tempConfig).score = currentScore; if (!bestFormatIsValid) { if ( scoreToBeat == null || currentScore < scoreToBeat || validFormatFound ) { scoreToBeat = currentScore; bestMoment = tempConfig; if (validFormatFound) { bestFormatIsValid = true; } } } else { if (currentScore < scoreToBeat) { scoreToBeat = currentScore; bestMoment = tempConfig; } } } extend(config, bestMoment || tempConfig); } function configFromObject(config) { if (config._d) { return; } var i = normalizeObjectUnits(config._i), dayOrDate = i.day === undefined ? i.date : i.day; config._a = map( [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) { return obj && parseInt(obj, 10); } ); configFromArray(config); } function createFromConfig(config) { var res = new Moment(checkOverflow(prepareConfig(config))); if (res._nextDay) { // Adding is smart enough around DST res.add(1, 'd'); res._nextDay = undefined; } return res; } function prepareConfig(config) { var input = config._i, format = config._f; config._locale = config._locale || getLocale(config._l); if (input === null || (format === undefined && input === '')) { return createInvalid$1({ nullInput: true }); } if (typeof input === 'string') { config._i = input = config._locale.preparse(input); } if (isMoment(input)) { return new Moment(checkOverflow(input)); } else if (isDate(input)) { config._d = input; } else if (isArray(format)) { configFromStringAndArray(config); } else if (format) { configFromStringAndFormat(config); } else { configFromInput(config); } if (!isValid$1(config)) { config._d = null; } return config; } function configFromInput(config) { var input = config._i; if (isUndefined(input)) { config._d = new Date(hooks.now()); } else if (isDate(input)) { config._d = new Date(input.valueOf()); } else if (typeof input === 'string') { configFromString(config); } else if (isArray(input)) { config._a = map(input.slice(0), function (obj) { return parseInt(obj, 10); }); configFromArray(config); } else if (isObject(input)) { configFromObject(config); } else if (isNumber(input)) { // from milliseconds config._d = new Date(input); } else { hooks.createFromInputFallback(config); } } function createLocalOrUTC(input, format, locale, strict, isUTC) { var c = {}; if (format === true || format === false) { strict = format; format = undefined; } if (locale === true || locale === false) { strict = locale; locale = undefined; } if ( (isObject(input) && isObjectEmpty(input)) || (isArray(input) && input.length === 0) ) { input = undefined; } // object construction must be done this way. // https://github.com/moment/moment/issues/1423 c._isAMomentObject = true; c._useUTC = c._isUTC = isUTC; c._l = locale; c._i = input; c._f = format; c._strict = strict; return createFromConfig(c); } function createLocal(input, format, locale, strict) { return createLocalOrUTC(input, format, locale, strict, false); } var prototypeMin = deprecate( 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () { var other = createLocal.apply(null, arguments); if (this.isValid() && other.isValid()) { return other < this ? this : other; } else { return createInvalid$1(); } } ), prototypeMax = deprecate( 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () { var other = createLocal.apply(null, arguments); if (this.isValid() && other.isValid()) { return other > this ? this : other; } else { return createInvalid$1(); } } ); // Pick a moment m from moments so that m[fn](other) is true for all // other. This relies on the function fn to be transitive. // // moments should either be an array of moment objects or an array, whose // first element is an array of moment objects. function pickBy(fn, moments) { var res, i; if (moments.length === 1 && isArray(moments[0])) { moments = moments[0]; } if (!moments.length) { return createLocal(); } res = moments[0]; for (i = 1; i < moments.length; ++i) { if (!moments[i].isValid() || moments[i][fn](res)) { res = moments[i]; } } return res; } // TODO: Use [].sort instead? function min() { var args = [].slice.call(arguments, 0); return pickBy('isBefore', args); } function max() { var args = [].slice.call(arguments, 0); return pickBy('isAfter', args); } var now = function () { return Date.now ? Date.now() : +new Date(); }; var ordering = [ 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', ]; function isDurationValid(m) { var key, unitHasDecimal = false, i, orderLen = ordering.length; for (key in m) { if ( hasOwnProp(m, key) && !( indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])) ) ) { return false; } } for (i = 0; i < orderLen; ++i) { if (m[ordering[i]]) { if (unitHasDecimal) { return false; // only allow non-integers for smallest unit } if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { unitHasDecimal = true; } } } return true; } function createInvalid() { return createDuration(NaN); } function Duration(duration) { var normalizedInput = normalizeObjectUnits(duration), years = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months = normalizedInput.month || 0, weeks = normalizedInput.week || normalizedInput.isoWeek || 0, days = normalizedInput.day || 0, hours = normalizedInput.hour || 0, minutes = normalizedInput.minute || 0, seconds = normalizedInput.second || 0, milliseconds = normalizedInput.millisecond || 0; this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 minutes * 6e4 + // 1000 * 60 hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 // Because of dateAddRemove treats 24 hours as different from a // day when working around DST, we need to store them separately this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing // which months you are are talking about, so we have to store // it separately. this._months = +months + quarters * 3 + years * 12; this._data = {}; this._locale = getLocale(); this._bubble(); } function isDuration(obj) { return obj instanceof Duration; } function absRound(number) { if (number < 0) { return Math.round(-1 * number) * -1; } else { return Math.round(number); } } // compare two arrays, return the number of differences function compareArrays(array1, array2, dontConvert) { var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i; for (i = 0; i < len; i++) { if ( (toInt(array1[i]) !== toInt(array2[i])) ) { diffs++; } } return diffs + lengthDiff; } // FORMATTING function offset(token, separator) { addFormatToken(token, 0, 0, function () { var offset = this.utcOffset(), sign = '+'; if (offset < 0) { offset = -offset; sign = '-'; } return ( sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2) ); }); } offset('Z', ':'); offset('ZZ', ''); // PARSING addRegexToken('Z', matchShortOffset); addRegexToken('ZZ', matchShortOffset); addParseToken(['Z', 'ZZ'], function (input, array, config) { config._useUTC = true; config._tzm = offsetFromString$1(matchShortOffset, input); }); // HELPERS // timezone chunker // '+10:00' > ['10', '00'] // '-1530' > ['-15', '30'] var chunkOffset = /([\+\-]|\d\d)/gi; function offsetFromString$1(matcher, string) { var matches = (string || '').match(matcher), chunk, parts, minutes; if (matches === null) { return null; } chunk = matches[matches.length - 1] || []; parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; minutes = +(parts[1] * 60) + toInt(parts[2]); return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; } // Return a moment from input, that is local/utc/zone equivalent to model. function cloneWithOffset(input, model) { var res, diff; if (model._isUTC) { res = model.clone(); diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api. res._d.setTime(res._d.valueOf() + diff); hooks.updateOffset(res, false); return res; } else { return createLocal(input).local(); } } function getDateOffset(m) { // On Firefox.24 Date#getTimezoneOffset returns a floating point. // https://github.com/moment/moment/pull/1871 return -Math.round(m._d.getTimezoneOffset()); } // HOOKS // This function will be called whenever a moment is mutated. // It is intended to keep the offset in sync with the timezone. hooks.updateOffset = function () {}; // MOMENTS // keepLocalTime = true means only change the timezone, without // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset // +0200, so we adjust the time as needed, to be valid. // // Keeping the time actually adds/subtracts (one hour) // from the actual represented time. That is why we call updateOffset // a second time. In case it wants us to change the offset again // _changeInProgress == true case, then we have to adjust, because // there is no such time in the given timezone. function getSetOffset(input, keepLocalTime, keepMinutes) { var offset = this._offset || 0, localAdjust; if (!this.isValid()) { return input != null ? this : NaN; } if (input != null) { if (typeof input === 'string') { input = offsetFromString$1(matchShortOffset, input); if (input === null) { return this; } } else if (Math.abs(input) < 16 && !keepMinutes) { input = input * 60; } if (!this._isUTC && keepLocalTime) { localAdjust = getDateOffset(this); } this._offset = input; this._isUTC = true; if (localAdjust != null) { this.add(localAdjust, 'm'); } if (offset !== input) { if (!keepLocalTime || this._changeInProgress) { addSubtract( this, createDuration(input - offset, 'm'), 1, false ); } else if (!this._changeInProgress) { this._changeInProgress = true; hooks.updateOffset(this, true); this._changeInProgress = null; } } return this; } else { return this._isUTC ? offset : getDateOffset(this); } } function getSetZone(input, keepLocalTime) { if (input != null) { if (typeof input !== 'string') { input = -input; } this.utcOffset(input, keepLocalTime); return this; } else { return -this.utcOffset(); } } function setOffsetToUTC(keepLocalTime) { return this.utcOffset(0, keepLocalTime); } function setOffsetToLocal(keepLocalTime) { if (this._isUTC) { this.utcOffset(0, keepLocalTime); this._isUTC = false; if (keepLocalTime) { this.subtract(getDateOffset(this), 'm'); } } return this; } function setOffsetToParsedOffset() { if (this._tzm != null) { this.utcOffset(this._tzm, false, true); } else if (typeof this._i === 'string') { var tZone = offsetFromString$1(matchOffset$1, this._i); if (tZone != null) { this.utcOffset(tZone); } else { this.utcOffset(0, true); } } return this; } function hasAlignedHourOffset(input) { if (!this.isValid()) { return false; } input = input ? createLocal(input).utcOffset() : 0; return (this.utcOffset() - input) % 60 === 0; } function isDaylightSavingTime() { return ( this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset() ); } function isDaylightSavingTimeShifted() { if (!isUndefined(this._isDSTShifted)) { return this._isDSTShifted; } var c = {}, other; copyConfig(c, this); c = prepareConfig(c); if (c._a) { other = c._isUTC ? createUTC(c._a) : createLocal(c._a); this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0; } else { this._isDSTShifted = false; } return this._isDSTShifted; } function isLocal() { return this.isValid() ? !this._isUTC : false; } function isUtcOffset() { return this.isValid() ? this._isUTC : false; } function isUtc() { return this.isValid() ? this._isUTC && this._offset === 0 : false; } // ASP.NET json date format regex var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere // and further modified to allow for strings containing both week and day isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; function createDuration(input, key) { var duration = input, // matching against regexp is expensive, do it on demand match = null, sign, ret, diffRes; if (isDuration(input)) { duration = { ms: input._milliseconds, d: input._days, M: input._months, }; } else if (isNumber(input) || !isNaN(+input)) { duration = {}; if (key) { duration[key] = +input; } else { duration.milliseconds = +input; } } else if ((match = aspNetRegex.exec(input))) { sign = match[1] === '-' ? -1 : 1; duration = { y: 0, d: toInt(match[DATE]) * sign, h: toInt(match[HOUR]) * sign, m: toInt(match[MINUTE]) * sign, s: toInt(match[SECOND]) * sign, ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match }; } else if ((match = isoRegex.exec(input))) { sign = match[1] === '-' ? -1 : 1; duration = { y: parseIso(match[2], sign), M: parseIso(match[3], sign), w: parseIso(match[4], sign), d: parseIso(match[5], sign), h: parseIso(match[6], sign), m: parseIso(match[7], sign), s: parseIso(match[8], sign), }; } else if (duration == null) { // checks for null or undefined duration = {}; } else if ( typeof duration === 'object' && ('from' in duration || 'to' in duration) ) { diffRes = momentsDifference( createLocal(duration.from), createLocal(duration.to) ); duration = {}; duration.ms = diffRes.milliseconds; duration.M = diffRes.months; } ret = new Duration(duration); if (isDuration(input) && hasOwnProp(input, '_locale')) { ret._locale = input._locale; } if (isDuration(input) && hasOwnProp(input, '_isValid')) { ret._isValid = input._isValid; } return ret; } createDuration.fn = Duration.prototype; createDuration.invalid = createInvalid; function parseIso(inp, sign) { // We'd normally use ~~inp for this, but unfortunately it also // converts floats to ints. // inp may be undefined, so careful calling replace on it. var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it return (isNaN(res) ? 0 : res) * sign; } function positiveMomentsDifference(base, other) { var res = {}; res.months = other.month() - base.month() + (other.year() - base.year()) * 12; if (base.clone().add(res.months, 'M').isAfter(other)) { --res.months; } res.milliseconds = +other - +base.clone().add(res.months, 'M'); return res; } function momentsDifference(base, other) { var res; if (!(base.isValid() && other.isValid())) { return { milliseconds: 0, months: 0 }; } other = cloneWithOffset(other, base); if (base.isBefore(other)) { res = positiveMomentsDifference(base, other); } else { res = positiveMomentsDifference(other, base); res.milliseconds = -res.milliseconds; res.months = -res.months; } return res; } // TODO: remove 'name' arg after deprecation is removed function createAdder(direction, name) { return function (val, period) { var dur, tmp; //invert the arguments, but complain about it if (period !== null && !isNaN(+period)) { deprecateSimple( name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' ); tmp = val; val = period; period = tmp; } dur = createDuration(val, period); addSubtract(this, dur, direction); return this; }; } function addSubtract(mom, duration, isAdding, updateOffset) { var milliseconds = duration._milliseconds, days = absRound(duration._days), months = absRound(duration._months); if (!mom.isValid()) { // No op return; } updateOffset = updateOffset == null ? true : updateOffset; if (months) { setMonth(mom, get$1(mom, 'Month') + months * isAdding); } if (days) { set(mom, 'Date', get$1(mom, 'Date') + days * isAdding); } if (milliseconds) { mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); } if (updateOffset) { hooks.updateOffset(mom, days || months); } } var add = createAdder(1, 'add'), subtract = createAdder(-1, 'subtract'); function isString(input) { return typeof input === 'string' || input instanceof String; } // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined function isMomentInput(input) { return ( isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined ); } function isMomentInputObject(input) { var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [ 'years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms', ], i, property, propertyLen = properties.length; for (i = 0; i < propertyLen; i += 1) { property = properties[i]; propertyTest = propertyTest || hasOwnProp(input, property); } return objectTest && propertyTest; } function isNumberOrStringArray(input) { var arrayTest = isArray(input), dataTypeTest = false; if (arrayTest) { dataTypeTest = input.filter(function (item) { return !isNumber(item) && isString(input); }).length === 0; } return arrayTest && dataTypeTest; } function isCalendarSpec(input) { var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [ 'sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse', ], i, property; for (i = 0; i < properties.length; i += 1) { property = properties[i]; propertyTest = propertyTest || hasOwnProp(input, property); } return objectTest && propertyTest; } function getCalendarFormat(myMoment, now) { var diff = myMoment.diff(now, 'days', true); return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse'; } function calendar(time, formats) { // Support for single parameter, formats only overload to the calendar function if (arguments.length === 1) { if (!arguments[0]) { time = undefined; formats = undefined; } else if (isMomentInput(arguments[0])) { time = arguments[0]; formats = undefined; } else if (isCalendarSpec(arguments[0])) { formats = arguments[0]; time = undefined; } } // We want to compare the start of today, vs this. // Getting start-of-today depends on whether we're local/utc/offset or not. var now = time || createLocal(), sod = cloneWithOffset(now, this).startOf('day'), format = hooks.calendarFormat(this, sod) || 'sameElse', output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); return this.format( output || this.localeData().calendar(format, this, createLocal(now)) ); } function clone() { return new Moment(this); } function isAfter(input, units) { var localInput = isMoment(input) ? input : createLocal(input); if (!(this.isValid() && localInput.isValid())) { return false; } units = normalizeUnits(units) || 'millisecond'; if (units === 'millisecond') { return this.valueOf() > localInput.valueOf(); } else { return localInput.valueOf() < this.clone().startOf(units).valueOf(); } } function isBefore(input, units) { var localInput = isMoment(input) ? input : createLocal(input); if (!(this.isValid() && localInput.isValid())) { return false; } units = normalizeUnits(units) || 'millisecond'; if (units === 'millisecond') { return this.valueOf() < localInput.valueOf(); } else { return this.clone().endOf(units).valueOf() < localInput.valueOf(); } } function isBetween(from, to, units, inclusivity) { var localFrom = isMoment(from) ? from : createLocal(from), localTo = isMoment(to) ? to : createLocal(to); if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { return false; } inclusivity = inclusivity || '()'; return ( (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units)) ); } function isSame(input, units) { var localInput = isMoment(input) ? input : createLocal(input), inputMs; if (!(this.isValid() && localInput.isValid())) { return false; } units = normalizeUnits(units) || 'millisecond'; if (units === 'millisecond') { return this.valueOf() === localInput.valueOf(); } else { inputMs = localInput.valueOf(); return ( this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf() ); } } function isSameOrAfter(input, units) { return this.isSame(input, units) || this.isAfter(input, units); } function isSameOrBefore(input, units) { return this.isSame(input, units) || this.isBefore(input, units); } function diff(input, units, asFloat) { var that, zoneDelta, output; if (!this.isValid()) { return NaN; } that = cloneWithOffset(input, this); if (!that.isValid()) { return NaN; } zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; units = normalizeUnits(units); switch (units) { case 'year': output = monthDiff(this, that) / 12; break; case 'month': output = monthDiff(this, that); break; case 'quarter': output = monthDiff(this, that) / 3; break; case 'second': output = (this - that) / 1e3; break; // 1000 case 'minute': output = (this - that) / 6e4; break; // 1000 * 60 case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60 case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst default: output = this - that; } return asFloat ? output : absFloor(output); } function monthDiff(a, b) { if (a.date() < b.date()) { // end-of-month calculations work correct when the start month has more // days than the end month. return -monthDiff(b, a); } // difference in months var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), // b is in (anchor - 1 month, anchor + 1 month) anchor = a.clone().add(wholeMonthDiff, 'months'), anchor2, adjust; if (b - anchor < 0) { anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month adjust = (b - anchor) / (anchor - anchor2); } else { anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month adjust = (b - anchor) / (anchor2 - anchor); } //check for negative zero, return zero if negative zero return -(wholeMonthDiff + adjust) || 0; } hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; function toString() { return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); } function toISOString(keepOffset) { if (!this.isValid()) { return null; } var utc = keepOffset !== true, m = utc ? this.clone().utc() : this; if (m.year() < 0 || m.year() > 9999) { return formatMoment( m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' ); } if (isFunction(Date.prototype.toISOString)) { // native implementation is ~50x faster, use it when we can if (utc) { return this.toDate().toISOString(); } else { return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) .toISOString() .replace('Z', formatMoment(m, 'Z')); } } return formatMoment( m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' ); } /** * Return a human readable representation of a moment that can * also be evaluated to get a new moment which is the same * * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects */ function inspect() { if (!this.isValid()) { return 'moment.invalid(/* ' + this._i + ' */)'; } var func = 'moment', zone = '', prefix, year, datetime, suffix; if (!this.isLocal()) { func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; zone = 'Z'; } prefix = '[' + func + '("]'; year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; datetime = '-MM-DD[T]HH:mm:ss.SSS'; suffix = zone + '[")]'; return this.format(prefix + year + datetime + suffix); } function format(inputString) { if (!inputString) { inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; } var output = formatMoment(this, inputString); return this.localeData().postformat(output); } function from(time, withoutSuffix) { if ( this.isValid() && ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) ) { return createDuration({ to: this, from: time }) .locale(this.locale()) .humanize(!withoutSuffix); } else { return this.localeData().invalidDate(); } } function fromNow(withoutSuffix) { return this.from(createLocal(), withoutSuffix); } function to(time, withoutSuffix) { if ( this.isValid() && ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) ) { return createDuration({ from: this, to: time }) .locale(this.locale()) .humanize(!withoutSuffix); } else { return this.localeData().invalidDate(); } } function toNow(withoutSuffix) { return this.to(createLocal(), withoutSuffix); } // If passed a locale key, it will set the locale for this // instance. Otherwise, it will return the locale configuration // variables for this instance. function locale$4(key) { var newLocaleData; if (key === undefined) { return this._locale._abbr; } else { newLocaleData = getLocale(key); if (newLocaleData != null) { this._locale = newLocaleData; } return this; } } var lang = deprecate( 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) { if (key === undefined) { return this.localeData(); } else { return this.locale(key); } } ); function localeData$1() { return this._locale; } var MS_PER_SECOND = 1000, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970): function mod(dividend, divisor) { return ((dividend % divisor) + divisor) % divisor; } function localStartOfDate(y, m, d) { // the date constructor remaps years 0-99 to 1900-1999 if (y < 100 && y >= 0) { // preserve leap years using a full 400 year cycle, then reset return new Date(y + 400, m, d) - MS_PER_400_YEARS; } else { return new Date(y, m, d).valueOf(); } } function utcStartOfDate(y, m, d) { // Date.UTC remaps years 0-99 to 1900-1999 if (y < 100 && y >= 0) { // preserve leap years using a full 400 year cycle, then reset return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; } else { return Date.UTC(y, m, d); } } function startOf(units) { var time, startOfDate; units = normalizeUnits(units); if (units === undefined || units === 'millisecond' || !this.isValid()) { return this; } startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; switch (units) { case 'year': time = startOfDate(this.year(), 0, 1); break; case 'quarter': time = startOfDate( this.year(), this.month() - (this.month() % 3), 1 ); break; case 'month': time = startOfDate(this.year(), this.month(), 1); break; case 'week': time = startOfDate( this.year(), this.month(), this.date() - this.weekday() ); break; case 'isoWeek': time = startOfDate( this.year(), this.month(), this.date() - (this.isoWeekday() - 1) ); break; case 'day': case 'date': time = startOfDate(this.year(), this.month(), this.date()); break; case 'hour': time = this._d.valueOf(); time -= mod( time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR ); break; case 'minute': time = this._d.valueOf(); time -= mod(time, MS_PER_MINUTE); break; case 'second': time = this._d.valueOf(); time -= mod(time, MS_PER_SECOND); break; } this._d.setTime(time); hooks.updateOffset(this, true); return this; } function endOf(units) { var time, startOfDate; units = normalizeUnits(units); if (units === undefined || units === 'millisecond' || !this.isValid()) { return this; } startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; switch (units) { case 'year': time = startOfDate(this.year() + 1, 0, 1) - 1; break; case 'quarter': time = startOfDate( this.year(), this.month() - (this.month() % 3) + 3, 1 ) - 1; break; case 'month': time = startOfDate(this.year(), this.month() + 1, 1) - 1; break; case 'week': time = startOfDate( this.year(), this.month(), this.date() - this.weekday() + 7 ) - 1; break; case 'isoWeek': time = startOfDate( this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7 ) - 1; break; case 'day': case 'date': time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; break; case 'hour': time = this._d.valueOf(); time += MS_PER_HOUR - mod( time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR ) - 1; break; case 'minute': time = this._d.valueOf(); time += MS_PER_MINUTE - mod(time, MS_PER_MINUTE) - 1; break; case 'second': time = this._d.valueOf(); time += MS_PER_SECOND - mod(time, MS_PER_SECOND) - 1; break; } this._d.setTime(time); hooks.updateOffset(this, true); return this; } function valueOf() { return this._d.valueOf() - (this._offset || 0) * 60000; } function unix() { return Math.floor(this.valueOf() / 1000); } function toDate() { return new Date(this.valueOf()); } function toArray$2() { var m = this; return [ m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond(), ]; } function toObject() { var m = this; return { years: m.year(), months: m.month(), date: m.date(), hours: m.hours(), minutes: m.minutes(), seconds: m.seconds(), milliseconds: m.milliseconds(), }; } function toJSON() { // new Date(NaN).toJSON() === null return this.isValid() ? this.toISOString() : null; } function isValid() { return isValid$1(this); } function parsingFlags() { return extend({}, getParsingFlags(this)); } function invalidAt() { return getParsingFlags(this).overflow; } function creationData() { return { input: this._i, format: this._f, locale: this._locale, isUTC: this._isUTC, strict: this._strict, }; } addFormatToken('N', 0, 0, 'eraAbbr'); addFormatToken('NN', 0, 0, 'eraAbbr'); addFormatToken('NNN', 0, 0, 'eraAbbr'); addFormatToken('NNNN', 0, 0, 'eraName'); addFormatToken('NNNNN', 0, 0, 'eraNarrow'); addFormatToken('y', ['y', 1], 'yo', 'eraYear'); addFormatToken('y', ['yy', 2], 0, 'eraYear'); addFormatToken('y', ['yyy', 3], 0, 'eraYear'); addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); addRegexToken('N', matchEraAbbr); addRegexToken('NN', matchEraAbbr); addRegexToken('NNN', matchEraAbbr); addRegexToken('NNNN', matchEraName); addRegexToken('NNNNN', matchEraNarrow); addParseToken( ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) { var era = config._locale.erasParse(input, token, config._strict); if (era) { getParsingFlags(config).era = era; } else { getParsingFlags(config).invalidEra = input; } } ); addRegexToken('y', matchUnsigned); addRegexToken('yy', matchUnsigned); addRegexToken('yyy', matchUnsigned); addRegexToken('yyyy', matchUnsigned); addRegexToken('yo', matchEraYearOrdinal); addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); addParseToken(['yo'], function (input, array, config, token) { var match; if (config._locale._eraYearOrdinalRegex) { match = input.match(config._locale._eraYearOrdinalRegex); } if (config._locale.eraYearOrdinalParse) { array[YEAR] = config._locale.eraYearOrdinalParse(input, match); } else { array[YEAR] = parseInt(input, 10); } }); function getEraName() { var i, l, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].name; } if (eras[i].until <= val && val <= eras[i].since) { return eras[i].name; } } return ''; } function getEraNarrow() { var i, l, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].narrow; } if (eras[i].until <= val && val <= eras[i].since) { return eras[i].narrow; } } return ''; } function getEraAbbr() { var i, l, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].abbr; } if (eras[i].until <= val && val <= eras[i].since) { return eras[i].abbr; } } return ''; } function getEraYear() { var i, l, dir, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { dir = eras[i].since <= eras[i].until ? 1 : -1; // truncate time val = this.clone().startOf('day').valueOf(); if ( (eras[i].since <= val && val <= eras[i].until) || (eras[i].until <= val && val <= eras[i].since) ) { return ( (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset ); } } return this.year(); } function matchEraAbbr(isStrict, locale) { return locale.erasAbbrRegex(isStrict); } function matchEraName(isStrict, locale) { return locale.erasNameRegex(isStrict); } function matchEraNarrow(isStrict, locale) { return locale.erasNarrowRegex(isStrict); } function matchEraYearOrdinal(isStrict, locale) { return locale._eraYearOrdinalRegex || matchUnsigned; } // FORMATTING addFormatToken(0, ['gg', 2], 0, function () { return this.weekYear() % 100; }); addFormatToken(0, ['GG', 2], 0, function () { return this.isoWeekYear() % 100; }); function addWeekYearFormatToken(token, getter) { addFormatToken(0, [token, token.length], 0, getter); } addWeekYearFormatToken('gggg', 'weekYear'); addWeekYearFormatToken('ggggg', 'weekYear'); addWeekYearFormatToken('GGGG', 'isoWeekYear'); addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES // PARSING addRegexToken('G', matchSigned$1); addRegexToken('g', matchSigned$1); addRegexToken('GG', match1to2$1, match2$1); addRegexToken('gg', match1to2$1, match2$1); addRegexToken('GGGG', match1to4, match4$1); addRegexToken('gggg', match1to4, match4$1); addRegexToken('GGGGG', match1to6, match6); addRegexToken('ggggg', match1to6, match6); addWeekParseToken( ['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { week[token.substr(0, 2)] = toInt(input); } ); addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { week[token] = hooks.parseTwoDigitYear(input); }); // MOMENTS function getSetWeekYear(input) { return getSetWeekYearHelper.call( this, input, this.week(), this.weekday() + this.localeData()._week.dow, this.localeData()._week.dow, this.localeData()._week.doy ); } function getSetISOWeekYear(input) { return getSetWeekYearHelper.call( this, input, this.isoWeek(), this.isoWeekday(), 1, 4 ); } function getISOWeeksInYear() { return weeksInYear(this.year(), 1, 4); } function getISOWeeksInISOWeekYear() { return weeksInYear(this.isoWeekYear(), 1, 4); } function getWeeksInYear() { var weekInfo = this.localeData()._week; return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); } function getWeeksInWeekYear() { var weekInfo = this.localeData()._week; return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); } function getSetWeekYearHelper(input, week, weekday, dow, doy) { var weeksTarget; if (input == null) { return weekOfYear$1(this, dow, doy).year; } else { weeksTarget = weeksInYear(input, dow, doy); if (week > weeksTarget) { week = weeksTarget; } return setWeekAll.call(this, input, week, weekday, dow, doy); } } function setWeekAll(weekYear, week, weekday, dow, doy) { var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); this.year(date.getUTCFullYear()); this.month(date.getUTCMonth()); this.date(date.getUTCDate()); return this; } // FORMATTING addFormatToken('Q', 0, 'Qo', 'quarter'); // PARSING addRegexToken('Q', match1$1); addParseToken('Q', function (input, array) { array[MONTH] = (toInt(input) - 1) * 3; }); // MOMENTS function getSetQuarter(input) { return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + (this.month() % 3)); } // FORMATTING addFormatToken('D', ['DD', 2], 'Do', 'date'); // PARSING addRegexToken('D', match1to2$1, match1to2NoLeadingZero); addRegexToken('DD', match1to2$1, match2$1); addRegexToken('Do', function (isStrict, locale) { // TODO: Remove "ordinalParse" fallback in next major release. return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient; }); addParseToken(['D', 'DD'], DATE); addParseToken('Do', function (input, array) { array[DATE] = toInt(input.match(match1to2$1)[0]); }); // MOMENTS var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // PARSING addRegexToken('DDD', match1to3); addRegexToken('DDDD', match3$1); addParseToken(['DDD', 'DDDD'], function (input, array, config) { config._dayOfYear = toInt(input); }); // HELPERS // MOMENTS function getSetDayOfYear(input) { var dayOfYear = Math.round( (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 ) + 1; return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); } // FORMATTING addFormatToken('m', ['mm', 2], 0, 'minute'); // PARSING addRegexToken('m', match1to2$1, match1to2HasZero); addRegexToken('mm', match1to2$1, match2$1); addParseToken(['m', 'mm'], MINUTE); // MOMENTS var getSetMinute = makeGetSet('Minutes', false); // FORMATTING addFormatToken('s', ['ss', 2], 0, 'second'); // PARSING addRegexToken('s', match1to2$1, match1to2HasZero); addRegexToken('ss', match1to2$1, match2$1); addParseToken(['s', 'ss'], SECOND); // MOMENTS var getSetSecond = makeGetSet('Seconds', false); // FORMATTING addFormatToken('S', 0, 0, function () { return ~~(this.millisecond() / 100); }); addFormatToken(0, ['SS', 2], 0, function () { return ~~(this.millisecond() / 10); }); addFormatToken(0, ['SSS', 3], 0, 'millisecond'); addFormatToken(0, ['SSSS', 4], 0, function () { return this.millisecond() * 10; }); addFormatToken(0, ['SSSSS', 5], 0, function () { return this.millisecond() * 100; }); addFormatToken(0, ['SSSSSS', 6], 0, function () { return this.millisecond() * 1000; }); addFormatToken(0, ['SSSSSSS', 7], 0, function () { return this.millisecond() * 10000; }); addFormatToken(0, ['SSSSSSSS', 8], 0, function () { return this.millisecond() * 100000; }); addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { return this.millisecond() * 1000000; }); // PARSING addRegexToken('S', match1to3, match1$1); addRegexToken('SS', match1to3, match2$1); addRegexToken('SSS', match1to3, match3$1); var token, getSetMillisecond; for (token = 'SSSS'; token.length <= 9; token += 'S') { addRegexToken(token, matchUnsigned); } function parseMs(input, array) { array[MILLISECOND] = toInt(('0.' + input) * 1000); } for (token = 'S'; token.length <= 9; token += 'S') { addParseToken(token, parseMs); } getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING addFormatToken('z', 0, 0, 'zoneAbbr'); addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS function getZoneAbbr() { return this._isUTC ? 'UTC' : ''; } function getZoneName() { return this._isUTC ? 'Coordinated Universal Time' : ''; } var proto = Moment.prototype; proto.add = add; proto.calendar = calendar; proto.clone = clone; proto.diff = diff; proto.endOf = endOf; proto.format = format; proto.from = from; proto.fromNow = fromNow; proto.to = to; proto.toNow = toNow; proto.get = stringGet; proto.invalidAt = invalidAt; proto.isAfter = isAfter; proto.isBefore = isBefore; proto.isBetween = isBetween; proto.isSame = isSame; proto.isSameOrAfter = isSameOrAfter; proto.isSameOrBefore = isSameOrBefore; proto.isValid = isValid; proto.lang = lang; proto.locale = locale$4; proto.localeData = localeData$1; proto.max = prototypeMax; proto.min = prototypeMin; proto.parsingFlags = parsingFlags; proto.set = stringSet; proto.startOf = startOf; proto.subtract = subtract; proto.toArray = toArray$2; proto.toObject = toObject; proto.toDate = toDate; proto.toISOString = toISOString; proto.inspect = inspect; if (typeof Symbol !== 'undefined' && Symbol.for != null) { proto[Symbol.for('nodejs.util.inspect.custom')] = function () { return 'Moment<' + this.format() + '>'; }; } proto.toJSON = toJSON; proto.toString = toString; proto.unix = unix; proto.valueOf = valueOf; proto.creationData = creationData; proto.eraName = getEraName; proto.eraNarrow = getEraNarrow; proto.eraAbbr = getEraAbbr; proto.eraYear = getEraYear; proto.year = getSetYear; proto.isLeapYear = getIsLeapYear; proto.weekYear = getSetWeekYear; proto.isoWeekYear = getSetISOWeekYear; proto.quarter = proto.quarters = getSetQuarter; proto.month = getSetMonth; proto.daysInMonth = getDaysInMonth; proto.week = proto.weeks = getSetWeek; proto.isoWeek = proto.isoWeeks = getSetISOWeek; proto.weeksInYear = getWeeksInYear; proto.weeksInWeekYear = getWeeksInWeekYear; proto.isoWeeksInYear = getISOWeeksInYear; proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; proto.date = getSetDayOfMonth; proto.day = proto.days = getSetDayOfWeek; proto.weekday = getSetLocaleDayOfWeek; proto.isoWeekday = getSetISODayOfWeek; proto.dayOfYear = getSetDayOfYear; proto.hour = proto.hours = getSetHour; proto.minute = proto.minutes = getSetMinute; proto.second = proto.seconds = getSetSecond; proto.millisecond = proto.milliseconds = getSetMillisecond; proto.utcOffset = getSetOffset; proto.utc = setOffsetToUTC; proto.local = setOffsetToLocal; proto.parseZone = setOffsetToParsedOffset; proto.hasAlignedHourOffset = hasAlignedHourOffset; proto.isDST = isDaylightSavingTime; proto.isLocal = isLocal; proto.isUtcOffset = isUtcOffset; proto.isUtc = isUtc; proto.isUTC = isUtc; proto.zoneAbbr = getZoneAbbr; proto.zoneName = getZoneName; proto.dates = deprecate( 'dates accessor is deprecated. Use date instead.', getSetDayOfMonth ); proto.months = deprecate( 'months accessor is deprecated. Use month instead', getSetMonth ); proto.years = deprecate( 'years accessor is deprecated. Use year instead', getSetYear ); proto.zone = deprecate( 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone ); proto.isDSTShifted = deprecate( 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted ); function createUnix(input) { return createLocal(input * 1000); } function createInZone() { return createLocal.apply(null, arguments).parseZone(); } function get(format, index, field, setter) { var locale = getLocale(), utc = createUTC().set(setter, index); return locale[field](utc, format); } function listMonthsImpl(format, index, field) { if (isNumber(format)) { index = format; format = undefined; } format = format || ''; if (index != null) { return get(format, index, field, 'month'); } var i, out = []; for (i = 0; i < 12; i++) { out[i] = get(format, i, field, 'month'); } return out; } // () // (5) // (fmt, 5) // (fmt) // (true) // (true, 5) // (true, fmt, 5) // (true, fmt) function listWeekdaysImpl(localeSorted, format, index, field) { if (typeof localeSorted === 'boolean') { if (isNumber(format)) { index = format; format = undefined; } format = format || ''; } else { format = localeSorted; index = format; localeSorted = false; if (isNumber(format)) { index = format; format = undefined; } format = format || ''; } var locale = getLocale(), shift = localeSorted ? locale._week.dow : 0, i, out = []; if (index != null) { return get(format, (index + shift) % 7, field, 'day'); } for (i = 0; i < 7; i++) { out[i] = get(format, (i + shift) % 7, field, 'day'); } return out; } function listMonths(format, index) { return listMonthsImpl(format, index, 'months'); } function listMonthsShort(format, index) { return listMonthsImpl(format, index, 'monthsShort'); } function listWeekdays(localeSorted, format, index) { return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); } function listWeekdaysShort(localeSorted, format, index) { return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); } function listWeekdaysMin(localeSorted, format, index) { return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); } // Side effect imports hooks.lang = deprecate( 'moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale ); hooks.langData = deprecate( 'moment.langData is deprecated. Use moment.localeData instead.', getLocale ); var round = Math.round, thresholds = { ss: 44, // a few seconds to seconds s: 45, // seconds to minute m: 45, // minutes to hour h: 22, // hours to day d: 26, // days to month/week w: null, // weeks to month M: 11, // months to year }; // This function allows you to set the rounding function for relative time strings function getSetRelativeTimeRounding(roundingFunction) { if (roundingFunction === undefined) { return round; } if (typeof roundingFunction === 'function') { round = roundingFunction; return true; } return false; } // This function allows you to set a threshold for relative time strings function getSetRelativeTimeThreshold(threshold, limit) { if (thresholds[threshold] === undefined) { return false; } if (limit === undefined) { return thresholds[threshold]; } thresholds[threshold] = limit; if (threshold === 's') { thresholds.ss = limit - 1; } return true; } //! moment.js //! version : 2.30.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com hooks.version = '2.30.1'; setHookCallback(createLocal); hooks.fn = proto; hooks.min = min; hooks.max = max; hooks.now = now; hooks.utc = createUTC; hooks.unix = createUnix; hooks.months = listMonths; hooks.isDate = isDate; hooks.locale = getSetGlobalLocale; hooks.invalid = createInvalid$1; hooks.duration = createDuration; hooks.isMoment = isMoment; hooks.weekdays = listWeekdays; hooks.parseZone = createInZone; hooks.localeData = getLocale; hooks.isDuration = isDuration; hooks.monthsShort = listMonthsShort; hooks.weekdaysMin = listWeekdaysMin; hooks.defineLocale = defineLocale; hooks.updateLocale = updateLocale; hooks.locales = listLocales; hooks.weekdaysShort = listWeekdaysShort; hooks.normalizeUnits = normalizeUnits; hooks.relativeTimeRounding = getSetRelativeTimeRounding; hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; hooks.calendarFormat = getCalendarFormat; hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats hooks.HTML5_FMT = { DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // DATE: 'YYYY-MM-DD', // TIME: 'HH:mm', // TIME_SECONDS: 'HH:mm:ss', // TIME_MS: 'HH:mm:ss.SSS', // WEEK: 'GGGG-[W]WW', // MONTH: 'YYYY-MM', // }; //! moment.js locale configuration //! locale : Persian [fa] //! author : Ebrahim Byagowi : https://github.com/ebraminio var symbolMap = { 1: '۱', 2: '۲', 3: '۳', 4: '۴', 5: '۵', 6: '۶', 7: '۷', 8: '۸', 9: '۹', 0: '۰', }, numberMap = { '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', '۰': '0', }; const fa = hooks.defineLocale('fa', { months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( '_' ), monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( '_' ), weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( '_' ), weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( '_' ), weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), weekdaysParseExact: true, longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', L: 'DD/MM/YYYY', LL: 'D MMMM YYYY', LLL: 'D MMMM YYYY HH:mm', LLLL: 'dddd, D MMMM YYYY HH:mm', }, meridiemParse: /قبل از ظهر|بعد از ظهر/, isPM: function (input) { return /بعد از ظهر/.test(input); }, meridiem: function (hour, minute, isLower) { if (hour < 12) { return 'قبل از ظهر'; } else { return 'بعد از ظهر'; } }, calendar: { sameDay: '[امروز ساعت] LT', nextDay: '[فردا ساعت] LT', nextWeek: 'dddd [ساعت] LT', lastDay: '[دیروز ساعت] LT', lastWeek: 'dddd [پیش] [ساعت] LT', sameElse: 'L', }, relativeTime: { future: 'در %s', past: '%s پیش', s: 'چند ثانیه', ss: '%d ثانیه', m: 'یک دقیقه', mm: '%d دقیقه', h: 'یک ساعت', hh: '%d ساعت', d: 'یک روز', dd: '%d روز', M: 'یک ماه', MM: '%d ماه', y: 'یک سال', yy: '%d سال', }, preparse: function (string) { return string .replace(/[۰-۹]/g, function (match) { return numberMap[match]; }) .replace(/،/g, ','); }, postformat: function (string) { return string .replace(/\d/g, function (match) { return symbolMap[match]; }) .replace(/,/g, '،'); }, dayOfMonthOrdinalParse: /\d{1,2}م/, ordinal: '%dم', week: { dow: 6, // Saturday is the first day of the week. doy: 12, // The week that contains Jan 12th is the first week of the year. }, }); const weekday = (function (o, c) { var proto = c.prototype; proto.weekday = function (input) { var weekStart = this.$locale().weekStart || 0; var $W = this.$W; var weekday = ($W < weekStart ? $W + 7 : $W) - weekStart; if (this.$utils().u(input)) { return weekday; } return this.subtract(weekday, 'day').add(input, 'day'); }; }); // eslint-disable-next-line import/prefer-default-export var t = function t(format) { return format.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function (_, a, b) { return a || b.slice(1); }); }; var englishFormats = { LTS: 'h:mm:ss A', LT: 'h:mm A', L: 'MM/DD/YYYY', LL: 'MMMM D, YYYY', LLL: 'MMMM D, YYYY h:mm A', LLLL: 'dddd, MMMM D, YYYY h:mm A' }; var u = function u(formatStr, formats) { return formatStr.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (_, a, b) { var B = b && b.toUpperCase(); return a || formats[b] || englishFormats[b] || t(formats[B]); }); }; const localeData = (function (o, c, dayjs) { // locale needed later var proto = c.prototype; var getLocalePart = function getLocalePart(part) { return part && (part.indexOf ? part : part.s); }; var getShort = function getShort(ins, target, full, num, localeOrder) { var locale = ins.name ? ins : ins.$locale(); var targetLocale = getLocalePart(locale[target]); var fullLocale = getLocalePart(locale[full]); var result = targetLocale || fullLocale.map(function (f) { return f.slice(0, num); }); if (!localeOrder) return result; var weekStart = locale.weekStart; return result.map(function (_, index) { return result[(index + (weekStart || 0)) % 7]; }); }; var getDayjsLocaleObject = function getDayjsLocaleObject() { return dayjs.Ls[dayjs.locale()]; }; var getLongDateFormat = function getLongDateFormat(l, format) { return l.formats[format] || t(l.formats[format.toUpperCase()]); }; var localeData = function localeData() { var _this = this; return { months: function months(instance) { return instance ? instance.format('MMMM') : getShort(_this, 'months'); }, monthsShort: function monthsShort(instance) { return instance ? instance.format('MMM') : getShort(_this, 'monthsShort', 'months', 3); }, firstDayOfWeek: function firstDayOfWeek() { return _this.$locale().weekStart || 0; }, weekdays: function weekdays(instance) { return instance ? instance.format('dddd') : getShort(_this, 'weekdays'); }, weekdaysMin: function weekdaysMin(instance) { return instance ? instance.format('dd') : getShort(_this, 'weekdaysMin', 'weekdays', 2); }, weekdaysShort: function weekdaysShort(instance) { return instance ? instance.format('ddd') : getShort(_this, 'weekdaysShort', 'weekdays', 3); }, longDateFormat: function longDateFormat(format) { return getLongDateFormat(_this.$locale(), format); }, meridiem: this.$locale().meridiem, ordinal: this.$locale().ordinal }; }; proto.localeData = function () { return localeData.bind(this)(); }; dayjs.localeData = function () { var localeObject = getDayjsLocaleObject(); return { firstDayOfWeek: function firstDayOfWeek() { return localeObject.weekStart || 0; }, weekdays: function weekdays() { return dayjs.weekdays(); }, weekdaysShort: function weekdaysShort() { return dayjs.weekdaysShort(); }, weekdaysMin: function weekdaysMin() { return dayjs.weekdaysMin(); }, months: function months() { return dayjs.months(); }, monthsShort: function monthsShort() { return dayjs.monthsShort(); }, longDateFormat: function longDateFormat(format) { return getLongDateFormat(localeObject, format); }, meridiem: localeObject.meridiem, ordinal: localeObject.ordinal }; }; dayjs.months = function () { return getShort(getDayjsLocaleObject(), 'months'); }; dayjs.monthsShort = function () { return getShort(getDayjsLocaleObject(), 'monthsShort', 'months', 3); }; dayjs.weekdays = function (localeOrder) { return getShort(getDayjsLocaleObject(), 'weekdays', null, null, localeOrder); }; dayjs.weekdaysShort = function (localeOrder) { return getShort(getDayjsLocaleObject(), 'weekdaysShort', 'weekdays', 3, localeOrder); }; dayjs.weekdaysMin = function (localeOrder) { return getShort(getDayjsLocaleObject(), 'weekdaysMin', 'weekdays', 2, localeOrder); }; }); const weekOfYear = (function (o, c, d) { var proto = c.prototype; proto.week = function (week) { if (week === void 0) { week = null; } if (week !== null) { return this.add((week - this.week()) * 7, D); } var yearStart = this.$locale().yearStart || 1; if (this.month() === 11 && this.date() > 25) { // d(this) is for badMutable var nextYearStartDay = d(this).startOf(Y).add(1, Y).date(yearStart); var thisEndOfWeek = d(this).endOf(W); if (nextYearStartDay.isBefore(thisEndOfWeek)) { return 1; } } var yearStartDay = d(this).startOf(Y).date(yearStart); var yearStartWeek = yearStartDay.startOf(W).subtract(1, MS); var diffInWeek = this.diff(yearStartWeek, W, true); if (diffInWeek < 0) { return d(this).startOf('week').week(); } return Math.ceil(diffInWeek); }; proto.weeks = function (week) { if (week === void 0) { week = null; } return this.week(week); }; }); const weekYear = (function (o, c) { var proto = c.prototype; proto.weekYear = function () { var month = this.month(); var weekOfYear = this.week(); var year = this.year(); if (weekOfYear === 1 && month === 11) { return year + 1; } if (month === 0 && weekOfYear >= 52) { return year - 1; } return year; }; }); const quarterOfYear = (function (o, c) { var proto = c.prototype; proto.quarter = function (quarter) { if (!this.$utils().u(quarter)) { return this.month(this.month() % 3 + (quarter - 1) * 3); } return Math.ceil((this.month() + 1) / 3); }; var oldAdd = proto.add; proto.add = function (number, units) { number = Number(number); // eslint-disable-line no-param-reassign var unit = this.$utils().p(units); if (unit === Q) { return this.add(number * 3, M); } return oldAdd.bind(this)(number, units); }; var oldStartOf = proto.startOf; proto.startOf = function (units, startOf) { var utils = this.$utils(); var isStartOf = !utils.u(startOf) ? startOf : true; var unit = utils.p(units); if (unit === Q) { var quarter = this.quarter() - 1; return isStartOf ? this.month(quarter * 3).startOf(M).startOf(D) : this.month(quarter * 3 + 2).endOf(M).endOf(D); } return oldStartOf.bind(this)(units, startOf); }; }); const advancedFormat = (function (o, c) { // locale needed later var proto = c.prototype; var oldFormat = proto.format; proto.format = function (formatStr) { var _this = this; var locale = this.$locale(); if (!this.isValid()) { return oldFormat.bind(this)(formatStr); } var utils = this.$utils(); var str = formatStr || FORMAT_DEFAULT; var result = str.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, function (match) { switch (match) { case 'Q': return Math.ceil((_this.$M + 1) / 3); case 'Do': return locale.ordinal(_this.$D); case 'gggg': return _this.weekYear(); case 'GGGG': return _this.isoWeekYear(); case 'wo': return locale.ordinal(_this.week(), 'W'); // W for week case 'w': case 'ww': return utils.s(_this.week(), match === 'w' ? 1 : 2, '0'); case 'W': case 'WW': return utils.s(_this.isoWeek(), match === 'W' ? 1 : 2, '0'); case 'k': case 'kk': return utils.s(String(_this.$H === 0 ? 24 : _this.$H), match === 'k' ? 1 : 2, '0'); case 'X': return Math.floor(_this.$d.getTime() / 1000); case 'x': return _this.$d.getTime(); case 'z': return "[" + _this.offsetName() + "]"; case 'zzz': return "[" + _this.offsetName('long') + "]"; default: return match; } }); return oldFormat.bind(this)(result); }; }); var formattingTokens = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g; var match1 = /\d/; // 0 - 9 var match2 = /\d\d/; // 00 - 99 var match3 = /\d{3}/; // 000 - 999 var match4 = /\d{4}/; // 0000 - 9999 var match1to2 = /\d\d?/; // 0 - 99 var matchSigned = /[+-]?\d+/; // -inf - inf var matchOffset = /[+-]\d\d:?(\d\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z var matchWord = /\d*[^-_:/,()\s\d]+/; // Word var locale$3 = {}; var parseTwoDigitYear = function parseTwoDigitYear(input) { input = +input; return input + (input > 68 ? 1900 : 2000); }; function offsetFromString(string) { if (!string) return 0; if (string === 'Z') return 0; var parts = string.match(/([+-]|\d\d)/g); var minutes = +(parts[1] * 60) + (+parts[2] || 0); return minutes === 0 ? 0 : parts[0] === '+' ? -minutes : minutes; // eslint-disable-line no-nested-ternary } var addInput = function addInput(property) { return function (input) { this[property] = +input; }; }; var zoneExpressions = [matchOffset, function (input) { var zone = this.zone || (this.zone = {}); zone.offset = offsetFromString(input); }]; var getLocalePart = function getLocalePart(name) { var part = locale$3[name]; return part && (part.indexOf ? part : part.s.concat(part.f)); }; var meridiemMatch = function meridiemMatch(input, isLowerCase) { var isAfternoon; var _locale = locale$3, meridiem = _locale.meridiem; if (!meridiem) { isAfternoon = input === (isLowerCase ? 'pm' : 'PM'); } else { for (var i = 1; i <= 24; i += 1) { // todo: fix input === meridiem(i, 0, isLowerCase) if (input.indexOf(meridiem(i, 0, isLowerCase)) > -1) { isAfternoon = i > 12; break; } } } return isAfternoon; }; var expressions = { A: [matchWord, function (input) { this.afternoon = meridiemMatch(input, false); }], a: [matchWord, function (input) { this.afternoon = meridiemMatch(input, true); }], Q: [match1, function (input) { this.month = (input - 1) * 3 + 1; }], S: [match1, function (input) { this.milliseconds = +input * 100; }], SS: [match2, function (input) { this.milliseconds = +input * 10; }], SSS: [match3, function (input) { this.milliseconds = +input; }], s: [match1to2, addInput('seconds')], ss: [match1to2, addInput('seconds')], m: [match1to2, addInput('minutes')], mm: [match1to2, addInput('minutes')], H: [match1to2, addInput('hours')], h: [match1to2, addInput('hours')], HH: [match1to2, addInput('hours')], hh: [match1to2, addInput('hours')], D: [match1to2, addInput('day')], DD: [match2, addInput('day')], Do: [matchWord, function (input) { var _locale2 = locale$3, ordinal = _locale2.ordinal; var _input$match = input.match(/\d+/); this.day = _input$match[0]; if (!ordinal) return; for (var i = 1; i <= 31; i += 1) { if (ordinal(i).replace(/\[|\]/g, '') === input) { this.day = i; } } }], w: [match1to2, addInput('week')], ww: [match2, addInput('week')], M: [match1to2, addInput('month')], MM: [match2, addInput('month')], MMM: [matchWord, function (input) { var months = getLocalePart('months'); var monthsShort = getLocalePart('monthsShort'); var matchIndex = (monthsShort || months.map(function (_) { return _.slice(0, 3); })).indexOf(input) + 1; if (matchIndex < 1) { throw new Error(); } this.month = matchIndex % 12 || matchIndex; }], MMMM: [matchWord, function (input) { var months = getLocalePart('months'); var matchIndex = months.indexOf(input) + 1; if (matchIndex < 1) { throw new Error(); } this.month = matchIndex % 12 || matchIndex; }], Y: [matchSigned, addInput('year')], YY: [match2, function (input) { this.year = parseTwoDigitYear(input); }], YYYY: [match4, addInput('year')], Z: zoneExpressions, ZZ: zoneExpressions }; function correctHours(time) { var afternoon = time.afternoon; if (afternoon !== undefined) { var hours = time.hours; if (afternoon) { if (hours < 12) { time.hours += 12; } } else if (hours === 12) { time.hours = 0; } delete time.afternoon; } } function makeParser(format) { format = u(format, locale$3 && locale$3.formats); var array = format.match(formattingTokens); var length = array.length; for (var i = 0; i < length; i += 1) { var token = array[i]; var parseTo = expressions[token]; var regex = parseTo && parseTo[0]; var parser = parseTo && parseTo[1]; if (parser) { array[i] = { regex: regex, parser: parser }; } else { array[i] = token.replace(/^\[|\]$/g, ''); } } return function (input) { var time = {}; for (var _i = 0, start = 0; _i < length; _i += 1) { var _token = array[_i]; if (typeof _token === 'string') { start += _token.length; } else { var _regex = _token.regex, _parser = _token.parser; var part = input.slice(start); var match = _regex.exec(part); var value = match[0]; _parser.call(time, value); input = input.replace(value, ''); } } correctHours(time); return time; }; } var parseFormattedInput = function parseFormattedInput(input, format, utc, dayjs) { try { if (['x', 'X'].indexOf(format) > -1) return new Date((format === 'X' ? 1000 : 1) * input); var parser = makeParser(format); var _parser2 = parser(input), year = _parser2.year, month = _parser2.month, day = _parser2.day, hours = _parser2.hours, minutes = _parser2.minutes, seconds = _parser2.seconds, milliseconds = _parser2.milliseconds, zone = _parser2.zone, week = _parser2.week; var now = new Date(); var d = day || (!year && !month ? now.getDate() : 1); var y = year || now.getFullYear(); var M = 0; if (!(year && !month)) { M = month > 0 ? month - 1 : now.getMonth(); } var h = hours || 0; var m = minutes || 0; var s = seconds || 0; var ms = milliseconds || 0; if (zone) { return new Date(Date.UTC(y, M, d, h, m, s, ms + zone.offset * 60 * 1000)); } if (utc) { return new Date(Date.UTC(y, M, d, h, m, s, ms)); } var newDate; newDate = new Date(y, M, d, h, m, s, ms); if (week) { newDate = dayjs(newDate).week(week).toDate(); } return newDate; } catch (e) { return new Date(''); // Invalid Date } }; const customParseFormat = (function (o, C, d) { d.p.customParseFormat = true; if (o && o.parseTwoDigitYear) { parseTwoDigitYear = o.parseTwoDigitYear; } var proto = C.prototype; var oldParse = proto.parse; proto.parse = function (cfg) { var date = cfg.date, utc = cfg.utc, args = cfg.args; this.$u = utc; var format = args[1]; if (typeof format === 'string') { var isStrictWithoutLocale = args[2] === true; var isStrictWithLocale = args[3] === true; var isStrict = isStrictWithoutLocale || isStrictWithLocale; var pl = args[2]; if (isStrictWithLocale) { pl = args[2]; } locale$3 = this.$locale(); if (!isStrictWithoutLocale && pl) { locale$3 = d.Ls[pl]; } this.$d = parseFormattedInput(date, format, utc, d); this.init(); if (pl && pl !== true) this.$L = this.locale(pl).$L; // use != to treat // input number 1410715640579 and format string '1410715640579' equal // eslint-disable-next-line eqeqeq if (isStrict && date != this.format(format)) { this.$d = new Date(''); } // reset global locale to make parallel unit test locale$3 = {}; } else if (format instanceof Array) { var len = format.length; for (var i = 1; i <= len; i += 1) { args[1] = format[i - 1]; var result = d.apply(this, args); if (result.isValid()) { this.$d = result.$d; this.$L = result.$L; this.init(); break; } if (i === len) this.$d = new Date(''); } } else { oldParse.call(this, cfg); } }; }); // This icon file is generated automatically. var CalendarOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z" } }] }, "name": "calendar", "theme": "outlined" }; function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } return target; } function _defineProperty$2(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var CalendarOutlined = function CalendarOutlined(props, context) { var p = _objectSpread$2({}, props, context.attrs); return createVNode(Icon, _objectSpread$2({}, p, { "icon": CalendarOutlined$1 }), null); }; CalendarOutlined.displayName = 'CalendarOutlined'; CalendarOutlined.inheritAttrs = false; // This icon file is generated automatically. var ClockCircleOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }, { "tag": "path", "attrs": { "d": "M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z" } }] }, "name": "clock-circle", "theme": "outlined" }; function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty$1(target, key, source[key]); }); } return target; } function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ClockCircleOutlined = function ClockCircleOutlined(props, context) { var p = _objectSpread$1({}, props, context.attrs); return createVNode(Icon, _objectSpread$1({}, p, { "icon": ClockCircleOutlined$1 }), null); }; ClockCircleOutlined.displayName = 'ClockCircleOutlined'; ClockCircleOutlined.inheritAttrs = false; // This icon file is generated automatically. var SwapRightOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "0 0 1024 1024", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z" } }] }, "name": "swap-right", "theme": "outlined" }; function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var SwapRightOutlined = function SwapRightOutlined(props, context) { var p = _objectSpread({}, props, context.attrs); return createVNode(Icon, _objectSpread({}, p, { "icon": SwapRightOutlined$1 }), null); }; SwapRightOutlined.displayName = 'SwapRightOutlined'; SwapRightOutlined.inheritAttrs = false; dayjs.extend(customParseFormat); dayjs.extend(advancedFormat); dayjs.extend(weekday); dayjs.extend(localeData); dayjs.extend(weekOfYear); dayjs.extend(weekYear); dayjs.extend(quarterOfYear); dayjs.extend((_o, c) => { const proto = c.prototype; const oldFormat = proto.format; proto.format = function f(formatStr) { const str = (formatStr || "").replace("Wo", "wo"); return oldFormat.bind(this)(str); }; }); const localeMap = { // ar_EG: // az_AZ: // bg_BG: bn_BD: "bn-bd", by_BY: "be", // ca_ES: // cs_CZ: // da_DK: // de_DE: // el_GR: en_GB: "en-gb", en_US: "en", // es_ES: // et_EE: // fa_IR: // fi_FI: fr_BE: "fr", fr_CA: "fr-ca", // fr_FR: // ga_IE: // gl_ES: // he_IL: // hi_IN: // hr_HR: // hu_HU: hy_AM: "hy-am", // id_ID: // is_IS: // it_IT: // ja_JP: // ka_GE: // kk_KZ: // km_KH: kmr_IQ: "ku", // kn_IN: // ko_KR: // ku_IQ: // previous ku in antd // lt_LT: // lv_LV: // mk_MK: // ml_IN: // mn_MN: // ms_MY: // nb_NO: // ne_NP: nl_BE: "nl-be", // nl_NL: // pl_PL: pt_BR: "pt-br", // pt_PT: // ro_RO: // ru_RU: // sk_SK: // sl_SI: // sr_RS: // sv_SE: // ta_IN: // th_TH: // tr_TR: // uk_UA: // ur_PK: // vi_VN: zh_CN: "zh-cn", zh_HK: "zh-hk", zh_TW: "zh-tw" }; const parseLocale = (locale2) => { const mapLocale = localeMap[locale2]; return mapLocale || locale2.split("_")[0]; }; const parseNoMatchNotice = () => { noteOnce(false, "Not match any format. Please help to fire a issue about this."); }; const advancedFormatRegex = /\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|k{1,2}|S/g; function findTargetStr(val, index, segmentation) { const items = [...new Set(val.split(segmentation))]; let idx = 0; for (let i = 0; i < items.length; i++) { const item = items[i]; idx += item.length; if (idx > index) { return item; } idx += segmentation.length; } } const toDateWithValueFormat = (val, valueFormat) => { if (!val) return null; if (dayjs.isDayjs(val)) { return val; } const matchs = valueFormat.matchAll(advancedFormatRegex); let baseDate = dayjs(val, valueFormat); if (matchs === null) { return baseDate; } for (const match of matchs) { const origin = match[0]; const index = match["index"]; if (origin === "Q") { const segmentation = val.slice(index - 1, index); const quarterStr = findTargetStr(val, index, segmentation).match(/\d+/)[0]; baseDate = baseDate.quarter(parseInt(quarterStr)); } if (origin.toLowerCase() === "wo") { const segmentation = val.slice(index - 1, index); const weekStr = findTargetStr(val, index, segmentation).match(/\d+/)[0]; baseDate = baseDate.week(parseInt(weekStr)); } if (origin.toLowerCase() === "ww") { baseDate = baseDate.week(parseInt(val.slice(index, index + origin.length))); } if (origin.toLowerCase() === "w") { baseDate = baseDate.week(parseInt(val.slice(index, index + origin.length + 1))); } } return baseDate; }; const generateConfig = { // get getNow: () => dayjs(), getFixedDate: (string) => dayjs(string, ["YYYY-M-DD", "YYYY-MM-DD"]), getEndDate: (date) => date.endOf("month"), getWeekDay: (date) => { const clone = date.locale("en"); return clone.weekday() + clone.localeData().firstDayOfWeek(); }, getYear: (date) => date.year(), getMonth: (date) => date.month(), getDate: (date) => date.date(), getHour: (date) => date.hour(), getMinute: (date) => date.minute(), getSecond: (date) => date.second(), // set addYear: (date, diff) => date.add(diff, "year"), addMonth: (date, diff) => date.add(diff, "month"), addDate: (date, diff) => date.add(diff, "day"), setYear: (date, year) => date.year(year), setMonth: (date, month) => date.month(month), setDate: (date, num) => date.date(num), setHour: (date, hour) => date.hour(hour), setMinute: (date, minute) => date.minute(minute), setSecond: (date, second) => date.second(second), // Compare isAfter: (date1, date2) => date1.isAfter(date2), isValidate: (date) => date.isValid(), locale: { getWeekFirstDay: (locale2) => dayjs().locale(parseLocale(locale2)).localeData().firstDayOfWeek(), getWeekFirstDate: (locale2, date) => date.locale(parseLocale(locale2)).weekday(0), getWeek: (locale2, date) => date.locale(parseLocale(locale2)).week(), getShortWeekDays: (locale2) => dayjs().locale(parseLocale(locale2)).localeData().weekdaysMin(), getShortMonths: (locale2) => dayjs().locale(parseLocale(locale2)).localeData().monthsShort(), format: (locale2, date, format) => date.locale(parseLocale(locale2)).format(format), parse: (locale2, text, formats) => { const localeStr = parseLocale(locale2); for (let i = 0; i < formats.length; i += 1) { const format = formats[i]; const formatText = text; if (format.includes("wo") || format.includes("Wo")) { const year = formatText.split("-")[0]; const weekStr = formatText.split("-")[1]; const firstWeek = dayjs(year, "YYYY").startOf("year").locale(localeStr); for (let j = 0; j <= 52; j += 1) { const nextWeek = firstWeek.add(j, "week"); if (nextWeek.format("Wo") === weekStr) { return nextWeek; } } parseNoMatchNotice(); return null; } const date = dayjs(formatText, format, true).locale(localeStr); if (date.isValid()) { return date; } } if (!text) { parseNoMatchNotice(); } return null; } }, toDate: (value, valueFormat) => { if (Array.isArray(value)) { return value.map((val) => toDateWithValueFormat(val, valueFormat)); } else { return toDateWithValueFormat(value, valueFormat); } }, toString: (value, valueFormat) => { if (Array.isArray(value)) { return value.map((val) => dayjs.isDayjs(val) ? val.format(valueFormat) : val); } else { return dayjs.isDayjs(value) ? value.format(valueFormat) : value; } } }; function useMergeProps(props) { const attrs = useAttrs(); return _extends(_extends({}, props), attrs); } const PanelContextKey = Symbol("PanelContextProps"); const useProvidePanel = (props) => { provide(PanelContextKey, props); }; const useInjectPanel = () => { return inject(PanelContextKey, {}); }; const HIDDEN_STYLE = { visibility: "hidden" }; function Header(_props, _ref) { let { slots } = _ref; var _a; const props = useMergeProps(_props); const { prefixCls, prevIcon = "\u2039", nextIcon = "\u203A", superPrevIcon = "\xAB", superNextIcon = "\xBB", onSuperPrev, onSuperNext, onPrev, onNext } = props; const { hideNextBtn, hidePrevBtn } = useInjectPanel(); return createVNode("div", { "class": prefixCls }, [onSuperPrev && createVNode("button", { "type": "button", "onClick": onSuperPrev, "tabindex": -1, "class": `${prefixCls}-super-prev-btn`, "style": hidePrevBtn.value ? HIDDEN_STYLE : {} }, [superPrevIcon]), onPrev && createVNode("button", { "type": "button", "onClick": onPrev, "tabindex": -1, "class": `${prefixCls}-prev-btn`, "style": hidePrevBtn.value ? HIDDEN_STYLE : {} }, [prevIcon]), createVNode("div", { "class": `${prefixCls}-view` }, [(_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)]), onNext && createVNode("button", { "type": "button", "onClick": onNext, "tabindex": -1, "class": `${prefixCls}-next-btn`, "style": hideNextBtn.value ? HIDDEN_STYLE : {} }, [nextIcon]), onSuperNext && createVNode("button", { "type": "button", "onClick": onSuperNext, "tabindex": -1, "class": `${prefixCls}-super-next-btn`, "style": hideNextBtn.value ? HIDDEN_STYLE : {} }, [superNextIcon])]); } Header.displayName = "Header"; Header.inheritAttrs = false; function DecadeHeader(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, viewDate, onPrevDecades, onNextDecades } = props; const { hideHeader } = useInjectPanel(); if (hideHeader) { return null; } const headerPrefixCls = `${prefixCls}-header`; const yearNumber = generateConfig2.getYear(viewDate); const startYear = Math.floor(yearNumber / DECADE_DISTANCE_COUNT) * DECADE_DISTANCE_COUNT; const endYear = startYear + DECADE_DISTANCE_COUNT - 1; return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": headerPrefixCls, "onSuperPrev": onPrevDecades, "onSuperNext": onNextDecades }), { default: () => [startYear, createTextVNode("-"), endYear] }); } DecadeHeader.displayName = "DecadeHeader"; DecadeHeader.inheritAttrs = false; function setTime(generateConfig2, date, hour, minute, second) { let nextTime = generateConfig2.setHour(date, hour); nextTime = generateConfig2.setMinute(nextTime, minute); nextTime = generateConfig2.setSecond(nextTime, second); return nextTime; } function setDateTime(generateConfig2, date, defaultDate) { if (!defaultDate) { return date; } let newDate = date; newDate = generateConfig2.setHour(newDate, generateConfig2.getHour(defaultDate)); newDate = generateConfig2.setMinute(newDate, generateConfig2.getMinute(defaultDate)); newDate = generateConfig2.setSecond(newDate, generateConfig2.getSecond(defaultDate)); return newDate; } function getLowerBoundTime(hour, minute, second, hourStep, minuteStep, secondStep) { const lowerBoundHour = Math.floor(hour / hourStep) * hourStep; if (lowerBoundHour < hour) { return [lowerBoundHour, 60 - minuteStep, 60 - secondStep]; } const lowerBoundMinute = Math.floor(minute / minuteStep) * minuteStep; if (lowerBoundMinute < minute) { return [lowerBoundHour, lowerBoundMinute, 60 - secondStep]; } const lowerBoundSecond = Math.floor(second / secondStep) * secondStep; return [lowerBoundHour, lowerBoundMinute, lowerBoundSecond]; } function getLastDay(generateConfig2, date) { const year = generateConfig2.getYear(date); const month = generateConfig2.getMonth(date) + 1; const endDate = generateConfig2.getEndDate(generateConfig2.getFixedDate(`${year}-${month}-01`)); const lastDay = generateConfig2.getDate(endDate); const monthShow = month < 10 ? `0${month}` : `${month}`; return `${year}-${monthShow}-${lastDay}`; } function PanelBody(_props) { const { prefixCls, disabledDate, onSelect, picker, rowNum, colNum, prefixColumn, rowClassName, baseDate, getCellClassName, getCellText, getCellNode, getCellDate, generateConfig: generateConfig2, titleCell, headerCells } = useMergeProps(_props); const { onDateMouseenter, onDateMouseleave, mode } = useInjectPanel(); const cellPrefixCls = `${prefixCls}-cell`; const rows = []; for (let i = 0; i < rowNum; i += 1) { const row = []; let rowStartDate; for (let j = 0; j < colNum; j += 1) { const offset = i * colNum + j; const currentDate = getCellDate(baseDate, offset); const disabled = getCellDateDisabled({ cellDate: currentDate, mode: mode.value, disabledDate, generateConfig: generateConfig2 }); if (j === 0) { rowStartDate = currentDate; if (prefixColumn) { row.push(prefixColumn(rowStartDate)); } } const title = titleCell && titleCell(currentDate); row.push(createVNode("td", { "key": j, "title": title, "class": classNames(cellPrefixCls, _extends({ [`${cellPrefixCls}-disabled`]: disabled, [`${cellPrefixCls}-start`]: getCellText(currentDate) === 1 || picker === "year" && Number(title) % 10 === 0, [`${cellPrefixCls}-end`]: title === getLastDay(generateConfig2, currentDate) || picker === "year" && Number(title) % 10 === 9 }, getCellClassName(currentDate))), "onClick": (e) => { e.stopPropagation(); if (!disabled) { onSelect(currentDate); } }, "onMouseenter": () => { if (!disabled && onDateMouseenter) { onDateMouseenter(currentDate); } }, "onMouseleave": () => { if (!disabled && onDateMouseleave) { onDateMouseleave(currentDate); } } }, [getCellNode ? getCellNode(currentDate) : createVNode("div", { "class": `${cellPrefixCls}-inner` }, [getCellText(currentDate)])])); } rows.push(createVNode("tr", { "key": i, "class": rowClassName && rowClassName(rowStartDate) }, [row])); } return createVNode("div", { "class": `${prefixCls}-body` }, [createVNode("table", { "class": `${prefixCls}-content` }, [headerCells && createVNode("thead", null, [createVNode("tr", null, [headerCells])]), createVNode("tbody", null, [rows])])]); } PanelBody.displayName = "PanelBody"; PanelBody.inheritAttrs = false; const DECADE_COL_COUNT = 3; const DECADE_ROW_COUNT = 4; function DecadeBody(_props) { const props = useMergeProps(_props); const DECADE_UNIT_DIFF_DES = DECADE_UNIT_DIFF - 1; const { prefixCls, viewDate, generateConfig: generateConfig2 } = props; const cellPrefixCls = `${prefixCls}-cell`; const yearNumber = generateConfig2.getYear(viewDate); const decadeYearNumber = Math.floor(yearNumber / DECADE_UNIT_DIFF) * DECADE_UNIT_DIFF; const startDecadeYear = Math.floor(yearNumber / DECADE_DISTANCE_COUNT) * DECADE_DISTANCE_COUNT; const endDecadeYear = startDecadeYear + DECADE_DISTANCE_COUNT - 1; const baseDecadeYear = generateConfig2.setYear(viewDate, startDecadeYear - Math.ceil((DECADE_COL_COUNT * DECADE_ROW_COUNT * DECADE_UNIT_DIFF - DECADE_DISTANCE_COUNT) / 2)); const getCellClassName = (date) => { const startDecadeNumber = generateConfig2.getYear(date); const endDecadeNumber = startDecadeNumber + DECADE_UNIT_DIFF_DES; return { [`${cellPrefixCls}-in-view`]: startDecadeYear <= startDecadeNumber && endDecadeNumber <= endDecadeYear, [`${cellPrefixCls}-selected`]: startDecadeNumber === decadeYearNumber }; }; return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "rowNum": DECADE_ROW_COUNT, "colNum": DECADE_COL_COUNT, "baseDate": baseDecadeYear, "getCellText": (date) => { const startDecadeNumber = generateConfig2.getYear(date); return `${startDecadeNumber}-${startDecadeNumber + DECADE_UNIT_DIFF_DES}`; }, "getCellClassName": getCellClassName, "getCellDate": (date, offset) => generateConfig2.addYear(date, offset * DECADE_UNIT_DIFF) }), null); } DecadeBody.displayName = "DecadeBody"; DecadeBody.inheritAttrs = false; const scrollIds = /* @__PURE__ */ new Map(); function waitElementReady(element, callback) { let id; function tryOrNextFrame() { if (isVisible(element)) { callback(); } else { id = wrapperRaf(() => { tryOrNextFrame(); }); } } tryOrNextFrame(); return () => { wrapperRaf.cancel(id); }; } function scrollTo(element, to, duration) { if (scrollIds.get(element)) { wrapperRaf.cancel(scrollIds.get(element)); } if (duration <= 0) { scrollIds.set(element, wrapperRaf(() => { element.scrollTop = to; })); return; } const difference = to - element.scrollTop; const perTick = difference / duration * 10; scrollIds.set(element, wrapperRaf(() => { element.scrollTop += perTick; if (element.scrollTop !== to) { scrollTo(element, to, duration - 10); } })); } function createKeydownHandler(event, _ref) { let { onLeftRight, onCtrlLeftRight, onUpDown, onPageUpDown, onEnter } = _ref; const { which, ctrlKey, metaKey } = event; switch (which) { case KeyCode.LEFT: if (ctrlKey || metaKey) { if (onCtrlLeftRight) { onCtrlLeftRight(-1); return true; } } else if (onLeftRight) { onLeftRight(-1); return true; } break; case KeyCode.RIGHT: if (ctrlKey || metaKey) { if (onCtrlLeftRight) { onCtrlLeftRight(1); return true; } } else if (onLeftRight) { onLeftRight(1); return true; } break; case KeyCode.UP: if (onUpDown) { onUpDown(-1); return true; } break; case KeyCode.DOWN: if (onUpDown) { onUpDown(1); return true; } break; case KeyCode.PAGE_UP: if (onPageUpDown) { onPageUpDown(-1); return true; } break; case KeyCode.PAGE_DOWN: if (onPageUpDown) { onPageUpDown(1); return true; } break; case KeyCode.ENTER: if (onEnter) { onEnter(); return true; } break; } return false; } function getDefaultFormat(format, picker, showTime, use12Hours) { let mergedFormat = format; if (!mergedFormat) { switch (picker) { case "time": mergedFormat = use12Hours ? "hh:mm:ss a" : "HH:mm:ss"; break; case "week": mergedFormat = "gggg-wo"; break; case "month": mergedFormat = "YYYY-MM"; break; case "quarter": mergedFormat = "YYYY-[Q]Q"; break; case "year": mergedFormat = "YYYY"; break; default: mergedFormat = showTime ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD"; } } return mergedFormat; } function getInputSize(picker, format, generateConfig2) { const defaultSize = picker === "time" ? 8 : 10; const length = typeof format === "function" ? format(generateConfig2.getNow()).length : format.length; return Math.max(defaultSize, length) + 2; } const getYearNextMode = (next) => { if (next === "month" || next === "date") { return "year"; } return next; }; const getMonthNextMode = (next) => { if (next === "date") { return "month"; } return next; }; const getQuarterNextMode = (next) => { if (next === "month" || next === "date") { return "quarter"; } return next; }; const getWeekNextMode = (next) => { if (next === "date") { return "week"; } return next; }; const PickerModeMap = { year: getYearNextMode, month: getMonthNextMode, quarter: getQuarterNextMode, week: getWeekNextMode, time: null, date: null }; function elementsContains(elements, target) { return elements.some((ele) => ele && ele.contains(target)); } const DECADE_UNIT_DIFF = 10; const DECADE_DISTANCE_COUNT = DECADE_UNIT_DIFF * 10; function DecadePanel(_props) { const props = useMergeProps(_props); const { prefixCls, onViewDateChange, generateConfig: generateConfig2, viewDate, operationRef, onSelect, onPanelChange } = props; const panelPrefixCls = `${prefixCls}-decade-panel`; operationRef.value = { onKeydown: (event) => createKeydownHandler(event, { onLeftRight: (diff) => { onSelect(generateConfig2.addYear(viewDate, diff * DECADE_UNIT_DIFF), "key"); }, onCtrlLeftRight: (diff) => { onSelect(generateConfig2.addYear(viewDate, diff * DECADE_DISTANCE_COUNT), "key"); }, onUpDown: (diff) => { onSelect(generateConfig2.addYear(viewDate, diff * DECADE_UNIT_DIFF * DECADE_COL_COUNT), "key"); }, onEnter: () => { onPanelChange("year", viewDate); } }) }; const onDecadesChange = (diff) => { const newDate = generateConfig2.addYear(viewDate, diff * DECADE_DISTANCE_COUNT); onViewDateChange(newDate); onPanelChange(null, newDate); }; const onInternalSelect = (date) => { onSelect(date, "mouse"); onPanelChange("year", date); }; return createVNode("div", { "class": panelPrefixCls }, [createVNode(DecadeHeader, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onPrevDecades": () => { onDecadesChange(-1); }, "onNextDecades": () => { onDecadesChange(1); } }), null), createVNode(DecadeBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onSelect": onInternalSelect }), null)]); } DecadePanel.displayName = "DecadePanel"; DecadePanel.inheritAttrs = false; const WEEK_DAY_COUNT = 7; function isNullEqual(value1, value2) { if (!value1 && !value2) { return true; } if (!value1 || !value2) { return false; } return void 0; } function isSameDecade(generateConfig2, decade1, decade2) { const equal = isNullEqual(decade1, decade2); if (typeof equal === "boolean") { return equal; } const num1 = Math.floor(generateConfig2.getYear(decade1) / 10); const num2 = Math.floor(generateConfig2.getYear(decade2) / 10); return num1 === num2; } function isSameYear(generateConfig2, year1, year2) { const equal = isNullEqual(year1, year2); if (typeof equal === "boolean") { return equal; } return generateConfig2.getYear(year1) === generateConfig2.getYear(year2); } function getQuarter(generateConfig2, date) { const quota = Math.floor(generateConfig2.getMonth(date) / 3); return quota + 1; } function isSameQuarter(generateConfig2, quarter1, quarter2) { const equal = isNullEqual(quarter1, quarter2); if (typeof equal === "boolean") { return equal; } return isSameYear(generateConfig2, quarter1, quarter2) && getQuarter(generateConfig2, quarter1) === getQuarter(generateConfig2, quarter2); } function isSameMonth(generateConfig2, month1, month2) { const equal = isNullEqual(month1, month2); if (typeof equal === "boolean") { return equal; } return isSameYear(generateConfig2, month1, month2) && generateConfig2.getMonth(month1) === generateConfig2.getMonth(month2); } function isSameDate(generateConfig2, date1, date2) { const equal = isNullEqual(date1, date2); if (typeof equal === "boolean") { return equal; } return generateConfig2.getYear(date1) === generateConfig2.getYear(date2) && generateConfig2.getMonth(date1) === generateConfig2.getMonth(date2) && generateConfig2.getDate(date1) === generateConfig2.getDate(date2); } function isSameTime(generateConfig2, time1, time2) { const equal = isNullEqual(time1, time2); if (typeof equal === "boolean") { return equal; } return generateConfig2.getHour(time1) === generateConfig2.getHour(time2) && generateConfig2.getMinute(time1) === generateConfig2.getMinute(time2) && generateConfig2.getSecond(time1) === generateConfig2.getSecond(time2); } function isSameWeek(generateConfig2, locale2, date1, date2) { const equal = isNullEqual(date1, date2); if (typeof equal === "boolean") { return equal; } return generateConfig2.locale.getWeek(locale2, date1) === generateConfig2.locale.getWeek(locale2, date2); } function isEqual(generateConfig2, value1, value2) { return isSameDate(generateConfig2, value1, value2) && isSameTime(generateConfig2, value1, value2); } function isInRange(generateConfig2, startDate, endDate, current) { if (!startDate || !endDate || !current) { return false; } return !isSameDate(generateConfig2, startDate, current) && !isSameDate(generateConfig2, endDate, current) && generateConfig2.isAfter(current, startDate) && generateConfig2.isAfter(endDate, current); } function getWeekStartDate(locale2, generateConfig2, value) { const weekFirstDay = generateConfig2.locale.getWeekFirstDay(locale2); const monthStartDate = generateConfig2.setDate(value, 1); const startDateWeekDay = generateConfig2.getWeekDay(monthStartDate); let alignStartDate = generateConfig2.addDate(monthStartDate, weekFirstDay - startDateWeekDay); if (generateConfig2.getMonth(alignStartDate) === generateConfig2.getMonth(value) && generateConfig2.getDate(alignStartDate) > 1) { alignStartDate = generateConfig2.addDate(alignStartDate, -7); } return alignStartDate; } function getClosingViewDate(viewDate, picker, generateConfig2) { let offset = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 1; switch (picker) { case "year": return generateConfig2.addYear(viewDate, offset * 10); case "quarter": case "month": return generateConfig2.addYear(viewDate, offset); default: return generateConfig2.addMonth(viewDate, offset); } } function formatValue(value, _ref) { let { generateConfig: generateConfig2, locale: locale2, format } = _ref; return typeof format === "function" ? format(value) : generateConfig2.locale.format(locale2.locale, value, format); } function parseValue(value, _ref2) { let { generateConfig: generateConfig2, locale: locale2, formatList } = _ref2; if (!value || typeof formatList[0] === "function") { return null; } return generateConfig2.locale.parse(locale2.locale, value, formatList); } function getCellDateDisabled(_ref3) { let { cellDate, mode, disabledDate, generateConfig: generateConfig2 } = _ref3; if (!disabledDate) return false; const getDisabledFromRange = (currentMode, start, end) => { let current = start; while (current <= end) { let date; switch (currentMode) { case "date": { date = generateConfig2.setDate(cellDate, current); if (!disabledDate(date)) { return false; } break; } case "month": { date = generateConfig2.setMonth(cellDate, current); if (!getCellDateDisabled({ cellDate: date, mode: "month", generateConfig: generateConfig2, disabledDate })) { return false; } break; } case "year": { date = generateConfig2.setYear(cellDate, current); if (!getCellDateDisabled({ cellDate: date, mode: "year", generateConfig: generateConfig2, disabledDate })) { return false; } break; } } current += 1; } return true; }; switch (mode) { case "date": case "week": { return disabledDate(cellDate); } case "month": { const startDate = 1; const endDate = generateConfig2.getDate(generateConfig2.getEndDate(cellDate)); return getDisabledFromRange("date", startDate, endDate); } case "quarter": { const startMonth = Math.floor(generateConfig2.getMonth(cellDate) / 3) * 3; const endMonth = startMonth + 2; return getDisabledFromRange("month", startMonth, endMonth); } case "year": { return getDisabledFromRange("month", 0, 11); } case "decade": { const year = generateConfig2.getYear(cellDate); const startYear = Math.floor(year / DECADE_UNIT_DIFF) * DECADE_UNIT_DIFF; const endYear = startYear + DECADE_UNIT_DIFF - 1; return getDisabledFromRange("year", startYear, endYear); } } } function TimeHeader(_props) { const props = useMergeProps(_props); const { hideHeader } = useInjectPanel(); if (hideHeader.value) { return null; } const { prefixCls, generateConfig: generateConfig2, locale: locale2, value, format } = props; const headerPrefixCls = `${prefixCls}-header`; return createVNode(Header, { "prefixCls": headerPrefixCls }, { default: () => [value ? formatValue(value, { locale: locale2, format, generateConfig: generateConfig2 }) : "\xA0"] }); } TimeHeader.displayName = "TimeHeader"; TimeHeader.inheritAttrs = false; const TimeUnitColumn = defineComponent({ name: "TimeUnitColumn", props: ["prefixCls", "units", "onSelect", "value", "active", "hideDisabledOptions"], setup(props) { const { open } = useInjectPanel(); const ulRef = shallowRef(null); const liRefs = ref(/* @__PURE__ */ new Map()); const scrollRef = ref(); watch(() => props.value, () => { const li = liRefs.value.get(props.value); if (li && open.value !== false) { scrollTo(ulRef.value, li.offsetTop, 120); } }); watch(open, () => { var _a; (_a = scrollRef.value) === null || _a === void 0 ? void 0 : _a.call(scrollRef); nextTick(() => { if (open.value) { const li = liRefs.value.get(props.value); if (li) { scrollRef.value = waitElementReady(li, () => { scrollTo(ulRef.value, li.offsetTop, 0); }); } } }); }, { immediate: true, flush: "post" }); return () => { const { prefixCls, units, onSelect, value, active, hideDisabledOptions } = props; const cellPrefixCls = `${prefixCls}-cell`; return createVNode("ul", { "class": classNames(`${prefixCls}-column`, { [`${prefixCls}-column-active`]: active }), "ref": ulRef, "style": { position: "relative" } }, [units.map((unit) => { if (hideDisabledOptions && unit.disabled) { return null; } return createVNode("li", { "key": unit.value, "ref": (element) => { liRefs.value.set(unit.value, element); }, "class": classNames(cellPrefixCls, { [`${cellPrefixCls}-disabled`]: unit.disabled, [`${cellPrefixCls}-selected`]: value === unit.value }), "onClick": () => { if (unit.disabled) { return; } onSelect(unit.value); } }, [createVNode("div", { "class": `${cellPrefixCls}-inner` }, [unit.label])]); })]); }; } }); function leftPad(str, length) { let fill = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "0"; let current = String(str); while (current.length < length) { current = `${fill}${str}`; } return current; } const tuple = function() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return args; }; function toArray$1(val) { if (val === null || val === void 0) { return []; } return Array.isArray(val) ? val : [val]; } function getDataOrAriaProps(props) { const retProps = {}; Object.keys(props).forEach((key) => { if ((key.startsWith("data-") || key.startsWith("aria-") || key === "role" || key === "name") && !key.startsWith("data-__")) { retProps[key] = props[key]; } }); return retProps; } function getValue(values, index) { return values ? values[index] : null; } function updateValues(values, value, index) { const newValues = [getValue(values, 0), getValue(values, 1)]; newValues[index] = typeof value === "function" ? value(newValues[index]) : value; if (!newValues[0] && !newValues[1]) { return null; } return newValues; } function generateUnits(start, end, step, disabledUnits) { const units = []; for (let i = start; i <= end; i += step) { units.push({ label: leftPad(i, 2), value: i, disabled: (disabledUnits || []).includes(i) }); } return units; } const TimeBody = defineComponent({ compatConfig: { MODE: 3 }, name: "TimeBody", inheritAttrs: false, props: ["generateConfig", "prefixCls", "operationRef", "activeColumnIndex", "value", "showHour", "showMinute", "showSecond", "use12Hours", "hourStep", "minuteStep", "secondStep", "disabledHours", "disabledMinutes", "disabledSeconds", "disabledTime", "hideDisabledOptions", "onSelect"], setup(props) { const originHour = computed(() => props.value ? props.generateConfig.getHour(props.value) : -1); const isPM = computed(() => { if (props.use12Hours) { return originHour.value >= 12; } else { return false; } }); const hour = computed(() => { if (props.use12Hours) { return originHour.value % 12; } else { return originHour.value; } }); const minute = computed(() => props.value ? props.generateConfig.getMinute(props.value) : -1); const second = computed(() => props.value ? props.generateConfig.getSecond(props.value) : -1); const now = ref(props.generateConfig.getNow()); const mergedDisabledHours = ref(); const mergedDisabledMinutes = ref(); const mergedDisabledSeconds = ref(); watchEffect(() => { if (props.disabledTime) { const disabledConfig = props.disabledTime(now); [mergedDisabledHours.value, mergedDisabledMinutes.value, mergedDisabledSeconds.value] = [disabledConfig.disabledHours, disabledConfig.disabledMinutes, disabledConfig.disabledSeconds]; } else { [mergedDisabledHours.value, mergedDisabledMinutes.value, mergedDisabledSeconds.value] = [props.disabledHours, props.disabledMinutes, props.disabledSeconds]; } }); const setTime$1 = (isNewPM, newHour, newMinute, newSecond) => { let newDate = props.value || props.generateConfig.getNow(); const mergedHour = Math.max(0, newHour); const mergedMinute = Math.max(0, newMinute); const mergedSecond = Math.max(0, newSecond); newDate = setTime(props.generateConfig, newDate, !props.use12Hours || !isNewPM ? mergedHour : mergedHour + 12, mergedMinute, mergedSecond); return newDate; }; const rawHours = computed(() => { var _a; return generateUnits(0, 23, (_a = props.hourStep) !== null && _a !== void 0 ? _a : 1, mergedDisabledHours.value && mergedDisabledHours.value()); }); const AMPMDisabled = computed(() => { if (!props.use12Hours) { return [false, false]; } const AMPMDisabled2 = [true, true]; rawHours.value.forEach((_ref) => { let { disabled, value: hourValue } = _ref; if (disabled) return; if (hourValue >= 12) { AMPMDisabled2[1] = false; } else { AMPMDisabled2[0] = false; } }); return AMPMDisabled2; }); const hours = computed(() => { if (!props.use12Hours) return rawHours.value; return rawHours.value.filter(isPM.value ? (hourMeta) => hourMeta.value >= 12 : (hourMeta) => hourMeta.value < 12).map((hourMeta) => { const hourValue = hourMeta.value % 12; const hourLabel = hourValue === 0 ? "12" : leftPad(hourValue, 2); return _extends(_extends({}, hourMeta), { label: hourLabel, value: hourValue }); }); }); const minutes = computed(() => { var _a; return generateUnits(0, 59, (_a = props.minuteStep) !== null && _a !== void 0 ? _a : 1, mergedDisabledMinutes.value && mergedDisabledMinutes.value(originHour.value)); }); const seconds = computed(() => { var _a; return generateUnits(0, 59, (_a = props.secondStep) !== null && _a !== void 0 ? _a : 1, mergedDisabledSeconds.value && mergedDisabledSeconds.value(originHour.value, minute.value)); }); return () => { const { prefixCls, operationRef, activeColumnIndex, showHour, showMinute, showSecond, use12Hours, hideDisabledOptions, onSelect } = props; const columns = []; const contentPrefixCls = `${prefixCls}-content`; const columnPrefixCls = `${prefixCls}-time-panel`; operationRef.value = { onUpDown: (diff) => { const column = columns[activeColumnIndex]; if (column) { const valueIndex = column.units.findIndex((unit) => unit.value === column.value); const unitLen = column.units.length; for (let i = 1; i < unitLen; i += 1) { const nextUnit = column.units[(valueIndex + diff * i + unitLen) % unitLen]; if (nextUnit.disabled !== true) { column.onSelect(nextUnit.value); break; } } } } }; function addColumnNode(condition, node, columnValue, units, onColumnSelect) { if (condition !== false) { columns.push({ node: cloneElement(node, { prefixCls: columnPrefixCls, value: columnValue, active: activeColumnIndex === columns.length, onSelect: onColumnSelect, units, hideDisabledOptions }), onSelect: onColumnSelect, value: columnValue, units }); } } addColumnNode(showHour, createVNode(TimeUnitColumn, { "key": "hour" }, null), hour.value, hours.value, (num) => { onSelect(setTime$1(isPM.value, num, minute.value, second.value), "mouse"); }); addColumnNode(showMinute, createVNode(TimeUnitColumn, { "key": "minute" }, null), minute.value, minutes.value, (num) => { onSelect(setTime$1(isPM.value, hour.value, num, second.value), "mouse"); }); addColumnNode(showSecond, createVNode(TimeUnitColumn, { "key": "second" }, null), second.value, seconds.value, (num) => { onSelect(setTime$1(isPM.value, hour.value, minute.value, num), "mouse"); }); let PMIndex = -1; if (typeof isPM.value === "boolean") { PMIndex = isPM.value ? 1 : 0; } addColumnNode(use12Hours === true, createVNode(TimeUnitColumn, { "key": "12hours" }, null), PMIndex, [{ label: "AM", value: 0, disabled: AMPMDisabled.value[0] }, { label: "PM", value: 1, disabled: AMPMDisabled.value[1] }], (num) => { onSelect(setTime$1(!!num, hour.value, minute.value, second.value), "mouse"); }); return createVNode("div", { "class": contentPrefixCls }, [columns.map((_ref2) => { let { node } = _ref2; return node; })]); }; } }); const countBoolean = (boolList) => boolList.filter((bool) => bool !== false).length; function TimePanel(_props) { const props = useMergeProps(_props); const { generateConfig: generateConfig2, format = "HH:mm:ss", prefixCls, active, operationRef, showHour, showMinute, showSecond, use12Hours = false, onSelect, value } = props; const panelPrefixCls = `${prefixCls}-time-panel`; const bodyOperationRef = ref(); const activeColumnIndex = ref(-1); const columnsCount = countBoolean([showHour, showMinute, showSecond, use12Hours]); operationRef.value = { onKeydown: (event) => createKeydownHandler(event, { onLeftRight: (diff) => { activeColumnIndex.value = (activeColumnIndex.value + diff + columnsCount) % columnsCount; }, onUpDown: (diff) => { if (activeColumnIndex.value === -1) { activeColumnIndex.value = 0; } else if (bodyOperationRef.value) { bodyOperationRef.value.onUpDown(diff); } }, onEnter: () => { onSelect(value || generateConfig2.getNow(), "key"); activeColumnIndex.value = -1; } }), onBlur: () => { activeColumnIndex.value = -1; } }; return createVNode("div", { "class": classNames(panelPrefixCls, { [`${panelPrefixCls}-active`]: active }) }, [createVNode(TimeHeader, _objectSpread$3(_objectSpread$3({}, props), {}, { "format": format, "prefixCls": prefixCls }), null), createVNode(TimeBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "activeColumnIndex": activeColumnIndex.value, "operationRef": bodyOperationRef }), null)]); } TimePanel.displayName = "TimePanel"; TimePanel.inheritAttrs = false; function useCellClassName(_ref) { let { cellPrefixCls, generateConfig: generateConfig2, rangedValue, hoverRangedValue, isInView, isSameCell, offsetCell, today, value } = _ref; function getClassName(currentDate) { const prevDate = offsetCell(currentDate, -1); const nextDate = offsetCell(currentDate, 1); const rangeStart = getValue(rangedValue, 0); const rangeEnd = getValue(rangedValue, 1); const hoverStart = getValue(hoverRangedValue, 0); const hoverEnd = getValue(hoverRangedValue, 1); const isRangeHovered = isInRange(generateConfig2, hoverStart, hoverEnd, currentDate); function isRangeStart(date) { return isSameCell(rangeStart, date); } function isRangeEnd(date) { return isSameCell(rangeEnd, date); } const isHoverStart = isSameCell(hoverStart, currentDate); const isHoverEnd = isSameCell(hoverEnd, currentDate); const isHoverEdgeStart = (isRangeHovered || isHoverEnd) && (!isInView(prevDate) || isRangeEnd(prevDate)); const isHoverEdgeEnd = (isRangeHovered || isHoverStart) && (!isInView(nextDate) || isRangeStart(nextDate)); return { // In view [`${cellPrefixCls}-in-view`]: isInView(currentDate), // Range [`${cellPrefixCls}-in-range`]: isInRange(generateConfig2, rangeStart, rangeEnd, currentDate), [`${cellPrefixCls}-range-start`]: isRangeStart(currentDate), [`${cellPrefixCls}-range-end`]: isRangeEnd(currentDate), [`${cellPrefixCls}-range-start-single`]: isRangeStart(currentDate) && !rangeEnd, [`${cellPrefixCls}-range-end-single`]: isRangeEnd(currentDate) && !rangeStart, [`${cellPrefixCls}-range-start-near-hover`]: isRangeStart(currentDate) && (isSameCell(prevDate, hoverStart) || isInRange(generateConfig2, hoverStart, hoverEnd, prevDate)), [`${cellPrefixCls}-range-end-near-hover`]: isRangeEnd(currentDate) && (isSameCell(nextDate, hoverEnd) || isInRange(generateConfig2, hoverStart, hoverEnd, nextDate)), // Range Hover [`${cellPrefixCls}-range-hover`]: isRangeHovered, [`${cellPrefixCls}-range-hover-start`]: isHoverStart, [`${cellPrefixCls}-range-hover-end`]: isHoverEnd, // Range Edge [`${cellPrefixCls}-range-hover-edge-start`]: isHoverEdgeStart, [`${cellPrefixCls}-range-hover-edge-end`]: isHoverEdgeEnd, [`${cellPrefixCls}-range-hover-edge-start-near-range`]: isHoverEdgeStart && isSameCell(prevDate, rangeEnd), [`${cellPrefixCls}-range-hover-edge-end-near-range`]: isHoverEdgeEnd && isSameCell(nextDate, rangeStart), // Others [`${cellPrefixCls}-today`]: isSameCell(today, currentDate), [`${cellPrefixCls}-selected`]: isSameCell(value, currentDate) }; } return getClassName; } const RangeContextKey = Symbol("RangeContextProps"); const useProvideRange = (props) => { provide(RangeContextKey, props); }; const useInjectRange = () => { return inject(RangeContextKey, { rangedValue: ref(), hoverRangedValue: ref(), inRange: ref(), panelPosition: ref() }); }; const RangeContextProvider = defineComponent({ compatConfig: { MODE: 3 }, name: "PanelContextProvider", inheritAttrs: false, props: { value: { type: Object, default: () => ({}) } }, setup(props, _ref) { let { slots } = _ref; const value = { rangedValue: ref(props.value.rangedValue), hoverRangedValue: ref(props.value.hoverRangedValue), inRange: ref(props.value.inRange), panelPosition: ref(props.value.panelPosition) }; useProvideRange(value); watch(() => props.value, () => { Object.keys(props.value).forEach((key) => { if (value[key]) { value[key].value = props.value[key]; } }); }); return () => { var _a; return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots); }; } }); function DateBody(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, prefixColumn, locale: locale2, rowCount, viewDate, value, dateRender } = props; const { rangedValue, hoverRangedValue } = useInjectRange(); const baseDate = getWeekStartDate(locale2.locale, generateConfig2, viewDate); const cellPrefixCls = `${prefixCls}-cell`; const weekFirstDay = generateConfig2.locale.getWeekFirstDay(locale2.locale); const today = generateConfig2.getNow(); const headerCells = []; const weekDaysLocale = locale2.shortWeekDays || (generateConfig2.locale.getShortWeekDays ? generateConfig2.locale.getShortWeekDays(locale2.locale) : []); if (prefixColumn) { headerCells.push(createVNode("th", { "key": "empty", "aria-label": "empty cell" }, null)); } for (let i = 0; i < WEEK_DAY_COUNT; i += 1) { headerCells.push(createVNode("th", { "key": i }, [weekDaysLocale[(i + weekFirstDay) % WEEK_DAY_COUNT]])); } const getCellClassName = useCellClassName({ cellPrefixCls, today, value, generateConfig: generateConfig2, rangedValue: prefixColumn ? null : rangedValue.value, hoverRangedValue: prefixColumn ? null : hoverRangedValue.value, isSameCell: (current, target) => isSameDate(generateConfig2, current, target), isInView: (date) => isSameMonth(generateConfig2, date, viewDate), offsetCell: (date, offset) => generateConfig2.addDate(date, offset) }); const getCellNode = dateRender ? (date) => dateRender({ current: date, today }) : void 0; return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "rowNum": rowCount, "colNum": WEEK_DAY_COUNT, "baseDate": baseDate, "getCellNode": getCellNode, "getCellText": generateConfig2.getDate, "getCellClassName": getCellClassName, "getCellDate": generateConfig2.addDate, "titleCell": (date) => formatValue(date, { locale: locale2, format: "YYYY-MM-DD", generateConfig: generateConfig2 }), "headerCells": headerCells }), null); } DateBody.displayName = "DateBody"; DateBody.inheritAttrs = false; DateBody.props = [ "prefixCls", "generateConfig", "value?", "viewDate", "locale", "rowCount", "onSelect", "dateRender?", "disabledDate?", // Used for week panel "prefixColumn?", "rowClassName?" ]; function DateHeader(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, locale: locale2, viewDate, onNextMonth, onPrevMonth, onNextYear, onPrevYear, onYearClick, onMonthClick } = props; const { hideHeader } = useInjectPanel(); if (hideHeader.value) { return null; } const headerPrefixCls = `${prefixCls}-header`; const monthsLocale = locale2.shortMonths || (generateConfig2.locale.getShortMonths ? generateConfig2.locale.getShortMonths(locale2.locale) : []); const month = generateConfig2.getMonth(viewDate); const yearNode = createVNode("button", { "type": "button", "key": "year", "onClick": onYearClick, "tabindex": -1, "class": `${prefixCls}-year-btn` }, [formatValue(viewDate, { locale: locale2, format: locale2.yearFormat, generateConfig: generateConfig2 })]); const monthNode = createVNode("button", { "type": "button", "key": "month", "onClick": onMonthClick, "tabindex": -1, "class": `${prefixCls}-month-btn` }, [locale2.monthFormat ? formatValue(viewDate, { locale: locale2, format: locale2.monthFormat, generateConfig: generateConfig2 }) : monthsLocale[month]]); const monthYearNodes = locale2.monthBeforeYear ? [monthNode, yearNode] : [yearNode, monthNode]; return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": headerPrefixCls, "onSuperPrev": onPrevYear, "onPrev": onPrevMonth, "onNext": onNextMonth, "onSuperNext": onNextYear }), { default: () => [monthYearNodes] }); } DateHeader.displayName = "DateHeader"; DateHeader.inheritAttrs = false; const DATE_ROW_COUNT = 6; function DatePanel(_props) { const props = useMergeProps(_props); const { prefixCls, panelName = "date", keyboardConfig, active, operationRef, generateConfig: generateConfig2, value, viewDate, onViewDateChange, onPanelChange, onSelect } = props; const panelPrefixCls = `${prefixCls}-${panelName}-panel`; operationRef.value = { onKeydown: (event) => createKeydownHandler(event, _extends({ onLeftRight: (diff) => { onSelect(generateConfig2.addDate(value || viewDate, diff), "key"); }, onCtrlLeftRight: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff), "key"); }, onUpDown: (diff) => { onSelect(generateConfig2.addDate(value || viewDate, diff * WEEK_DAY_COUNT), "key"); }, onPageUpDown: (diff) => { onSelect(generateConfig2.addMonth(value || viewDate, diff), "key"); } }, keyboardConfig)) }; const onYearChange = (diff) => { const newDate = generateConfig2.addYear(viewDate, diff); onViewDateChange(newDate); onPanelChange(null, newDate); }; const onMonthChange = (diff) => { const newDate = generateConfig2.addMonth(viewDate, diff); onViewDateChange(newDate); onPanelChange(null, newDate); }; return createVNode("div", { "class": classNames(panelPrefixCls, { [`${panelPrefixCls}-active`]: active }) }, [createVNode(DateHeader, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "value": value, "viewDate": viewDate, "onPrevYear": () => { onYearChange(-1); }, "onNextYear": () => { onYearChange(1); }, "onPrevMonth": () => { onMonthChange(-1); }, "onNextMonth": () => { onMonthChange(1); }, "onMonthClick": () => { onPanelChange("month", viewDate); }, "onYearClick": () => { onPanelChange("year", viewDate); } }), null), createVNode(DateBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "onSelect": (date) => onSelect(date, "mouse"), "prefixCls": prefixCls, "value": value, "viewDate": viewDate, "rowCount": DATE_ROW_COUNT }), null)]); } DatePanel.displayName = "DatePanel"; DatePanel.inheritAttrs = false; const ACTIVE_PANEL = tuple("date", "time"); function DatetimePanel(_props) { const props = useMergeProps(_props); const { prefixCls, operationRef, generateConfig: generateConfig2, value, defaultValue, disabledTime, showTime, onSelect } = props; const panelPrefixCls = `${prefixCls}-datetime-panel`; const activePanel = ref(null); const dateOperationRef = ref({}); const timeOperationRef = ref({}); const timeProps = typeof showTime === "object" ? _extends({}, showTime) : {}; function getNextActive(offset) { const activeIndex = ACTIVE_PANEL.indexOf(activePanel.value) + offset; const nextActivePanel = ACTIVE_PANEL[activeIndex] || null; return nextActivePanel; } const onBlur = (e) => { if (timeOperationRef.value.onBlur) { timeOperationRef.value.onBlur(e); } activePanel.value = null; }; operationRef.value = { onKeydown: (event) => { if (event.which === KeyCode.TAB) { const nextActivePanel = getNextActive(event.shiftKey ? -1 : 1); activePanel.value = nextActivePanel; if (nextActivePanel) { event.preventDefault(); } return true; } if (activePanel.value) { const ref2 = activePanel.value === "date" ? dateOperationRef : timeOperationRef; if (ref2.value && ref2.value.onKeydown) { ref2.value.onKeydown(event); } return true; } if ([KeyCode.LEFT, KeyCode.RIGHT, KeyCode.UP, KeyCode.DOWN].includes(event.which)) { activePanel.value = "date"; return true; } return false; }, onBlur, onClose: onBlur }; const onInternalSelect = (date, source) => { let selectedDate = date; if (source === "date" && !value && timeProps.defaultValue) { selectedDate = generateConfig2.setHour(selectedDate, generateConfig2.getHour(timeProps.defaultValue)); selectedDate = generateConfig2.setMinute(selectedDate, generateConfig2.getMinute(timeProps.defaultValue)); selectedDate = generateConfig2.setSecond(selectedDate, generateConfig2.getSecond(timeProps.defaultValue)); } else if (source === "time" && !value && defaultValue) { selectedDate = generateConfig2.setYear(selectedDate, generateConfig2.getYear(defaultValue)); selectedDate = generateConfig2.setMonth(selectedDate, generateConfig2.getMonth(defaultValue)); selectedDate = generateConfig2.setDate(selectedDate, generateConfig2.getDate(defaultValue)); } if (onSelect) { onSelect(selectedDate, "mouse"); } }; const disabledTimes = disabledTime ? disabledTime(value || null) : {}; return createVNode("div", { "class": classNames(panelPrefixCls, { [`${panelPrefixCls}-active`]: activePanel.value }) }, [createVNode(DatePanel, _objectSpread$3(_objectSpread$3({}, props), {}, { "operationRef": dateOperationRef, "active": activePanel.value === "date", "onSelect": (date) => { onInternalSelect(setDateTime(generateConfig2, date, !value && typeof showTime === "object" ? showTime.defaultValue : null), "date"); } }), null), createVNode(TimePanel, _objectSpread$3(_objectSpread$3(_objectSpread$3(_objectSpread$3({}, props), {}, { "format": void 0 }, timeProps), disabledTimes), {}, { "disabledTime": null, "defaultValue": void 0, "operationRef": timeOperationRef, "active": activePanel.value === "time", "onSelect": (date) => { onInternalSelect(date, "time"); } }), null)]); } DatetimePanel.displayName = "DatetimePanel"; DatetimePanel.inheritAttrs = false; function WeekPanel(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, locale: locale2, value } = props; const cellPrefixCls = `${prefixCls}-cell`; const prefixColumn = (date) => createVNode("td", { "key": "week", "class": classNames(cellPrefixCls, `${cellPrefixCls}-week`) }, [generateConfig2.locale.getWeek(locale2.locale, date)]); const rowPrefixCls = `${prefixCls}-week-panel-row`; const rowClassName = (date) => classNames(rowPrefixCls, { [`${rowPrefixCls}-selected`]: isSameWeek(generateConfig2, locale2.locale, value, date) }); return createVNode(DatePanel, _objectSpread$3(_objectSpread$3({}, props), {}, { "panelName": "week", "prefixColumn": prefixColumn, "rowClassName": rowClassName, "keyboardConfig": { onLeftRight: null } }), null); } WeekPanel.displayName = "WeekPanel"; WeekPanel.inheritAttrs = false; function MonthHeader(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, locale: locale2, viewDate, onNextYear, onPrevYear, onYearClick } = props; const { hideHeader } = useInjectPanel(); if (hideHeader.value) { return null; } const headerPrefixCls = `${prefixCls}-header`; return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": headerPrefixCls, "onSuperPrev": onPrevYear, "onSuperNext": onNextYear }), { default: () => [createVNode("button", { "type": "button", "onClick": onYearClick, "class": `${prefixCls}-year-btn` }, [formatValue(viewDate, { locale: locale2, format: locale2.yearFormat, generateConfig: generateConfig2 })])] }); } MonthHeader.displayName = "MonthHeader"; MonthHeader.inheritAttrs = false; const MONTH_COL_COUNT = 3; const MONTH_ROW_COUNT = 4; function MonthBody(_props) { const props = useMergeProps(_props); const { prefixCls, locale: locale2, value, viewDate, generateConfig: generateConfig2, monthCellRender } = props; const { rangedValue, hoverRangedValue } = useInjectRange(); const cellPrefixCls = `${prefixCls}-cell`; const getCellClassName = useCellClassName({ cellPrefixCls, value, generateConfig: generateConfig2, rangedValue: rangedValue.value, hoverRangedValue: hoverRangedValue.value, isSameCell: (current, target) => isSameMonth(generateConfig2, current, target), isInView: () => true, offsetCell: (date, offset) => generateConfig2.addMonth(date, offset) }); const monthsLocale = locale2.shortMonths || (generateConfig2.locale.getShortMonths ? generateConfig2.locale.getShortMonths(locale2.locale) : []); const baseMonth = generateConfig2.setMonth(viewDate, 0); const getCellNode = monthCellRender ? (date) => monthCellRender({ current: date, locale: locale2 }) : void 0; return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "rowNum": MONTH_ROW_COUNT, "colNum": MONTH_COL_COUNT, "baseDate": baseMonth, "getCellNode": getCellNode, "getCellText": (date) => locale2.monthFormat ? formatValue(date, { locale: locale2, format: locale2.monthFormat, generateConfig: generateConfig2 }) : monthsLocale[generateConfig2.getMonth(date)], "getCellClassName": getCellClassName, "getCellDate": generateConfig2.addMonth, "titleCell": (date) => formatValue(date, { locale: locale2, format: "YYYY-MM", generateConfig: generateConfig2 }) }), null); } MonthBody.displayName = "MonthBody"; MonthBody.inheritAttrs = false; function MonthPanel(_props) { const props = useMergeProps(_props); const { prefixCls, operationRef, onViewDateChange, generateConfig: generateConfig2, value, viewDate, onPanelChange, onSelect } = props; const panelPrefixCls = `${prefixCls}-month-panel`; operationRef.value = { onKeydown: (event) => createKeydownHandler(event, { onLeftRight: (diff) => { onSelect(generateConfig2.addMonth(value || viewDate, diff), "key"); }, onCtrlLeftRight: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff), "key"); }, onUpDown: (diff) => { onSelect(generateConfig2.addMonth(value || viewDate, diff * MONTH_COL_COUNT), "key"); }, onEnter: () => { onPanelChange("date", value || viewDate); } }) }; const onYearChange = (diff) => { const newDate = generateConfig2.addYear(viewDate, diff); onViewDateChange(newDate); onPanelChange(null, newDate); }; return createVNode("div", { "class": panelPrefixCls }, [createVNode(MonthHeader, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onPrevYear": () => { onYearChange(-1); }, "onNextYear": () => { onYearChange(1); }, "onYearClick": () => { onPanelChange("year", viewDate); } }), null), createVNode(MonthBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onSelect": (date) => { onSelect(date, "mouse"); onPanelChange("date", date); } }), null)]); } MonthPanel.displayName = "MonthPanel"; MonthPanel.inheritAttrs = false; function QuarterHeader(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, locale: locale2, viewDate, onNextYear, onPrevYear, onYearClick } = props; const { hideHeader } = useInjectPanel(); if (hideHeader.value) { return null; } const headerPrefixCls = `${prefixCls}-header`; return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": headerPrefixCls, "onSuperPrev": onPrevYear, "onSuperNext": onNextYear }), { default: () => [createVNode("button", { "type": "button", "onClick": onYearClick, "class": `${prefixCls}-year-btn` }, [formatValue(viewDate, { locale: locale2, format: locale2.yearFormat, generateConfig: generateConfig2 })])] }); } QuarterHeader.displayName = "QuarterHeader"; QuarterHeader.inheritAttrs = false; const QUARTER_COL_COUNT = 4; const QUARTER_ROW_COUNT = 1; function QuarterBody(_props) { const props = useMergeProps(_props); const { prefixCls, locale: locale2, value, viewDate, generateConfig: generateConfig2 } = props; const { rangedValue, hoverRangedValue } = useInjectRange(); const cellPrefixCls = `${prefixCls}-cell`; const getCellClassName = useCellClassName({ cellPrefixCls, value, generateConfig: generateConfig2, rangedValue: rangedValue.value, hoverRangedValue: hoverRangedValue.value, isSameCell: (current, target) => isSameQuarter(generateConfig2, current, target), isInView: () => true, offsetCell: (date, offset) => generateConfig2.addMonth(date, offset * 3) }); const baseQuarter = generateConfig2.setDate(generateConfig2.setMonth(viewDate, 0), 1); return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "rowNum": QUARTER_ROW_COUNT, "colNum": QUARTER_COL_COUNT, "baseDate": baseQuarter, "getCellText": (date) => formatValue(date, { locale: locale2, format: locale2.quarterFormat || "[Q]Q", generateConfig: generateConfig2 }), "getCellClassName": getCellClassName, "getCellDate": (date, offset) => generateConfig2.addMonth(date, offset * 3), "titleCell": (date) => formatValue(date, { locale: locale2, format: "YYYY-[Q]Q", generateConfig: generateConfig2 }) }), null); } QuarterBody.displayName = "QuarterBody"; QuarterBody.inheritAttrs = false; function QuarterPanel(_props) { const props = useMergeProps(_props); const { prefixCls, operationRef, onViewDateChange, generateConfig: generateConfig2, value, viewDate, onPanelChange, onSelect } = props; const panelPrefixCls = `${prefixCls}-quarter-panel`; operationRef.value = { onKeydown: (event) => createKeydownHandler(event, { onLeftRight: (diff) => { onSelect(generateConfig2.addMonth(value || viewDate, diff * 3), "key"); }, onCtrlLeftRight: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff), "key"); }, onUpDown: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff), "key"); } }) }; const onYearChange = (diff) => { const newDate = generateConfig2.addYear(viewDate, diff); onViewDateChange(newDate); onPanelChange(null, newDate); }; return createVNode("div", { "class": panelPrefixCls }, [createVNode(QuarterHeader, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onPrevYear": () => { onYearChange(-1); }, "onNextYear": () => { onYearChange(1); }, "onYearClick": () => { onPanelChange("year", viewDate); } }), null), createVNode(QuarterBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onSelect": (date) => { onSelect(date, "mouse"); } }), null)]); } QuarterPanel.displayName = "QuarterPanel"; QuarterPanel.inheritAttrs = false; function YearHeader(_props) { const props = useMergeProps(_props); const { prefixCls, generateConfig: generateConfig2, viewDate, onPrevDecade, onNextDecade, onDecadeClick } = props; const { hideHeader } = useInjectPanel(); if (hideHeader.value) { return null; } const headerPrefixCls = `${prefixCls}-header`; const yearNumber = generateConfig2.getYear(viewDate); const startYear = Math.floor(yearNumber / YEAR_DECADE_COUNT) * YEAR_DECADE_COUNT; const endYear = startYear + YEAR_DECADE_COUNT - 1; return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": headerPrefixCls, "onSuperPrev": onPrevDecade, "onSuperNext": onNextDecade }), { default: () => [createVNode("button", { "type": "button", "onClick": onDecadeClick, "class": `${prefixCls}-decade-btn` }, [startYear, createTextVNode("-"), endYear])] }); } YearHeader.displayName = "YearHeader"; YearHeader.inheritAttrs = false; const YEAR_COL_COUNT = 3; const YEAR_ROW_COUNT = 4; function YearBody(_props) { const props = useMergeProps(_props); const { prefixCls, value, viewDate, locale: locale2, generateConfig: generateConfig2 } = props; const { rangedValue, hoverRangedValue } = useInjectRange(); const yearPrefixCls = `${prefixCls}-cell`; const yearNumber = generateConfig2.getYear(viewDate); const startYear = Math.floor(yearNumber / YEAR_DECADE_COUNT) * YEAR_DECADE_COUNT; const endYear = startYear + YEAR_DECADE_COUNT - 1; const baseYear = generateConfig2.setYear(viewDate, startYear - Math.ceil((YEAR_COL_COUNT * YEAR_ROW_COUNT - YEAR_DECADE_COUNT) / 2)); const isInView = (date) => { const currentYearNumber = generateConfig2.getYear(date); return startYear <= currentYearNumber && currentYearNumber <= endYear; }; const getCellClassName = useCellClassName({ cellPrefixCls: yearPrefixCls, value, generateConfig: generateConfig2, rangedValue: rangedValue.value, hoverRangedValue: hoverRangedValue.value, isSameCell: (current, target) => isSameYear(generateConfig2, current, target), isInView, offsetCell: (date, offset) => generateConfig2.addYear(date, offset) }); return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "rowNum": YEAR_ROW_COUNT, "colNum": YEAR_COL_COUNT, "baseDate": baseYear, "getCellText": generateConfig2.getYear, "getCellClassName": getCellClassName, "getCellDate": generateConfig2.addYear, "titleCell": (date) => formatValue(date, { locale: locale2, format: "YYYY", generateConfig: generateConfig2 }) }), null); } YearBody.displayName = "YearBody"; YearBody.inheritAttrs = false; const YEAR_DECADE_COUNT = 10; function YearPanel(_props) { const props = useMergeProps(_props); const { prefixCls, operationRef, onViewDateChange, generateConfig: generateConfig2, value, viewDate, sourceMode, onSelect, onPanelChange } = props; const panelPrefixCls = `${prefixCls}-year-panel`; operationRef.value = { onKeydown: (event) => createKeydownHandler(event, { onLeftRight: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff), "key"); }, onCtrlLeftRight: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff * YEAR_DECADE_COUNT), "key"); }, onUpDown: (diff) => { onSelect(generateConfig2.addYear(value || viewDate, diff * YEAR_COL_COUNT), "key"); }, onEnter: () => { onPanelChange(sourceMode === "date" ? "date" : "month", value || viewDate); } }) }; const onDecadeChange = (diff) => { const newDate = generateConfig2.addYear(viewDate, diff * 10); onViewDateChange(newDate); onPanelChange(null, newDate); }; return createVNode("div", { "class": panelPrefixCls }, [createVNode(YearHeader, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onPrevDecade": () => { onDecadeChange(-1); }, "onNextDecade": () => { onDecadeChange(1); }, "onDecadeClick": () => { onPanelChange("decade", viewDate); } }), null), createVNode(YearBody, _objectSpread$3(_objectSpread$3({}, props), {}, { "prefixCls": prefixCls, "onSelect": (date) => { onPanelChange(sourceMode === "date" ? "date" : "month", date); onSelect(date, "mouse"); } }), null)]); } YearPanel.displayName = "YearPanel"; YearPanel.inheritAttrs = false; function getExtraFooter(prefixCls, mode, renderExtraFooter) { if (!renderExtraFooter) { return null; } return createVNode("div", { "class": `${prefixCls}-footer-extra` }, [renderExtraFooter(mode)]); } function getRanges(_ref) { let { prefixCls, components = {}, needConfirmButton, onNow, onOk, okDisabled, showNow, locale: locale2 } = _ref; let presetNode; let okNode; if (needConfirmButton) { const Button2 = components.button || "button"; if (onNow && showNow !== false) { presetNode = createVNode("li", { "class": `${prefixCls}-now` }, [createVNode("a", { "class": `${prefixCls}-now-btn`, "onClick": onNow }, [locale2.now])]); } okNode = needConfirmButton && createVNode("li", { "class": `${prefixCls}-ok` }, [createVNode(Button2, { "disabled": okDisabled, "onClick": (e) => { e.stopPropagation(); onOk && onOk(); } }, { default: () => [locale2.ok] })]); } if (!presetNode && !okNode) { return null; } return createVNode("ul", { "class": `${prefixCls}-ranges` }, [presetNode, okNode]); } function PickerPanel() { return defineComponent({ name: "PickerPanel", inheritAttrs: false, props: { prefixCls: String, locale: Object, generateConfig: Object, value: Object, defaultValue: Object, pickerValue: Object, defaultPickerValue: Object, disabledDate: Function, mode: String, picker: { type: String, default: "date" }, tabindex: { type: [Number, String], default: 0 }, showNow: { type: Boolean, default: void 0 }, showTime: [Boolean, Object], showToday: Boolean, renderExtraFooter: Function, dateRender: Function, hideHeader: { type: Boolean, default: void 0 }, onSelect: Function, onChange: Function, onPanelChange: Function, onMousedown: Function, onPickerValueChange: Function, onOk: Function, components: Object, direction: String, hourStep: { type: Number, default: 1 }, minuteStep: { type: Number, default: 1 }, secondStep: { type: Number, default: 1 } }, setup(props, _ref) { let { attrs } = _ref; const needConfirmButton = computed(() => props.picker === "date" && !!props.showTime || props.picker === "time"); const isHourStepValid = computed(() => 24 % props.hourStep === 0); const isMinuteStepValid = computed(() => 60 % props.minuteStep === 0); const isSecondStepValid = computed(() => 60 % props.secondStep === 0); const panelContext = useInjectPanel(); const { operationRef, onSelect: onContextSelect, hideRanges, defaultOpenValue } = panelContext; const { inRange, panelPosition, rangedValue, hoverRangedValue } = useInjectRange(); const panelRef = ref({}); const [mergedValue, setInnerValue] = useMergedState(null, { value: toRef(props, "value"), defaultValue: props.defaultValue, postState: (val) => { if (!val && (defaultOpenValue === null || defaultOpenValue === void 0 ? void 0 : defaultOpenValue.value) && props.picker === "time") { return defaultOpenValue.value; } return val; } }); const [viewDate, setInnerViewDate] = useMergedState(null, { value: toRef(props, "pickerValue"), defaultValue: props.defaultPickerValue || mergedValue.value, postState: (date) => { const { generateConfig: generateConfig2, showTime, defaultValue } = props; const now = generateConfig2.getNow(); if (!date) return now; if (!mergedValue.value && props.showTime) { if (typeof showTime === "object") { return setDateTime(generateConfig2, Array.isArray(date) ? date[0] : date, showTime.defaultValue || now); } if (defaultValue) { return setDateTime(generateConfig2, Array.isArray(date) ? date[0] : date, defaultValue); } return setDateTime(generateConfig2, Array.isArray(date) ? date[0] : date, now); } return date; } }); const setViewDate = (date) => { setInnerViewDate(date); if (props.onPickerValueChange) { props.onPickerValueChange(date); } }; const getInternalNextMode = (nextMode) => { const getNextMode = PickerModeMap[props.picker]; if (getNextMode) { return getNextMode(nextMode); } return nextMode; }; const [mergedMode, setInnerMode] = useMergedState(() => { if (props.picker === "time") { return "time"; } return getInternalNextMode("date"); }, { value: toRef(props, "mode") }); watch(() => props.picker, () => { setInnerMode(props.picker); }); const sourceMode = ref(mergedMode.value); const setSourceMode = (val) => { sourceMode.value = val; }; const onInternalPanelChange = (newMode, viewValue) => { const { onPanelChange, generateConfig: generateConfig2 } = props; const nextMode = getInternalNextMode(newMode || mergedMode.value); setSourceMode(mergedMode.value); setInnerMode(nextMode); if (onPanelChange && (mergedMode.value !== nextMode || isEqual(generateConfig2, viewDate.value, viewDate.value))) { onPanelChange(viewValue, nextMode); } }; const triggerSelect = function(date, type) { let forceTriggerSelect = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; const { picker, generateConfig: generateConfig2, onSelect, onChange, disabledDate } = props; if (mergedMode.value === picker || forceTriggerSelect) { setInnerValue(date); if (onSelect) { onSelect(date); } if (onContextSelect) { onContextSelect(date, type); } if (onChange && !isEqual(generateConfig2, date, mergedValue.value) && !(disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date))) { onChange(date); } } }; const onInternalKeydown = (e) => { if (panelRef.value && panelRef.value.onKeydown) { if ([KeyCode.LEFT, KeyCode.RIGHT, KeyCode.UP, KeyCode.DOWN, KeyCode.PAGE_UP, KeyCode.PAGE_DOWN, KeyCode.ENTER].includes(e.which)) { e.preventDefault(); } return panelRef.value.onKeydown(e); } { return false; } }; const onInternalBlur = (e) => { if (panelRef.value && panelRef.value.onBlur) { panelRef.value.onBlur(e); } }; const onNow = () => { const { generateConfig: generateConfig2, hourStep, minuteStep, secondStep } = props; const now = generateConfig2.getNow(); const lowerBoundTime = getLowerBoundTime(generateConfig2.getHour(now), generateConfig2.getMinute(now), generateConfig2.getSecond(now), isHourStepValid.value ? hourStep : 1, isMinuteStepValid.value ? minuteStep : 1, isSecondStepValid.value ? secondStep : 1); const adjustedNow = setTime( generateConfig2, now, lowerBoundTime[0], // hour lowerBoundTime[1], // minute lowerBoundTime[2] ); triggerSelect(adjustedNow, "submit"); }; const classString = computed(() => { const { prefixCls, direction } = props; return classNames(`${prefixCls}-panel`, { [`${prefixCls}-panel-has-range`]: rangedValue && rangedValue.value && rangedValue.value[0] && rangedValue.value[1], [`${prefixCls}-panel-has-range-hover`]: hoverRangedValue && hoverRangedValue.value && hoverRangedValue.value[0] && hoverRangedValue.value[1], [`${prefixCls}-panel-rtl`]: direction === "rtl" }); }); useProvidePanel(_extends(_extends({}, panelContext), { mode: mergedMode, hideHeader: computed(() => { var _a; return props.hideHeader !== void 0 ? props.hideHeader : (_a = panelContext.hideHeader) === null || _a === void 0 ? void 0 : _a.value; }), hidePrevBtn: computed(() => inRange.value && panelPosition.value === "right"), hideNextBtn: computed(() => inRange.value && panelPosition.value === "left") })); watch(() => props.value, () => { if (props.value) { setInnerViewDate(props.value); } }); return () => { const { prefixCls = "ant-picker", locale: locale2, generateConfig: generateConfig2, disabledDate, picker = "date", tabindex = 0, showNow, showTime, showToday, renderExtraFooter, onMousedown, onOk, components } = props; if (operationRef && panelPosition.value !== "right") { operationRef.value = { onKeydown: onInternalKeydown, onClose: () => { if (panelRef.value && panelRef.value.onClose) { panelRef.value.onClose(); } } }; } let panelNode; const pickerProps = _extends(_extends(_extends({}, attrs), props), { operationRef: panelRef, prefixCls, viewDate: viewDate.value, value: mergedValue.value, onViewDateChange: setViewDate, sourceMode: sourceMode.value, onPanelChange: onInternalPanelChange, disabledDate }); delete pickerProps.onChange; delete pickerProps.onSelect; switch (mergedMode.value) { case "decade": panelNode = createVNode(DecadePanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); break; case "year": panelNode = createVNode(YearPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); break; case "month": panelNode = createVNode(MonthPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); break; case "quarter": panelNode = createVNode(QuarterPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); break; case "week": panelNode = createVNode(WeekPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); break; case "time": delete pickerProps.showTime; panelNode = createVNode(TimePanel, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, pickerProps), typeof showTime === "object" ? showTime : null), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); break; default: if (showTime) { panelNode = createVNode(DatetimePanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); } else { panelNode = createVNode(DatePanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, { "onSelect": (date, type) => { setViewDate(date); triggerSelect(date, type); } }), null); } } let extraFooter; let rangesNode; if (!(hideRanges === null || hideRanges === void 0 ? void 0 : hideRanges.value)) { extraFooter = getExtraFooter(prefixCls, mergedMode.value, renderExtraFooter); rangesNode = getRanges({ prefixCls, components, needConfirmButton: needConfirmButton.value, okDisabled: !mergedValue.value || disabledDate && disabledDate(mergedValue.value), locale: locale2, showNow, onNow: needConfirmButton.value && onNow, onOk: () => { if (mergedValue.value) { triggerSelect(mergedValue.value, "submit", true); if (onOk) { onOk(mergedValue.value); } } } }); } let todayNode; if (showToday && mergedMode.value === "date" && picker === "date" && !showTime) { const now = generateConfig2.getNow(); const todayCls = `${prefixCls}-today-btn`; const disabled = disabledDate && disabledDate(now); todayNode = createVNode("a", { "class": classNames(todayCls, disabled && `${todayCls}-disabled`), "aria-disabled": disabled, "onClick": () => { if (!disabled) { triggerSelect(now, "mouse", true); } } }, [locale2.today]); } return createVNode("div", { "tabindex": tabindex, "class": classNames(classString.value, attrs.class), "style": attrs.style, "onKeydown": onInternalKeydown, "onBlur": onInternalBlur, "onMousedown": onMousedown }, [panelNode, extraFooter || rangesNode || todayNode ? createVNode("div", { "class": `${prefixCls}-footer` }, [extraFooter, rangesNode, todayNode]) : null]); }; } }); } const InterPickerPanel = PickerPanel(); const PickerPanel$1 = (props) => createVNode(InterPickerPanel, props); const BUILT_IN_PLACEMENTS = { bottomLeft: { points: ["tl", "bl"], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, bottomRight: { points: ["tr", "br"], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, topLeft: { points: ["bl", "tl"], offset: [0, -4], overflow: { adjustX: 0, adjustY: 1 } }, topRight: { points: ["br", "tr"], offset: [0, -4], overflow: { adjustX: 0, adjustY: 1 } } }; function PickerTrigger(props, _ref) { let { slots } = _ref; const { prefixCls, popupStyle, visible, dropdownClassName, dropdownAlign, transitionName, getPopupContainer, range, popupPlacement, direction } = useMergeProps(props); const dropdownPrefixCls = `${prefixCls}-dropdown`; const getPopupPlacement = () => { if (popupPlacement !== void 0) { return popupPlacement; } return direction === "rtl" ? "bottomRight" : "bottomLeft"; }; return createVNode(Trigger, { "showAction": [], "hideAction": [], "popupPlacement": getPopupPlacement(), "builtinPlacements": BUILT_IN_PLACEMENTS, "prefixCls": dropdownPrefixCls, "popupTransitionName": transitionName, "popupAlign": dropdownAlign, "popupVisible": visible, "popupClassName": classNames(dropdownClassName, { [`${dropdownPrefixCls}-range`]: range, [`${dropdownPrefixCls}-rtl`]: direction === "rtl" }), "popupStyle": popupStyle, "getPopupContainer": getPopupContainer }, { default: slots.default, popup: slots.popupElement }); } const PresetPanel = defineComponent({ name: "PresetPanel", props: { prefixCls: String, presets: { type: Array, default: () => [] }, onClick: Function, onHover: Function }, setup(props) { return () => { if (!props.presets.length) { return null; } return createVNode("div", { "class": `${props.prefixCls}-presets` }, [createVNode("ul", null, [props.presets.map((_ref, index) => { let { label, value } = _ref; return createVNode("li", { "key": index, "onClick": (e) => { e.stopPropagation(); props.onClick(value); }, "onMouseenter": () => { var _a; (_a = props.onHover) === null || _a === void 0 ? void 0 : _a.call(props, value); }, "onMouseleave": () => { var _a; (_a = props.onHover) === null || _a === void 0 ? void 0 : _a.call(props, null); } }, [label]); })])]); }; } }); function usePickerInput(_ref) { let { open, value, isClickOutside, triggerOpen, forwardKeydown, onKeydown, blurToCancel, onSubmit, onCancel, onFocus, onBlur } = _ref; const typing = shallowRef(false); const focused = shallowRef(false); const preventBlurRef = shallowRef(false); const valueChangedRef = shallowRef(false); const preventDefaultRef = shallowRef(false); const inputProps = computed(() => ({ onMousedown: () => { typing.value = true; triggerOpen(true); }, onKeydown: (e) => { const preventDefault = () => { preventDefaultRef.value = true; }; onKeydown(e, preventDefault); if (preventDefaultRef.value) return; switch (e.which) { case KeyCode.ENTER: { if (!open.value) { triggerOpen(true); } else if (onSubmit() !== false) { typing.value = true; } e.preventDefault(); return; } case KeyCode.TAB: { if (typing.value && open.value && !e.shiftKey) { typing.value = false; e.preventDefault(); } else if (!typing.value && open.value) { if (!forwardKeydown(e) && e.shiftKey) { typing.value = true; e.preventDefault(); } } return; } case KeyCode.ESC: { typing.value = true; onCancel(); return; } } if (!open.value && ![KeyCode.SHIFT].includes(e.which)) { triggerOpen(true); } else if (!typing.value) { forwardKeydown(e); } }, onFocus: (e) => { typing.value = true; focused.value = true; if (onFocus) { onFocus(e); } }, onBlur: (e) => { if (preventBlurRef.value || !isClickOutside((void 0).activeElement)) { preventBlurRef.value = false; return; } if (blurToCancel.value) { setTimeout(() => { let { activeElement } = void 0; while (activeElement && activeElement.shadowRoot) { activeElement = activeElement.shadowRoot.activeElement; } if (isClickOutside(activeElement)) { onCancel(); } }, 0); } else if (open.value) { triggerOpen(false); if (valueChangedRef.value) { onSubmit(); } } focused.value = false; if (onBlur) { onBlur(e); } } })); watch(open, () => { valueChangedRef.value = false; }); watch(value, () => { valueChangedRef.value = true; }); shallowRef(); return [inputProps, { focused, typing }]; } function useTextValueMapping(_ref) { let { valueTexts, onTextChange } = _ref; const text = ref(""); function triggerTextChange(value) { text.value = value; onTextChange(value); } function resetText() { text.value = valueTexts.value[0]; } watch(() => [...valueTexts.value], function(cur) { let pre = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []; if (cur.join("||") !== pre.join("||") && valueTexts.value.every((valText) => valText !== text.value)) { resetText(); } }, { immediate: true }); return [text, triggerTextChange, resetText]; } function useValueTexts(value, _ref) { let { formatList, generateConfig: generateConfig2, locale: locale2 } = _ref; const texts = useMemo(() => { if (!value.value) { return [[""], ""]; } let firstValueText2 = ""; const fullValueTexts2 = []; for (let i = 0; i < formatList.value.length; i += 1) { const format = formatList.value[i]; const formatStr = formatValue(value.value, { generateConfig: generateConfig2.value, locale: locale2.value, format }); fullValueTexts2.push(formatStr); if (i === 0) { firstValueText2 = formatStr; } } return [fullValueTexts2, firstValueText2]; }, [value, formatList], (next, prev) => prev[0] !== next[0] || !shallowequal(prev[1], next[1])); const fullValueTexts = computed(() => texts.value[0]); const firstValueText = computed(() => texts.value[1]); return [fullValueTexts, firstValueText]; } function useHoverValue(valueText, _ref) { let { formatList, generateConfig: generateConfig2, locale: locale2 } = _ref; const innerValue = ref(null); let rafId; function setValue(val) { let immediately = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; wrapperRaf.cancel(rafId); if (immediately) { innerValue.value = val; return; } rafId = wrapperRaf(() => { innerValue.value = val; }); } const [, firstText] = useValueTexts(innerValue, { formatList, generateConfig: generateConfig2, locale: locale2 }); function onEnter(date) { setValue(date); } function onLeave() { let immediately = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; setValue(null, immediately); } watch(valueText, () => { onLeave(true); }); return [firstText, onEnter, onLeave]; } function usePresets(presets, legacyRanges) { return computed(() => { if (presets === null || presets === void 0 ? void 0 : presets.value) { return presets.value; } if (legacyRanges === null || legacyRanges === void 0 ? void 0 : legacyRanges.value) { warningOnce(false, "`ranges` is deprecated. Please use `presets` instead."); const rangeLabels = Object.keys(legacyRanges.value); return rangeLabels.map((label) => { const range = legacyRanges.value[label]; const newValues = typeof range === "function" ? range() : range; return { label, value: newValues }; }); } return []; }); } function Picker() { return defineComponent({ name: "Picker", inheritAttrs: false, props: ["prefixCls", "id", "tabindex", "dropdownClassName", "dropdownAlign", "popupStyle", "transitionName", "generateConfig", "locale", "inputReadOnly", "allowClear", "autofocus", "showTime", "showNow", "showHour", "showMinute", "showSecond", "picker", "format", "use12Hours", "value", "defaultValue", "open", "defaultOpen", "defaultOpenValue", "suffixIcon", "presets", "clearIcon", "disabled", "disabledDate", "placeholder", "getPopupContainer", "panelRender", "inputRender", "onChange", "onOpenChange", "onPanelChange", "onFocus", "onBlur", "onMousedown", "onMouseup", "onMouseenter", "onMouseleave", "onContextmenu", "onClick", "onKeydown", "onSelect", "direction", "autocomplete", "showToday", "renderExtraFooter", "dateRender", "minuteStep", "hourStep", "secondStep", "hideDisabledOptions"], setup(props, _ref) { let { attrs, expose } = _ref; const inputRef = ref(null); const presets = computed(() => props.presets); const presetList = usePresets(presets); const picker = computed(() => { var _a; return (_a = props.picker) !== null && _a !== void 0 ? _a : "date"; }); const needConfirmButton = computed(() => picker.value === "date" && !!props.showTime || picker.value === "time"); const formatList = computed(() => toArray$1(getDefaultFormat(props.format, picker.value, props.showTime, props.use12Hours))); const panelDivRef = ref(null); const inputDivRef = ref(null); const containerRef = ref(null); const [mergedValue, setInnerValue] = useMergedState(null, { value: toRef(props, "value"), defaultValue: props.defaultValue }); const selectedValue = ref(mergedValue.value); const setSelectedValue = (val) => { selectedValue.value = val; }; const operationRef = ref(null); const [mergedOpen, triggerInnerOpen] = useMergedState(false, { value: toRef(props, "open"), defaultValue: props.defaultOpen, postState: (postOpen) => props.disabled ? false : postOpen, onChange: (newOpen) => { if (props.onOpenChange) { props.onOpenChange(newOpen); } if (!newOpen && operationRef.value && operationRef.value.onClose) { operationRef.value.onClose(); } } }); const [valueTexts, firstValueText] = useValueTexts(selectedValue, { formatList, generateConfig: toRef(props, "generateConfig"), locale: toRef(props, "locale") }); const [text, triggerTextChange, resetText] = useTextValueMapping({ valueTexts, onTextChange: (newText) => { const inputDate = parseValue(newText, { locale: props.locale, formatList: formatList.value, generateConfig: props.generateConfig }); if (inputDate && (!props.disabledDate || !props.disabledDate(inputDate))) { setSelectedValue(inputDate); } } }); const triggerChange = (newValue) => { const { onChange, generateConfig: generateConfig2, locale: locale2 } = props; setSelectedValue(newValue); setInnerValue(newValue); if (onChange && !isEqual(generateConfig2, mergedValue.value, newValue)) { onChange(newValue, newValue ? formatValue(newValue, { generateConfig: generateConfig2, locale: locale2, format: formatList.value[0] }) : ""); } }; const triggerOpen = (newOpen) => { if (props.disabled && newOpen) { return; } triggerInnerOpen(newOpen); }; const forwardKeydown = (e) => { if (mergedOpen.value && operationRef.value && operationRef.value.onKeydown) { return operationRef.value.onKeydown(e); } { return false; } }; const onInternalMouseup = function() { if (props.onMouseup) { props.onMouseup(...arguments); } if (inputRef.value) { inputRef.value.focus(); triggerOpen(true); } }; const [inputProps, { focused, typing }] = usePickerInput({ blurToCancel: needConfirmButton, open: mergedOpen, value: text, triggerOpen, forwardKeydown, isClickOutside: (target) => !elementsContains([panelDivRef.value, inputDivRef.value, containerRef.value], target), onSubmit: () => { if ( // When user typing disabledDate with keyboard and enter, this value will be empty !selectedValue.value || // Normal disabled check props.disabledDate && props.disabledDate(selectedValue.value) ) { return false; } triggerChange(selectedValue.value); triggerOpen(false); resetText(); return true; }, onCancel: () => { triggerOpen(false); setSelectedValue(mergedValue.value); resetText(); }, onKeydown: (e, preventDefault) => { var _a; (_a = props.onKeydown) === null || _a === void 0 ? void 0 : _a.call(props, e, preventDefault); }, onFocus: (e) => { var _a; (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e); }, onBlur: (e) => { var _a; (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e); } }); watch([mergedOpen, valueTexts], () => { if (!mergedOpen.value) { setSelectedValue(mergedValue.value); if (!valueTexts.value.length || valueTexts.value[0] === "") { triggerTextChange(""); } else if (firstValueText.value !== text.value) { resetText(); } } }); watch(picker, () => { if (!mergedOpen.value) { resetText(); } }); watch(mergedValue, () => { setSelectedValue(mergedValue.value); }); const [hoverValue, onEnter, onLeave] = useHoverValue(text, { formatList, generateConfig: toRef(props, "generateConfig"), locale: toRef(props, "locale") }); const onContextSelect = (date, type) => { if (type === "submit" || type !== "key" && !needConfirmButton.value) { triggerChange(date); triggerOpen(false); } }; useProvidePanel({ operationRef, hideHeader: computed(() => picker.value === "time"), onSelect: onContextSelect, open: mergedOpen, defaultOpenValue: toRef(props, "defaultOpenValue"), onDateMouseenter: onEnter, onDateMouseleave: onLeave }); expose({ focus: () => { if (inputRef.value) { inputRef.value.focus(); } }, blur: () => { if (inputRef.value) { inputRef.value.blur(); } } }); return () => { const { prefixCls = "rc-picker", id, tabindex, dropdownClassName, dropdownAlign, popupStyle, transitionName, generateConfig: generateConfig2, locale: locale2, inputReadOnly, allowClear, autofocus, picker: picker2 = "date", defaultOpenValue, suffixIcon, clearIcon, disabled, placeholder, getPopupContainer, panelRender, onMousedown, onMouseenter, onMouseleave, onContextmenu, onClick, onSelect, direction, autocomplete = "off" } = props; const panelProps = _extends(_extends(_extends({}, props), attrs), { class: classNames({ [`${prefixCls}-panel-focused`]: !typing.value }), style: void 0, pickerValue: void 0, onPickerValueChange: void 0, onChange: null }); let panelNode = createVNode("div", { "class": `${prefixCls}-panel-layout` }, [createVNode(PresetPanel, { "prefixCls": prefixCls, "presets": presetList.value, "onClick": (nextValue) => { triggerChange(nextValue); triggerOpen(false); } }, null), createVNode(PickerPanel$1, _objectSpread$3(_objectSpread$3({}, panelProps), {}, { "generateConfig": generateConfig2, "value": selectedValue.value, "locale": locale2, "tabindex": -1, "onSelect": (date) => { onSelect === null || onSelect === void 0 ? void 0 : onSelect(date); setSelectedValue(date); }, "direction": direction, "onPanelChange": (viewDate, mode) => { const { onPanelChange } = props; onLeave(true); onPanelChange === null || onPanelChange === void 0 ? void 0 : onPanelChange(viewDate, mode); } }), null)]); if (panelRender) { panelNode = panelRender(panelNode); } const panel = createVNode("div", { "class": `${prefixCls}-panel-container`, "ref": panelDivRef, "onMousedown": (e) => { e.preventDefault(); } }, [panelNode]); let suffixNode; if (suffixIcon) { suffixNode = createVNode("span", { "class": `${prefixCls}-suffix` }, [suffixIcon]); } let clearNode; if (allowClear && mergedValue.value && !disabled) { clearNode = createVNode("span", { "onMousedown": (e) => { e.preventDefault(); e.stopPropagation(); }, "onMouseup": (e) => { e.preventDefault(); e.stopPropagation(); triggerChange(null); triggerOpen(false); }, "class": `${prefixCls}-clear`, "role": "button" }, [clearIcon || createVNode("span", { "class": `${prefixCls}-clear-btn` }, null)]); } const mergedInputProps = _extends(_extends(_extends(_extends({ id, tabindex, disabled, readonly: inputReadOnly || typeof formatList.value[0] === "function" || !typing.value, value: hoverValue.value || text.value, onInput: (e) => { triggerTextChange(e.target.value); }, autofocus, placeholder, ref: inputRef, title: text.value }, inputProps.value), { size: getInputSize(picker2, formatList.value[0], generateConfig2) }), getDataOrAriaProps(props)), { autocomplete }); const inputNode = props.inputRender ? props.inputRender(mergedInputProps) : createVNode("input", mergedInputProps, null); const popupPlacement = direction === "rtl" ? "bottomRight" : "bottomLeft"; return createVNode("div", { "ref": containerRef, "class": classNames(prefixCls, attrs.class, { [`${prefixCls}-disabled`]: disabled, [`${prefixCls}-focused`]: focused.value, [`${prefixCls}-rtl`]: direction === "rtl" }), "style": attrs.style, "onMousedown": onMousedown, "onMouseup": onInternalMouseup, "onMouseenter": onMouseenter, "onMouseleave": onMouseleave, "onContextmenu": onContextmenu, "onClick": onClick }, [createVNode("div", { "class": classNames(`${prefixCls}-input`, { [`${prefixCls}-input-placeholder`]: !!hoverValue.value }), "ref": inputDivRef }, [inputNode, suffixNode, clearNode]), createVNode(PickerTrigger, { "visible": mergedOpen.value, "popupStyle": popupStyle, "prefixCls": prefixCls, "dropdownClassName": dropdownClassName, "dropdownAlign": dropdownAlign, "getPopupContainer": getPopupContainer, "transitionName": transitionName, "popupPlacement": popupPlacement, "direction": direction }, { default: () => [createVNode("div", { "style": { pointerEvents: "none", position: "absolute", top: 0, bottom: 0, left: 0, right: 0 } }, null)], popupElement: () => panel })]); }; } }); } const Picker$1 = Picker(); function useRangeDisabled(_ref, openRecordsRef) { let { picker, locale: locale2, selectedValue, disabledDate, disabled, generateConfig: generateConfig2 } = _ref; const startDate = computed(() => getValue(selectedValue.value, 0)); const endDate = computed(() => getValue(selectedValue.value, 1)); function weekFirstDate(date) { return generateConfig2.value.locale.getWeekFirstDate(locale2.value.locale, date); } function monthNumber(date) { const year = generateConfig2.value.getYear(date); const month = generateConfig2.value.getMonth(date); return year * 100 + month; } function quarterNumber(date) { const year = generateConfig2.value.getYear(date); const quarter = getQuarter(generateConfig2.value, date); return year * 10 + quarter; } const disabledStartDate = (date) => { var _a; if (disabledDate && ((_a = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate.value) === null || _a === void 0 ? void 0 : _a.call(disabledDate, date))) { return true; } if (disabled[1] && endDate) { return !isSameDate(generateConfig2.value, date, endDate.value) && generateConfig2.value.isAfter(date, endDate.value); } if (openRecordsRef.value[1] && endDate.value) { switch (picker.value) { case "quarter": return quarterNumber(date) > quarterNumber(endDate.value); case "month": return monthNumber(date) > monthNumber(endDate.value); case "week": return weekFirstDate(date) > weekFirstDate(endDate.value); default: return !isSameDate(generateConfig2.value, date, endDate.value) && generateConfig2.value.isAfter(date, endDate.value); } } return false; }; const disabledEndDate = (date) => { var _a; if ((_a = disabledDate.value) === null || _a === void 0 ? void 0 : _a.call(disabledDate, date)) { return true; } if (disabled[0] && startDate) { return !isSameDate(generateConfig2.value, date, endDate.value) && generateConfig2.value.isAfter(startDate.value, date); } if (openRecordsRef.value[0] && startDate.value) { switch (picker.value) { case "quarter": return quarterNumber(date) < quarterNumber(startDate.value); case "month": return monthNumber(date) < monthNumber(startDate.value); case "week": return weekFirstDate(date) < weekFirstDate(startDate.value); default: return !isSameDate(generateConfig2.value, date, startDate.value) && generateConfig2.value.isAfter(startDate.value, date); } } return false; }; return [disabledStartDate, disabledEndDate]; } function getStartEndDistance(startDate, endDate, picker, generateConfig2) { const startNext = getClosingViewDate(startDate, picker, generateConfig2, 1); function getDistance(compareFunc) { if (compareFunc(startDate, endDate)) { return "same"; } if (compareFunc(startNext, endDate)) { return "closing"; } return "far"; } switch (picker) { case "year": return getDistance((start, end) => isSameDecade(generateConfig2, start, end)); case "quarter": case "month": return getDistance((start, end) => isSameYear(generateConfig2, start, end)); default: return getDistance((start, end) => isSameMonth(generateConfig2, start, end)); } } function getRangeViewDate(values, index, picker, generateConfig2) { const startDate = getValue(values, 0); const endDate = getValue(values, 1); if (index === 0) { return startDate; } if (startDate && endDate) { const distance = getStartEndDistance(startDate, endDate, picker, generateConfig2); switch (distance) { case "same": return startDate; case "closing": return startDate; default: return getClosingViewDate(endDate, picker, generateConfig2, -1); } } return startDate; } function useRangeViewDates(_ref) { let { values, picker, defaultDates, generateConfig: generateConfig2 } = _ref; const defaultViewDates = ref([getValue(defaultDates, 0), getValue(defaultDates, 1)]); const viewDates = ref(null); const startDate = computed(() => getValue(values.value, 0)); const endDate = computed(() => getValue(values.value, 1)); const getViewDate = (index) => { if (defaultViewDates.value[index]) { return defaultViewDates.value[index]; } return getValue(viewDates.value, index) || getRangeViewDate(values.value, index, picker.value, generateConfig2.value) || startDate.value || endDate.value || generateConfig2.value.getNow(); }; const startViewDate = ref(null); const endViewDate = ref(null); watchEffect(() => { startViewDate.value = getViewDate(0); endViewDate.value = getViewDate(1); }); function setViewDate(viewDate, index) { if (viewDate) { let newViewDates = updateValues(viewDates.value, viewDate, index); defaultViewDates.value = updateValues(defaultViewDates.value, null, index) || [null, null]; const anotherIndex = (index + 1) % 2; if (!getValue(values.value, anotherIndex)) { newViewDates = updateValues(newViewDates, viewDate, anotherIndex); } viewDates.value = newViewDates; } else if (startDate.value || endDate.value) { viewDates.value = null; } } return [startViewDate, endViewDate, setViewDate]; } function tryOnScopeDispose(fn) { if (getCurrentScope()) { onScopeDispose(fn); return true; } return false; } function resolveUnref(r) { return typeof r === "function" ? r() : unref(r); } function unrefElement(elRef) { var _a; const plain = resolveUnref(elRef); return (_a = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _a !== void 0 ? _a : plain; } function tryOnMounted(fn) { let sync = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; if (getCurrentInstance()) onMounted(fn); else if (sync) fn(); else nextTick(fn); } function useSupported(callback) { let sync = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; const isSupported = shallowRef(); const update = () => isSupported.value = Boolean(callback()); update(); tryOnMounted(update, sync); return isSupported; } const defaultWindow = void 0; var __rest$2 = function(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; function useResizeObserver(target, callback) { let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; const { window = defaultWindow } = options, observerOptions = __rest$2(options, ["window"]); let observer; const isSupported = useSupported(() => window && "ResizeObserver" in window); const cleanup = () => { if (observer) { observer.disconnect(); observer = void 0; } }; const stopWatch = watch(() => unrefElement(target), (el) => { cleanup(); if (isSupported.value && window && el) { observer = new ResizeObserver(callback); observer.observe(el, observerOptions); } }, { immediate: true, flush: "post" }); const stop = () => { cleanup(); stopWatch(); }; tryOnScopeDispose(stop); return { isSupported, stop }; } function useElementSize(target) { let initialSize = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { width: 0, height: 0 }; let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; const { box = "content-box" } = options; const width = shallowRef(initialSize.width); const height = shallowRef(initialSize.height); useResizeObserver(target, (_ref) => { let [entry] = _ref; const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize; if (boxSize) { width.value = boxSize.reduce((acc, _ref2) => { let { inlineSize } = _ref2; return acc + inlineSize; }, 0); height.value = boxSize.reduce((acc, _ref3) => { let { blockSize } = _ref3; return acc + blockSize; }, 0); } else { width.value = entry.contentRect.width; height.value = entry.contentRect.height; } }, options); watch(() => unrefElement(target), (ele) => { width.value = ele ? initialSize.width : 0; height.value = ele ? initialSize.height : 0; }); return { width, height }; } function reorderValues(values, generateConfig2) { if (values && values[0] && values[1] && generateConfig2.isAfter(values[0], values[1])) { return [values[1], values[0]]; } return values; } function canValueTrigger(value, index, disabled, allowEmpty) { if (value) { return true; } if (allowEmpty && allowEmpty[index]) { return true; } if (disabled[(index + 1) % 2]) { return true; } return false; } function RangerPicker() { return defineComponent({ name: "RangerPicker", inheritAttrs: false, props: ["prefixCls", "id", "popupStyle", "dropdownClassName", "transitionName", "dropdownAlign", "getPopupContainer", "generateConfig", "locale", "placeholder", "autofocus", "disabled", "format", "picker", "showTime", "showNow", "showHour", "showMinute", "showSecond", "use12Hours", "separator", "value", "defaultValue", "defaultPickerValue", "open", "defaultOpen", "disabledDate", "disabledTime", "dateRender", "panelRender", "ranges", "allowEmpty", "allowClear", "suffixIcon", "clearIcon", "pickerRef", "inputReadOnly", "mode", "renderExtraFooter", "onChange", "onOpenChange", "onPanelChange", "onCalendarChange", "onFocus", "onBlur", "onMousedown", "onMouseup", "onMouseenter", "onMouseleave", "onClick", "onOk", "onKeydown", "components", "order", "direction", "activePickerIndex", "autocomplete", "minuteStep", "hourStep", "secondStep", "hideDisabledOptions", "disabledMinutes", "presets", "prevIcon", "nextIcon", "superPrevIcon", "superNextIcon"], setup(props, _ref) { let { attrs, expose } = _ref; const needConfirmButton = computed(() => props.picker === "date" && !!props.showTime || props.picker === "time"); const presets = computed(() => props.presets); const ranges = computed(() => props.ranges); const presetList = usePresets(presets, ranges); const openRecordsRef = ref({}); const containerRef = ref(null); const panelDivRef = ref(null); const startInputDivRef = ref(null); const endInputDivRef = ref(null); const separatorRef = ref(null); const startInputRef = ref(null); const endInputRef = ref(null); const arrowRef = ref(null); const formatList = computed(() => toArray$1(getDefaultFormat(props.format, props.picker, props.showTime, props.use12Hours))); const [mergedActivePickerIndex, setMergedActivePickerIndex] = useMergedState(0, { value: toRef(props, "activePickerIndex") }); const operationRef = ref(null); const mergedDisabled = computed(() => { const { disabled } = props; if (Array.isArray(disabled)) { return disabled; } return [disabled || false, disabled || false]; }); const [mergedValue, setInnerValue] = useMergedState(null, { value: toRef(props, "value"), defaultValue: props.defaultValue, postState: (values) => props.picker === "time" && !props.order ? values : reorderValues(values, props.generateConfig) }); const [startViewDate, endViewDate, setViewDate] = useRangeViewDates({ values: mergedValue, picker: toRef(props, "picker"), defaultDates: props.defaultPickerValue, generateConfig: toRef(props, "generateConfig") }); const [selectedValue, setSelectedValue] = useMergedState(mergedValue.value, { postState: (values) => { let postValues = values; if (mergedDisabled.value[0] && mergedDisabled.value[1]) { return postValues; } for (let i = 0; i < 2; i += 1) { if (mergedDisabled.value[i] && !getValue(postValues, i) && !getValue(props.allowEmpty, i)) { postValues = updateValues(postValues, props.generateConfig.getNow(), i); } } return postValues; } }); const [mergedModes, setInnerModes] = useMergedState([props.picker, props.picker], { value: toRef(props, "mode") }); watch(() => props.picker, () => { setInnerModes([props.picker, props.picker]); }); const triggerModesChange = (modes, values) => { var _a; setInnerModes(modes); (_a = props.onPanelChange) === null || _a === void 0 ? void 0 : _a.call(props, values, modes); }; const [disabledStartDate, disabledEndDate] = useRangeDisabled({ picker: toRef(props, "picker"), selectedValue, locale: toRef(props, "locale"), disabled: mergedDisabled, disabledDate: toRef(props, "disabledDate"), generateConfig: toRef(props, "generateConfig") }, openRecordsRef); const [mergedOpen, triggerInnerOpen] = useMergedState(false, { value: toRef(props, "open"), defaultValue: props.defaultOpen, postState: (postOpen) => mergedDisabled.value[mergedActivePickerIndex.value] ? false : postOpen, onChange: (newOpen) => { var _a; (_a = props.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, newOpen); if (!newOpen && operationRef.value && operationRef.value.onClose) { operationRef.value.onClose(); } } }); const startOpen = computed(() => mergedOpen.value && mergedActivePickerIndex.value === 0); const endOpen = computed(() => mergedOpen.value && mergedActivePickerIndex.value === 1); const panelLeft = ref(0); const arrowLeft = ref(0); const popupMinWidth = ref(0); const { width: containerWidth } = useElementSize(containerRef); watch([mergedOpen, containerWidth], () => { if (!mergedOpen.value && containerRef.value) { popupMinWidth.value = containerWidth.value; } }); const { width: panelDivWidth } = useElementSize(panelDivRef); const { width: arrowWidth } = useElementSize(arrowRef); const { width: startInputDivWidth } = useElementSize(startInputDivRef); const { width: separatorWidth } = useElementSize(separatorRef); watch([mergedActivePickerIndex, mergedOpen, panelDivWidth, arrowWidth, startInputDivWidth, separatorWidth, () => props.direction], () => { arrowLeft.value = 0; if (mergedActivePickerIndex.value) { if (startInputDivRef.value && separatorRef.value) { arrowLeft.value = startInputDivWidth.value + separatorWidth.value; if (panelDivWidth.value && arrowWidth.value && arrowLeft.value > panelDivWidth.value - arrowWidth.value - (props.direction === "rtl" || arrowRef.value.offsetLeft > arrowLeft.value ? 0 : arrowRef.value.offsetLeft)) { panelLeft.value = arrowLeft.value; } } } else if (mergedActivePickerIndex.value === 0) { panelLeft.value = 0; } }, { immediate: true }); const triggerRef = ref(); function triggerOpen(newOpen, index) { if (newOpen) { clearTimeout(triggerRef.value); openRecordsRef.value[index] = true; setMergedActivePickerIndex(index); triggerInnerOpen(newOpen); if (!mergedOpen.value) { setViewDate(null, index); } } else if (mergedActivePickerIndex.value === index) { triggerInnerOpen(newOpen); const openRecords = openRecordsRef.value; triggerRef.value = setTimeout(() => { if (openRecords === openRecordsRef.value) { openRecordsRef.value = {}; } }); } } function triggerOpenAndFocus(index) { triggerOpen(true, index); setTimeout(() => { const inputRef = [startInputRef, endInputRef][index]; if (inputRef.value) { inputRef.value.focus(); } }, 0); } function triggerChange(newValue, sourceIndex) { let values = newValue; let startValue = getValue(values, 0); let endValue = getValue(values, 1); const { generateConfig: generateConfig2, locale: locale2, picker, order, onCalendarChange, allowEmpty, onChange, showTime } = props; if (startValue && endValue && generateConfig2.isAfter(startValue, endValue)) { if ( // WeekPicker only compare week picker === "week" && !isSameWeek(generateConfig2, locale2.locale, startValue, endValue) || // QuotaPicker only compare week picker === "quarter" && !isSameQuarter(generateConfig2, startValue, endValue) || // Other non-TimePicker compare date picker !== "week" && picker !== "quarter" && picker !== "time" && !(showTime ? isEqual(generateConfig2, startValue, endValue) : isSameDate(generateConfig2, startValue, endValue)) ) { if (sourceIndex === 0) { values = [startValue, null]; endValue = null; } else { startValue = null; values = [null, endValue]; } openRecordsRef.value = { [sourceIndex]: true }; } else if (picker !== "time" || order !== false) { values = reorderValues(values, generateConfig2); } } setSelectedValue(values); const startStr2 = values && values[0] ? formatValue(values[0], { generateConfig: generateConfig2, locale: locale2, format: formatList.value[0] }) : ""; const endStr2 = values && values[1] ? formatValue(values[1], { generateConfig: generateConfig2, locale: locale2, format: formatList.value[0] }) : ""; if (onCalendarChange) { const info = { range: sourceIndex === 0 ? "start" : "end" }; onCalendarChange(values, [startStr2, endStr2], info); } const canStartValueTrigger = canValueTrigger(startValue, 0, mergedDisabled.value, allowEmpty); const canEndValueTrigger = canValueTrigger(endValue, 1, mergedDisabled.value, allowEmpty); const canTrigger = values === null || canStartValueTrigger && canEndValueTrigger; if (canTrigger) { setInnerValue(values); if (onChange && (!isEqual(generateConfig2, getValue(mergedValue.value, 0), startValue) || !isEqual(generateConfig2, getValue(mergedValue.value, 1), endValue))) { onChange(values, [startStr2, endStr2]); } } let nextOpenIndex = null; if (sourceIndex === 0 && !mergedDisabled.value[1]) { nextOpenIndex = 1; } else if (sourceIndex === 1 && !mergedDisabled.value[0]) { nextOpenIndex = 0; } if (nextOpenIndex !== null && nextOpenIndex !== mergedActivePickerIndex.value && (!openRecordsRef.value[nextOpenIndex] || !getValue(values, nextOpenIndex)) && getValue(values, sourceIndex)) { triggerOpenAndFocus(nextOpenIndex); } else { triggerOpen(false, sourceIndex); } } const forwardKeydown = (e) => { if (mergedOpen && operationRef.value && operationRef.value.onKeydown) { return operationRef.value.onKeydown(e); } { return false; } }; const sharedTextHooksProps = { formatList, generateConfig: toRef(props, "generateConfig"), locale: toRef(props, "locale") }; const [startValueTexts, firstStartValueText] = useValueTexts(computed(() => getValue(selectedValue.value, 0)), sharedTextHooksProps); const [endValueTexts, firstEndValueText] = useValueTexts(computed(() => getValue(selectedValue.value, 1)), sharedTextHooksProps); const onTextChange = (newText, index) => { const inputDate = parseValue(newText, { locale: props.locale, formatList: formatList.value, generateConfig: props.generateConfig }); const disabledFunc = index === 0 ? disabledStartDate : disabledEndDate; if (inputDate && !disabledFunc(inputDate)) { setSelectedValue(updateValues(selectedValue.value, inputDate, index)); setViewDate(inputDate, index); } }; const [startText, triggerStartTextChange, resetStartText] = useTextValueMapping({ valueTexts: startValueTexts, onTextChange: (newText) => onTextChange(newText, 0) }); const [endText, triggerEndTextChange, resetEndText] = useTextValueMapping({ valueTexts: endValueTexts, onTextChange: (newText) => onTextChange(newText, 1) }); const [rangeHoverValue, setRangeHoverValue] = useState$1(null); const [hoverRangedValue, setHoverRangedValue] = useState$1(null); const [startHoverValue, onStartEnter, onStartLeave] = useHoverValue(startText, sharedTextHooksProps); const [endHoverValue, onEndEnter, onEndLeave] = useHoverValue(endText, sharedTextHooksProps); const onDateMouseenter = (date) => { setHoverRangedValue(updateValues(selectedValue.value, date, mergedActivePickerIndex.value)); if (mergedActivePickerIndex.value === 0) { onStartEnter(date); } else { onEndEnter(date); } }; const onDateMouseleave = () => { setHoverRangedValue(updateValues(selectedValue.value, null, mergedActivePickerIndex.value)); if (mergedActivePickerIndex.value === 0) { onStartLeave(); } else { onEndLeave(); } }; const getSharedInputHookProps = (index, resetText) => ({ forwardKeydown, onBlur: (e) => { var _a; (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e); }, isClickOutside: (target) => !elementsContains([panelDivRef.value, startInputDivRef.value, endInputDivRef.value, containerRef.value], target), onFocus: (e) => { var _a; setMergedActivePickerIndex(index); (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e); }, triggerOpen: (newOpen) => { triggerOpen(newOpen, index); }, onSubmit: () => { if ( // When user typing disabledDate with keyboard and enter, this value will be empty !selectedValue.value || // Normal disabled check props.disabledDate && props.disabledDate(selectedValue.value[index]) ) { return false; } triggerChange(selectedValue.value, index); resetText(); }, onCancel: () => { triggerOpen(false, index); setSelectedValue(mergedValue.value); resetText(); } }); const [startInputProps, { focused: startFocused, typing: startTyping }] = usePickerInput(_extends(_extends({}, getSharedInputHookProps(0, resetStartText)), { blurToCancel: needConfirmButton, open: startOpen, value: startText, onKeydown: (e, preventDefault) => { var _a; (_a = props.onKeydown) === null || _a === void 0 ? void 0 : _a.call(props, e, preventDefault); } })); const [endInputProps, { focused: endFocused, typing: endTyping }] = usePickerInput(_extends(_extends({}, getSharedInputHookProps(1, resetEndText)), { blurToCancel: needConfirmButton, open: endOpen, value: endText, onKeydown: (e, preventDefault) => { var _a; (_a = props.onKeydown) === null || _a === void 0 ? void 0 : _a.call(props, e, preventDefault); } })); const onPickerClick = (e) => { var _a; (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, e); if (!mergedOpen.value && !startInputRef.value.contains(e.target) && !endInputRef.value.contains(e.target)) { if (!mergedDisabled.value[0]) { triggerOpenAndFocus(0); } else if (!mergedDisabled.value[1]) { triggerOpenAndFocus(1); } } }; const onPickerMousedown = (e) => { var _a; (_a = props.onMousedown) === null || _a === void 0 ? void 0 : _a.call(props, e); if (mergedOpen.value && (startFocused.value || endFocused.value) && !startInputRef.value.contains(e.target) && !endInputRef.value.contains(e.target)) { e.preventDefault(); } }; const startStr = computed(() => { var _a; return ((_a = mergedValue.value) === null || _a === void 0 ? void 0 : _a[0]) ? formatValue(mergedValue.value[0], { locale: props.locale, format: "YYYYMMDDHHmmss", generateConfig: props.generateConfig }) : ""; }); const endStr = computed(() => { var _a; return ((_a = mergedValue.value) === null || _a === void 0 ? void 0 : _a[1]) ? formatValue(mergedValue.value[1], { locale: props.locale, format: "YYYYMMDDHHmmss", generateConfig: props.generateConfig }) : ""; }); watch([mergedOpen, startValueTexts, endValueTexts], () => { if (!mergedOpen.value) { setSelectedValue(mergedValue.value); if (!startValueTexts.value.length || startValueTexts.value[0] === "") { triggerStartTextChange(""); } else if (firstStartValueText.value !== startText.value) { resetStartText(); } if (!endValueTexts.value.length || endValueTexts.value[0] === "") { triggerEndTextChange(""); } else if (firstEndValueText.value !== endText.value) { resetEndText(); } } }); watch([startStr, endStr], () => { setSelectedValue(mergedValue.value); }); expose({ focus: () => { if (startInputRef.value) { startInputRef.value.focus(); } }, blur: () => { if (startInputRef.value) { startInputRef.value.blur(); } if (endInputRef.value) { endInputRef.value.blur(); } } }); const panelHoverRangedValue = computed(() => { if (mergedOpen.value && hoverRangedValue.value && hoverRangedValue.value[0] && hoverRangedValue.value[1] && props.generateConfig.isAfter(hoverRangedValue.value[1], hoverRangedValue.value[0])) { return hoverRangedValue.value; } else { return null; } }); function renderPanel() { let panelPosition = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; let panelProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; const { generateConfig: generateConfig2, showTime, dateRender, direction, disabledTime, prefixCls, locale: locale2 } = props; let panelShowTime = showTime; if (showTime && typeof showTime === "object" && showTime.defaultValue) { const timeDefaultValues = showTime.defaultValue; panelShowTime = _extends(_extends({}, showTime), { defaultValue: getValue(timeDefaultValues, mergedActivePickerIndex.value) || void 0 }); } let panelDateRender = null; if (dateRender) { panelDateRender = (_ref2) => { let { current: date, today } = _ref2; return dateRender({ current: date, today, info: { range: mergedActivePickerIndex.value ? "end" : "start" } }); }; } return createVNode(RangeContextProvider, { "value": { inRange: true, panelPosition, rangedValue: rangeHoverValue.value || selectedValue.value, hoverRangedValue: panelHoverRangedValue.value } }, { default: () => [createVNode(PickerPanel$1, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, props), panelProps), {}, { "dateRender": panelDateRender, "showTime": panelShowTime, "mode": mergedModes.value[mergedActivePickerIndex.value], "generateConfig": generateConfig2, "style": void 0, "direction": direction, "disabledDate": mergedActivePickerIndex.value === 0 ? disabledStartDate : disabledEndDate, "disabledTime": (date) => { if (disabledTime) { return disabledTime(date, mergedActivePickerIndex.value === 0 ? "start" : "end"); } return false; }, "class": classNames({ [`${prefixCls}-panel-focused`]: mergedActivePickerIndex.value === 0 ? !startTyping.value : !endTyping.value }), "value": getValue(selectedValue.value, mergedActivePickerIndex.value), "locale": locale2, "tabIndex": -1, "onPanelChange": (date, newMode) => { if (mergedActivePickerIndex.value === 0) { onStartLeave(true); } if (mergedActivePickerIndex.value === 1) { onEndLeave(true); } triggerModesChange(updateValues(mergedModes.value, newMode, mergedActivePickerIndex.value), updateValues(selectedValue.value, date, mergedActivePickerIndex.value)); let viewDate = date; if (panelPosition === "right" && mergedModes.value[mergedActivePickerIndex.value] === newMode) { viewDate = getClosingViewDate(viewDate, newMode, generateConfig2, -1); } setViewDate(viewDate, mergedActivePickerIndex.value); }, "onOk": null, "onSelect": void 0, "onChange": void 0, "defaultValue": mergedActivePickerIndex.value === 0 ? getValue(selectedValue.value, 1) : getValue(selectedValue.value, 0) }), null)] }); } const onContextSelect = (date, type) => { const values = updateValues(selectedValue.value, date, mergedActivePickerIndex.value); if (type === "submit" || type !== "key" && !needConfirmButton.value) { triggerChange(values, mergedActivePickerIndex.value); if (mergedActivePickerIndex.value === 0) { onStartLeave(); } else { onEndLeave(); } } else { setSelectedValue(values); } }; useProvidePanel({ operationRef, hideHeader: computed(() => props.picker === "time"), onDateMouseenter, onDateMouseleave, hideRanges: computed(() => true), onSelect: onContextSelect, open: mergedOpen }); return () => { const { prefixCls = "rc-picker", id, popupStyle, dropdownClassName, transitionName, dropdownAlign, getPopupContainer, generateConfig: generateConfig2, locale: locale2, placeholder, autofocus, picker = "date", showTime, separator = "~", disabledDate, panelRender, allowClear, suffixIcon, clearIcon, inputReadOnly, renderExtraFooter, onMouseenter, onMouseleave, onMouseup, onOk, components, direction, autocomplete = "off" } = props; const arrowPositionStyle = direction === "rtl" ? { right: `${arrowLeft.value}px` } : { left: `${arrowLeft.value}px` }; function renderPanels() { let panels; const extraNode = getExtraFooter(prefixCls, mergedModes.value[mergedActivePickerIndex.value], renderExtraFooter); const rangesNode = getRanges({ prefixCls, components, needConfirmButton: needConfirmButton.value, okDisabled: !getValue(selectedValue.value, mergedActivePickerIndex.value) || disabledDate && disabledDate(selectedValue.value[mergedActivePickerIndex.value]), locale: locale2, onOk: () => { if (getValue(selectedValue.value, mergedActivePickerIndex.value)) { triggerChange(selectedValue.value, mergedActivePickerIndex.value); if (onOk) { onOk(selectedValue.value); } } } }); if (picker !== "time" && !showTime) { const viewDate = mergedActivePickerIndex.value === 0 ? startViewDate.value : endViewDate.value; const nextViewDate = getClosingViewDate(viewDate, picker, generateConfig2); const currentMode = mergedModes.value[mergedActivePickerIndex.value]; const showDoublePanel = currentMode === picker; const leftPanel = renderPanel(showDoublePanel ? "left" : false, { pickerValue: viewDate, onPickerValueChange: (newViewDate) => { setViewDate(newViewDate, mergedActivePickerIndex.value); } }); const rightPanel = renderPanel("right", { pickerValue: nextViewDate, onPickerValueChange: (newViewDate) => { setViewDate(getClosingViewDate(newViewDate, picker, generateConfig2, -1), mergedActivePickerIndex.value); } }); if (direction === "rtl") { panels = createVNode(Fragment, null, [rightPanel, showDoublePanel && leftPanel]); } else { panels = createVNode(Fragment, null, [leftPanel, showDoublePanel && rightPanel]); } } else { panels = renderPanel(); } let mergedNodes = createVNode("div", { "class": `${prefixCls}-panel-layout` }, [createVNode(PresetPanel, { "prefixCls": prefixCls, "presets": presetList.value, "onClick": (nextValue) => { triggerChange(nextValue, null); triggerOpen(false, mergedActivePickerIndex.value); }, "onHover": (hoverValue) => { setRangeHoverValue(hoverValue); } }, null), createVNode("div", null, [createVNode("div", { "class": `${prefixCls}-panels` }, [panels]), (extraNode || rangesNode) && createVNode("div", { "class": `${prefixCls}-footer` }, [extraNode, rangesNode])])]); if (panelRender) { mergedNodes = panelRender(mergedNodes); } return createVNode("div", { "class": `${prefixCls}-panel-container`, "style": { marginLeft: `${panelLeft.value}px` }, "ref": panelDivRef, "onMousedown": (e) => { e.preventDefault(); } }, [mergedNodes]); } const rangePanel = createVNode("div", { "class": classNames(`${prefixCls}-range-wrapper`, `${prefixCls}-${picker}-range-wrapper`), "style": { minWidth: `${popupMinWidth.value}px` } }, [createVNode("div", { "ref": arrowRef, "class": `${prefixCls}-range-arrow`, "style": arrowPositionStyle }, null), renderPanels()]); let suffixNode; if (suffixIcon) { suffixNode = createVNode("span", { "class": `${prefixCls}-suffix` }, [suffixIcon]); } let clearNode; if (allowClear && (getValue(mergedValue.value, 0) && !mergedDisabled.value[0] || getValue(mergedValue.value, 1) && !mergedDisabled.value[1])) { clearNode = createVNode("span", { "onMousedown": (e) => { e.preventDefault(); e.stopPropagation(); }, "onMouseup": (e) => { e.preventDefault(); e.stopPropagation(); let values = mergedValue.value; if (!mergedDisabled.value[0]) { values = updateValues(values, null, 0); } if (!mergedDisabled.value[1]) { values = updateValues(values, null, 1); } triggerChange(values, null); triggerOpen(false, mergedActivePickerIndex.value); }, "class": `${prefixCls}-clear` }, [clearIcon || createVNode("span", { "class": `${prefixCls}-clear-btn` }, null)]); } const inputSharedProps = { size: getInputSize(picker, formatList.value[0], generateConfig2) }; let activeBarLeft = 0; let activeBarWidth = 0; if (startInputDivRef.value && endInputDivRef.value && separatorRef.value) { if (mergedActivePickerIndex.value === 0) { activeBarWidth = startInputDivRef.value.offsetWidth; } else { activeBarLeft = arrowLeft.value; activeBarWidth = endInputDivRef.value.offsetWidth; } } const activeBarPositionStyle = direction === "rtl" ? { right: `${activeBarLeft}px` } : { left: `${activeBarLeft}px` }; return createVNode("div", _objectSpread$3({ "ref": containerRef, "class": classNames(prefixCls, `${prefixCls}-range`, attrs.class, { [`${prefixCls}-disabled`]: mergedDisabled.value[0] && mergedDisabled.value[1], [`${prefixCls}-focused`]: mergedActivePickerIndex.value === 0 ? startFocused.value : endFocused.value, [`${prefixCls}-rtl`]: direction === "rtl" }), "style": attrs.style, "onClick": onPickerClick, "onMouseenter": onMouseenter, "onMouseleave": onMouseleave, "onMousedown": onPickerMousedown, "onMouseup": onMouseup }, getDataOrAriaProps(props)), [createVNode("div", { "class": classNames(`${prefixCls}-input`, { [`${prefixCls}-input-active`]: mergedActivePickerIndex.value === 0, [`${prefixCls}-input-placeholder`]: !!startHoverValue.value }), "ref": startInputDivRef }, [createVNode("input", _objectSpread$3(_objectSpread$3(_objectSpread$3({ "id": id, "disabled": mergedDisabled.value[0], "readonly": inputReadOnly || typeof formatList.value[0] === "function" || !startTyping.value, "value": startHoverValue.value || startText.value, "onInput": (e) => { triggerStartTextChange(e.target.value); }, "autofocus": autofocus, "placeholder": getValue(placeholder, 0) || "", "ref": startInputRef }, startInputProps.value), inputSharedProps), {}, { "autocomplete": autocomplete }), null)]), createVNode("div", { "class": `${prefixCls}-range-separator`, "ref": separatorRef }, [separator]), createVNode("div", { "class": classNames(`${prefixCls}-input`, { [`${prefixCls}-input-active`]: mergedActivePickerIndex.value === 1, [`${prefixCls}-input-placeholder`]: !!endHoverValue.value }), "ref": endInputDivRef }, [createVNode("input", _objectSpread$3(_objectSpread$3(_objectSpread$3({ "disabled": mergedDisabled.value[1], "readonly": inputReadOnly || typeof formatList.value[0] === "function" || !endTyping.value, "value": endHoverValue.value || endText.value, "onInput": (e) => { triggerEndTextChange(e.target.value); }, "placeholder": getValue(placeholder, 1) || "", "ref": endInputRef }, endInputProps.value), inputSharedProps), {}, { "autocomplete": autocomplete }), null)]), createVNode("div", { "class": `${prefixCls}-active-bar`, "style": _extends(_extends({}, activeBarPositionStyle), { width: `${activeBarWidth}px`, position: "absolute" }) }, null), suffixNode, clearNode, createVNode(PickerTrigger, { "visible": mergedOpen.value, "popupStyle": popupStyle, "prefixCls": prefixCls, "dropdownClassName": dropdownClassName, "dropdownAlign": dropdownAlign, "getPopupContainer": getPopupContainer, "transitionName": transitionName, "range": true, "direction": direction }, { default: () => [createVNode("div", { "style": { pointerEvents: "none", position: "absolute", top: 0, bottom: 0, left: 0, right: 0 } }, null)], popupElement: () => rangePanel })]); }; } }); } const InterRangerPicker = RangerPicker(); const genPikerPadding = (token, inputHeight, fontSize, paddingHorizontal) => { const { lineHeight } = token; const fontHeight = Math.floor(fontSize * lineHeight) + 2; const paddingTop = Math.max((inputHeight - fontHeight) / 2, 0); const paddingBottom = Math.max(inputHeight - fontHeight - paddingTop, 0); return { padding: `${paddingTop}px ${paddingHorizontal}px ${paddingBottom}px` }; }; const genPickerCellInnerStyle = (token) => { const { componentCls, pickerCellCls, pickerCellInnerCls, pickerPanelCellHeight, motionDurationSlow, borderRadiusSM, motionDurationMid, controlItemBgHover, lineWidth, lineType, colorPrimary, controlItemBgActive, colorTextLightSolid, controlHeightSM, pickerDateHoverRangeBorderColor, pickerCellBorderGap, pickerBasicCellHoverWithRangeColor, pickerPanelCellWidth, colorTextDisabled, colorBgContainerDisabled } = token; return { "&::before": { position: "absolute", top: "50%", insetInlineStart: 0, insetInlineEnd: 0, zIndex: 1, height: pickerPanelCellHeight, transform: "translateY(-50%)", transition: `all ${motionDurationSlow}`, content: '""' }, // >>> Default [pickerCellInnerCls]: { position: "relative", zIndex: 2, display: "inline-block", minWidth: pickerPanelCellHeight, height: pickerPanelCellHeight, lineHeight: `${pickerPanelCellHeight}px`, borderRadius: borderRadiusSM, transition: `background ${motionDurationMid}, border ${motionDurationMid}` }, // >>> Hover [`&:hover:not(${pickerCellCls}-in-view), &:hover:not(${pickerCellCls}-selected):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end):not(${pickerCellCls}-range-hover-start):not(${pickerCellCls}-range-hover-end)`]: { [pickerCellInnerCls]: { background: controlItemBgHover } }, // >>> Today [`&-in-view${pickerCellCls}-today ${pickerCellInnerCls}`]: { "&::before": { position: "absolute", top: 0, insetInlineEnd: 0, bottom: 0, insetInlineStart: 0, zIndex: 1, border: `${lineWidth}px ${lineType} ${colorPrimary}`, borderRadius: borderRadiusSM, content: '""' } }, // >>> In Range [`&-in-view${pickerCellCls}-in-range`]: { position: "relative", "&::before": { background: controlItemBgActive } }, // >>> Selected [`&-in-view${pickerCellCls}-selected ${pickerCellInnerCls}, &-in-view${pickerCellCls}-range-start ${pickerCellInnerCls}, &-in-view${pickerCellCls}-range-end ${pickerCellInnerCls}`]: { color: colorTextLightSolid, background: colorPrimary }, [`&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-start-single), &-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-end-single)`]: { "&::before": { background: controlItemBgActive } }, [`&-in-view${pickerCellCls}-range-start::before`]: { insetInlineStart: "50%" }, [`&-in-view${pickerCellCls}-range-end::before`]: { insetInlineEnd: "50%" }, // >>> Range Hover [`&-in-view${pickerCellCls}-range-hover-start:not(${pickerCellCls}-in-range):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end), &-in-view${pickerCellCls}-range-hover-end:not(${pickerCellCls}-in-range):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end), &-in-view${pickerCellCls}-range-hover-start${pickerCellCls}-range-start-single, &-in-view${pickerCellCls}-range-hover-start${pickerCellCls}-range-start${pickerCellCls}-range-end${pickerCellCls}-range-end-near-hover, &-in-view${pickerCellCls}-range-hover-end${pickerCellCls}-range-start${pickerCellCls}-range-end${pickerCellCls}-range-start-near-hover, &-in-view${pickerCellCls}-range-hover-end${pickerCellCls}-range-end-single, &-in-view${pickerCellCls}-range-hover:not(${pickerCellCls}-in-range)`]: { "&::after": { position: "absolute", top: "50%", zIndex: 0, height: controlHeightSM, borderTop: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderBottom: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, transform: "translateY(-50%)", transition: `all ${motionDurationSlow}`, content: '""' } }, // Add space for stash [`&-range-hover-start::after, &-range-hover-end::after, &-range-hover::after`]: { insetInlineEnd: 0, insetInlineStart: pickerCellBorderGap }, // Hover with in range [`&-in-view${pickerCellCls}-in-range${pickerCellCls}-range-hover::before, &-in-view${pickerCellCls}-range-start${pickerCellCls}-range-hover::before, &-in-view${pickerCellCls}-range-end${pickerCellCls}-range-hover::before, &-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-start-single)${pickerCellCls}-range-hover-start::before, &-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-end-single)${pickerCellCls}-range-hover-end::before, ${componentCls}-panel > :not(${componentCls}-date-panel) &-in-view${pickerCellCls}-in-range${pickerCellCls}-range-hover-start::before, ${componentCls}-panel > :not(${componentCls}-date-panel) &-in-view${pickerCellCls}-in-range${pickerCellCls}-range-hover-end::before`]: { background: pickerBasicCellHoverWithRangeColor }, // range start border-radius [`&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-start-single):not(${pickerCellCls}-range-end) ${pickerCellInnerCls}`]: { borderStartStartRadius: borderRadiusSM, borderEndStartRadius: borderRadiusSM, borderStartEndRadius: 0, borderEndEndRadius: 0 }, // range end border-radius [`&-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-end-single):not(${pickerCellCls}-range-start) ${pickerCellInnerCls}`]: { borderStartStartRadius: 0, borderEndStartRadius: 0, borderStartEndRadius: borderRadiusSM, borderEndEndRadius: borderRadiusSM }, [`&-range-hover${pickerCellCls}-range-end::after`]: { insetInlineStart: "50%" }, // Edge start [`tr > &-in-view${pickerCellCls}-range-hover:first-child::after, tr > &-in-view${pickerCellCls}-range-hover-end:first-child::after, &-in-view${pickerCellCls}-start${pickerCellCls}-range-hover-edge-start${pickerCellCls}-range-hover-edge-start-near-range::after, &-in-view${pickerCellCls}-range-hover-edge-start:not(${pickerCellCls}-range-hover-edge-start-near-range)::after, &-in-view${pickerCellCls}-range-hover-start::after`]: { insetInlineStart: (pickerPanelCellWidth - pickerPanelCellHeight) / 2, borderInlineStart: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderStartStartRadius: lineWidth, borderEndStartRadius: lineWidth }, // Edge end [`tr > &-in-view${pickerCellCls}-range-hover:last-child::after, tr > &-in-view${pickerCellCls}-range-hover-start:last-child::after, &-in-view${pickerCellCls}-end${pickerCellCls}-range-hover-edge-end${pickerCellCls}-range-hover-edge-end-near-range::after, &-in-view${pickerCellCls}-range-hover-edge-end:not(${pickerCellCls}-range-hover-edge-end-near-range)::after, &-in-view${pickerCellCls}-range-hover-end::after`]: { insetInlineEnd: (pickerPanelCellWidth - pickerPanelCellHeight) / 2, borderInlineEnd: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderStartEndRadius: lineWidth, borderEndEndRadius: lineWidth }, // >>> Disabled "&-disabled": { color: colorTextDisabled, pointerEvents: "none", [pickerCellInnerCls]: { background: "transparent" }, "&::before": { background: colorBgContainerDisabled } }, [`&-disabled${pickerCellCls}-today ${pickerCellInnerCls}::before`]: { borderColor: colorTextDisabled } }; }; const genPanelStyle = (token) => { const { componentCls, pickerCellInnerCls, pickerYearMonthCellWidth, pickerControlIconSize, pickerPanelCellWidth, paddingSM, paddingXS, paddingXXS, colorBgContainer, lineWidth, lineType, borderRadiusLG, colorPrimary, colorTextHeading, colorSplit, pickerControlIconBorderWidth, colorIcon, pickerTextHeight, motionDurationMid, colorIconHover, fontWeightStrong, pickerPanelCellHeight, pickerCellPaddingVertical, colorTextDisabled, colorText, fontSize, pickerBasicCellHoverWithRangeColor, motionDurationSlow, pickerPanelWithoutTimeCellHeight, pickerQuarterPanelContentHeight, colorLink, colorLinkActive, colorLinkHover, pickerDateHoverRangeBorderColor, borderRadiusSM, colorTextLightSolid, borderRadius, controlItemBgHover, pickerTimePanelColumnHeight, pickerTimePanelColumnWidth, pickerTimePanelCellHeight, controlItemBgActive, marginXXS } = token; const pickerPanelWidth = pickerPanelCellWidth * 7 + paddingSM * 2 + 4; const hoverCellFixedDistance = (pickerPanelWidth - paddingXS * 2) / 3 - pickerYearMonthCellWidth - paddingSM; return { [componentCls]: { "&-panel": { display: "inline-flex", flexDirection: "column", textAlign: "center", background: colorBgContainer, border: `${lineWidth}px ${lineType} ${colorSplit}`, borderRadius: borderRadiusLG, outline: "none", "&-focused": { borderColor: colorPrimary }, "&-rtl": { direction: "rtl", [`${componentCls}-prev-icon, ${componentCls}-super-prev-icon`]: { transform: "rotate(45deg)" }, [`${componentCls}-next-icon, ${componentCls}-super-next-icon`]: { transform: "rotate(-135deg)" } } }, // ======================================================== // = Shared Panel = // ======================================================== [`&-decade-panel, &-year-panel, &-quarter-panel, &-month-panel, &-week-panel, &-date-panel, &-time-panel`]: { display: "flex", flexDirection: "column", width: pickerPanelWidth }, // ======================= Header ======================= "&-header": { display: "flex", padding: `0 ${paddingXS}px`, color: colorTextHeading, borderBottom: `${lineWidth}px ${lineType} ${colorSplit}`, "> *": { flex: "none" }, button: { padding: 0, color: colorIcon, lineHeight: `${pickerTextHeight}px`, background: "transparent", border: 0, cursor: "pointer", transition: `color ${motionDurationMid}` }, "> button": { minWidth: "1.6em", fontSize, "&:hover": { color: colorIconHover } }, "&-view": { flex: "auto", fontWeight: fontWeightStrong, lineHeight: `${pickerTextHeight}px`, button: { color: "inherit", fontWeight: "inherit", verticalAlign: "top", "&:not(:first-child)": { marginInlineStart: paddingXS }, "&:hover": { color: colorPrimary } } } }, // Arrow button [`&-prev-icon, &-next-icon, &-super-prev-icon, &-super-next-icon`]: { position: "relative", display: "inline-block", width: pickerControlIconSize, height: pickerControlIconSize, "&::before": { position: "absolute", top: 0, insetInlineStart: 0, display: "inline-block", width: pickerControlIconSize, height: pickerControlIconSize, border: `0 solid currentcolor`, borderBlockStartWidth: pickerControlIconBorderWidth, borderBlockEndWidth: 0, borderInlineStartWidth: pickerControlIconBorderWidth, borderInlineEndWidth: 0, content: '""' } }, [`&-super-prev-icon, &-super-next-icon`]: { "&::after": { position: "absolute", top: Math.ceil(pickerControlIconSize / 2), insetInlineStart: Math.ceil(pickerControlIconSize / 2), display: "inline-block", width: pickerControlIconSize, height: pickerControlIconSize, border: "0 solid currentcolor", borderBlockStartWidth: pickerControlIconBorderWidth, borderBlockEndWidth: 0, borderInlineStartWidth: pickerControlIconBorderWidth, borderInlineEndWidth: 0, content: '""' } }, [`&-prev-icon, &-super-prev-icon`]: { transform: "rotate(-45deg)" }, [`&-next-icon, &-super-next-icon`]: { transform: "rotate(135deg)" }, // ======================== Body ======================== "&-content": { width: "100%", tableLayout: "fixed", borderCollapse: "collapse", "th, td": { position: "relative", minWidth: pickerPanelCellHeight, fontWeight: "normal" }, th: { height: pickerPanelCellHeight + pickerCellPaddingVertical * 2, color: colorText, verticalAlign: "middle" } }, "&-cell": _extends({ padding: `${pickerCellPaddingVertical}px 0`, color: colorTextDisabled, cursor: "pointer", // In view "&-in-view": { color: colorText } }, genPickerCellInnerStyle(token)), // DatePanel only [`&-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-start ${pickerCellInnerCls}, &-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-end ${pickerCellInnerCls}`]: { "&::after": { position: "absolute", top: 0, bottom: 0, zIndex: -1, background: pickerBasicCellHoverWithRangeColor, transition: `all ${motionDurationSlow}`, content: '""' } }, [`&-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-start ${pickerCellInnerCls}::after`]: { insetInlineEnd: -(pickerPanelCellWidth - pickerPanelCellHeight) / 2, insetInlineStart: 0 }, [`&-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-end ${pickerCellInnerCls}::after`]: { insetInlineEnd: 0, insetInlineStart: -(pickerPanelCellWidth - pickerPanelCellHeight) / 2 }, // Hover with range start & end [`&-range-hover${componentCls}-range-start::after`]: { insetInlineEnd: "50%" }, [`&-decade-panel, &-year-panel, &-quarter-panel, &-month-panel`]: { [`${componentCls}-content`]: { height: pickerPanelWithoutTimeCellHeight * 4 }, [pickerCellInnerCls]: { padding: `0 ${paddingXS}px` } }, "&-quarter-panel": { [`${componentCls}-content`]: { height: pickerQuarterPanelContentHeight } }, // ======================== Footer ======================== [`&-panel ${componentCls}-footer`]: { borderTop: `${lineWidth}px ${lineType} ${colorSplit}` }, "&-footer": { width: "min-content", minWidth: "100%", lineHeight: `${pickerTextHeight - 2 * lineWidth}px`, textAlign: "center", "&-extra": { padding: `0 ${paddingSM}`, lineHeight: `${pickerTextHeight - 2 * lineWidth}px`, textAlign: "start", "&:not(:last-child)": { borderBottom: `${lineWidth}px ${lineType} ${colorSplit}` } } }, "&-now": { textAlign: "start" }, "&-today-btn": { color: colorLink, "&:hover": { color: colorLinkHover }, "&:active": { color: colorLinkActive }, [`&${componentCls}-today-btn-disabled`]: { color: colorTextDisabled, cursor: "not-allowed" } }, // ======================================================== // = Special = // ======================================================== // ===================== Decade Panel ===================== "&-decade-panel": { [pickerCellInnerCls]: { padding: `0 ${paddingXS / 2}px` }, [`${componentCls}-cell::before`]: { display: "none" } }, // ============= Year & Quarter & Month Panel ============= [`&-year-panel, &-quarter-panel, &-month-panel`]: { [`${componentCls}-body`]: { padding: `0 ${paddingXS}px` }, [pickerCellInnerCls]: { width: pickerYearMonthCellWidth }, [`${componentCls}-cell-range-hover-start::after`]: { insetInlineStart: hoverCellFixedDistance, borderInlineStart: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderStartStartRadius: borderRadiusSM, borderBottomStartRadius: borderRadiusSM, borderStartEndRadius: 0, borderBottomEndRadius: 0, [`${componentCls}-panel-rtl &`]: { insetInlineEnd: hoverCellFixedDistance, borderInlineEnd: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderStartStartRadius: 0, borderBottomStartRadius: 0, borderStartEndRadius: borderRadiusSM, borderBottomEndRadius: borderRadiusSM } }, [`${componentCls}-cell-range-hover-end::after`]: { insetInlineEnd: hoverCellFixedDistance, borderInlineEnd: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderStartStartRadius: 0, borderEndStartRadius: 0, borderStartEndRadius: borderRadius, borderEndEndRadius: borderRadius, [`${componentCls}-panel-rtl &`]: { insetInlineStart: hoverCellFixedDistance, borderInlineStart: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`, borderStartStartRadius: borderRadius, borderEndStartRadius: borderRadius, borderStartEndRadius: 0, borderEndEndRadius: 0 } } }, // ====================== Week Panel ====================== "&-week-panel": { [`${componentCls}-body`]: { padding: `${paddingXS}px ${paddingSM}px` }, // Clear cell style [`${componentCls}-cell`]: { [`&:hover ${pickerCellInnerCls}, &-selected ${pickerCellInnerCls}, ${pickerCellInnerCls}`]: { background: "transparent !important" } }, "&-row": { td: { transition: `background ${motionDurationMid}`, "&:first-child": { borderStartStartRadius: borderRadiusSM, borderEndStartRadius: borderRadiusSM }, "&:last-child": { borderStartEndRadius: borderRadiusSM, borderEndEndRadius: borderRadiusSM } }, "&:hover td": { background: controlItemBgHover }, [`&-selected td, &-selected:hover td`]: { background: colorPrimary, [`&${componentCls}-cell-week`]: { color: new TinyColor(colorTextLightSolid).setAlpha(0.5).toHexString() }, [`&${componentCls}-cell-today ${pickerCellInnerCls}::before`]: { borderColor: colorTextLightSolid }, [pickerCellInnerCls]: { color: colorTextLightSolid } } } }, // ====================== Date Panel ====================== "&-date-panel": { [`${componentCls}-body`]: { padding: `${paddingXS}px ${paddingSM}px` }, [`${componentCls}-content`]: { width: pickerPanelCellWidth * 7, th: { width: pickerPanelCellWidth } } }, // ==================== Datetime Panel ==================== "&-datetime-panel": { display: "flex", [`${componentCls}-time-panel`]: { borderInlineStart: `${lineWidth}px ${lineType} ${colorSplit}` }, [`${componentCls}-date-panel, ${componentCls}-time-panel`]: { transition: `opacity ${motionDurationSlow}` }, // Keyboard "&-active": { [`${componentCls}-date-panel, ${componentCls}-time-panel`]: { opacity: 0.3, "&-active": { opacity: 1 } } } }, // ====================== Time Panel ====================== "&-time-panel": { width: "auto", minWidth: "auto", direction: "ltr", [`${componentCls}-content`]: { display: "flex", flex: "auto", height: pickerTimePanelColumnHeight }, "&-column": { flex: "1 0 auto", width: pickerTimePanelColumnWidth, margin: `${paddingXXS}px 0`, padding: 0, overflowY: "hidden", textAlign: "start", listStyle: "none", transition: `background ${motionDurationMid}`, overflowX: "hidden", "&::after": { display: "block", height: pickerTimePanelColumnHeight - pickerTimePanelCellHeight, content: '""' }, "&:not(:first-child)": { borderInlineStart: `${lineWidth}px ${lineType} ${colorSplit}` }, "&-active": { background: new TinyColor(controlItemBgActive).setAlpha(0.2).toHexString() }, "&:hover": { overflowY: "auto" }, "> li": { margin: 0, padding: 0, [`&${componentCls}-time-panel-cell`]: { marginInline: marginXXS, [`${componentCls}-time-panel-cell-inner`]: { display: "block", width: pickerTimePanelColumnWidth - 2 * marginXXS, height: pickerTimePanelCellHeight, margin: 0, paddingBlock: 0, paddingInlineEnd: 0, paddingInlineStart: (pickerTimePanelColumnWidth - pickerTimePanelCellHeight) / 2, color: colorText, lineHeight: `${pickerTimePanelCellHeight}px`, borderRadius: borderRadiusSM, cursor: "pointer", transition: `background ${motionDurationMid}`, "&:hover": { background: controlItemBgHover } }, "&-selected": { [`${componentCls}-time-panel-cell-inner`]: { background: controlItemBgActive } }, "&-disabled": { [`${componentCls}-time-panel-cell-inner`]: { color: colorTextDisabled, background: "transparent", cursor: "not-allowed" } } } } } }, // https://github.com/ant-design/ant-design/issues/39227 [`&-datetime-panel ${componentCls}-time-panel-column:after`]: { height: pickerTimePanelColumnHeight - pickerTimePanelCellHeight + paddingXXS * 2 } } }; }; const genPickerStatusStyle = (token) => { const { componentCls, colorBgContainer, colorError, colorErrorOutline, colorWarning, colorWarningOutline } = token; return { [componentCls]: { [`&-status-error${componentCls}`]: { "&, &:not([disabled]):hover": { backgroundColor: colorBgContainer, borderColor: colorError }, "&-focused, &:focus": _extends({}, genActiveStyle(merge(token, { inputBorderActiveColor: colorError, inputBorderHoverColor: colorError, controlOutline: colorErrorOutline }))), [`${componentCls}-active-bar`]: { background: colorError } }, [`&-status-warning${componentCls}`]: { "&, &:not([disabled]):hover": { backgroundColor: colorBgContainer, borderColor: colorWarning }, "&-focused, &:focus": _extends({}, genActiveStyle(merge(token, { inputBorderActiveColor: colorWarning, inputBorderHoverColor: colorWarning, controlOutline: colorWarningOutline }))), [`${componentCls}-active-bar`]: { background: colorWarning } } } }; }; const genPickerStyle = (token) => { const { componentCls, antCls, boxShadowPopoverArrow, controlHeight, fontSize, inputPaddingHorizontal, colorBgContainer, lineWidth, lineType, colorBorder, borderRadius, motionDurationMid, colorBgContainerDisabled, colorTextDisabled, colorTextPlaceholder, controlHeightLG, fontSizeLG, controlHeightSM, inputPaddingHorizontalSM, paddingXS, marginXS, colorTextDescription, lineWidthBold, lineHeight, colorPrimary, motionDurationSlow, zIndexPopup, paddingXXS, paddingSM, pickerTextHeight, controlItemBgActive, colorPrimaryBorder, sizePopupArrow, borderRadiusXS, borderRadiusOuter, colorBgElevated, borderRadiusLG, boxShadowSecondary, borderRadiusSM, colorSplit, controlItemBgHover, presetsWidth, presetsMaxWidth } = token; return [ { [componentCls]: _extends(_extends(_extends({}, resetComponent(token)), genPikerPadding(token, controlHeight, fontSize, inputPaddingHorizontal)), { position: "relative", display: "inline-flex", alignItems: "center", background: colorBgContainer, lineHeight: 1, border: `${lineWidth}px ${lineType} ${colorBorder}`, borderRadius, transition: `border ${motionDurationMid}, box-shadow ${motionDurationMid}`, "&:hover, &-focused": _extends({}, genHoverStyle(token)), "&-focused": _extends({}, genActiveStyle(token)), [`&${componentCls}-disabled`]: { background: colorBgContainerDisabled, borderColor: colorBorder, cursor: "not-allowed", [`${componentCls}-suffix`]: { color: colorTextDisabled } }, [`&${componentCls}-borderless`]: { backgroundColor: "transparent !important", borderColor: "transparent !important", boxShadow: "none !important" }, // ======================== Input ========================= [`${componentCls}-input`]: { position: "relative", display: "inline-flex", alignItems: "center", width: "100%", "> input": _extends(_extends({}, genBasicInputStyle(token)), { flex: "auto", // Fix Firefox flex not correct: // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553 minWidth: 1, height: "auto", padding: 0, background: "transparent", border: 0, "&:focus": { boxShadow: "none" }, "&[disabled]": { background: "transparent" } }), "&:hover": { [`${componentCls}-clear`]: { opacity: 1 } }, "&-placeholder": { "> input": { color: colorTextPlaceholder } } }, // Size "&-large": _extends(_extends({}, genPikerPadding(token, controlHeightLG, fontSizeLG, inputPaddingHorizontal)), { [`${componentCls}-input > input`]: { fontSize: fontSizeLG } }), "&-small": _extends({}, genPikerPadding(token, controlHeightSM, fontSize, inputPaddingHorizontalSM)), [`${componentCls}-suffix`]: { display: "flex", flex: "none", alignSelf: "center", marginInlineStart: paddingXS / 2, color: colorTextDisabled, lineHeight: 1, pointerEvents: "none", "> *": { verticalAlign: "top", "&:not(:last-child)": { marginInlineEnd: marginXS } } }, [`${componentCls}-clear`]: { position: "absolute", top: "50%", insetInlineEnd: 0, color: colorTextDisabled, lineHeight: 1, background: colorBgContainer, transform: "translateY(-50%)", cursor: "pointer", opacity: 0, transition: `opacity ${motionDurationMid}, color ${motionDurationMid}`, "> *": { verticalAlign: "top" }, "&:hover": { color: colorTextDescription } }, [`${componentCls}-separator`]: { position: "relative", display: "inline-block", width: "1em", height: fontSizeLG, color: colorTextDisabled, fontSize: fontSizeLG, verticalAlign: "top", cursor: "default", [`${componentCls}-focused &`]: { color: colorTextDescription }, [`${componentCls}-range-separator &`]: { [`${componentCls}-disabled &`]: { cursor: "not-allowed" } } }, // ======================== Range ========================= "&-range": { position: "relative", display: "inline-flex", // Clear [`${componentCls}-clear`]: { insetInlineEnd: inputPaddingHorizontal }, "&:hover": { [`${componentCls}-clear`]: { opacity: 1 } }, // Active bar [`${componentCls}-active-bar`]: { bottom: -lineWidth, height: lineWidthBold, marginInlineStart: inputPaddingHorizontal, background: colorPrimary, opacity: 0, transition: `all ${motionDurationSlow} ease-out`, pointerEvents: "none" }, [`&${componentCls}-focused`]: { [`${componentCls}-active-bar`]: { opacity: 1 } }, [`${componentCls}-range-separator`]: { alignItems: "center", padding: `0 ${paddingXS}px`, lineHeight: 1 }, [`&${componentCls}-small`]: { [`${componentCls}-clear`]: { insetInlineEnd: inputPaddingHorizontalSM }, [`${componentCls}-active-bar`]: { marginInlineStart: inputPaddingHorizontalSM } } }, // ======================= Dropdown ======================= "&-dropdown": _extends(_extends(_extends({}, resetComponent(token)), genPanelStyle(token)), { position: "absolute", // Fix incorrect position of picker popup // https://github.com/ant-design/ant-design/issues/35590 top: -9999, left: { _skip_check_: true, value: -9999 }, zIndex: zIndexPopup, [`&${componentCls}-dropdown-hidden`]: { display: "none" }, [`&${componentCls}-dropdown-placement-bottomLeft`]: { [`${componentCls}-range-arrow`]: { top: 0, display: "block", transform: "translateY(-100%)" } }, [`&${componentCls}-dropdown-placement-topLeft`]: { [`${componentCls}-range-arrow`]: { bottom: 0, display: "block", transform: "translateY(100%) rotate(180deg)" } }, [`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-topLeft, &${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-topRight, &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-topLeft, &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-topRight`]: { animationName: slideDownIn }, [`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-bottomLeft, &${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-bottomRight, &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-bottomLeft, &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-bottomRight`]: { animationName: slideUpIn }, [`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-topLeft, &${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-topRight`]: { animationName: slideDownOut }, [`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-bottomLeft, &${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-bottomRight`]: { animationName: slideUpOut }, // Time picker with additional style [`${componentCls}-panel > ${componentCls}-time-panel`]: { paddingTop: paddingXXS }, // ======================== Ranges ======================== [`${componentCls}-ranges`]: { marginBottom: 0, padding: `${paddingXXS}px ${paddingSM}px`, overflow: "hidden", lineHeight: `${pickerTextHeight - 2 * lineWidth - paddingXS / 2}px`, textAlign: "start", listStyle: "none", display: "flex", justifyContent: "space-between", "> li": { display: "inline-block" }, // https://github.com/ant-design/ant-design/issues/23687 [`${componentCls}-preset > ${antCls}-tag-blue`]: { color: colorPrimary, background: controlItemBgActive, borderColor: colorPrimaryBorder, cursor: "pointer" }, [`${componentCls}-ok`]: { marginInlineStart: "auto" } }, [`${componentCls}-range-wrapper`]: { display: "flex", position: "relative" }, [`${componentCls}-range-arrow`]: _extends({ position: "absolute", zIndex: 1, display: "none", marginInlineStart: inputPaddingHorizontal * 1.5, transition: `left ${motionDurationSlow} ease-out` }, roundedArrow(sizePopupArrow, borderRadiusXS, borderRadiusOuter, colorBgElevated, boxShadowPopoverArrow)), [`${componentCls}-panel-container`]: { overflow: "hidden", verticalAlign: "top", background: colorBgElevated, borderRadius: borderRadiusLG, boxShadow: boxShadowSecondary, transition: `margin ${motionDurationSlow}`, // ======================== Layout ======================== [`${componentCls}-panel-layout`]: { display: "flex", flexWrap: "nowrap", alignItems: "stretch" }, // ======================== Preset ======================== [`${componentCls}-presets`]: { display: "flex", flexDirection: "column", minWidth: presetsWidth, maxWidth: presetsMaxWidth, ul: { height: 0, flex: "auto", listStyle: "none", overflow: "auto", margin: 0, padding: paddingXS, borderInlineEnd: `${lineWidth}px ${lineType} ${colorSplit}`, li: _extends(_extends({}, textEllipsis), { borderRadius: borderRadiusSM, paddingInline: paddingXS, paddingBlock: (controlHeightSM - Math.round(fontSize * lineHeight)) / 2, cursor: "pointer", transition: `all ${motionDurationSlow}`, "+ li": { marginTop: marginXS }, "&:hover": { background: controlItemBgHover } }) } }, // ======================== Panels ======================== [`${componentCls}-panels`]: { display: "inline-flex", flexWrap: "nowrap", direction: "ltr", [`${componentCls}-panel`]: { borderWidth: `0 0 ${lineWidth}px` }, "&:last-child": { [`${componentCls}-panel`]: { borderWidth: 0 } } }, [`${componentCls}-panel`]: { verticalAlign: "top", background: "transparent", borderRadius: 0, borderWidth: 0, [`${componentCls}-content, table`]: { textAlign: "center" }, "&-focused": { borderColor: colorBorder } } } }), "&-dropdown-range": { padding: `${sizePopupArrow * 2 / 3}px 0`, "&-hidden": { display: "none" } }, "&-rtl": { direction: "rtl", [`${componentCls}-separator`]: { transform: "rotate(180deg)" }, [`${componentCls}-footer`]: { "&-extra": { direction: "rtl" } } } }) }, // Follow code may reuse in other components initSlideMotion(token, "slide-up"), initSlideMotion(token, "slide-down"), initMoveMotion(token, "move-up"), initMoveMotion(token, "move-down") ]; }; const initPickerPanelToken = (token) => { const pickerTimePanelCellHeight = 28; const { componentCls, controlHeightLG, controlHeightSM, colorPrimary, paddingXXS } = token; return { pickerCellCls: `${componentCls}-cell`, pickerCellInnerCls: `${componentCls}-cell-inner`, pickerTextHeight: controlHeightLG, pickerPanelCellWidth: controlHeightSM * 1.5, pickerPanelCellHeight: controlHeightSM, pickerDateHoverRangeBorderColor: new TinyColor(colorPrimary).lighten(20).toHexString(), pickerBasicCellHoverWithRangeColor: new TinyColor(colorPrimary).lighten(35).toHexString(), pickerPanelWithoutTimeCellHeight: controlHeightLG * 1.65, pickerYearMonthCellWidth: controlHeightLG * 1.5, pickerTimePanelColumnHeight: pickerTimePanelCellHeight * 8, pickerTimePanelColumnWidth: controlHeightLG * 1.4, pickerTimePanelCellHeight, pickerQuarterPanelContentHeight: controlHeightLG * 1.4, pickerCellPaddingVertical: paddingXXS, pickerCellBorderGap: 2, pickerControlIconSize: 7, pickerControlIconBorderWidth: 1.5 }; }; const useStyle = genComponentStyleHook("DatePicker", (token) => { const pickerToken = merge(initInputToken(token), initPickerPanelToken(token)); return [ genPickerStyle(pickerToken), genPickerStatusStyle(pickerToken), // ===================================================== // == Space Compact == // ===================================================== genCompactItemStyle(token, { focusElCls: `${token.componentCls}-focused` }) ]; }, (token) => ({ presetsWidth: 120, presetsMaxWidth: 200, zIndexPopup: token.zIndexPopupBase + 50 })); const PickerButton = (props, _ref) => { let { attrs, slots } = _ref; return createVNode(Button, _objectSpread$3(_objectSpread$3({ "size": "small", "type": "primary" }, props), attrs), slots); }; function PickerTag(props, _ref) { let { slots, attrs } = _ref; return createVNode(Tag, _objectSpread$3(_objectSpread$3({ "color": "blue" }, props), attrs), slots); } function getPlaceholder(locale2, picker, customizePlaceholder) { if (customizePlaceholder !== void 0) { return customizePlaceholder; } if (picker === "year" && locale2.lang.yearPlaceholder) { return locale2.lang.yearPlaceholder; } if (picker === "quarter" && locale2.lang.quarterPlaceholder) { return locale2.lang.quarterPlaceholder; } if (picker === "month" && locale2.lang.monthPlaceholder) { return locale2.lang.monthPlaceholder; } if (picker === "week" && locale2.lang.weekPlaceholder) { return locale2.lang.weekPlaceholder; } if (picker === "time" && locale2.timePickerLocale.placeholder) { return locale2.timePickerLocale.placeholder; } return locale2.lang.placeholder; } function getRangePlaceholder(locale2, picker, customizePlaceholder) { if (customizePlaceholder !== void 0) { return customizePlaceholder; } if (picker === "year" && locale2.lang.yearPlaceholder) { return locale2.lang.rangeYearPlaceholder; } if (picker === "month" && locale2.lang.monthPlaceholder) { return locale2.lang.rangeMonthPlaceholder; } if (picker === "week" && locale2.lang.weekPlaceholder) { return locale2.lang.rangeWeekPlaceholder; } if (picker === "time" && locale2.timePickerLocale.placeholder) { return locale2.timePickerLocale.rangePlaceholder; } return locale2.lang.rangePlaceholder; } function transPlacement2DropdownAlign(direction, placement) { const overflow = { adjustX: 1, adjustY: 1 }; switch (placement) { case "bottomLeft": { return { points: ["tl", "bl"], offset: [0, 4], overflow }; } case "bottomRight": { return { points: ["tr", "br"], offset: [0, 4], overflow }; } case "topLeft": { return { points: ["bl", "tl"], offset: [0, -4], overflow }; } case "topRight": { return { points: ["br", "tr"], offset: [0, -4], overflow }; } default: { return { points: direction === "rtl" ? ["tr", "br"] : ["tl", "bl"], offset: [0, 4], overflow }; } } } function commonProps() { return { id: String, /** * @deprecated `dropdownClassName` is deprecated which will be removed in next major * version.Please use `popupClassName` instead. */ dropdownClassName: String, popupClassName: String, popupStyle: objectType(), transitionName: String, placeholder: String, allowClear: booleanType(), autofocus: booleanType(), disabled: booleanType(), tabindex: Number, open: booleanType(), defaultOpen: booleanType(), /** Make input readOnly to avoid popup keyboard in mobile */ inputReadOnly: booleanType(), format: someType([String, Function, Array]), // Value // format: string | CustomFormat | (string | CustomFormat)[]; // Render // suffixIcon?: VueNode; // clearIcon?: VueNode; // prevIcon?: VueNode; // nextIcon?: VueNode; // superPrevIcon?: VueNode; // superNextIcon?: VueNode; getPopupContainer: functionType(), panelRender: functionType(), // // Events onChange: functionType(), "onUpdate:value": functionType(), onOk: functionType(), onOpenChange: functionType(), "onUpdate:open": functionType(), onFocus: functionType(), onBlur: functionType(), onMousedown: functionType(), onMouseup: functionType(), onMouseenter: functionType(), onMouseleave: functionType(), onClick: functionType(), onContextmenu: functionType(), onKeydown: functionType(), // WAI-ARIA role: String, name: String, autocomplete: String, direction: stringType(), showToday: booleanType(), showTime: someType([Boolean, Object]), locale: objectType(), size: stringType(), bordered: booleanType(), dateRender: functionType(), disabledDate: functionType(), mode: stringType(), picker: stringType(), valueFormat: String, placement: stringType(), status: stringType(), /** @deprecated Please use `disabledTime` instead. */ disabledHours: functionType(), /** @deprecated Please use `disabledTime` instead. */ disabledMinutes: functionType(), /** @deprecated Please use `disabledTime` instead. */ disabledSeconds: functionType() }; } function datePickerProps() { return { defaultPickerValue: someType([Object, String]), defaultValue: someType([Object, String]), value: someType([Object, String]), presets: arrayType(), disabledTime: functionType(), renderExtraFooter: functionType(), showNow: booleanType(), monthCellRender: functionType(), // deprecated Please use `monthCellRender"` instead.', monthCellContentRender: functionType() }; } function rangePickerProps() { return { allowEmpty: arrayType(), dateRender: functionType(), defaultPickerValue: arrayType(), defaultValue: arrayType(), value: arrayType(), presets: arrayType(), disabledTime: functionType(), disabled: someType([Boolean, Array]), renderExtraFooter: functionType(), separator: { type: String }, showTime: someType([Boolean, Object]), ranges: objectType(), placeholder: arrayType(), mode: arrayType(), onChange: functionType(), "onUpdate:value": functionType(), onCalendarChange: functionType(), onPanelChange: functionType(), onOk: functionType() }; } var __rest$1 = function(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; function generateSinglePicker(generateConfig2, extraProps) { function getPicker(picker, displayName) { const comProps = _extends(_extends(_extends({}, commonProps()), datePickerProps()), extraProps); return defineComponent({ compatConfig: { MODE: 3 }, name: displayName, inheritAttrs: false, props: comProps, slots: Object, setup(_props, _ref) { let { slots, expose, attrs, emit } = _ref; const props = _props; const formItemContext = useInjectFormItemContext(); const formItemInputContext = FormItemInputContext.useInject(); const { prefixCls, direction, getPopupContainer, size, rootPrefixCls, disabled } = useConfigInject("picker", props); const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction); const mergedSize = computed(() => compactSize.value || size.value); const [wrapSSR, hashId] = useStyle(prefixCls); const pickerRef = ref(); expose({ focus: () => { var _a; (_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.focus(); }, blur: () => { var _a; (_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.blur(); } }); const maybeToString = (date) => { return props.valueFormat ? generateConfig2.toString(date, props.valueFormat) : date; }; const onChange = (date, dateString) => { const value2 = maybeToString(date); emit("update:value", value2); emit("change", value2, dateString); formItemContext.onFieldChange(); }; const onOpenChange = (open) => { emit("update:open", open); emit("openChange", open); }; const onFocus = (e) => { emit("focus", e); }; const onBlur = (e) => { emit("blur", e); formItemContext.onFieldBlur(); }; const onPanelChange = (date, mode) => { const value2 = maybeToString(date); emit("panelChange", value2, mode); }; const onOk = (date) => { const value2 = maybeToString(date); emit("ok", value2); }; const [contextLocale] = useLocaleReceiver("DatePicker", locale$1$1); const value = computed(() => { if (props.value) { return props.valueFormat ? generateConfig2.toDate(props.value, props.valueFormat) : props.value; } return props.value === "" ? void 0 : props.value; }); const defaultValue = computed(() => { if (props.defaultValue) { return props.valueFormat ? generateConfig2.toDate(props.defaultValue, props.valueFormat) : props.defaultValue; } return props.defaultValue === "" ? void 0 : props.defaultValue; }); const defaultPickerValue = computed(() => { if (props.defaultPickerValue) { return props.valueFormat ? generateConfig2.toDate(props.defaultPickerValue, props.valueFormat) : props.defaultPickerValue; } return props.defaultPickerValue === "" ? void 0 : props.defaultPickerValue; }); return () => { var _a, _b, _c, _d, _e, _f; const locale2 = _extends(_extends({}, contextLocale.value), props.locale); const p = _extends(_extends({}, props), attrs); const { bordered = true, placeholder, suffixIcon = (_a = slots.suffixIcon) === null || _a === void 0 ? void 0 : _a.call(slots), showToday = true, transitionName, allowClear = true, dateRender = slots.dateRender, renderExtraFooter = slots.renderExtraFooter, monthCellRender = slots.monthCellRender || props.monthCellContentRender || slots.monthCellContentRender, clearIcon = (_b = slots.clearIcon) === null || _b === void 0 ? void 0 : _b.call(slots), id = formItemContext.id.value } = p, restProps = __rest$1(p, ["bordered", "placeholder", "suffixIcon", "showToday", "transitionName", "allowClear", "dateRender", "renderExtraFooter", "monthCellRender", "clearIcon", "id"]); const showTime = p.showTime === "" ? true : p.showTime; const { format } = p; let additionalOverrideProps = {}; if (picker) { additionalOverrideProps.picker = picker; } const mergedPicker = picker || p.picker || "date"; additionalOverrideProps = _extends(_extends(_extends({}, additionalOverrideProps), showTime ? getTimeProps(_extends({ format, picker: mergedPicker }, typeof showTime === "object" ? showTime : {})) : {}), mergedPicker === "time" ? getTimeProps(_extends(_extends({ format }, restProps), { picker: mergedPicker })) : {}); const pre = prefixCls.value; const suffixNode = createVNode(Fragment, null, [suffixIcon || (picker === "time" ? createVNode(ClockCircleOutlined, null, null) : createVNode(CalendarOutlined, null, null)), formItemInputContext.hasFeedback && formItemInputContext.feedbackIcon]); return wrapSSR(createVNode(Picker$1, _objectSpread$3(_objectSpread$3(_objectSpread$3({ "monthCellRender": monthCellRender, "dateRender": dateRender, "renderExtraFooter": renderExtraFooter, "ref": pickerRef, "placeholder": getPlaceholder(locale2, mergedPicker, placeholder), "suffixIcon": suffixNode, "dropdownAlign": transPlacement2DropdownAlign(direction.value, props.placement), "clearIcon": clearIcon || createVNode(CloseCircleFilled, null, null), "allowClear": allowClear, "transitionName": transitionName || `${rootPrefixCls.value}-slide-up` }, restProps), additionalOverrideProps), {}, { "id": id, "picker": mergedPicker, "value": value.value, "defaultValue": defaultValue.value, "defaultPickerValue": defaultPickerValue.value, "showToday": showToday, "locale": locale2.lang, "class": classNames({ [`${pre}-${mergedSize.value}`]: mergedSize.value, [`${pre}-borderless`]: !bordered }, getStatusClassNames(pre, getMergedStatus(formItemInputContext.status, props.status), formItemInputContext.hasFeedback), attrs.class, hashId.value, compactItemClassnames.value), "disabled": disabled.value, "prefixCls": pre, "getPopupContainer": attrs.getCalendarContainer || getPopupContainer.value, "generateConfig": generateConfig2, "prevIcon": ((_c = slots.prevIcon) === null || _c === void 0 ? void 0 : _c.call(slots)) || createVNode("span", { "class": `${pre}-prev-icon` }, null), "nextIcon": ((_d = slots.nextIcon) === null || _d === void 0 ? void 0 : _d.call(slots)) || createVNode("span", { "class": `${pre}-next-icon` }, null), "superPrevIcon": ((_e = slots.superPrevIcon) === null || _e === void 0 ? void 0 : _e.call(slots)) || createVNode("span", { "class": `${pre}-super-prev-icon` }, null), "superNextIcon": ((_f = slots.superNextIcon) === null || _f === void 0 ? void 0 : _f.call(slots)) || createVNode("span", { "class": `${pre}-super-next-icon` }, null), "components": Components, "direction": direction.value, "dropdownClassName": classNames(hashId.value, props.popupClassName, props.dropdownClassName), "onChange": onChange, "onOpenChange": onOpenChange, "onFocus": onFocus, "onBlur": onBlur, "onPanelChange": onPanelChange, "onOk": onOk }), null)); }; } }); } const DatePicker2 = getPicker(void 0, "ADatePicker"); const WeekPicker2 = getPicker("week", "AWeekPicker"); const MonthPicker2 = getPicker("month", "AMonthPicker"); const YearPicker2 = getPicker("year", "AYearPicker"); const TimePicker2 = getPicker("time", "TimePicker"); const QuarterPicker2 = getPicker("quarter", "AQuarterPicker"); return { DatePicker: DatePicker2, WeekPicker: WeekPicker2, MonthPicker: MonthPicker2, YearPicker: YearPicker2, TimePicker: TimePicker2, QuarterPicker: QuarterPicker2 }; } var __rest = function(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; function generateRangePicker(generateConfig2, extraProps) { const RangePicker2 = defineComponent({ compatConfig: { MODE: 3 }, name: "ARangePicker", inheritAttrs: false, props: _extends(_extends(_extends({}, commonProps()), rangePickerProps()), extraProps), slots: Object, setup(_props, _ref) { let { expose, slots, attrs, emit } = _ref; const props = _props; const formItemContext = useInjectFormItemContext(); const formItemInputContext = FormItemInputContext.useInject(); const { prefixCls, direction, getPopupContainer, size, rootPrefixCls, disabled } = useConfigInject("picker", props); const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction); const mergedSize = computed(() => compactSize.value || size.value); const [wrapSSR, hashId] = useStyle(prefixCls); const pickerRef = ref(); expose({ focus: () => { var _a; (_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.focus(); }, blur: () => { var _a; (_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.blur(); } }); const maybeToStrings = (dates) => { return props.valueFormat ? generateConfig2.toString(dates, props.valueFormat) : dates; }; const onChange = (dates, dateStrings) => { const values = maybeToStrings(dates); emit("update:value", values); emit("change", values, dateStrings); formItemContext.onFieldChange(); }; const onOpenChange = (open) => { emit("update:open", open); emit("openChange", open); }; const onFocus = (e) => { emit("focus", e); }; const onBlur = (e) => { emit("blur", e); formItemContext.onFieldBlur(); }; const onPanelChange = (dates, modes) => { const values = maybeToStrings(dates); emit("panelChange", values, modes); }; const onOk = (dates) => { const value2 = maybeToStrings(dates); emit("ok", value2); }; const onCalendarChange = (dates, dateStrings, info) => { const values = maybeToStrings(dates); emit("calendarChange", values, dateStrings, info); }; const [contextLocale] = useLocaleReceiver("DatePicker", locale$1$1); const value = computed(() => { if (props.value) { return props.valueFormat ? generateConfig2.toDate(props.value, props.valueFormat) : props.value; } return props.value; }); const defaultValue = computed(() => { if (props.defaultValue) { return props.valueFormat ? generateConfig2.toDate(props.defaultValue, props.valueFormat) : props.defaultValue; } return props.defaultValue; }); const defaultPickerValue = computed(() => { if (props.defaultPickerValue) { return props.valueFormat ? generateConfig2.toDate(props.defaultPickerValue, props.valueFormat) : props.defaultPickerValue; } return props.defaultPickerValue; }); return () => { var _a, _b, _c, _d, _e, _f, _g; const locale2 = _extends(_extends({}, contextLocale.value), props.locale); const p = _extends(_extends({}, props), attrs); const { prefixCls: customizePrefixCls, bordered = true, placeholder, suffixIcon = (_a = slots.suffixIcon) === null || _a === void 0 ? void 0 : _a.call(slots), picker = "date", transitionName, allowClear = true, dateRender = slots.dateRender, renderExtraFooter = slots.renderExtraFooter, separator = (_b = slots.separator) === null || _b === void 0 ? void 0 : _b.call(slots), clearIcon = (_c = slots.clearIcon) === null || _c === void 0 ? void 0 : _c.call(slots), id = formItemContext.id.value } = p, restProps = __rest(p, ["prefixCls", "bordered", "placeholder", "suffixIcon", "picker", "transitionName", "allowClear", "dateRender", "renderExtraFooter", "separator", "clearIcon", "id"]); delete restProps["onUpdate:value"]; delete restProps["onUpdate:open"]; const { format, showTime } = p; let additionalOverrideProps = {}; additionalOverrideProps = _extends(_extends(_extends({}, additionalOverrideProps), showTime ? getTimeProps(_extends({ format, picker }, showTime)) : {}), picker === "time" ? getTimeProps(_extends(_extends({ format }, omit(restProps, ["disabledTime"])), { picker })) : {}); const pre = prefixCls.value; const suffixNode = createVNode(Fragment, null, [suffixIcon || (picker === "time" ? createVNode(ClockCircleOutlined, null, null) : createVNode(CalendarOutlined, null, null)), formItemInputContext.hasFeedback && formItemInputContext.feedbackIcon]); return wrapSSR(createVNode(InterRangerPicker, _objectSpread$3(_objectSpread$3(_objectSpread$3({ "dateRender": dateRender, "renderExtraFooter": renderExtraFooter, "separator": separator || createVNode("span", { "aria-label": "to", "class": `${pre}-separator` }, [createVNode(SwapRightOutlined, null, null)]), "ref": pickerRef, "dropdownAlign": transPlacement2DropdownAlign(direction.value, props.placement), "placeholder": getRangePlaceholder(locale2, picker, placeholder), "suffixIcon": suffixNode, "clearIcon": clearIcon || createVNode(CloseCircleFilled, null, null), "allowClear": allowClear, "transitionName": transitionName || `${rootPrefixCls.value}-slide-up` }, restProps), additionalOverrideProps), {}, { "disabled": disabled.value, "id": id, "value": value.value, "defaultValue": defaultValue.value, "defaultPickerValue": defaultPickerValue.value, "picker": picker, "class": classNames({ [`${pre}-${mergedSize.value}`]: mergedSize.value, [`${pre}-borderless`]: !bordered }, getStatusClassNames(pre, getMergedStatus(formItemInputContext.status, props.status), formItemInputContext.hasFeedback), attrs.class, hashId.value, compactItemClassnames.value), "locale": locale2.lang, "prefixCls": pre, "getPopupContainer": attrs.getCalendarContainer || getPopupContainer.value, "generateConfig": generateConfig2, "prevIcon": ((_d = slots.prevIcon) === null || _d === void 0 ? void 0 : _d.call(slots)) || createVNode("span", { "class": `${pre}-prev-icon` }, null), "nextIcon": ((_e = slots.nextIcon) === null || _e === void 0 ? void 0 : _e.call(slots)) || createVNode("span", { "class": `${pre}-next-icon` }, null), "superPrevIcon": ((_f = slots.superPrevIcon) === null || _f === void 0 ? void 0 : _f.call(slots)) || createVNode("span", { "class": `${pre}-super-prev-icon` }, null), "superNextIcon": ((_g = slots.superNextIcon) === null || _g === void 0 ? void 0 : _g.call(slots)) || createVNode("span", { "class": `${pre}-super-next-icon` }, null), "components": Components, "direction": direction.value, "dropdownClassName": classNames(hashId.value, props.popupClassName, props.dropdownClassName), "onChange": onChange, "onOpenChange": onOpenChange, "onFocus": onFocus, "onBlur": onBlur, "onPanelChange": onPanelChange, "onOk": onOk, "onCalendarChange": onCalendarChange }), null)); }; } }); return RangePicker2; } const Components = { button: PickerButton, rangeItem: PickerTag }; function toArray(list) { if (!list) { return []; } return Array.isArray(list) ? list : [list]; } function getTimeProps(props) { const { format, picker, showHour, showMinute, showSecond, use12Hours } = props; const firstFormat = toArray(format)[0]; const showTimeObj = _extends({}, props); if (firstFormat && typeof firstFormat === "string") { if (!firstFormat.includes("s") && showSecond === void 0) { showTimeObj.showSecond = false; } if (!firstFormat.includes("m") && showMinute === void 0) { showTimeObj.showMinute = false; } if (!firstFormat.includes("H") && !firstFormat.includes("h") && showHour === void 0) { showTimeObj.showHour = false; } if ((firstFormat.includes("a") || firstFormat.includes("A")) && use12Hours === void 0) { showTimeObj.use12Hours = true; } } if (picker === "time") { return showTimeObj; } if (typeof firstFormat === "function") { delete showTimeObj.format; } return { showTime: showTimeObj }; } function generatePicker(generateConfig2, extraProps) { const { DatePicker: DatePicker2, WeekPicker: WeekPicker2, MonthPicker: MonthPicker2, YearPicker: YearPicker2, TimePicker: TimePicker2, QuarterPicker: QuarterPicker2 } = generateSinglePicker(generateConfig2, extraProps); const RangePicker2 = generateRangePicker(generateConfig2, extraProps); return { DatePicker: DatePicker2, WeekPicker: WeekPicker2, MonthPicker: MonthPicker2, YearPicker: YearPicker2, TimePicker: TimePicker2, QuarterPicker: QuarterPicker2, RangePicker: RangePicker2 }; } const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } = generatePicker(generateConfig); const DatePicker$1 = _extends(DatePicker, { WeekPicker, MonthPicker, YearPicker, RangePicker, TimePicker, QuarterPicker, install: (app) => { app.component(DatePicker.name, DatePicker); app.component(RangePicker.name, RangePicker); app.component(MonthPicker.name, MonthPicker); app.component(WeekPicker.name, WeekPicker); app.component(QuarterPicker.name, QuarterPicker); return app; } }); const _sfc_main$1 = /* @__PURE__ */ defineComponent({ __name: "BaseDatePicker", __ssrInlineRender: true, props: { value: { type: [String, Number, Boolean, Array] }, disabledDate: { type: Boolean } }, emits: ["update:value"], setup(__props, { emit: __emit }) { const disabledDate = (current) => { if (props.disabledDate) return current && current < dayjs().endOf("day"); else return false; }; const emit = __emit; const props = __props; const localValue = computed({ get() { const dayjsDate = props.value ? dayjs(props.value) : null; return dayjsDate; }, set(value) { const date = dayjs(value).format("YYYY-MM-DD"); emit("update:value", date); } }); return (_ctx, _push, _parent, _attrs) => { _push(ssrRenderComponent(unref(DatePicker$1), mergeProps({ value: localValue.value, "onUpdate:value": ($event) => localValue.value = $event, "disabled-date": disabledDate, class: "w-full", inputReadOnly: "" }, _attrs), null, _parent)); }; } }); const _sfc_setup$1 = _sfc_main$1.setup; _sfc_main$1.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/BasicPacks/BaseDatePicker/src/BaseDatePicker.vue"); return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0; }; const locale$2 = { locale: "fa_IR", today: "\u0627\u0645\u0631\u0648\u0632", now: "\u0627\u06A9\u0646\u0648\u0646", backToToday: "\u0628\u0627\u0632\u06AF\u0634\u062A \u0628\u0647 \u0631\u0648\u0632", ok: "\u0628\u0627\u0634\u0647", clear: "\u067E\u0627\u06A9 \u06A9\u0631\u062F\u0646", month: "\u0645\u0627\u0647", year: "\u0633\u0627\u0644", timeSelect: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0632\u0645\u0627\u0646", dateSelect: "\u0627\u0646\u062A\u062E\u0627\u0628 \u062A\u0627\u0631\u06CC\u062E", monthSelect: "\u06CC\u06A9 \u0645\u0627\u0647 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F", yearSelect: "\u06CC\u06A9 \u0633\u0627\u0644 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F", decadeSelect: "\u06CC\u06A9 \u062F\u0647\u0647 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F", yearFormat: "YYYY", dateFormat: "M/D/YYYY", dayFormat: "D", dateTimeFormat: "M/D/YYYY HH:mm:ss", monthBeforeYear: true, previousMonth: "\u0645\u0627\u0647 \u0642\u0628\u0644 (PageUp)", nextMonth: "\u0645\u0627\u0647 \u0628\u0639\u062F (PageDown)", previousYear: "\u0633\u0627\u0644 \u0642\u0628\u0644 (Control + left)", nextYear: "\u0633\u0627\u0644 \u0628\u0639\u062F (Control + right)", previousDecade: "\u062F\u0647\u0647 \u0642\u0628\u0644", nextDecade: "\u062F\u0647\u0647 \u0628\u0639\u062F", previousCentury: "\u0642\u0631\u0646 \u0642\u0628\u0644", nextCentury: "\u0642\u0631\u0646 \u0628\u0639\u062F" }; const locale$1 = { placeholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0632\u0645\u0627\u0646", rangePlaceholder: ["\u0632\u0645\u0627\u0646 \u0634\u0631\u0648\u0639", "\u0632\u0645\u0627\u0646 \u067E\u0627\u06CC\u0627\u0646"] }; const locale = { lang: _extends({ placeholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u062A\u0627\u0631\u06CC\u062E", yearPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0633\u0627\u0644", quarterPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0641\u0635\u0644", monthPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0645\u0627\u0647", weekPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0647\u0641\u062A\u0647", rangePlaceholder: ["\u062A\u0627\u0631\u06CC\u062E \u0634\u0631\u0648\u0639", "\u062A\u0627\u0631\u06CC\u062E \u067E\u0627\u06CC\u0627\u0646"], rangeYearPlaceholder: ["\u0633\u0627\u0644 \u0634\u0631\u0648\u0639", "\u0633\u0627\u0644 \u067E\u0627\u06CC\u0627\u0646"], rangeMonthPlaceholder: ["\u0645\u0627\u0647 \u0634\u0631\u0648\u0639", "\u0645\u0627\u0647 \u067E\u0627\u06CC\u0627\u0646"], rangeWeekPlaceholder: ["\u0647\u0641\u062A\u0647 \u0634\u0631\u0648\u0639", "\u0647\u0641\u062A\u0647 \u067E\u0627\u06CC\u0627\u0646"] }, locale$2), timePickerLocale: _extends({}, locale$1) }; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "BaseDatePicker", __ssrInlineRender: true, props: { value: { type: [String, Number, Boolean, Array] } }, emits: ["update:value"], setup(__props, { emit: __emit }) { const config = useConfigStore(); moment.locale("fa", fa); moment.loadPersian(); dayjs.extend(jalaliday); const months = [ "\u0641\u0631\u0648\u0631\u062F\u06CC\u0646", "\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A", "\u062E\u0631\u062F\u0627\u062F", "\u062A\u06CC\u0631", "\u0645\u0631\u062F\u0627\u062F", "\u0634\u0647\u0631\u06CC\u0648\u0631", "\u0645\u0647\u0631", "\u0622\u0628\u0627\u0646", "\u0622\u0630\u0631", "\u062F\u06CC", "\u0628\u0647\u0645\u0646", "\u0627\u0633\u0641\u0646\u062F" ]; dayjs.updateLocale("fa", { monthsShort: months, months }); dayjs.calendar("jalali"); const emit = __emit; const props = __props; const localValue = computed({ get() { const dayjsDate = props.value ? dayjs(props.value) : null; return dayjsDate; }, set(value) { const date = dayjs(value).format("YYYY-MM-DD"); console.log(moment(date, "jYYYY/jM/jD HH:mm").format("YYYY-M-D")); emit("update:value", moment(date, "jYYYY/jM/jD HH:mm").format("YYYY-M-D")); } }); return (_ctx, _push, _parent, _attrs) => { _push(ssrRenderComponent(unref(DatePicker$1), mergeProps({ value: localValue.value, "onUpdate:value": ($event) => localValue.value = $event, locale: unref(locale), class: "w-full", placeholder: unref(config).useString("selectDate"), inputReadOnly: "" }, _attrs), null, _parent)); }; } }); const _sfc_setup = _sfc_main.setup; _sfc_main.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/BasicPacks/BaseDatePickerJalali/src/BaseDatePicker.vue"); return _sfc_setup ? _sfc_setup(props, ctx) : void 0; }; export { _sfc_main$1 as _, _sfc_main as a }; //# sourceMappingURL=BaseDatePicker-CBTFfZPt.mjs.map