andoncloud-station-assignment-widget 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/dist/assets/.gitkeep +0 -0
- package/dist/components/AssignmentBoard/DropZone/index.d.ts +8 -0
- package/dist/components/AssignmentBoard/DropZone/styles.d.ts +2 -0
- package/dist/components/AssignmentBoard/OperatorCard/index.d.ts +12 -0
- package/dist/components/AssignmentBoard/OperatorCard/styles.d.ts +6 -0
- package/dist/components/AssignmentBoard/PoolColumn/index.d.ts +7 -0
- package/dist/components/AssignmentBoard/PoolColumn/styles.d.ts +3 -0
- package/dist/components/AssignmentBoard/WorkplaceColumn/index.d.ts +7 -0
- package/dist/components/AssignmentBoard/WorkplaceColumn/styles.d.ts +5 -0
- package/dist/components/AssignmentBoard/helpers.d.ts +3 -0
- package/dist/components/AssignmentBoard/index.d.ts +12 -0
- package/dist/components/AssignmentBoard/styles.d.ts +13 -0
- package/dist/components/Navigation/index.d.ts +8 -0
- package/dist/components/Navigation/styles.d.ts +3 -0
- package/dist/components/SettingsFormContent/index.d.ts +5 -0
- package/dist/components/SettingsFormContent/styles.d.ts +3 -0
- package/dist/components/Widget/index.d.ts +5 -0
- package/dist/components/Widget/utils.d.ts +15 -0
- package/dist/components/WidgetView/index.d.ts +4 -0
- package/dist/components/WidgetView/styles.d.ts +3 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/index.d.ts +35 -0
- package/dist/stories/Widget.stories.d.ts +5 -0
- package/dist/types.d.ts +28 -0
- package/dist/utils/state.d.ts +4 -0
- package/dist/version.d.ts +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/locales/index.ts","../node_modules/moment/moment.js","../src/utils/state.ts","../src/version.ts","../src/components/SettingsFormContent/index.tsx","../node_modules/redux/dist/redux.mjs","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js","../node_modules/use-sync-external-store/with-selector.js","../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../node_modules/css-box-model/dist/css-box-model.esm.js","../node_modules/raf-schd/dist/raf-schd.esm.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@hello-pangea/dnd/dist/dnd.esm.js","../src/components/AssignmentBoard/helpers.ts","../src/components/AssignmentBoard/OperatorCard/styles.ts","../src/components/AssignmentBoard/DropZone/index.tsx","../src/components/AssignmentBoard/DropZone/styles.ts","../src/components/AssignmentBoard/OperatorCard/index.tsx","../src/components/AssignmentBoard/PoolColumn/styles.ts","../src/components/AssignmentBoard/PoolColumn/index.tsx","../src/components/AssignmentBoard/WorkplaceColumn/styles.ts","../src/components/AssignmentBoard/WorkplaceColumn/index.tsx","../src/components/AssignmentBoard/styles.ts","../src/components/AssignmentBoard/index.tsx","../src/components/Navigation/styles.ts","../src/components/Navigation/index.tsx","../src/components/WidgetView/styles.ts","../src/components/WidgetView/index.tsx","../node_modules/property-expr/index.js","../node_modules/tiny-case/index.js","../node_modules/toposort/index.js","../node_modules/yup/index.esm.js","../src/components/Widget/utils.ts","../src/components/Widget/index.tsx","../src/index.tsx"],"sourcesContent":["import en from './en/translation.json';\nimport pl from './pl/translation.json';\n\nconst resources = {\n en: {\n translation: en,\n },\n pl: {\n translation: pl,\n },\n};\n\nexport default resources;\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([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,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 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)\n var extendedIsoRegex =\n /^\\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)?)?$/,\n basicIsoRegex =\n /^\\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)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(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}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","import { getCurrentShift, normalizeShifts, Shift } from 'andoncloud-dashboard-toolkit';\nimport moment from 'moment';\n\nimport { ViewState } from '@/types';\n\nconst findShiftByName = (shifts: Shift[], name: string) => shifts.find((s) => s.name === name);\n\nexport const getInitialState = (shifts: Shift[]): ViewState | null => {\n const now = moment();\n const today = now.format('YYYY-MM-DD');\n const normalizedShifts = normalizeShifts(shifts, now);\n\n const currentNormalizedShift = getCurrentShift(now, normalizedShifts);\n\n if (currentNormalizedShift) {\n const shift = findShiftByName(shifts, currentNormalizedShift.name);\n if (shift) {\n return { date: today, shift };\n }\n }\n\n const nextNormalizedShift = normalizedShifts.find((s) => s.startedAt.isAfter(now));\n\n if (nextNormalizedShift) {\n const shift = findShiftByName(shifts, nextNormalizedShift.name);\n if (shift) {\n return { date: today, shift };\n }\n }\n\n const tomorrow = moment(now).add(1, 'day').startOf('day');\n const tomorrowNormalizedShifts = normalizeShifts(shifts, tomorrow);\n\n if (tomorrowNormalizedShifts.length > 0) {\n const shift = findShiftByName(shifts, tomorrowNormalizedShifts[0].name);\n if (shift) {\n return { date: tomorrow.format('YYYY-MM-DD'), shift };\n }\n }\n\n return null;\n};\n\nexport const navigateState = (currentState: ViewState, shifts: Shift[], direction: 'prev' | 'next'): ViewState => {\n const currentIndex = shifts.findIndex((s) => s.id === currentState.shift.id);\n\n if (direction === 'next') {\n if (currentIndex < shifts.length - 1) {\n return { date: currentState.date, shift: shifts[currentIndex + 1] };\n }\n const nextDate = moment(currentState.date).add(1, 'day').format('YYYY-MM-DD');\n return { date: nextDate, shift: shifts[0] };\n }\n\n if (currentIndex > 0) {\n return { date: currentState.date, shift: shifts[currentIndex - 1] };\n }\n const prevDate = moment(currentState.date).subtract(1, 'day').format('YYYY-MM-DD');\n return { date: prevDate, shift: shifts[shifts.length - 1] };\n};\n","export const LIBRARY_VERSION = '1.0.0';","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TabContext, TabList, TabPanel } from '@mui/lab';\nimport { Box, FormControl, InputLabel, MenuItem, Select, Tab } from '@mui/material';\nimport { SettingsFormContentProps } from 'andoncloud-widget-base';\n\nimport { WidgetData, WidgetSettings } from '@/types';\n\nconst SettingsFormContent: React.FC<SettingsFormContentProps<WidgetData, WidgetSettings>> = ({ data, formProps }) => {\n const [tabValue, setTabValue] = useState('1');\n const { t } = useTranslation();\n\n const handleTabChange = (_: React.SyntheticEvent, newValue: string) => {\n setTabValue(newValue);\n };\n\n return (\n <TabContext value={tabValue}>\n <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n <TabList onChange={handleTabChange}>\n <Tab label={t('filters')} value=\"1\" />\n <Tab label={t('advanced')} value=\"2\" />\n </TabList>\n </Box>\n <TabPanel value=\"1\">\n <FormControl fullWidth>\n <InputLabel id=\"department-label\">{t('department')}</InputLabel>\n <Select\n name=\"departmentId\"\n labelId=\"department-label\"\n variant=\"outlined\"\n value={formProps.values.departmentId ?? ''}\n onChange={formProps.handleChange}\n fullWidth\n >\n <MenuItem value=\"\">{t('allDepartments')}</MenuItem>\n {data.departments.map((department) => (\n <MenuItem key={department.id} value={department.id}>\n {department.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </TabPanel>\n <TabPanel value=\"2\">\n <FormControl fullWidth>\n <InputLabel id=\"refresh-interval-label\">{t('refreshInterval')}</InputLabel>\n <Select\n name=\"refreshInterval\"\n labelId=\"refresh-interval-label\"\n variant=\"outlined\"\n value={formProps.values.refreshInterval}\n onChange={formProps.handleChange}\n fullWidth\n >\n <MenuItem value={15}>15s</MenuItem>\n <MenuItem value={30}>30s</MenuItem>\n <MenuItem value={60}>60s</MenuItem>\n </Select>\n </FormControl>\n </TabPanel>\n </TabContext>\n );\n};\n\nexport default SettingsFormContent;\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","/**\n * @license React\n * use-sync-external-store-with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = React.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = React.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');\n} else {\n module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n var top = _ref.top,\n right = _ref.right,\n bottom = _ref.bottom,\n left = _ref.left;\n var width = right - left;\n var height = bottom - top;\n var rect = {\n top: top,\n right: right,\n bottom: bottom,\n left: left,\n width: width,\n height: height,\n x: left,\n y: top,\n center: {\n x: (right + left) / 2,\n y: (bottom + top) / 2\n }\n };\n return rect;\n};\nvar expand = function expand(target, expandBy) {\n return {\n top: target.top - expandBy.top,\n left: target.left - expandBy.left,\n bottom: target.bottom + expandBy.bottom,\n right: target.right + expandBy.right\n };\n};\nvar shrink = function shrink(target, shrinkBy) {\n return {\n top: target.top + shrinkBy.top,\n left: target.left + shrinkBy.left,\n bottom: target.bottom - shrinkBy.bottom,\n right: target.right - shrinkBy.right\n };\n};\n\nvar shift = function shift(target, shiftBy) {\n return {\n top: target.top + shiftBy.y,\n left: target.left + shiftBy.x,\n bottom: target.bottom + shiftBy.y,\n right: target.right + shiftBy.x\n };\n};\n\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\nvar createBox = function createBox(_ref2) {\n var borderBox = _ref2.borderBox,\n _ref2$margin = _ref2.margin,\n margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n _ref2$border = _ref2.border,\n border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n _ref2$padding = _ref2.padding,\n padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n var marginBox = getRect(expand(borderBox, margin));\n var paddingBox = getRect(shrink(borderBox, border));\n var contentBox = getRect(shrink(paddingBox, padding));\n return {\n marginBox: marginBox,\n borderBox: getRect(borderBox),\n paddingBox: paddingBox,\n contentBox: contentBox,\n margin: margin,\n border: border,\n padding: padding\n };\n};\n\nvar parse = function parse(raw) {\n var value = raw.slice(0, -2);\n var suffix = raw.slice(-2);\n\n if (suffix !== 'px') {\n return 0;\n }\n\n var result = Number(value);\n !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\n\nvar offset = function offset(original, change) {\n var borderBox = original.borderBox,\n border = original.border,\n margin = original.margin,\n padding = original.padding;\n var shifted = shift(borderBox, change);\n return createBox({\n borderBox: shifted,\n border: border,\n margin: margin,\n padding: padding\n });\n};\nvar withScroll = function withScroll(original, scroll) {\n if (scroll === void 0) {\n scroll = getWindowScroll();\n }\n\n return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n var margin = {\n top: parse(styles.marginTop),\n right: parse(styles.marginRight),\n bottom: parse(styles.marginBottom),\n left: parse(styles.marginLeft)\n };\n var padding = {\n top: parse(styles.paddingTop),\n right: parse(styles.paddingRight),\n bottom: parse(styles.paddingBottom),\n left: parse(styles.paddingLeft)\n };\n var border = {\n top: parse(styles.borderTopWidth),\n right: parse(styles.borderRightWidth),\n bottom: parse(styles.borderBottomWidth),\n left: parse(styles.borderLeftWidth)\n };\n return createBox({\n borderBox: borderBox,\n margin: margin,\n padding: padding,\n border: border\n });\n};\nvar getBox = function getBox(el) {\n var borderBox = el.getBoundingClientRect();\n var styles = window.getComputedStyle(el);\n return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import React, { useState, useRef, useEffect, useLayoutEffect, useContext } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport { createStore as createStore$1, compose, applyMiddleware, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { getRect, expand, offset, withScroll, calculateBox, getBox, createBox } from 'css-box-model';\nimport rafSchd from 'raf-schd';\nimport _extends from '@babel/runtime/helpers/esm/extends';\n\nconst isProduction$1 = process.env.NODE_ENV === 'production';\nconst spacesAndTabs = /[ \\t]{2,}/g;\nconst lineStartWithSpaces = /^[ \\t]*/gm;\nconst clean$2 = value => value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\nconst getDevMessage = message => clean$2(`\n %c@hello-pangea/dnd\n\n %c${clean$2(message)}\n\n %c👷 This is a development only message. It will be removed in production builds.\n`);\nconst getFormattedMessage = message => [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\nconst isDisabledFlag = '__@hello-pangea/dnd-disable-dev-warnings';\nfunction log(type, message) {\n if (isProduction$1) {\n return;\n }\n if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n return;\n }\n console[type](...getFormattedMessage(message));\n}\nconst warning = log.bind(null, 'warn');\nconst error = log.bind(null, 'error');\n\nfunction noop$2() {}\n\nfunction getOptions(shared, fromBinding) {\n return {\n ...shared,\n ...fromBinding\n };\n}\nfunction bindEvents(el, bindings, sharedOptions) {\n const unbindings = bindings.map(binding => {\n const options = getOptions(sharedOptions, binding.options);\n el.addEventListener(binding.eventName, binding.fn, options);\n return function unbind() {\n el.removeEventListener(binding.eventName, binding.fn, options);\n };\n });\n return function unbindAll() {\n unbindings.forEach(unbind => {\n unbind();\n });\n };\n}\n\nconst isProduction = process.env.NODE_ENV === 'production';\nconst prefix$1 = 'Invariant failed';\nclass RbdInvariant extends Error {}\nRbdInvariant.prototype.toString = function toString() {\n return this.message;\n};\nfunction invariant(condition, message) {\n if (isProduction) {\n throw new RbdInvariant(prefix$1);\n } else {\n throw new RbdInvariant(`${prefix$1}: ${message || ''}`);\n }\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.callbacks = null;\n this.unbind = noop$2;\n this.onWindowError = event => {\n const callbacks = this.getCallbacks();\n if (callbacks.isDragging()) {\n callbacks.tryAbort();\n process.env.NODE_ENV !== \"production\" ? warning(`\n An error was caught by our window 'error' event listener while a drag was occurring.\n The active drag has been aborted.\n `) : void 0;\n }\n const err = event.error;\n if (err instanceof RbdInvariant) {\n event.preventDefault();\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n }\n };\n this.getCallbacks = () => {\n if (!this.callbacks) {\n throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>');\n }\n return this.callbacks;\n };\n this.setCallbacks = callbacks => {\n this.callbacks = callbacks;\n };\n }\n componentDidMount() {\n this.unbind = bindEvents(window, [{\n eventName: 'error',\n fn: this.onWindowError\n }]);\n }\n componentDidCatch(err) {\n if (err instanceof RbdInvariant) {\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n this.setState({});\n return;\n }\n throw err;\n }\n componentWillUnmount() {\n this.unbind();\n }\n render() {\n return this.props.children(this.setCallbacks);\n }\n}\n\nconst dragHandleUsageInstructions = `\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n`;\nconst position = index => index + 1;\nconst onDragStart = start => `\n You have lifted an item in position ${position(start.source.index)}\n`;\nconst withLocation = (source, destination) => {\n const isInHomeList = source.droppableId === destination.droppableId;\n const startPosition = position(source.index);\n const endPosition = position(destination.index);\n if (isInHomeList) {\n return `\n You have moved the item from position ${startPosition}\n to position ${endPosition}\n `;\n }\n return `\n You have moved the item from position ${startPosition}\n in list ${source.droppableId}\n to list ${destination.droppableId}\n in position ${endPosition}\n `;\n};\nconst withCombine = (id, source, combine) => {\n const inHomeList = source.droppableId === combine.droppableId;\n if (inHomeList) {\n return `\n The item ${id}\n has been combined with ${combine.draggableId}`;\n }\n return `\n The item ${id}\n in list ${source.droppableId}\n has been combined with ${combine.draggableId}\n in list ${combine.droppableId}\n `;\n};\nconst onDragUpdate = update => {\n const location = update.destination;\n if (location) {\n return withLocation(update.source, location);\n }\n const combine = update.combine;\n if (combine) {\n return withCombine(update.draggableId, update.source, combine);\n }\n return 'You are over an area that cannot be dropped on';\n};\nconst returnedToStart = source => `\n The item has returned to its starting position\n of ${position(source.index)}\n`;\nconst onDragEnd = result => {\n if (result.reason === 'CANCEL') {\n return `\n Movement cancelled.\n ${returnedToStart(result.source)}\n `;\n }\n const location = result.destination;\n const combine = result.combine;\n if (location) {\n return `\n You have dropped the item.\n ${withLocation(result.source, location)}\n `;\n }\n if (combine) {\n return `\n You have dropped the item.\n ${withCombine(result.draggableId, result.source, combine)}\n `;\n }\n return `\n The item has been dropped while not over a drop area.\n ${returnedToStart(result.source)}\n `;\n};\nconst preset = {\n dragHandleUsageInstructions,\n onDragStart,\n onDragUpdate,\n onDragEnd\n};\n\nfunction isEqual$2(first, second) {\n if (first === second) {\n return true;\n }\n if (Number.isNaN(first) && Number.isNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (let i = 0; i < newInputs.length; i++) {\n if (!isEqual$2(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction useMemo(getResult, inputs) {\n const initial = useState(() => ({\n inputs,\n result: getResult()\n }))[0];\n const isFirstRun = useRef(true);\n const committed = useRef(initial);\n const useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n const cache = useCache ? committed.current : {\n inputs,\n result: getResult()\n };\n useEffect(() => {\n isFirstRun.current = false;\n committed.current = cache;\n }, [cache]);\n return cache.result;\n}\nfunction useCallback(callback, inputs) {\n return useMemo(() => callback, inputs);\n}\n\nconst origin = {\n x: 0,\n y: 0\n};\nconst add = (point1, point2) => ({\n x: point1.x + point2.x,\n y: point1.y + point2.y\n});\nconst subtract = (point1, point2) => ({\n x: point1.x - point2.x,\n y: point1.y - point2.y\n});\nconst isEqual$1 = (point1, point2) => point1.x === point2.x && point1.y === point2.y;\nconst negate = point => ({\n x: point.x !== 0 ? -point.x : 0,\n y: point.y !== 0 ? -point.y : 0\n});\nconst patch = (line, value, otherValue = 0) => {\n if (line === 'x') {\n return {\n x: value,\n y: otherValue\n };\n }\n return {\n x: otherValue,\n y: value\n };\n};\nconst distance = (point1, point2) => Math.sqrt((point2.x - point1.x) ** 2 + (point2.y - point1.y) ** 2);\nconst closest$1 = (target, points) => Math.min(...points.map(point => distance(target, point)));\nconst apply = fn => point => ({\n x: fn(point.x),\n y: fn(point.y)\n});\n\nvar executeClip = (frame, subject) => {\n const result = getRect({\n top: Math.max(subject.top, frame.top),\n right: Math.min(subject.right, frame.right),\n bottom: Math.min(subject.bottom, frame.bottom),\n left: Math.max(subject.left, frame.left)\n });\n if (result.width <= 0 || result.height <= 0) {\n return null;\n }\n return result;\n};\n\nconst offsetByPosition = (spacing, point) => ({\n top: spacing.top + point.y,\n left: spacing.left + point.x,\n bottom: spacing.bottom + point.y,\n right: spacing.right + point.x\n});\nconst getCorners = spacing => [{\n x: spacing.left,\n y: spacing.top\n}, {\n x: spacing.right,\n y: spacing.top\n}, {\n x: spacing.left,\n y: spacing.bottom\n}, {\n x: spacing.right,\n y: spacing.bottom\n}];\nconst noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\n\nconst scroll$1 = (target, frame) => {\n if (!frame) {\n return target;\n }\n return offsetByPosition(target, frame.scroll.diff.displacement);\n};\nconst increase = (target, axis, withPlaceholder) => {\n if (withPlaceholder && withPlaceholder.increasedBy) {\n return {\n ...target,\n [axis.end]: target[axis.end] + withPlaceholder.increasedBy[axis.line]\n };\n }\n return target;\n};\nconst clip = (target, frame) => {\n if (frame && frame.shouldClipSubject) {\n return executeClip(frame.pageMarginBox, target);\n }\n return getRect(target);\n};\nvar getSubject = ({\n page,\n withPlaceholder,\n axis,\n frame\n}) => {\n const scrolled = scroll$1(page.marginBox, frame);\n const increased = increase(scrolled, axis, withPlaceholder);\n const clipped = clip(increased, frame);\n return {\n page,\n withPlaceholder,\n active: clipped\n };\n};\n\nvar scrollDroppable = (droppable, newScroll) => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const scrollable = droppable.frame;\n const scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n const scrollDisplacement = negate(scrollDiff);\n const frame = {\n ...scrollable,\n scroll: {\n initial: scrollable.scroll.initial,\n current: newScroll,\n diff: {\n value: scrollDiff,\n displacement: scrollDisplacement\n },\n max: scrollable.scroll.max\n }\n };\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: droppable.subject.withPlaceholder,\n axis: droppable.axis,\n frame\n });\n const result = {\n ...droppable,\n frame,\n subject\n };\n return result;\n};\n\nfunction memoizeOne(resultFn, isEqual = areInputsEqual) {\n let cache = null;\n function memoized(...newArgs) {\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n const lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult,\n lastArgs: newArgs,\n lastThis: this\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nconst toDroppableMap = memoizeOne(droppables => droppables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDraggableMap = memoizeOne(draggables => draggables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDroppableList = memoizeOne(droppables => Object.values(droppables));\nconst toDraggableList = memoizeOne(draggables => Object.values(draggables));\n\nvar getDraggablesInsideDroppable = memoizeOne((droppableId, draggables) => {\n const result = toDraggableList(draggables).filter(draggable => droppableId === draggable.descriptor.droppableId).sort((a, b) => a.descriptor.index - b.descriptor.index);\n return result;\n});\n\nfunction tryGetDestination(impact) {\n if (impact.at && impact.at.type === 'REORDER') {\n return impact.at.destination;\n }\n return null;\n}\nfunction tryGetCombine(impact) {\n if (impact.at && impact.at.type === 'COMBINE') {\n return impact.at.combine;\n }\n return null;\n}\n\nvar removeDraggableFromList = memoizeOne((remove, list) => list.filter(item => item.descriptor.id !== remove.descriptor.id));\n\nvar moveToNextCombine = ({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const location = tryGetDestination(previousImpact);\n if (!location) {\n return null;\n }\n function getImpact(target) {\n const at = {\n type: 'COMBINE',\n combine: {\n draggableId: target,\n droppableId: destination.descriptor.id\n }\n };\n return {\n ...previousImpact,\n at\n };\n }\n const all = previousImpact.displaced.all;\n const closestId = all.length ? all[0] : null;\n if (isMovingForward) {\n return closestId ? getImpact(closestId) : null;\n }\n const withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n if (!closestId) {\n if (!withoutDraggable.length) {\n return null;\n }\n const last = withoutDraggable[withoutDraggable.length - 1];\n return getImpact(last.descriptor.id);\n }\n const indexOfClosest = withoutDraggable.findIndex(d => d.descriptor.id === closestId);\n !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant() : void 0;\n const proposedIndex = indexOfClosest - 1;\n if (proposedIndex < 0) {\n return null;\n }\n const before = withoutDraggable[proposedIndex];\n return getImpact(before.descriptor.id);\n};\n\nvar isHomeOf = (draggable, destination) => draggable.descriptor.droppableId === destination.descriptor.id;\n\nconst noDisplacedBy = {\n point: origin,\n value: 0\n};\nconst emptyGroups = {\n invisible: {},\n visible: {},\n all: []\n};\nconst noImpact = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: null\n};\n\nvar isWithin = (lowerBound, upperBound) => value => lowerBound <= value && value <= upperBound;\n\nvar isPartiallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n if (isContained) {\n return true;\n }\n const isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n const isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n const isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n if (isPartiallyContained) {\n return true;\n }\n const isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n const isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n const isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n if (isTargetBiggerThanFrame) {\n return true;\n }\n const isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n return isTargetBiggerOnOneAxis;\n };\n};\n\nvar isTotallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n return isContained;\n };\n};\n\nconst vertical = {\n direction: 'vertical',\n line: 'y',\n crossAxisLine: 'x',\n start: 'top',\n end: 'bottom',\n size: 'height',\n crossAxisStart: 'left',\n crossAxisEnd: 'right',\n crossAxisSize: 'width'\n};\nconst horizontal = {\n direction: 'horizontal',\n line: 'x',\n crossAxisLine: 'y',\n start: 'left',\n end: 'right',\n size: 'width',\n crossAxisStart: 'top',\n crossAxisEnd: 'bottom',\n crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = axis => frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n if (axis === vertical) {\n return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n }\n return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n };\n};\n\nconst getDroppableDisplaced = (target, destination) => {\n const displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n return offsetByPosition(target, displacement);\n};\nconst isVisibleInDroppable = (target, destination, isVisibleThroughFrameFn) => {\n if (!destination.subject.active) {\n return false;\n }\n return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\nconst isVisibleInViewport = (target, viewport, isVisibleThroughFrameFn) => isVisibleThroughFrameFn(viewport)(target);\nconst isVisible$1 = ({\n target: toBeDisplaced,\n destination,\n viewport,\n withDroppableDisplacement,\n isVisibleThroughFrameFn\n}) => {\n const displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\nconst isPartiallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n});\nconst isTotallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n});\nconst isTotallyVisibleOnAxis = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n});\n\nconst getShouldAnimate = (id, last, forceShouldAnimate) => {\n if (typeof forceShouldAnimate === 'boolean') {\n return forceShouldAnimate;\n }\n if (!last) {\n return true;\n }\n const {\n invisible,\n visible\n } = last;\n if (invisible[id]) {\n return false;\n }\n const previous = visible[id];\n return previous ? previous.shouldAnimate : true;\n};\nfunction getTarget(draggable, displacedBy) {\n const marginBox = draggable.page.marginBox;\n const expandBy = {\n top: displacedBy.point.y,\n right: 0,\n bottom: 0,\n left: displacedBy.point.x\n };\n return getRect(expand(marginBox, expandBy));\n}\nfunction getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy,\n viewport,\n forceShouldAnimate,\n last\n}) {\n return afterDragging.reduce(function process(groups, draggable) {\n const target = getTarget(draggable, displacedBy);\n const id = draggable.descriptor.id;\n groups.all.push(id);\n const isVisible = isPartiallyVisible({\n target,\n destination,\n viewport,\n withDroppableDisplacement: true\n });\n if (!isVisible) {\n groups.invisible[draggable.descriptor.id] = true;\n return groups;\n }\n const shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n const displacement = {\n draggableId: id,\n shouldAnimate\n };\n groups.visible[id] = displacement;\n return groups;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n if (!draggables.length) {\n return 0;\n }\n const indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\nfunction goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n}) {\n const newIndex = getIndexOfLastItem(insideDestination, {\n inHomeList\n });\n return {\n displaced: emptyGroups,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: newIndex\n }\n }\n };\n}\nfunction calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last,\n index,\n forceShouldAnimate\n}) {\n const inHomeList = isHomeOf(draggable, destination);\n if (index == null) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const match = insideDestination.find(item => item.descriptor.index === index);\n if (!match) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const sliceFrom = insideDestination.indexOf(match);\n const impacted = withoutDragging.slice(sliceFrom);\n const displaced = getDisplacementGroups({\n afterDragging: impacted,\n destination,\n displacedBy,\n last,\n viewport: viewport.frame,\n forceShouldAnimate\n });\n return {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index\n }\n }\n };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = ({\n isMovingForward,\n destination,\n draggables,\n combine,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const combineId = combine.draggableId;\n const combineWith = draggables[combineId];\n const combineWithIndex = combineWith.descriptor.index;\n const didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n if (didCombineWithStartAfterCritical) {\n if (isMovingForward) {\n return combineWithIndex;\n }\n return combineWithIndex - 1;\n }\n if (isMovingForward) {\n return combineWithIndex + 1;\n }\n return combineWithIndex;\n};\n\nvar fromReorder = ({\n isMovingForward,\n isInHomeList,\n insideDestination,\n location\n}) => {\n if (!insideDestination.length) {\n return null;\n }\n const currentIndex = location.index;\n const proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n const firstIndex = insideDestination[0].descriptor.index;\n const lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n const upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n if (proposedIndex < firstIndex) {\n return null;\n }\n if (proposedIndex > upperBound) {\n return null;\n }\n return proposedIndex;\n};\n\nvar moveToNextIndex = ({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const wasAt = previousImpact.at;\n !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant() : void 0;\n if (wasAt.type === 'REORDER') {\n const newIndex = fromReorder({\n isMovingForward,\n isInHomeList,\n location: wasAt.destination,\n insideDestination\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n }\n const newIndex = fromCombine({\n isMovingForward,\n destination,\n displaced: previousImpact.displaced,\n draggables,\n combine: wasAt.combine,\n afterCritical\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n};\n\nvar getCombinedItemDisplacement = ({\n displaced,\n afterCritical,\n combineWith,\n displacedBy\n}) => {\n const isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n if (didStartAfterCritical(combineWith, afterCritical)) {\n return isDisplaced ? origin : negate(displacedBy.point);\n }\n return isDisplaced ? displacedBy.point : origin;\n};\n\nvar whenCombining = ({\n afterCritical,\n impact,\n draggables\n}) => {\n const combine = tryGetCombine(impact);\n !combine ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const combineWith = combine.draggableId;\n const center = draggables[combineWith].page.borderBox.center;\n const displaceBy = getCombinedItemDisplacement({\n displaced: impact.displaced,\n afterCritical,\n combineWith,\n displacedBy: impact.displacedBy\n });\n return add(center, displaceBy);\n};\n\nconst distanceFromStartToBorderBoxCenter = (axis, box) => box.margin[axis.start] + box.borderBox[axis.size] / 2;\nconst distanceFromEndToBorderBoxCenter = (axis, box) => box.margin[axis.end] + box.borderBox[axis.size] / 2;\nconst getCrossAxisBorderBoxCenter = (axis, target, isMoving) => target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\nconst goAfter = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goBefore = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goIntoStart = ({\n axis,\n moveInto,\n isMoving\n}) => patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n\nvar whenReordering = ({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n}) => {\n const insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const draggablePage = draggable.page;\n const axis = droppable.axis;\n if (!insideDestination.length) {\n return goIntoStart({\n axis,\n moveInto: droppable.page,\n isMoving: draggablePage\n });\n }\n const {\n displaced,\n displacedBy\n } = impact;\n const closestAfter = displaced.all[0];\n if (closestAfter) {\n const closest = draggables[closestAfter];\n if (didStartAfterCritical(closestAfter, afterCritical)) {\n return goBefore({\n axis,\n moveRelativeTo: closest.page,\n isMoving: draggablePage\n });\n }\n const withDisplacement = offset(closest.page, displacedBy.point);\n return goBefore({\n axis,\n moveRelativeTo: withDisplacement,\n isMoving: draggablePage\n });\n }\n const last = insideDestination[insideDestination.length - 1];\n if (last.descriptor.id === draggable.descriptor.id) {\n return draggablePage.borderBox.center;\n }\n if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n const page = offset(last.page, negate(afterCritical.displacedBy.point));\n return goAfter({\n axis,\n moveRelativeTo: page,\n isMoving: draggablePage\n });\n }\n return goAfter({\n axis,\n moveRelativeTo: last.page,\n isMoving: draggablePage\n });\n};\n\nvar withDroppableDisplacement = (droppable, point) => {\n const frame = droppable.frame;\n if (!frame) {\n return point;\n }\n return add(point, frame.scroll.diff.displacement);\n};\n\nconst getResultWithoutDroppableDisplacement = ({\n impact,\n draggable,\n droppable,\n draggables,\n afterCritical\n}) => {\n const original = draggable.page.borderBox.center;\n const at = impact.at;\n if (!droppable) {\n return original;\n }\n if (!at) {\n return original;\n }\n if (at.type === 'REORDER') {\n return whenReordering({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n }\n return whenCombining({\n impact,\n draggables,\n afterCritical\n });\n};\nvar getPageBorderBoxCenterFromImpact = args => {\n const withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n const droppable = args.droppable;\n const withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n return withDisplacement;\n};\n\nvar scrollViewport = (viewport, newScroll) => {\n const diff = subtract(newScroll, viewport.scroll.initial);\n const displacement = negate(diff);\n const frame = getRect({\n top: newScroll.y,\n bottom: newScroll.y + viewport.frame.height,\n left: newScroll.x,\n right: newScroll.x + viewport.frame.width\n });\n const updated = {\n frame,\n scroll: {\n initial: viewport.scroll.initial,\n max: viewport.scroll.max,\n current: newScroll,\n diff: {\n value: diff,\n displacement\n }\n }\n };\n return updated;\n};\n\nfunction getDraggables$1(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nfunction tryGetVisible(id, groups) {\n for (let i = 0; i < groups.length; i++) {\n const displacement = groups[i].visible[id];\n if (displacement) {\n return displacement;\n }\n }\n return null;\n}\nvar speculativelyIncrease = ({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange\n}) => {\n const scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n const scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n const last = impact.displaced;\n const withViewportScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination,\n displacedBy: impact.displacedBy,\n viewport: scrolledViewport.frame,\n last,\n forceShouldAnimate: false\n });\n const withDroppableScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination: scrolledDroppable,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n last,\n forceShouldAnimate: false\n });\n const invisible = {};\n const visible = {};\n const groups = [last, withViewportScroll, withDroppableScroll];\n last.all.forEach(id => {\n const displacement = tryGetVisible(id, groups);\n if (displacement) {\n visible[id] = displacement;\n return;\n }\n invisible[id] = true;\n });\n const newImpact = {\n ...impact,\n displaced: {\n all: last.all,\n invisible,\n visible\n }\n };\n return newImpact;\n};\n\nvar withViewportDisplacement = (viewport, point) => add(viewport.scroll.diff.displacement, point);\n\nvar getClientFromPageBorderBoxCenter = ({\n pageBorderBoxCenter,\n draggable,\n viewport\n}) => {\n const withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n const offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n return add(draggable.client.borderBox.center, offset);\n};\n\nvar isTotallyVisibleInNewLocation = ({\n draggable,\n destination,\n newPageBorderBoxCenter,\n viewport,\n withDroppableDisplacement,\n onlyOnMainAxis = false\n}) => {\n const changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n const shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n const args = {\n target: shifted,\n destination,\n withDroppableDisplacement,\n viewport\n };\n return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n};\n\nvar moveToNextPlace = ({\n isMovingForward,\n draggable,\n destination,\n draggables,\n previousImpact,\n viewport,\n previousPageBorderBoxCenter,\n previousClientSelection,\n afterCritical\n}) => {\n if (!destination.isEnabled) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const isInHomeList = isHomeOf(draggable, destination);\n const impact = moveToNextCombine({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n }) || moveToNextIndex({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination,\n newPageBorderBoxCenter: pageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n if (isVisibleInNewLocation) {\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n }\n const distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n const cautious = speculativelyIncrease({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange: distance\n });\n return {\n clientSelection: previousClientSelection,\n impact: cautious,\n scrollJumpRequest: distance\n };\n};\n\nconst getKnownActive = droppable => {\n const rect = droppable.subject.active;\n !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant() : void 0;\n return rect;\n};\nvar getBestCrossAxisDroppable = ({\n isMovingForward,\n pageBorderBoxCenter,\n source,\n droppables,\n viewport\n}) => {\n const active = source.subject.active;\n if (!active) {\n return null;\n }\n const axis = source.axis;\n const isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n const candidates = toDroppableList(droppables).filter(droppable => droppable !== source).filter(droppable => droppable.isEnabled).filter(droppable => Boolean(droppable.subject.active)).filter(droppable => isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable))).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n if (isMovingForward) {\n return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n }\n return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n }).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n const isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n }).sort((a, b) => {\n const first = getKnownActive(a)[axis.crossAxisStart];\n const second = getKnownActive(b)[axis.crossAxisStart];\n if (isMovingForward) {\n return first - second;\n }\n return second - first;\n }).filter((droppable, index, array) => getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart]);\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const contains = candidates.filter(droppable => {\n const isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n });\n if (contains.length === 1) {\n return contains[0];\n }\n if (contains.length > 1) {\n return contains.sort((a, b) => getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start])[0];\n }\n return candidates.sort((a, b) => {\n const first = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n const second = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n if (first !== second) {\n return first - second;\n }\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n};\n\nconst getCurrentPageBorderBoxCenter = (draggable, afterCritical) => {\n const original = draggable.page.borderBox.center;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nconst getCurrentPageBorderBox = (draggable, afterCritical) => {\n const original = draggable.page.borderBox;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = ({\n pageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n}) => {\n const sorted = insideDestination.filter(draggable => isTotallyVisible({\n target: getCurrentPageBorderBox(draggable, afterCritical),\n destination,\n viewport: viewport.frame,\n withDroppableDisplacement: true\n })).sort((a, b) => {\n const distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n const distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n if (distanceToA < distanceToB) {\n return -1;\n }\n if (distanceToB < distanceToA) {\n return 1;\n }\n return a.descriptor.index - b.descriptor.index;\n });\n return sorted[0] || null;\n};\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n const displacement = displaceBy[axis.line];\n return {\n value: displacement,\n point: patch(axis.line, displacement)\n };\n});\n\nconst getRequiredGrowthForPlaceholder = (droppable, placeholderSize, draggables) => {\n const axis = droppable.axis;\n if (droppable.descriptor.mode === 'virtual') {\n return patch(axis.line, placeholderSize[axis.line]);\n }\n const availableSpace = droppable.subject.page.contentBox[axis.size];\n const insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const spaceUsed = insideDroppable.reduce((sum, dimension) => sum + dimension.client.marginBox[axis.size], 0);\n const requiredSpace = spaceUsed + placeholderSize[axis.line];\n const needsToGrowBy = requiredSpace - availableSpace;\n if (needsToGrowBy <= 0) {\n return null;\n }\n return patch(axis.line, needsToGrowBy);\n};\nconst withMaxScroll = (frame, max) => ({\n ...frame,\n scroll: {\n ...frame.scroll,\n max\n }\n});\nconst addPlaceholder = (droppable, draggable, draggables) => {\n const frame = droppable.frame;\n !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant() : void 0;\n !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant() : void 0;\n const placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n const requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n const added = {\n placeholderSize,\n increasedBy: requiredGrowth,\n oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n };\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: droppable.frame\n });\n return {\n ...droppable,\n subject\n };\n }\n const maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n const newFrame = withMaxScroll(frame, maxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: newFrame\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\nconst removePlaceholder = droppable => {\n const added = droppable.subject.withPlaceholder;\n !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant() : void 0;\n const frame = droppable.frame;\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: null,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject\n };\n }\n const oldMaxScroll = added.oldFrameMaxScroll;\n !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant() : void 0;\n const newFrame = withMaxScroll(frame, oldMaxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: newFrame,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\n\nvar moveToNewDroppable = ({\n previousPageBorderBoxCenter,\n moveRelativeTo,\n insideDestination,\n draggable,\n draggables,\n destination,\n viewport,\n afterCritical\n}) => {\n if (!moveRelativeTo) {\n if (insideDestination.length) {\n return null;\n }\n const proposed = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: 0\n }\n }\n };\n const proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: proposed,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination: withPlaceholder,\n newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n return isVisibleInNewLocation ? proposed : null;\n }\n const isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n const proposedIndex = (() => {\n const relativeTo = moveRelativeTo.descriptor.index;\n if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n return relativeTo;\n }\n if (isGoingBeforeTarget) {\n return relativeTo;\n }\n return relativeTo + 1;\n })();\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last: emptyGroups,\n index: proposedIndex\n });\n};\n\nvar moveCrossAxis = ({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport,\n afterCritical\n}) => {\n const destination = getBestCrossAxisDroppable({\n isMovingForward,\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n source: isOver,\n droppables,\n viewport\n });\n if (!destination) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const moveRelativeTo = getClosestDraggable({\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n });\n const impact = moveToNewDroppable({\n previousPageBorderBoxCenter,\n destination,\n draggable,\n draggables,\n moveRelativeTo,\n insideDestination,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n};\n\nvar whatIsDraggedOver = impact => {\n const at = impact.at;\n if (!at) {\n return null;\n }\n if (at.type === 'REORDER') {\n return at.destination.droppableId;\n }\n return at.combine.droppableId;\n};\n\nconst getDroppableOver$1 = (impact, droppables) => {\n const id = whatIsDraggedOver(impact);\n return id ? droppables[id] : null;\n};\nvar moveInDirection = ({\n state,\n type\n}) => {\n const isActuallyOver = getDroppableOver$1(state.impact, state.dimensions.droppables);\n const isMainAxisMovementAllowed = Boolean(isActuallyOver);\n const home = state.dimensions.droppables[state.critical.droppable.id];\n const isOver = isActuallyOver || home;\n const direction = isOver.axis.direction;\n const isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n return null;\n }\n const isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n const {\n draggables,\n droppables\n } = state.dimensions;\n return isMovingOnMainAxis ? moveToNextPlace({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n destination: isOver,\n draggables,\n viewport: state.viewport,\n previousClientSelection: state.current.client.selection,\n previousImpact: state.impact,\n afterCritical: state.afterCritical\n }) : moveCrossAxis({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n};\n\nfunction isMovementAllowed(state) {\n return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return function run(point) {\n return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n };\n}\n\nfunction getHasOverlap(first, second) {\n return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\nfunction getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n}) {\n const startCenter = draggable.page.borderBox.center;\n const sorted = candidates.map(candidate => {\n const axis = candidate.axis;\n const target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n return {\n id: candidate.descriptor.id,\n distance: distance(startCenter, target)\n };\n }).sort((a, b) => b.distance - a.distance);\n return sorted[0] ? sorted[0].id : null;\n}\nfunction getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n}) {\n const candidates = toDroppableList(droppables).filter(item => {\n if (!item.isEnabled) {\n return false;\n }\n const active = item.subject.active;\n if (!active) {\n return false;\n }\n if (!getHasOverlap(pageBorderBox, active)) {\n return false;\n }\n if (isPositionInFrame(active)(pageBorderBox.center)) {\n return true;\n }\n const axis = item.axis;\n const childCenter = active.center[axis.crossAxisLine];\n const crossAxisStart = pageBorderBox[axis.crossAxisStart];\n const crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n const isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n const isStartContained = isContained(crossAxisStart);\n const isEndContained = isContained(crossAxisEnd);\n if (!isStartContained && !isEndContained) {\n return true;\n }\n if (isStartContained) {\n return crossAxisStart < childCenter;\n }\n return crossAxisEnd > childCenter;\n });\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0].descriptor.id;\n }\n return getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n });\n}\n\nconst offsetRectByPosition = (rect, point) => getRect(offsetByPosition(rect, point));\n\nvar withDroppableScroll = (droppable, area) => {\n const frame = droppable.frame;\n if (!frame) {\n return area;\n }\n return offsetRectByPosition(area, frame.scroll.diff.value);\n};\n\nfunction getIsDisplaced({\n displaced,\n id\n}) {\n return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex({\n draggable,\n closest,\n inHomeList\n}) {\n if (!closest) {\n return null;\n }\n if (!inHomeList) {\n return closest.descriptor.index;\n }\n if (closest.descriptor.index > draggable.descriptor.index) {\n return closest.descriptor.index - 1;\n }\n return closest.descriptor.index;\n}\nvar getReorderImpact = ({\n pageBorderBoxWithDroppableScroll: targetRect,\n draggable,\n destination,\n insideDestination,\n last,\n viewport,\n afterCritical\n}) => {\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const closest = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childCenter = child.page.borderBox.center[axis.line];\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: last,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd <= childCenter;\n }\n return targetStart < childCenter - displacement;\n }\n if (isDisplaced) {\n return targetEnd <= childCenter + displacement;\n }\n return targetStart < childCenter;\n }) || null;\n const newIndex = atIndex({\n draggable,\n closest,\n inHomeList: isHomeOf(draggable, destination)\n });\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last,\n displacedBy,\n index: newIndex\n });\n};\n\nconst combineThresholdDivisor = 4;\nvar getCombineImpact = ({\n draggable,\n pageBorderBoxWithDroppableScroll: targetRect,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const combineWith = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childRect = child.page.borderBox;\n const childSize = childRect[axis.size];\n const threshold = childSize / combineThresholdDivisor;\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: previousImpact.displaced,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n }\n return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n }\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n }\n return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n });\n if (!combineWith) {\n return null;\n }\n const impact = {\n displacedBy,\n displaced: previousImpact.displaced,\n at: {\n type: 'COMBINE',\n combine: {\n draggableId: combineWith.descriptor.id,\n droppableId: destination.descriptor.id\n }\n }\n };\n return impact;\n};\n\nvar getDragImpact = ({\n pageOffset,\n draggable,\n draggables,\n droppables,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n const destinationId = getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n });\n if (!destinationId) {\n return noImpact;\n }\n const destination = droppables[destinationId];\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n return getCombineImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n }) || getReorderImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n destination,\n insideDestination,\n last: previousImpact.displaced,\n viewport,\n afterCritical\n });\n};\n\nvar patchDroppableMap = (droppables, updated) => ({\n ...droppables,\n [updated.descriptor.id]: updated\n});\n\nconst clearUnusedPlaceholder = ({\n previousImpact,\n impact,\n droppables\n}) => {\n const last = whatIsDraggedOver(previousImpact);\n const now = whatIsDraggedOver(impact);\n if (!last) {\n return droppables;\n }\n if (last === now) {\n return droppables;\n }\n const lastDroppable = droppables[last];\n if (!lastDroppable.subject.withPlaceholder) {\n return droppables;\n }\n const updated = removePlaceholder(lastDroppable);\n return patchDroppableMap(droppables, updated);\n};\nvar recomputePlaceholders = ({\n draggable,\n draggables,\n droppables,\n previousImpact,\n impact\n}) => {\n const cleaned = clearUnusedPlaceholder({\n previousImpact,\n impact,\n droppables\n });\n const isOver = whatIsDraggedOver(impact);\n if (!isOver) {\n return cleaned;\n }\n const droppable = droppables[isOver];\n if (isHomeOf(draggable, droppable)) {\n return cleaned;\n }\n if (droppable.subject.withPlaceholder) {\n return cleaned;\n }\n const patched = addPlaceholder(droppable, draggable, draggables);\n return patchDroppableMap(cleaned, patched);\n};\n\nvar update = ({\n state,\n clientSelection: forcedClientSelection,\n dimensions: forcedDimensions,\n viewport: forcedViewport,\n impact: forcedImpact,\n scrollJumpRequest\n}) => {\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const clientSelection = forcedClientSelection || state.current.client.selection;\n const offset = subtract(clientSelection, state.initial.client.selection);\n const client = {\n offset,\n selection: clientSelection,\n borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n };\n const page = {\n selection: add(client.selection, viewport.scroll.current),\n borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n offset: add(client.offset, viewport.scroll.diff.value)\n };\n const current = {\n client,\n page\n };\n if (state.phase === 'COLLECTING') {\n return {\n ...state,\n dimensions,\n viewport,\n current\n };\n }\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const newImpact = forcedImpact || getDragImpact({\n pageOffset: page.offset,\n draggable,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: state.impact,\n viewport,\n afterCritical: state.afterCritical\n });\n const withUpdatedPlaceholders = recomputePlaceholders({\n draggable,\n impact: newImpact,\n previousImpact: state.impact,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables\n });\n const result = {\n ...state,\n current,\n dimensions: {\n draggables: dimensions.draggables,\n droppables: withUpdatedPlaceholders\n },\n impact: newImpact,\n viewport,\n scrollJumpRequest: scrollJumpRequest || null,\n forceShouldAnimate: scrollJumpRequest ? false : null\n };\n return result;\n};\n\nfunction getDraggables(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nvar recompute = ({\n impact,\n viewport,\n draggables,\n destination,\n forceShouldAnimate\n}) => {\n const last = impact.displaced;\n const afterDragging = getDraggables(last.all, draggables);\n const displaced = getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n forceShouldAnimate,\n last\n });\n return {\n ...impact,\n displaced\n };\n};\n\nvar getClientBorderBoxCenter = ({\n impact,\n draggable,\n droppable,\n draggables,\n viewport,\n afterCritical\n}) => {\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n return getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n};\n\nvar refreshSnap = ({\n state,\n dimensions: forcedDimensions,\n viewport: forcedViewport\n}) => {\n !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const needsVisibilityCheck = state.impact;\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const {\n draggables,\n droppables\n } = dimensions;\n const draggable = draggables[state.critical.draggable.id];\n const isOver = whatIsDraggedOver(needsVisibilityCheck);\n !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant() : void 0;\n const destination = droppables[isOver];\n const impact = recompute({\n impact: needsVisibilityCheck,\n viewport,\n destination,\n draggables\n });\n const clientSelection = getClientBorderBoxCenter({\n impact,\n draggable,\n droppable: destination,\n draggables,\n viewport,\n afterCritical: state.afterCritical\n });\n return update({\n impact,\n clientSelection,\n state,\n dimensions,\n viewport\n });\n};\n\nvar getHomeLocation = descriptor => ({\n index: descriptor.index,\n droppableId: descriptor.droppableId\n});\n\nvar getLiftEffect = ({\n draggable,\n home,\n draggables,\n viewport\n}) => {\n const displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n const insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n const rawIndex = insideHome.indexOf(draggable);\n !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant() : void 0;\n const afterDragging = insideHome.slice(rawIndex + 1);\n const effected = afterDragging.reduce((previous, item) => {\n previous[item.descriptor.id] = true;\n return previous;\n }, {});\n const afterCritical = {\n inVirtualList: home.descriptor.mode === 'virtual',\n displacedBy,\n effected\n };\n const displaced = getDisplacementGroups({\n afterDragging,\n destination: home,\n displacedBy,\n last: null,\n viewport: viewport.frame,\n forceShouldAnimate: false\n });\n const impact = {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: getHomeLocation(draggable.descriptor)\n }\n };\n return {\n impact,\n afterCritical\n };\n};\n\nvar patchDimensionMap = (dimensions, updated) => ({\n draggables: dimensions.draggables,\n droppables: patchDroppableMap(dimensions.droppables, updated)\n});\n\nconst start = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\nconst finish = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\n\nvar offsetDraggable = ({\n draggable,\n offset: offset$1,\n initialWindowScroll\n}) => {\n const client = offset(draggable.client, offset$1);\n const page = withScroll(client, initialWindowScroll);\n const moved = {\n ...draggable,\n placeholder: {\n ...draggable.placeholder,\n client\n },\n client,\n page\n };\n return moved;\n};\n\nvar getFrame = droppable => {\n const frame = droppable.frame;\n !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant() : void 0;\n return frame;\n};\n\nvar adjustAdditionsForScrollChanges = ({\n additions,\n updatedDroppables,\n viewport\n}) => {\n const windowScrollChange = viewport.scroll.diff.value;\n return additions.map(draggable => {\n const droppableId = draggable.descriptor.droppableId;\n const modified = updatedDroppables[droppableId];\n const frame = getFrame(modified);\n const droppableScrollChange = frame.scroll.diff.value;\n const totalChange = add(windowScrollChange, droppableScrollChange);\n const moved = offsetDraggable({\n draggable,\n offset: totalChange,\n initialWindowScroll: viewport.scroll.initial\n });\n return moved;\n });\n};\n\nvar publishWhileDraggingInVirtual = ({\n state,\n published\n}) => {\n start();\n const withScrollChange = published.modified.map(update => {\n const existing = state.dimensions.droppables[update.droppableId];\n const scrolled = scrollDroppable(existing, update.scroll);\n return scrolled;\n });\n const droppables = {\n ...state.dimensions.droppables,\n ...toDroppableMap(withScrollChange)\n };\n const updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n additions: published.additions,\n updatedDroppables: droppables,\n viewport: state.viewport\n }));\n const draggables = {\n ...state.dimensions.draggables,\n ...updatedAdditions\n };\n published.removals.forEach(id => {\n delete draggables[id];\n });\n const dimensions = {\n droppables,\n draggables\n };\n const wasOverId = whatIsDraggedOver(state.impact);\n const wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const home = dimensions.droppables[state.critical.droppable.id];\n const {\n impact: onLiftImpact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables,\n viewport: state.viewport\n });\n const previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n const impact = getDragImpact({\n pageOffset: state.current.page.offset,\n draggable: dimensions.draggables[state.critical.draggable.id],\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact,\n viewport: state.viewport,\n afterCritical\n });\n finish();\n const draggingState = {\n ...state,\n phase: 'DRAGGING',\n impact,\n onLiftImpact,\n dimensions,\n afterCritical,\n forceShouldAnimate: false\n };\n if (state.phase === 'COLLECTING') {\n return draggingState;\n }\n const dropPending = {\n ...draggingState,\n phase: 'DROP_PENDING',\n reason: state.reason,\n isWaiting: false\n };\n return dropPending;\n};\n\nconst isSnapping = state => state.movementMode === 'SNAP';\nconst postDroppableChange = (state, updated, isEnabledChanging) => {\n const dimensions = patchDimensionMap(state.dimensions, updated);\n if (!isSnapping(state) || isEnabledChanging) {\n return update({\n state,\n dimensions\n });\n }\n return refreshSnap({\n state,\n dimensions\n });\n};\nfunction removeScrollJumpRequest(state) {\n if (state.isDragging && state.movementMode === 'SNAP') {\n return {\n ...state,\n scrollJumpRequest: null\n };\n }\n return state;\n}\nconst idle$2 = {\n phase: 'IDLE',\n completed: null,\n shouldFlush: false\n};\nvar reducer = (state = idle$2, action) => {\n if (action.type === 'FLUSH') {\n return {\n ...idle$2,\n shouldFlush: true\n };\n }\n if (action.type === 'INITIAL_PUBLISH') {\n !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant() : void 0;\n const {\n critical,\n clientSelection,\n viewport,\n dimensions,\n movementMode\n } = action.payload;\n const draggable = dimensions.draggables[critical.draggable.id];\n const home = dimensions.droppables[critical.droppable.id];\n const client = {\n selection: clientSelection,\n borderBoxCenter: draggable.client.borderBox.center,\n offset: origin\n };\n const initial = {\n client,\n page: {\n selection: add(client.selection, viewport.scroll.initial),\n borderBoxCenter: add(client.selection, viewport.scroll.initial),\n offset: add(client.selection, viewport.scroll.diff.value)\n }\n };\n const isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(item => !item.isFixedOnPage);\n const {\n impact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables: dimensions.draggables,\n viewport\n });\n const result = {\n phase: 'DRAGGING',\n isDragging: true,\n critical,\n movementMode,\n dimensions,\n initial,\n current: initial,\n isWindowScrollAllowed,\n impact,\n afterCritical,\n onLiftImpact: impact,\n viewport,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return result;\n }\n if (action.type === 'COLLECTION_STARTING') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Collection cannot start from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n ...state,\n phase: 'COLLECTING'\n };\n return result;\n }\n if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unexpected ${action.type} received in phase ${state.phase}`) : invariant() : void 0;\n return publishWhileDraggingInVirtual({\n state,\n published: action.payload\n });\n }\n if (action.type === 'MOVE') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n client: clientSelection\n } = action.payload;\n if (isEqual$1(clientSelection, state.current.client.selection)) {\n return state;\n }\n return update({\n state,\n clientSelection,\n impact: isSnapping(state) ? state.impact : null\n });\n }\n if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n if (state.phase === 'DROP_PENDING') {\n return removeScrollJumpRequest(state);\n }\n if (state.phase === 'COLLECTING') {\n return removeScrollJumpRequest(state);\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n newScroll\n } = action.payload;\n const target = state.dimensions.droppables[id];\n if (!target) {\n return state;\n }\n const scrolled = scrollDroppable(target, newScroll);\n return postDroppableChange(state, scrolled, false);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its enabled state`) : invariant() : void 0;\n !(target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isEnabled to ${String(isEnabled)}\n but it is already ${String(target.isEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isCombineEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its isCombineEnabled state`) : invariant() : void 0;\n !(target.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isCombineEnabled to ${String(isCombineEnabled)}\n but it is already ${String(target.isCombineEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isCombineEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot move by window in phase ${state.phase}`) : invariant() : void 0;\n !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant() : void 0;\n const newScroll = action.payload.newScroll;\n if (isEqual$1(state.viewport.scroll.current, newScroll)) {\n return removeScrollJumpRequest(state);\n }\n const viewport = scrollViewport(state.viewport, newScroll);\n if (isSnapping(state)) {\n return refreshSnap({\n state,\n viewport\n });\n }\n return update({\n state,\n viewport\n });\n }\n if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n if (!isMovementAllowed(state)) {\n return state;\n }\n const maxScroll = action.payload.maxScroll;\n if (isEqual$1(maxScroll, state.viewport.scroll.max)) {\n return state;\n }\n const withMaxScroll = {\n ...state.viewport,\n scroll: {\n ...state.viewport.scroll,\n max: maxScroll\n }\n };\n return {\n ...state,\n viewport: withMaxScroll\n };\n }\n if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} received while not in DRAGGING phase`) : invariant() : void 0;\n const result = moveInDirection({\n state,\n type: action.type\n });\n if (!result) {\n return state;\n }\n return update({\n state,\n impact: result.impact,\n clientSelection: result.clientSelection,\n scrollJumpRequest: result.scrollJumpRequest\n });\n }\n if (action.type === 'DROP_PENDING') {\n const reason = action.payload.reason;\n !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant() : void 0;\n const newState = {\n ...state,\n phase: 'DROP_PENDING',\n isWaiting: true,\n reason\n };\n return newState;\n }\n if (action.type === 'DROP_ANIMATE') {\n const {\n completed,\n dropDuration,\n newHomeClientOffset\n } = action.payload;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot animate drop from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n phase: 'DROP_ANIMATING',\n completed,\n dropDuration,\n newHomeClientOffset,\n dimensions: state.dimensions\n };\n return result;\n }\n if (action.type === 'DROP_COMPLETE') {\n const {\n completed\n } = action.payload;\n return {\n phase: 'IDLE',\n completed,\n shouldFlush: false\n };\n }\n return state;\n};\n\nfunction guard(action, predicate) {\n return action instanceof Object && 'type' in action && action.type === predicate;\n}\nconst beforeInitialCapture = args => ({\n type: 'BEFORE_INITIAL_CAPTURE',\n payload: args\n});\nconst lift$1 = args => ({\n type: 'LIFT',\n payload: args\n});\nconst initialPublish = args => ({\n type: 'INITIAL_PUBLISH',\n payload: args\n});\nconst publishWhileDragging = args => ({\n type: 'PUBLISH_WHILE_DRAGGING',\n payload: args\n});\nconst collectionStarting = () => ({\n type: 'COLLECTION_STARTING',\n payload: null\n});\nconst updateDroppableScroll = args => ({\n type: 'UPDATE_DROPPABLE_SCROLL',\n payload: args\n});\nconst updateDroppableIsEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_ENABLED',\n payload: args\n});\nconst updateDroppableIsCombineEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n payload: args\n});\nconst move = args => ({\n type: 'MOVE',\n payload: args\n});\nconst moveByWindowScroll = args => ({\n type: 'MOVE_BY_WINDOW_SCROLL',\n payload: args\n});\nconst updateViewportMaxScroll = args => ({\n type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n payload: args\n});\nconst moveUp = () => ({\n type: 'MOVE_UP',\n payload: null\n});\nconst moveDown = () => ({\n type: 'MOVE_DOWN',\n payload: null\n});\nconst moveRight = () => ({\n type: 'MOVE_RIGHT',\n payload: null\n});\nconst moveLeft = () => ({\n type: 'MOVE_LEFT',\n payload: null\n});\nconst flush = () => ({\n type: 'FLUSH',\n payload: null\n});\nconst animateDrop = args => ({\n type: 'DROP_ANIMATE',\n payload: args\n});\nconst completeDrop = args => ({\n type: 'DROP_COMPLETE',\n payload: args\n});\nconst drop = args => ({\n type: 'DROP',\n payload: args\n});\nconst dropPending = args => ({\n type: 'DROP_PENDING',\n payload: args\n});\nconst dropAnimationFinished = () => ({\n type: 'DROP_ANIMATION_FINISHED',\n payload: null\n});\n\nfunction checkIndexes(insideDestination) {\n if (insideDestination.length <= 1) {\n return;\n }\n const indexes = insideDestination.map(d => d.descriptor.index);\n const errors = {};\n for (let i = 1; i < indexes.length; i++) {\n const current = indexes[i];\n const previous = indexes[i - 1];\n if (current !== previous + 1) {\n errors[current] = true;\n }\n }\n if (!Object.keys(errors).length) {\n return;\n }\n const formatted = indexes.map(index => {\n const hasError = Boolean(errors[index]);\n return hasError ? `[🔥${index}]` : `${index}`;\n }).join(', ');\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected non-consecutive <Draggable /> indexes.\n\n (This can cause unexpected bugs)\n\n ${formatted}\n `) : void 0;\n}\nfunction validateDimensions(critical, dimensions) {\n if (process.env.NODE_ENV !== 'production') {\n const insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n checkIndexes(insideDestination);\n }\n}\n\nvar lift = marshal => ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'LIFT')) {\n next(action);\n return;\n }\n const {\n id,\n clientSelection,\n movementMode\n } = action.payload;\n const initial = getState();\n if (initial.phase === 'DROP_ANIMATING') {\n dispatch(completeDrop({\n completed: initial.completed\n }));\n }\n !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant() : void 0;\n dispatch(flush());\n dispatch(beforeInitialCapture({\n draggableId: id,\n movementMode\n }));\n const scrollOptions = {\n shouldPublishImmediately: movementMode === 'SNAP'\n };\n const request = {\n draggableId: id,\n scrollOptions\n };\n const {\n critical,\n dimensions,\n viewport\n } = marshal.startPublishing(request);\n validateDimensions(critical, dimensions);\n dispatch(initialPublish({\n critical,\n dimensions,\n clientSelection,\n movementMode,\n viewport\n }));\n};\n\nvar style = marshal => () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n marshal.dragging();\n }\n if (guard(action, 'DROP_ANIMATE')) {\n marshal.dropping(action.payload.completed.result.reason);\n }\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE')) {\n marshal.resting();\n }\n next(action);\n};\n\nconst curves = {\n outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n drop: 'cubic-bezier(.2,1,.1,1)'\n};\nconst combine = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n};\nconst timings = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n};\nconst outOfTheWayTiming = `${timings.outOfTheWay}s ${curves.outOfTheWay}`;\nconst transitions = {\n fluid: `opacity ${outOfTheWayTiming}`,\n snap: `transform ${outOfTheWayTiming}, opacity ${outOfTheWayTiming}`,\n drop: duration => {\n const timing = `${duration}s ${curves.drop}`;\n return `transform ${timing}, opacity ${timing}`;\n },\n outOfTheWay: `transform ${outOfTheWayTiming}`,\n placeholder: `height ${outOfTheWayTiming}, width ${outOfTheWayTiming}, margin ${outOfTheWayTiming}`\n};\nconst moveTo = offset => isEqual$1(offset, origin) ? undefined : `translate(${offset.x}px, ${offset.y}px)`;\nconst transforms = {\n moveTo,\n drop: (offset, isCombining) => {\n const translate = moveTo(offset);\n if (!translate) {\n return undefined;\n }\n if (!isCombining) {\n return translate;\n }\n return `${translate} scale(${combine.scale.drop})`;\n }\n};\n\nconst {\n minDropTime,\n maxDropTime\n} = timings;\nconst dropTimeRange = maxDropTime - minDropTime;\nconst maxDropTimeAtDistance = 1500;\nconst cancelDropModifier = 0.6;\nvar getDropDuration = ({\n current,\n destination,\n reason\n}) => {\n const distance$1 = distance(current, destination);\n if (distance$1 <= 0) {\n return minDropTime;\n }\n if (distance$1 >= maxDropTimeAtDistance) {\n return maxDropTime;\n }\n const percentage = distance$1 / maxDropTimeAtDistance;\n const duration = minDropTime + dropTimeRange * percentage;\n const withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n return Number(withDuration.toFixed(2));\n};\n\nvar getNewHomeClientOffset = ({\n impact,\n draggable,\n dimensions,\n viewport,\n afterCritical\n}) => {\n const {\n draggables,\n droppables\n } = dimensions;\n const droppableId = whatIsDraggedOver(impact);\n const destination = droppableId ? droppables[droppableId] : null;\n const home = droppables[draggable.descriptor.droppableId];\n const newClientCenter = getClientBorderBoxCenter({\n impact,\n draggable,\n draggables,\n afterCritical,\n droppable: destination || home,\n viewport\n });\n const offset = subtract(newClientCenter, draggable.client.borderBox.center);\n return offset;\n};\n\nvar getDropImpact = ({\n draggables,\n reason,\n lastImpact,\n home,\n viewport,\n onLiftImpact\n}) => {\n if (!lastImpact.at || reason !== 'DROP') {\n const recomputedHomeImpact = recompute({\n draggables,\n impact: onLiftImpact,\n destination: home,\n viewport,\n forceShouldAnimate: true\n });\n return {\n impact: recomputedHomeImpact,\n didDropInsideDroppable: false\n };\n }\n if (lastImpact.at.type === 'REORDER') {\n return {\n impact: lastImpact,\n didDropInsideDroppable: true\n };\n }\n const withoutMovement = {\n ...lastImpact,\n displaced: emptyGroups\n };\n return {\n impact: withoutMovement,\n didDropInsideDroppable: true\n };\n};\n\nconst dropMiddleware = ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'DROP')) {\n next(action);\n return;\n }\n const state = getState();\n const reason = action.payload.reason;\n if (state.phase === 'COLLECTING') {\n dispatch(dropPending({\n reason\n }));\n return;\n }\n if (state.phase === 'IDLE') {\n return;\n }\n const isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant() : void 0;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot drop in phase: ${state.phase}`) : invariant() : void 0;\n const critical = state.critical;\n const dimensions = state.dimensions;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const {\n impact,\n didDropInsideDroppable\n } = getDropImpact({\n reason,\n lastImpact: state.impact,\n afterCritical: state.afterCritical,\n onLiftImpact: state.onLiftImpact,\n home: state.dimensions.droppables[state.critical.droppable.id],\n viewport: state.viewport,\n draggables: state.dimensions.draggables\n });\n const destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n const combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n const source = {\n index: critical.draggable.index,\n droppableId: critical.droppable.id\n };\n const result = {\n draggableId: draggable.descriptor.id,\n type: draggable.descriptor.type,\n source,\n reason,\n mode: state.movementMode,\n destination,\n combine\n };\n const newHomeClientOffset = getNewHomeClientOffset({\n impact,\n draggable,\n dimensions,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n const completed = {\n critical: state.critical,\n afterCritical: state.afterCritical,\n result,\n impact\n };\n const isAnimationRequired = !isEqual$1(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n if (!isAnimationRequired) {\n dispatch(completeDrop({\n completed\n }));\n return;\n }\n const dropDuration = getDropDuration({\n current: state.current.client.offset,\n destination: newHomeClientOffset,\n reason\n });\n const args = {\n newHomeClientOffset,\n dropDuration,\n completed\n };\n dispatch(animateDrop(args));\n};\n\nvar getWindowScroll = () => ({\n x: window.pageXOffset,\n y: window.pageYOffset\n});\n\nfunction getWindowScrollBinding(update) {\n return {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: event => {\n if (event.target !== window && event.target !== window.document) {\n return;\n }\n update();\n }\n };\n}\nfunction getScrollListener({\n onWindowScroll\n}) {\n function updateScroll() {\n onWindowScroll(getWindowScroll());\n }\n const scheduled = rafSchd(updateScroll);\n const binding = getWindowScrollBinding(scheduled);\n let unbind = noop$2;\n function isActive() {\n return unbind !== noop$2;\n }\n function start() {\n !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant() : void 0;\n unbind = bindEvents(window, [binding]);\n }\n function stop() {\n !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant() : void 0;\n scheduled.cancel();\n unbind();\n unbind = noop$2;\n }\n return {\n start,\n stop,\n isActive\n };\n}\n\nconst shouldStop$1 = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nconst scrollListener = store => {\n const listener = getScrollListener({\n onWindowScroll: newScroll => {\n store.dispatch(moveByWindowScroll({\n newScroll\n }));\n }\n });\n return next => action => {\n if (!listener.isActive() && guard(action, 'INITIAL_PUBLISH')) {\n listener.start();\n }\n if (listener.isActive() && shouldStop$1(action)) {\n listener.stop();\n }\n next(action);\n };\n};\n\nvar getExpiringAnnounce = announce => {\n let wasCalled = false;\n let isExpired = false;\n const timeoutId = setTimeout(() => {\n isExpired = true;\n });\n const result = message => {\n if (wasCalled) {\n process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n return;\n }\n if (isExpired) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Announcements cannot be made asynchronously.\n Default message has already been announced.\n `) : void 0;\n return;\n }\n wasCalled = true;\n announce(message);\n clearTimeout(timeoutId);\n };\n result.wasCalled = () => wasCalled;\n return result;\n};\n\nvar getAsyncMarshal = () => {\n const entries = [];\n const execute = timerId => {\n const index = entries.findIndex(item => item.timerId === timerId);\n !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant() : void 0;\n const [entry] = entries.splice(index, 1);\n entry.callback();\n };\n const add = fn => {\n const timerId = setTimeout(() => execute(timerId));\n const entry = {\n timerId,\n callback: fn\n };\n entries.push(entry);\n };\n const flush = () => {\n if (!entries.length) {\n return;\n }\n const shallow = [...entries];\n entries.length = 0;\n shallow.forEach(entry => {\n clearTimeout(entry.timerId);\n entry.callback();\n });\n };\n return {\n add,\n flush\n };\n};\n\nconst areLocationsEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.droppableId === second.droppableId && first.index === second.index;\n};\nconst isCombineEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nconst isCriticalEqual = (first, second) => {\n if (first === second) {\n return true;\n }\n const isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n const isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n return isDraggableEqual && isDroppableEqual;\n};\n\nconst withTimings = (key, fn) => {\n start();\n fn();\n finish();\n};\nconst getDragStart = (critical, mode) => ({\n draggableId: critical.draggable.id,\n type: critical.droppable.type,\n source: {\n droppableId: critical.droppable.id,\n index: critical.draggable.index\n },\n mode\n});\nfunction execute(responder, data, announce, getDefaultMessage) {\n if (!responder) {\n announce(getDefaultMessage(data));\n return;\n }\n const willExpire = getExpiringAnnounce(announce);\n const provided = {\n announce: willExpire\n };\n responder(data, provided);\n if (!willExpire.wasCalled()) {\n announce(getDefaultMessage(data));\n }\n}\nvar getPublisher = (getResponders, announce) => {\n const asyncMarshal = getAsyncMarshal();\n let dragging = null;\n const beforeCapture = (draggableId, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeCapture', () => {\n const fn = getResponders().onBeforeCapture;\n if (fn) {\n const before = {\n draggableId,\n mode\n };\n fn(before);\n }\n });\n };\n const beforeStart = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeDragStart', () => {\n const fn = getResponders().onBeforeDragStart;\n if (fn) {\n fn(getDragStart(critical, mode));\n }\n });\n };\n const start = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n const data = getDragStart(critical, mode);\n dragging = {\n mode,\n lastCritical: critical,\n lastLocation: data.source,\n lastCombine: null\n };\n asyncMarshal.add(() => {\n withTimings('onDragStart', () => execute(getResponders().onDragStart, data, announce, preset.onDragStart));\n });\n };\n const update = (critical, impact) => {\n const location = tryGetDestination(impact);\n const combine = tryGetCombine(impact);\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant() : void 0;\n const hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n if (hasCriticalChanged) {\n dragging.lastCritical = critical;\n }\n const hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n if (hasLocationChanged) {\n dragging.lastLocation = location;\n }\n const hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n if (hasGroupingChanged) {\n dragging.lastCombine = combine;\n }\n if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n return;\n }\n const data = {\n ...getDragStart(critical, dragging.mode),\n combine,\n destination: location\n };\n asyncMarshal.add(() => {\n withTimings('onDragUpdate', () => execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate));\n });\n };\n const flush = () => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant() : void 0;\n asyncMarshal.flush();\n };\n const drop = result => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant() : void 0;\n dragging = null;\n withTimings('onDragEnd', () => execute(getResponders().onDragEnd, result, announce, preset.onDragEnd));\n };\n const abort = () => {\n if (!dragging) {\n return;\n }\n const result = {\n ...getDragStart(dragging.lastCritical, dragging.mode),\n combine: null,\n destination: null,\n reason: 'CANCEL'\n };\n drop(result);\n };\n return {\n beforeCapture,\n beforeStart,\n start,\n update,\n flush,\n drop,\n abort\n };\n};\n\nvar responders = (getResponders, announce) => {\n const publisher = getPublisher(getResponders, announce);\n return store => next => action => {\n if (guard(action, 'BEFORE_INITIAL_CAPTURE')) {\n publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n const critical = action.payload.critical;\n publisher.beforeStart(critical, action.payload.movementMode);\n next(action);\n publisher.start(critical, action.payload.movementMode);\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n const result = action.payload.completed.result;\n publisher.flush();\n next(action);\n publisher.drop(result);\n return;\n }\n next(action);\n if (guard(action, 'FLUSH')) {\n publisher.abort();\n return;\n }\n const state = store.getState();\n if (state.phase === 'DRAGGING') {\n publisher.update(state.critical, state.impact);\n }\n };\n};\n\nconst dropAnimationFinishMiddleware = store => next => action => {\n if (!guard(action, 'DROP_ANIMATION_FINISHED')) {\n next(action);\n return;\n }\n const state = store.getState();\n !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant() : void 0;\n store.dispatch(completeDrop({\n completed: state.completed\n }));\n};\n\nconst dropAnimationFlushOnScrollMiddleware = store => {\n let unbind = null;\n let frameId = null;\n function clear() {\n if (frameId) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n if (unbind) {\n unbind();\n unbind = null;\n }\n }\n return next => action => {\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATION_FINISHED')) {\n clear();\n }\n next(action);\n if (!guard(action, 'DROP_ANIMATE')) {\n return;\n }\n const binding = {\n eventName: 'scroll',\n options: {\n capture: true,\n passive: false,\n once: true\n },\n fn: function flushDropAnimation() {\n const state = store.getState();\n if (state.phase === 'DROP_ANIMATING') {\n store.dispatch(dropAnimationFinished());\n }\n }\n };\n frameId = requestAnimationFrame(() => {\n frameId = null;\n unbind = bindEvents(window, [binding]);\n });\n };\n};\n\nvar dimensionMarshalStopper = marshal => () => next => action => {\n if (guard(action, 'DROP_COMPLETE') || guard(action, 'FLUSH') || guard(action, 'DROP_ANIMATE')) {\n marshal.stopPublishing();\n }\n next(action);\n};\n\nvar focus = marshal => {\n let isWatching = false;\n return () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n isWatching = true;\n marshal.tryRecordFocus(action.payload.critical.draggable.id);\n next(action);\n marshal.tryRestoreFocusRecorded();\n return;\n }\n next(action);\n if (!isWatching) {\n return;\n }\n if (guard(action, 'FLUSH')) {\n isWatching = false;\n marshal.tryRestoreFocusRecorded();\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n isWatching = false;\n const result = action.payload.completed.result;\n if (result.combine) {\n marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n }\n marshal.tryRestoreFocusRecorded();\n }\n };\n};\n\nconst shouldStop = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nvar autoScroll = autoScroller => store => next => action => {\n if (shouldStop(action)) {\n autoScroller.stop();\n next(action);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n next(action);\n const state = store.getState();\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant() : void 0;\n autoScroller.start(state);\n return;\n }\n next(action);\n autoScroller.scroll(store.getState());\n};\n\nconst pendingDrop = store => next => action => {\n next(action);\n if (!guard(action, 'PUBLISH_WHILE_DRAGGING')) {\n return;\n }\n const postActionState = store.getState();\n if (postActionState.phase !== 'DROP_PENDING') {\n return;\n }\n if (postActionState.isWaiting) {\n return;\n }\n store.dispatch(drop({\n reason: postActionState.reason\n }));\n};\n\nconst composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: '@hello-pangea/dnd'\n}) : compose;\nvar createStore = ({\n dimensionMarshal,\n focusMarshal,\n styleMarshal,\n getResponders,\n announce,\n autoScroller\n}) => createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift(dimensionMarshal), dropMiddleware, dropAnimationFinishMiddleware, dropAnimationFlushOnScrollMiddleware, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n\nconst clean$1 = () => ({\n additions: {},\n removals: {},\n modified: {}\n});\nfunction createPublisher({\n registry,\n callbacks\n}) {\n let staging = clean$1();\n let frameId = null;\n const collect = () => {\n if (frameId) {\n return;\n }\n callbacks.collectionStarting();\n frameId = requestAnimationFrame(() => {\n frameId = null;\n start();\n const {\n additions,\n removals,\n modified\n } = staging;\n const added = Object.keys(additions).map(id => registry.draggable.getById(id).getDimension(origin)).sort((a, b) => a.descriptor.index - b.descriptor.index);\n const updated = Object.keys(modified).map(id => {\n const entry = registry.droppable.getById(id);\n const scroll = entry.callbacks.getScrollWhileDragging();\n return {\n droppableId: id,\n scroll\n };\n });\n const result = {\n additions: added,\n removals: Object.keys(removals),\n modified: updated\n };\n staging = clean$1();\n finish();\n callbacks.publish(result);\n });\n };\n const add = entry => {\n const id = entry.descriptor.id;\n staging.additions[id] = entry;\n staging.modified[entry.descriptor.droppableId] = true;\n if (staging.removals[id]) {\n delete staging.removals[id];\n }\n collect();\n };\n const remove = entry => {\n const descriptor = entry.descriptor;\n staging.removals[descriptor.id] = true;\n staging.modified[descriptor.droppableId] = true;\n if (staging.additions[descriptor.id]) {\n delete staging.additions[descriptor.id];\n }\n collect();\n };\n const stop = () => {\n if (!frameId) {\n return;\n }\n cancelAnimationFrame(frameId);\n frameId = null;\n staging = clean$1();\n };\n return {\n add,\n remove,\n stop\n };\n}\n\nvar getMaxScroll = ({\n scrollHeight,\n scrollWidth,\n height,\n width\n}) => {\n const maxScroll = subtract({\n x: scrollWidth,\n y: scrollHeight\n }, {\n x: width,\n y: height\n });\n const adjustedMaxScroll = {\n x: Math.max(0, maxScroll.x),\n y: Math.max(0, maxScroll.y)\n };\n return adjustedMaxScroll;\n};\n\nvar getDocumentElement = () => {\n const doc = document.documentElement;\n !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant() : void 0;\n return doc;\n};\n\nvar getMaxWindowScroll = () => {\n const doc = getDocumentElement();\n const maxScroll = getMaxScroll({\n scrollHeight: doc.scrollHeight,\n scrollWidth: doc.scrollWidth,\n width: doc.clientWidth,\n height: doc.clientHeight\n });\n return maxScroll;\n};\n\nvar getViewport = () => {\n const scroll = getWindowScroll();\n const maxScroll = getMaxWindowScroll();\n const top = scroll.y;\n const left = scroll.x;\n const doc = getDocumentElement();\n const width = doc.clientWidth;\n const height = doc.clientHeight;\n const right = left + width;\n const bottom = top + height;\n const frame = getRect({\n top,\n left,\n right,\n bottom\n });\n const viewport = {\n frame,\n scroll: {\n initial: scroll,\n current: scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n return viewport;\n};\n\nvar getInitialPublish = ({\n critical,\n scrollOptions,\n registry\n}) => {\n start();\n const viewport = getViewport();\n const windowScroll = viewport.scroll.current;\n const home = critical.droppable;\n const droppables = registry.droppable.getAllByType(home.type).map(entry => entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions));\n const draggables = registry.draggable.getAllByType(critical.draggable.type).map(entry => entry.getDimension(windowScroll));\n const dimensions = {\n draggables: toDraggableMap(draggables),\n droppables: toDroppableMap(droppables)\n };\n finish();\n const result = {\n dimensions,\n critical,\n viewport\n };\n return result;\n};\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n if (entry.descriptor.id === dragging.id) {\n return false;\n }\n if (entry.descriptor.type !== dragging.type) {\n return false;\n }\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n if (home.descriptor.mode !== 'virtual') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}]\n while a drag is occurring. This is only supported for virtual lists.\n\n See https://github.com/hello-pangea/dnd/blob/main/docs/patterns/virtual-lists.md\n `) : void 0;\n return false;\n }\n return true;\n}\nvar createDimensionMarshal = (registry, callbacks) => {\n let collection = null;\n const publisher = createPublisher({\n callbacks: {\n publish: callbacks.publishWhileDragging,\n collectionStarting: callbacks.collectionStarting\n },\n registry\n });\n const updateDroppableIsEnabled = (id, isEnabled) => {\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update is enabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n if (!collection) {\n return;\n }\n callbacks.updateDroppableIsEnabled({\n id,\n isEnabled\n });\n };\n const updateDroppableIsCombineEnabled = (id, isCombineEnabled) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableIsCombineEnabled({\n id,\n isCombineEnabled\n });\n };\n const updateDroppableScroll = (id, newScroll) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update the scroll on Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableScroll({\n id,\n newScroll\n });\n };\n const scrollDroppable = (id, change) => {\n if (!collection) {\n return;\n }\n registry.droppable.getById(id).callbacks.scroll(change);\n };\n const stopPublishing = () => {\n if (!collection) {\n return;\n }\n publisher.stop();\n const home = collection.critical.droppable;\n registry.droppable.getAllByType(home.type).forEach(entry => entry.callbacks.dragStopped());\n collection.unsubscribe();\n collection = null;\n };\n const subscriber = event => {\n !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant() : void 0;\n const dragging = collection.critical.draggable;\n if (event.type === 'ADDITION') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.add(event.value);\n }\n }\n if (event.type === 'REMOVAL') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.remove(event.value);\n }\n }\n };\n const startPublishing = request => {\n !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant() : void 0;\n const entry = registry.draggable.getById(request.draggableId);\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n const critical = {\n draggable: entry.descriptor,\n droppable: home.descriptor\n };\n const unsubscribe = registry.subscribe(subscriber);\n collection = {\n critical,\n unsubscribe\n };\n return getInitialPublish({\n critical,\n registry,\n scrollOptions: request.scrollOptions\n });\n };\n const marshal = {\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n scrollDroppable,\n updateDroppableScroll,\n startPublishing,\n stopPublishing\n };\n return marshal;\n};\n\nvar canStartDrag = (state, id) => {\n if (state.phase === 'IDLE') {\n return true;\n }\n if (state.phase !== 'DROP_ANIMATING') {\n return false;\n }\n if (state.completed.result.draggableId === id) {\n return false;\n }\n return state.completed.result.reason === 'DROP';\n};\n\nvar scrollWindow = change => {\n window.scrollBy(change.x, change.y);\n};\n\nconst getScrollableDroppables = memoizeOne(droppables => toDroppableList(droppables).filter(droppable => {\n if (!droppable.isEnabled) {\n return false;\n }\n if (!droppable.frame) {\n return false;\n }\n return true;\n}));\nconst getScrollableDroppableOver = (target, droppables) => {\n const maybe = getScrollableDroppables(droppables).find(droppable => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant() : void 0;\n return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n }) || null;\n return maybe;\n};\nvar getBestScrollableDroppable = ({\n center,\n destination,\n droppables\n}) => {\n if (destination) {\n const dimension = droppables[destination];\n if (!dimension.frame) {\n return null;\n }\n return dimension;\n }\n const dimension = getScrollableDroppableOver(center, droppables);\n return dimension;\n};\n\nconst defaultAutoScrollerOptions = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: percentage => percentage ** 2,\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n },\n disabled: false\n};\n\nvar getDistanceThresholds = (container, axis, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const startScrollingFrom = container[axis.size] * autoScrollerOptions.startFromPercentage;\n const maxScrollValueAt = container[axis.size] * autoScrollerOptions.maxScrollAtPercentage;\n const thresholds = {\n startScrollingFrom,\n maxScrollValueAt\n };\n return thresholds;\n};\n\nvar getPercentage = ({\n startOfRange,\n endOfRange,\n current\n}) => {\n const range = endOfRange - startOfRange;\n if (range === 0) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected distance range of 0 in the fluid auto scroller\n This is unexpected and would cause a divide by 0 issue.\n Not allowing an auto scroll\n `) : void 0;\n return 0;\n }\n const currentInRange = current - startOfRange;\n const percentage = currentInRange / range;\n return percentage;\n};\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (distanceToEdge, thresholds, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (distanceToEdge > thresholds.startScrollingFrom) {\n return 0;\n }\n if (distanceToEdge <= thresholds.maxScrollValueAt) {\n return autoScrollerOptions.maxPixelScroll;\n }\n if (distanceToEdge === thresholds.startScrollingFrom) {\n return minScroll;\n }\n const percentageFromMaxScrollValueAt = getPercentage({\n startOfRange: thresholds.maxScrollValueAt,\n endOfRange: thresholds.startScrollingFrom,\n current: distanceToEdge\n });\n const percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n const scroll = autoScrollerOptions.maxPixelScroll * autoScrollerOptions.ease(percentageFromStartScrollingFrom);\n return Math.ceil(scroll);\n};\n\nvar dampenValueByTime = (proposedScroll, dragStartTime, getAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const accelerateAt = autoScrollerOptions.durationDampening.accelerateAt;\n const stopAt = autoScrollerOptions.durationDampening.stopDampeningAt;\n const startOfRange = dragStartTime;\n const endOfRange = stopAt;\n const now = Date.now();\n const runTime = now - startOfRange;\n if (runTime >= stopAt) {\n return proposedScroll;\n }\n if (runTime < accelerateAt) {\n return minScroll;\n }\n const betweenAccelerateAtAndStopAtPercentage = getPercentage({\n startOfRange: accelerateAt,\n endOfRange,\n current: runTime\n });\n const scroll = proposedScroll * autoScrollerOptions.ease(betweenAccelerateAtAndStopAtPercentage);\n return Math.ceil(scroll);\n};\n\nvar getValue = ({\n distanceToEdge,\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getValueFromDistance(distanceToEdge, thresholds, getAutoScrollerOptions);\n if (scroll === 0) {\n return 0;\n }\n if (!shouldUseTimeDampening) {\n return scroll;\n }\n return Math.max(dampenValueByTime(scroll, dragStartTime, getAutoScrollerOptions), minScroll);\n};\n\nvar getScrollOnAxis = ({\n container,\n distanceToEdges,\n dragStartTime,\n axis,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const thresholds = getDistanceThresholds(container, axis, getAutoScrollerOptions);\n const isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n if (isCloserToEnd) {\n return getValue({\n distanceToEdge: distanceToEdges[axis.end],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n }\n return -1 * getValue({\n distanceToEdge: distanceToEdges[axis.start],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n};\n\nvar adjustForSizeLimits = ({\n container,\n subject,\n proposedScroll\n}) => {\n const isTooBigVertically = subject.height > container.height;\n const isTooBigHorizontally = subject.width > container.width;\n if (!isTooBigHorizontally && !isTooBigVertically) {\n return proposedScroll;\n }\n if (isTooBigHorizontally && isTooBigVertically) {\n return null;\n }\n return {\n x: isTooBigHorizontally ? 0 : proposedScroll.x,\n y: isTooBigVertically ? 0 : proposedScroll.y\n };\n};\n\nconst clean = apply(value => value === 0 ? 0 : value);\nvar getScroll$1 = ({\n dragStartTime,\n container,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const distanceToEdges = {\n top: center.y - container.top,\n right: container.right - center.x,\n bottom: container.bottom - center.y,\n left: center.x - container.left\n };\n const y = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: vertical,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const x = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: horizontal,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const required = clean({\n x,\n y\n });\n if (isEqual$1(required, origin)) {\n return null;\n }\n const limited = adjustForSizeLimits({\n container,\n subject,\n proposedScroll: required\n });\n if (!limited) {\n return null;\n }\n return isEqual$1(limited, origin) ? null : limited;\n};\n\nconst smallestSigned = apply(value => {\n if (value === 0) {\n return 0;\n }\n return value > 0 ? 1 : -1;\n});\nconst getOverlap = (() => {\n const getRemainder = (target, max) => {\n if (target < 0) {\n return target;\n }\n if (target > max) {\n return target - max;\n }\n return 0;\n };\n return ({\n current,\n max,\n change\n }) => {\n const targetScroll = add(current, change);\n const overlap = {\n x: getRemainder(targetScroll.x, max.x),\n y: getRemainder(targetScroll.y, max.y)\n };\n if (isEqual$1(overlap, origin)) {\n return null;\n }\n return overlap;\n };\n})();\nconst canPartiallyScroll = ({\n max: rawMax,\n current,\n change\n}) => {\n const max = {\n x: Math.max(current.x, rawMax.x),\n y: Math.max(current.y, rawMax.y)\n };\n const smallestChange = smallestSigned(change);\n const overlap = getOverlap({\n max,\n current,\n change: smallestChange\n });\n if (!overlap) {\n return true;\n }\n if (smallestChange.x !== 0 && overlap.x === 0) {\n return true;\n }\n if (smallestChange.y !== 0 && overlap.y === 0) {\n return true;\n }\n return false;\n};\nconst canScrollWindow = (viewport, change) => canPartiallyScroll({\n current: viewport.scroll.current,\n max: viewport.scroll.max,\n change\n});\nconst getWindowOverlap = (viewport, change) => {\n if (!canScrollWindow(viewport, change)) {\n return null;\n }\n const max = viewport.scroll.max;\n const current = viewport.scroll.current;\n return getOverlap({\n current,\n max,\n change\n });\n};\nconst canScrollDroppable = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return false;\n }\n return canPartiallyScroll({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\nconst getDroppableOverlap = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n if (!canScrollDroppable(droppable, change)) {\n return null;\n }\n return getOverlap({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\n\nvar getWindowScrollChange = ({\n viewport,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getScroll$1({\n dragStartTime,\n container: viewport.frame,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n};\n\nvar getDroppableScrollChange = ({\n droppable,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n const scroll = getScroll$1({\n dragStartTime,\n container: frame.pageMarginBox,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n};\n\nvar scroll = ({\n state,\n dragStartTime,\n shouldUseTimeDampening,\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n}) => {\n const center = state.current.page.borderBoxCenter;\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const subject = draggable.page.marginBox;\n if (state.isWindowScrollAllowed) {\n const viewport = state.viewport;\n const change = getWindowScrollChange({\n dragStartTime,\n viewport,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollWindow(change);\n return;\n }\n }\n const droppable = getBestScrollableDroppable({\n center,\n destination: whatIsDraggedOver(state.impact),\n droppables: state.dimensions.droppables\n });\n if (!droppable) {\n return;\n }\n const change = getDroppableScrollChange({\n dragStartTime,\n droppable,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollDroppable(droppable.descriptor.id, change);\n }\n};\n\nvar createFluidScroller = ({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions = () => defaultAutoScrollerOptions\n}) => {\n const scheduleWindowScroll = rafSchd(scrollWindow);\n const scheduleDroppableScroll = rafSchd(scrollDroppable);\n let dragging = null;\n const tryScroll = state => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant() : void 0;\n const {\n shouldUseTimeDampening,\n dragStartTime\n } = dragging;\n scroll({\n state,\n scrollWindow: scheduleWindowScroll,\n scrollDroppable: scheduleDroppableScroll,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n };\n const start$1 = state => {\n start();\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant() : void 0;\n const dragStartTime = Date.now();\n let wasScrollNeeded = false;\n const fakeScrollCallback = () => {\n wasScrollNeeded = true;\n };\n scroll({\n state,\n dragStartTime: 0,\n shouldUseTimeDampening: false,\n scrollWindow: fakeScrollCallback,\n scrollDroppable: fakeScrollCallback,\n getAutoScrollerOptions\n });\n dragging = {\n dragStartTime,\n shouldUseTimeDampening: wasScrollNeeded\n };\n finish();\n if (wasScrollNeeded) {\n tryScroll(state);\n }\n };\n const stop = () => {\n if (!dragging) {\n return;\n }\n scheduleWindowScroll.cancel();\n scheduleDroppableScroll.cancel();\n dragging = null;\n };\n return {\n start: start$1,\n stop,\n scroll: tryScroll\n };\n};\n\nvar createJumpScroller = ({\n move,\n scrollDroppable,\n scrollWindow\n}) => {\n const moveByOffset = (state, offset) => {\n const client = add(state.current.client.selection, offset);\n move({\n client\n });\n };\n const scrollDroppableAsMuchAsItCan = (droppable, change) => {\n if (!canScrollDroppable(droppable, change)) {\n return change;\n }\n const overlap = getDroppableOverlap(droppable, change);\n if (!overlap) {\n scrollDroppable(droppable.descriptor.id, change);\n return null;\n }\n const whatTheDroppableCanScroll = subtract(change, overlap);\n scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n const remainder = subtract(change, whatTheDroppableCanScroll);\n return remainder;\n };\n const scrollWindowAsMuchAsItCan = (isWindowScrollAllowed, viewport, change) => {\n if (!isWindowScrollAllowed) {\n return change;\n }\n if (!canScrollWindow(viewport, change)) {\n return change;\n }\n const overlap = getWindowOverlap(viewport, change);\n if (!overlap) {\n scrollWindow(change);\n return null;\n }\n const whatTheWindowCanScroll = subtract(change, overlap);\n scrollWindow(whatTheWindowCanScroll);\n const remainder = subtract(change, whatTheWindowCanScroll);\n return remainder;\n };\n const jumpScroller = state => {\n const request = state.scrollJumpRequest;\n if (!request) {\n return;\n }\n const destination = whatIsDraggedOver(state.impact);\n !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant() : void 0;\n const droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n if (!droppableRemainder) {\n return;\n }\n const viewport = state.viewport;\n const windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n if (!windowRemainder) {\n return;\n }\n moveByOffset(state, windowRemainder);\n };\n return jumpScroller;\n};\n\nvar createAutoScroller = ({\n scrollDroppable,\n scrollWindow,\n move,\n getAutoScrollerOptions\n}) => {\n const fluidScroller = createFluidScroller({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n });\n const jumpScroll = createJumpScroller({\n move,\n scrollWindow,\n scrollDroppable\n });\n const scroll = state => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (autoScrollerOptions.disabled || state.phase !== 'DRAGGING') {\n return;\n }\n if (state.movementMode === 'FLUID') {\n fluidScroller.scroll(state);\n return;\n }\n if (!state.scrollJumpRequest) {\n return;\n }\n jumpScroll(state);\n };\n const scroller = {\n scroll,\n start: fluidScroller.start,\n stop: fluidScroller.stop\n };\n return scroller;\n};\n\nconst prefix = 'data-rfd';\nconst dragHandle = (() => {\n const base = `${prefix}-drag-handle`;\n return {\n base,\n draggableId: `${base}-draggable-id`,\n contextId: `${base}-context-id`\n };\n})();\nconst draggable = (() => {\n const base = `${prefix}-draggable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst droppable = (() => {\n const base = `${prefix}-droppable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst scrollContainer = {\n contextId: `${prefix}-scroll-container-context-id`\n};\n\nconst makeGetSelector = context => attribute => `[${attribute}=\"${context}\"]`;\nconst getStyles = (rules, property) => rules.map(rule => {\n const value = rule.styles[property];\n if (!value) {\n return '';\n }\n return `${rule.selector} { ${value} }`;\n}).join(' ');\nconst noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = contextId => {\n const getSelector = makeGetSelector(contextId);\n const dragHandle$1 = (() => {\n const grabCursor = `\n cursor: -webkit-grab;\n cursor: grab;\n `;\n return {\n selector: getSelector(dragHandle.contextId),\n styles: {\n always: `\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n `,\n resting: grabCursor,\n dragging: noPointerEvents,\n dropAnimating: grabCursor\n }\n };\n })();\n const draggable$1 = (() => {\n const transition = `\n transition: ${transitions.outOfTheWay};\n `;\n return {\n selector: getSelector(draggable.contextId),\n styles: {\n dragging: transition,\n dropAnimating: transition,\n userCancel: transition\n }\n };\n })();\n const droppable$1 = {\n selector: getSelector(droppable.contextId),\n styles: {\n always: `overflow-anchor: none;`\n }\n };\n const body = {\n selector: 'body',\n styles: {\n dragging: `\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n `\n }\n };\n const rules = [draggable$1, dragHandle$1, droppable$1, body];\n return {\n always: getStyles(rules, 'always'),\n resting: getStyles(rules, 'resting'),\n dragging: getStyles(rules, 'dragging'),\n dropAnimating: getStyles(rules, 'dropAnimating'),\n userCancel: getStyles(rules, 'userCancel')\n };\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nconst getHead = () => {\n const head = document.querySelector('head');\n !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant() : void 0;\n return head;\n};\nconst createStyleEl = nonce => {\n const el = document.createElement('style');\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n el.type = 'text/css';\n return el;\n};\nfunction useStyleMarshal(contextId, nonce) {\n const styles = useMemo(() => getStyles$1(contextId), [contextId]);\n const alwaysRef = useRef(null);\n const dynamicRef = useRef(null);\n const setDynamicStyle = useCallback(memoizeOne(proposed => {\n const el = dynamicRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }), []);\n const setAlwaysStyle = useCallback(proposed => {\n const el = alwaysRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }, []);\n useIsomorphicLayoutEffect(() => {\n !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant() : void 0;\n const always = createStyleEl(nonce);\n const dynamic = createStyleEl(nonce);\n alwaysRef.current = always;\n dynamicRef.current = dynamic;\n always.setAttribute(`${prefix}-always`, contextId);\n dynamic.setAttribute(`${prefix}-dynamic`, contextId);\n getHead().appendChild(always);\n getHead().appendChild(dynamic);\n setAlwaysStyle(styles.always);\n setDynamicStyle(styles.resting);\n return () => {\n const remove = ref => {\n const current = ref.current;\n !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant() : void 0;\n getHead().removeChild(current);\n ref.current = null;\n };\n remove(alwaysRef);\n remove(dynamicRef);\n };\n }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n const dragging = useCallback(() => setDynamicStyle(styles.dragging), [setDynamicStyle, styles.dragging]);\n const dropping = useCallback(reason => {\n if (reason === 'DROP') {\n setDynamicStyle(styles.dropAnimating);\n return;\n }\n setDynamicStyle(styles.userCancel);\n }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n const resting = useCallback(() => {\n if (!dynamicRef.current) {\n return;\n }\n setDynamicStyle(styles.resting);\n }, [setDynamicStyle, styles.resting]);\n const marshal = useMemo(() => ({\n dragging,\n dropping,\n resting\n }), [dragging, dropping, resting]);\n return marshal;\n}\n\nfunction querySelectorAll(parentNode, selector) {\n return Array.from(parentNode.querySelectorAll(selector));\n}\n\nvar getWindowFromEl = el => {\n if (el && el.ownerDocument && el.ownerDocument.defaultView) {\n return el.ownerDocument.defaultView;\n }\n return window;\n};\n\nfunction isHtmlElement(el) {\n return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n const selector = `[${dragHandle.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n if (!possible.length) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find any drag handles in the context \"${contextId}\"`) : void 0;\n return null;\n }\n const handle = possible.find(el => {\n return el.getAttribute(dragHandle.draggableId) === draggableId;\n });\n if (!handle) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find drag handle with id \"${draggableId}\" as no handle with a matching id was found`) : void 0;\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n const entriesRef = useRef({});\n const recordRef = useRef(null);\n const restoreFocusFrameRef = useRef(null);\n const isMountedRef = useRef(false);\n const register = useCallback(function register(id, focus) {\n const entry = {\n id,\n focus\n };\n entriesRef.current[id] = entry;\n return function unregister() {\n const entries = entriesRef.current;\n const current = entries[id];\n if (current !== entry) {\n delete entries[id];\n }\n };\n }, []);\n const tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n const handle = findDragHandle(contextId, tryGiveFocusTo);\n if (handle && handle !== document.activeElement) {\n handle.focus();\n }\n }, [contextId]);\n const tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n if (recordRef.current === previous) {\n recordRef.current = redirectTo;\n }\n }, []);\n const tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n if (restoreFocusFrameRef.current) {\n return;\n }\n if (!isMountedRef.current) {\n return;\n }\n restoreFocusFrameRef.current = requestAnimationFrame(() => {\n restoreFocusFrameRef.current = null;\n const record = recordRef.current;\n if (record) {\n tryGiveFocus(record);\n }\n });\n }, [tryGiveFocus]);\n const tryRecordFocus = useCallback(function tryRecordFocus(id) {\n recordRef.current = null;\n const focused = document.activeElement;\n if (!focused) {\n return;\n }\n if (focused.getAttribute(dragHandle.draggableId) !== id) {\n return;\n }\n recordRef.current = id;\n }, []);\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n return function clearFrameOnUnmount() {\n isMountedRef.current = false;\n const frameId = restoreFocusFrameRef.current;\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n }, []);\n const marshal = useMemo(() => ({\n register,\n tryRecordFocus,\n tryRestoreFocusRecorded,\n tryShiftRecord\n }), [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n return marshal;\n}\n\nfunction createRegistry() {\n const entries = {\n draggables: {},\n droppables: {}\n };\n const subscribers = [];\n function subscribe(cb) {\n subscribers.push(cb);\n return function unsubscribe() {\n const index = subscribers.indexOf(cb);\n if (index === -1) {\n return;\n }\n subscribers.splice(index, 1);\n };\n }\n function notify(event) {\n if (subscribers.length) {\n subscribers.forEach(cb => cb(event));\n }\n }\n function findDraggableById(id) {\n return entries.draggables[id] || null;\n }\n function getDraggableById(id) {\n const entry = findDraggableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find draggable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const draggableAPI = {\n register: entry => {\n entries.draggables[entry.descriptor.id] = entry;\n notify({\n type: 'ADDITION',\n value: entry\n });\n },\n update: (entry, last) => {\n const current = entries.draggables[last.descriptor.id];\n if (!current) {\n return;\n }\n if (current.uniqueId !== entry.uniqueId) {\n return;\n }\n delete entries.draggables[last.descriptor.id];\n entries.draggables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const draggableId = entry.descriptor.id;\n const current = findDraggableById(draggableId);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.draggables[draggableId];\n if (entries.droppables[entry.descriptor.droppableId]) {\n notify({\n type: 'REMOVAL',\n value: entry\n });\n }\n },\n getById: getDraggableById,\n findById: findDraggableById,\n exists: id => Boolean(findDraggableById(id)),\n getAllByType: type => Object.values(entries.draggables).filter(entry => entry.descriptor.type === type)\n };\n function findDroppableById(id) {\n return entries.droppables[id] || null;\n }\n function getDroppableById(id) {\n const entry = findDroppableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find droppable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const droppableAPI = {\n register: entry => {\n entries.droppables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const current = findDroppableById(entry.descriptor.id);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.droppables[entry.descriptor.id];\n },\n getById: getDroppableById,\n findById: findDroppableById,\n exists: id => Boolean(findDroppableById(id)),\n getAllByType: type => Object.values(entries.droppables).filter(entry => entry.descriptor.type === type)\n };\n function clean() {\n entries.draggables = {};\n entries.droppables = {};\n subscribers.length = 0;\n }\n return {\n draggable: draggableAPI,\n droppable: droppableAPI,\n subscribe,\n clean\n };\n}\n\nfunction useRegistry() {\n const registry = useMemo(createRegistry, []);\n useEffect(() => {\n return function unmount() {\n registry.clean();\n };\n }, [registry]);\n return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = () => {\n const body = document.body;\n !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant() : void 0;\n return body;\n};\n\nconst visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n border: '0',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n 'clip-path': 'inset(100%)'\n};\n\nconst getId = contextId => `rfd-announcement-${contextId}`;\nfunction useAnnouncer(contextId) {\n const id = useMemo(() => getId(contextId), [contextId]);\n const ref = useRef(null);\n useEffect(function setup() {\n const el = document.createElement('div');\n ref.current = el;\n el.id = id;\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n _extends(el.style, visuallyHidden);\n getBodyElement().appendChild(el);\n return function cleanup() {\n setTimeout(function remove() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n if (el === ref.current) {\n ref.current = null;\n }\n });\n };\n }, [id]);\n const announce = useCallback(message => {\n const el = ref.current;\n if (el) {\n el.textContent = message;\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n A screen reader message was trying to be announced but it was unable to do so.\n This can occur if you unmount your <DragDropContext /> in your onDragEnd.\n Consider calling provided.announce() before the unmount so that the instruction will\n not be lost for users relying on a screen reader.\n\n Message not passed to screen reader:\n\n \"${message}\"\n `) : void 0;\n }, []);\n return announce;\n}\n\nconst defaults = {\n separator: '::'\n};\nfunction useUniqueId(prefix, options = defaults) {\n const id = React.useId();\n return useMemo(() => `${prefix}${options.separator}${id}`, [options.separator, prefix, id]);\n}\n\nfunction getElementId({\n contextId,\n uniqueId\n}) {\n return `rfd-hidden-text-${contextId}-${uniqueId}`;\n}\nfunction useHiddenTextElement({\n contextId,\n text\n}) {\n const uniqueId = useUniqueId('hidden-text', {\n separator: '-'\n });\n const id = useMemo(() => getElementId({\n contextId,\n uniqueId\n }), [uniqueId, contextId]);\n useEffect(function mount() {\n const el = document.createElement('div');\n el.id = id;\n el.textContent = text;\n el.style.display = 'none';\n getBodyElement().appendChild(el);\n return function unmount() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n };\n }, [id, text]);\n return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^18.0.0 || ^19.0.0\"};\n\nconst semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\nconst getVersion = value => {\n const result = semver.exec(value);\n !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unable to parse React version ${value}`) : invariant() : void 0;\n const major = Number(result[1]);\n const minor = Number(result[2]);\n const patch = Number(result[3]);\n return {\n major,\n minor,\n patch,\n raw: value\n };\n};\nconst isSatisfied = (expected, actual) => {\n if (actual.major > expected.major) {\n return true;\n }\n if (actual.major < expected.major) {\n return false;\n }\n if (actual.minor > expected.minor) {\n return true;\n }\n if (actual.minor < expected.minor) {\n return false;\n }\n return actual.patch >= expected.patch;\n};\nvar checkReactVersion = (peerDepValue, actualValue) => {\n const peerDep = getVersion(peerDepValue);\n const actual = getVersion(actualValue);\n if (isSatisfied(peerDep, actual)) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n React version: [${actual.raw}]\n does not satisfy expected peer dependency version: [${peerDep.raw}]\n\n This can result in run time bugs, and even fatal crashes\n `) : void 0;\n};\n\nconst suffix = `\n We expect a html5 doctype: <!doctype html>\n This is to ensure consistent browser layout and measurement\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/doctype.md\n`;\nvar checkDoctype = doc => {\n const doctype = doc.doctype;\n if (!doctype) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n No <!doctype html> found.\n\n ${suffix}\n `) : void 0;\n return;\n }\n if (doctype.name.toLowerCase() !== 'html') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> found: (${doctype.name})\n\n ${suffix}\n `) : void 0;\n }\n if (doctype.publicId !== '') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> publicId found: (${doctype.publicId})\n A html5 doctype does not have a publicId\n\n ${suffix}\n `) : void 0;\n }\n};\n\nfunction useDev(useHook) {\n if (process.env.NODE_ENV !== 'production') {\n useHook();\n }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n useDev(() => {\n useEffect(() => {\n try {\n fn();\n } catch (e) {\n error(`\n A setup problem was encountered.\n\n > ${e.message}\n `);\n }\n }, inputs);\n });\n}\n\nfunction useStartupValidation() {\n useDevSetupWarning(() => {\n checkReactVersion(peerDependencies.react, React.version);\n checkDoctype(document);\n }, []);\n}\n\nfunction usePrevious(current) {\n const ref = useRef(current);\n useEffect(() => {\n ref.current = current;\n });\n return ref;\n}\n\nfunction create() {\n let lock = null;\n function isClaimed() {\n return Boolean(lock);\n }\n function isActive(value) {\n return value === lock;\n }\n function claim(abandon) {\n !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant() : void 0;\n const newLock = {\n abandon\n };\n lock = newLock;\n return newLock;\n }\n function release() {\n !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant() : void 0;\n lock = null;\n }\n function tryAbandon() {\n if (lock) {\n lock.abandon();\n release();\n }\n }\n return {\n isClaimed,\n isActive,\n claim,\n release,\n tryAbandon\n };\n}\n\nfunction isDragging(state) {\n if (state.phase === 'IDLE' || state.phase === 'DROP_ANIMATING') {\n return false;\n }\n return state.isDragging;\n}\n\nconst tab = 9;\nconst enter = 13;\nconst escape = 27;\nconst space = 32;\nconst pageUp = 33;\nconst pageDown = 34;\nconst end = 35;\nconst home = 36;\nconst arrowLeft = 37;\nconst arrowUp = 38;\nconst arrowRight = 39;\nconst arrowDown = 40;\n\nconst preventedKeys = {\n [enter]: true,\n [tab]: true\n};\nvar preventStandardKeyEvents = event => {\n if (preventedKeys[event.keyCode]) {\n event.preventDefault();\n }\n};\n\nconst supportedEventName = (() => {\n const base = 'visibilitychange';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, `ms${base}`, `webkit${base}`, `moz${base}`, `o${base}`];\n const supported = candidates.find(eventName => `on${eventName}` in document);\n return supported || base;\n})();\n\nconst primaryButton = 0;\nconst sloppyClickThreshold = 5;\nfunction isSloppyClickThresholdExceeded(original, current) {\n return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\nconst idle$1 = {\n type: 'IDLE'\n};\nfunction getCaptureBindings({\n cancel,\n completed,\n getPhase,\n setPhase\n}) {\n return [{\n eventName: 'mousemove',\n fn: event => {\n const {\n button,\n clientX,\n clientY\n } = event;\n if (button !== primaryButton) {\n return;\n }\n const point = {\n x: clientX,\n y: clientY\n };\n const phase = getPhase();\n if (phase.type === 'DRAGGING') {\n event.preventDefault();\n phase.actions.move(point);\n return;\n }\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant() : void 0;\n const pending = phase.point;\n if (!isSloppyClickThresholdExceeded(pending, point)) {\n return;\n }\n event.preventDefault();\n const actions = phase.actions.fluidLift(point);\n setPhase({\n type: 'DRAGGING',\n actions\n });\n }\n }, {\n eventName: 'mouseup',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'mousedown',\n fn: event => {\n if (getPhase().type === 'DRAGGING') {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: () => {\n if (getPhase().type === 'PENDING') {\n cancel();\n }\n }\n }, {\n eventName: 'webkitmouseforcedown',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant() : void 0;\n if (phase.actions.shouldRespectForcePress()) {\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useMouseSensor(api) {\n const phaseRef = useRef(idle$1);\n const unbindEventsRef = useRef(noop$2);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'mousedown',\n fn: function onMouseDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.button !== primaryButton) {\n return;\n }\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n event.preventDefault();\n const point = {\n x: event.clientX,\n y: event.clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const preventForcePressBinding = useMemo(() => ({\n eventName: 'webkitmouseforcewillbegin',\n fn: event => {\n if (event.defaultPrevented) {\n return;\n }\n const id = api.findClosestDraggableId(event);\n if (!id) {\n return;\n }\n const options = api.findOptionsForDraggable(id);\n if (!options) {\n return;\n }\n if (options.shouldRespectForcePress) {\n return;\n }\n if (!api.canGetLock(id)) {\n return;\n }\n event.preventDefault();\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n }, [preventForcePressBinding, startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n phaseRef.current = idle$1;\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const bindings = getCaptureBindings({\n cancel,\n completed: stop,\n getPhase: () => phaseRef.current,\n setPhase: phase => {\n phaseRef.current = phase;\n }\n });\n unbindEventsRef.current = bindEvents(window, bindings, options);\n }, [cancel, stop]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n phaseRef.current = {\n type: 'PENDING',\n point,\n actions\n };\n bindCapturingEvents();\n }, [bindCapturingEvents]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nfunction noop$1() {}\nconst scrollJumpKeys = {\n [pageDown]: true,\n [pageUp]: true,\n [home]: true,\n [end]: true\n};\nfunction getDraggingBindings(actions, stop) {\n function cancel() {\n stop();\n actions.cancel();\n }\n function drop() {\n stop();\n actions.drop();\n }\n return [{\n eventName: 'keydown',\n fn: event => {\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n if (event.keyCode === space) {\n event.preventDefault();\n drop();\n return;\n }\n if (event.keyCode === arrowDown) {\n event.preventDefault();\n actions.moveDown();\n return;\n }\n if (event.keyCode === arrowUp) {\n event.preventDefault();\n actions.moveUp();\n return;\n }\n if (event.keyCode === arrowRight) {\n event.preventDefault();\n actions.moveRight();\n return;\n }\n if (event.keyCode === arrowLeft) {\n event.preventDefault();\n actions.moveLeft();\n return;\n }\n if (scrollJumpKeys[event.keyCode]) {\n event.preventDefault();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'mousedown',\n fn: cancel\n }, {\n eventName: 'mouseup',\n fn: cancel\n }, {\n eventName: 'click',\n fn: cancel\n }, {\n eventName: 'touchstart',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'wheel',\n fn: cancel,\n options: {\n passive: true\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useKeyboardSensor(api) {\n const unbindEventsRef = useRef(noop$1);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'keydown',\n fn: function onKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.keyCode !== space) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const preDrag = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!preDrag) {\n return;\n }\n event.preventDefault();\n let isCapturing = true;\n const actions = preDrag.snapLift();\n unbindEventsRef.current();\n function stop() {\n !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant() : void 0;\n isCapturing = false;\n unbindEventsRef.current();\n listenForCapture();\n }\n unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n capture: true,\n passive: false\n });\n }\n }), [api]);\n const listenForCapture = useCallback(function tryStartCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nconst idle = {\n type: 'IDLE'\n};\nconst timeForLongPress = 120;\nconst forcePressThreshold = 0.15;\nfunction getWindowBindings({\n cancel,\n getPhase\n}) {\n return [{\n eventName: 'orientationchange',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'contextmenu',\n fn: event => {\n event.preventDefault();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction getHandleBindings({\n cancel,\n completed,\n getPhase\n}) {\n return [{\n eventName: 'touchmove',\n options: {\n capture: false\n },\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n phase.hasMoved = true;\n const {\n clientX,\n clientY\n } = event.touches[0];\n const point = {\n x: clientX,\n y: clientY\n };\n event.preventDefault();\n phase.actions.move(point);\n }\n }, {\n eventName: 'touchend',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'touchcancel',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n cancel();\n }\n }, {\n eventName: 'touchforcechange',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const isForcePress = touch.force >= forcePressThreshold;\n if (!isForcePress) {\n return;\n }\n const shouldRespect = phase.actions.shouldRespectForcePress();\n if (phase.type === 'PENDING') {\n if (shouldRespect) {\n cancel();\n }\n return;\n }\n if (shouldRespect) {\n if (phase.hasMoved) {\n event.preventDefault();\n return;\n }\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useTouchSensor(api) {\n const phaseRef = useRef(idle);\n const unbindEventsRef = useRef(noop$2);\n const getPhase = useCallback(function getPhase() {\n return phaseRef.current;\n }, []);\n const setPhase = useCallback(function setPhase(phase) {\n phaseRef.current = phase;\n }, []);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'touchstart',\n fn: function onTouchStart(event) {\n if (event.defaultPrevented) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n const touch = event.touches[0];\n const {\n clientX,\n clientY\n } = touch;\n const point = {\n x: clientX,\n y: clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n capture: true,\n passive: false\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n if (current.type === 'PENDING') {\n clearTimeout(current.longPressTimerId);\n }\n setPhase(idle);\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture, setPhase]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const args = {\n cancel,\n completed: stop,\n getPhase\n };\n const unbindTarget = bindEvents(window, getHandleBindings(args), options);\n const unbindWindow = bindEvents(window, getWindowBindings(args), options);\n unbindEventsRef.current = function unbindAll() {\n unbindTarget();\n unbindWindow();\n };\n }, [cancel, getPhase, stop]);\n const startDragging = useCallback(function startDragging() {\n const phase = getPhase();\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot start dragging from phase ${phase.type}`) : invariant() : void 0;\n const actions = phase.actions.fluidLift(phase.point);\n setPhase({\n type: 'DRAGGING',\n actions,\n hasMoved: false\n });\n }, [getPhase, setPhase]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n const longPressTimerId = setTimeout(startDragging, timeForLongPress);\n setPhase({\n type: 'PENDING',\n point,\n actions,\n longPressTimerId\n });\n bindCapturingEvents();\n }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n clearTimeout(phase.longPressTimerId);\n setPhase(idle);\n }\n };\n }, [getPhase, listenForCapture, setPhase]);\n useIsomorphicLayoutEffect(function webkitHack() {\n const unbind = bindEvents(window, [{\n eventName: 'touchmove',\n fn: () => {},\n options: {\n capture: false,\n passive: false\n }\n }]);\n return unbind;\n }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n useDev(() => {\n const previousRef = usePrevious(sensorHooks);\n useDevSetupWarning(() => {\n !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n });\n });\n}\n\nconst interactiveTagNames = ['input', 'button', 'textarea', 'select', 'option', 'optgroup', 'video', 'audio'];\nfunction isAnInteractiveElement(parent, current) {\n if (current == null) {\n return false;\n }\n const hasAnInteractiveTag = interactiveTagNames.includes(current.tagName.toLowerCase());\n if (hasAnInteractiveTag) {\n return true;\n }\n const attribute = current.getAttribute('contenteditable');\n if (attribute === 'true' || attribute === '') {\n return true;\n }\n if (current === parent) {\n return false;\n }\n return isAnInteractiveElement(parent, current.parentElement);\n}\nfunction isEventInInteractiveElement(draggable, event) {\n const target = event.target;\n if (!isHtmlElement(target)) {\n return false;\n }\n return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = el => getRect(el.getBoundingClientRect()).center;\n\nfunction isElement(el) {\n return el instanceof getWindowFromEl(el).Element;\n}\n\nconst supportedMatchesName = (() => {\n const base = 'matches';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n const value = candidates.find(name => name in Element.prototype);\n return value || base;\n})();\nfunction closestPonyfill(el, selector) {\n if (el == null) {\n return null;\n }\n if (el[supportedMatchesName](selector)) {\n return el;\n }\n return closestPonyfill(el.parentElement, selector);\n}\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n return `[${dragHandle.contextId}=\"${contextId}\"]`;\n}\nfunction findClosestDragHandleFromEvent(contextId, event) {\n const target = event.target;\n if (!isElement(target)) {\n process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n return null;\n }\n const selector = getSelector(contextId);\n const handle = closest(target, selector);\n if (!handle) {\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n const handle = findClosestDragHandleFromEvent(contextId, event);\n if (!handle) {\n return null;\n }\n return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n const selector = `[${draggable.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n const draggable$1 = possible.find(el => {\n return el.getAttribute(draggable.id) === draggableId;\n });\n if (!draggable$1) {\n return null;\n }\n if (!isHtmlElement(draggable$1)) {\n process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n return null;\n }\n return draggable$1;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn\n}) {\n if (!isLockActive()) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The sensor no longer has an action lock.\n\n Tips:\n\n - Throw away your action handlers when forceStop() is called\n - Check actions.isActive() if you really need to\n `) : void 0;\n }\n return false;\n }\n if (expected !== phase) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The actions you used belong to an outdated phase\n\n Current phase: ${expected}\n You called an action from outdated phase: ${phase}\n\n Tips:\n\n - Do not use preDragActions actions after calling preDragActions.lift()\n `) : void 0;\n }\n return false;\n }\n return true;\n}\nfunction canStart({\n lockAPI,\n store,\n registry,\n draggableId\n}) {\n if (lockAPI.isClaimed()) {\n return false;\n }\n const entry = registry.draggable.findById(draggableId);\n if (!entry) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable with id: ${draggableId}`) : void 0;\n return false;\n }\n if (!entry.options.isEnabled) {\n return false;\n }\n if (!canStartDrag(store.getState(), draggableId)) {\n return false;\n }\n return true;\n}\nfunction tryStart({\n lockAPI,\n contextId,\n store,\n registry,\n draggableId,\n forceSensorStop,\n sourceEvent\n}) {\n const shouldStart = canStart({\n lockAPI,\n store,\n registry,\n draggableId\n });\n if (!shouldStart) {\n return null;\n }\n const entry = registry.draggable.getById(draggableId);\n const el = findDraggable(contextId, entry.descriptor.id);\n if (!el) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable element with id: ${draggableId}`) : void 0;\n return null;\n }\n if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n return null;\n }\n const lock = lockAPI.claim(forceSensorStop || noop$2);\n let phase = 'PRE_DRAG';\n function getShouldRespectForcePress() {\n return entry.options.shouldRespectForcePress;\n }\n function isLockActive() {\n return lockAPI.isActive(lock);\n }\n function tryDispatch(expected, getAction) {\n if (isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn: true\n })) {\n store.dispatch(getAction());\n }\n }\n const tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING');\n function lift(args) {\n function completed() {\n lockAPI.release();\n phase = 'COMPLETED';\n }\n if (phase !== 'PRE_DRAG') {\n completed();\n process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot lift in phase ${phase}`) : invariant() ;\n }\n store.dispatch(lift$1(args.liftActionArgs));\n phase = 'DRAGGING';\n function finish(reason, options = {\n shouldBlockNextClick: false\n }) {\n args.cleanup();\n if (options.shouldBlockNextClick) {\n const unbind = bindEvents(window, [{\n eventName: 'click',\n fn: preventDefault,\n options: {\n once: true,\n passive: false,\n capture: true\n }\n }]);\n setTimeout(unbind);\n }\n completed();\n store.dispatch(drop({\n reason\n }));\n }\n return {\n isActive: () => isActive({\n expected: 'DRAGGING',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n drop: options => finish('DROP', options),\n cancel: options => finish('CANCEL', options),\n ...args.actions\n };\n }\n function fluidLift(clientSelection) {\n const move$1 = rafSchd(client => {\n tryDispatchWhenDragging(() => move({\n client\n }));\n });\n const api = lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection,\n movementMode: 'FLUID'\n },\n cleanup: () => move$1.cancel(),\n actions: {\n move: move$1\n }\n });\n return {\n ...api,\n move: move$1\n };\n }\n function snapLift() {\n const actions = {\n moveUp: () => tryDispatchWhenDragging(moveUp),\n moveRight: () => tryDispatchWhenDragging(moveRight),\n moveDown: () => tryDispatchWhenDragging(moveDown),\n moveLeft: () => tryDispatchWhenDragging(moveLeft)\n };\n return lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection: getBorderBoxCenterPosition(el),\n movementMode: 'SNAP'\n },\n cleanup: noop$2,\n actions\n });\n }\n function abortPreDrag() {\n const shouldRelease = isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: true\n });\n if (shouldRelease) {\n lockAPI.release();\n }\n }\n const preDrag = {\n isActive: () => isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n fluidLift,\n snapLift,\n abort: abortPreDrag\n };\n return preDrag;\n}\nconst defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor];\nfunction useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors,\n enableDefaultSensors\n}) {\n const useSensors = [...(enableDefaultSensors ? defaultSensors : []), ...(customSensors || [])];\n const lockAPI = useState(() => create())[0];\n const tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n if (isDragging(previous) && !isDragging(current)) {\n lockAPI.tryAbandon();\n }\n }, [lockAPI]);\n useIsomorphicLayoutEffect(function listenToStore() {\n let previous = store.getState();\n const unsubscribe = store.subscribe(() => {\n const current = store.getState();\n tryAbandonLock(previous, current);\n previous = current;\n });\n return unsubscribe;\n }, [lockAPI, store, tryAbandonLock]);\n useIsomorphicLayoutEffect(() => {\n return lockAPI.tryAbandon;\n }, [lockAPI.tryAbandon]);\n const canGetLock = useCallback(draggableId => {\n return canStart({\n lockAPI,\n registry,\n store,\n draggableId\n });\n }, [lockAPI, registry, store]);\n const tryGetLock = useCallback((draggableId, forceStop, options) => tryStart({\n lockAPI,\n registry,\n contextId,\n store,\n draggableId,\n forceSensorStop: forceStop || null,\n sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n }), [contextId, lockAPI, registry, store]);\n const findClosestDraggableId = useCallback(event => tryGetClosestDraggableIdFromEvent(contextId, event), [contextId]);\n const findOptionsForDraggable = useCallback(id => {\n const entry = registry.draggable.findById(id);\n return entry ? entry.options : null;\n }, [registry.draggable]);\n const tryReleaseLock = useCallback(function tryReleaseLock() {\n if (!lockAPI.isClaimed()) {\n return;\n }\n lockAPI.tryAbandon();\n if (store.getState().phase !== 'IDLE') {\n store.dispatch(flush());\n }\n }, [lockAPI, store]);\n const isLockClaimed = useCallback(() => lockAPI.isClaimed(), [lockAPI]);\n const api = useMemo(() => ({\n canGetLock,\n tryGetLock,\n findClosestDraggableId,\n findOptionsForDraggable,\n tryReleaseLock,\n isLockClaimed\n }), [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n useValidateSensorHooks(useSensors);\n for (let i = 0; i < useSensors.length; i++) {\n useSensors[i](api);\n }\n}\n\nconst createResponders = props => ({\n onBeforeCapture: t => {\n const onBeforeCapureCallback = () => {\n if (props.onBeforeCapture) {\n props.onBeforeCapture(t);\n }\n };\n flushSync(onBeforeCapureCallback);\n },\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragEnd: props.onDragEnd,\n onDragUpdate: props.onDragUpdate\n});\nconst createAutoScrollerOptions = props => ({\n ...defaultAutoScrollerOptions,\n ...props.autoScrollerOptions,\n durationDampening: {\n ...defaultAutoScrollerOptions.durationDampening,\n ...props.autoScrollerOptions\n }\n});\nfunction getStore(lazyRef) {\n !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant() : void 0;\n return lazyRef.current;\n}\nfunction App(props) {\n const {\n contextId,\n setCallbacks,\n sensors,\n nonce,\n dragHandleUsageInstructions\n } = props;\n const lazyStoreRef = useRef(null);\n useStartupValidation();\n const lastPropsRef = usePrevious(props);\n const getResponders = useCallback(() => {\n return createResponders(lastPropsRef.current);\n }, [lastPropsRef]);\n const getAutoScrollerOptions = useCallback(() => {\n return createAutoScrollerOptions(lastPropsRef.current);\n }, [lastPropsRef]);\n const announce = useAnnouncer(contextId);\n const dragHandleUsageInstructionsId = useHiddenTextElement({\n contextId,\n text: dragHandleUsageInstructions\n });\n const styleMarshal = useStyleMarshal(contextId, nonce);\n const lazyDispatch = useCallback(action => {\n getStore(lazyStoreRef).dispatch(action);\n }, []);\n const marshalCallbacks = useMemo(() => bindActionCreators({\n publishWhileDragging,\n updateDroppableScroll,\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n collectionStarting\n }, lazyDispatch), [lazyDispatch]);\n const registry = useRegistry();\n const dimensionMarshal = useMemo(() => {\n return createDimensionMarshal(registry, marshalCallbacks);\n }, [registry, marshalCallbacks]);\n const autoScroller = useMemo(() => createAutoScroller({\n scrollWindow,\n scrollDroppable: dimensionMarshal.scrollDroppable,\n getAutoScrollerOptions,\n ...bindActionCreators({\n move\n }, lazyDispatch)\n }), [dimensionMarshal.scrollDroppable, lazyDispatch, getAutoScrollerOptions]);\n const focusMarshal = useFocusMarshal(contextId);\n const store = useMemo(() => createStore({\n announce,\n autoScroller,\n dimensionMarshal,\n focusMarshal,\n getResponders,\n styleMarshal\n }), [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n if (process.env.NODE_ENV !== 'production') {\n if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n }\n }\n lazyStoreRef.current = store;\n const tryResetStore = useCallback(() => {\n const current = getStore(lazyStoreRef);\n const state = current.getState();\n if (state.phase !== 'IDLE') {\n current.dispatch(flush());\n }\n }, []);\n const isDragging = useCallback(() => {\n const state = getStore(lazyStoreRef).getState();\n if (state.phase === 'DROP_ANIMATING') {\n return true;\n }\n if (state.phase === 'IDLE') {\n return false;\n }\n return state.isDragging;\n }, []);\n const appCallbacks = useMemo(() => ({\n isDragging,\n tryAbort: tryResetStore\n }), [isDragging, tryResetStore]);\n setCallbacks(appCallbacks);\n const getCanLift = useCallback(id => canStartDrag(getStore(lazyStoreRef).getState(), id), []);\n const getIsMovementAllowed = useCallback(() => isMovementAllowed(getStore(lazyStoreRef).getState()), []);\n const appContext = useMemo(() => ({\n marshal: dimensionMarshal,\n focus: focusMarshal,\n contextId,\n canLift: getCanLift,\n isMovementAllowed: getIsMovementAllowed,\n dragHandleUsageInstructionsId,\n registry\n }), [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]);\n useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors: sensors || null,\n enableDefaultSensors: props.enableDefaultSensors !== false\n });\n useEffect(() => {\n return tryResetStore;\n }, [tryResetStore]);\n return React.createElement(AppContext.Provider, {\n value: appContext\n }, React.createElement(Provider, {\n context: StoreContext,\n store: store\n }, props.children));\n}\n\nfunction useUniqueContextId() {\n return React.useId();\n}\n\nfunction DragDropContext(props) {\n const contextId = useUniqueContextId();\n const dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions;\n return React.createElement(ErrorBoundary, null, setCallbacks => React.createElement(App, {\n nonce: props.nonce,\n contextId: contextId,\n setCallbacks: setCallbacks,\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n enableDefaultSensors: props.enableDefaultSensors,\n sensors: props.sensors,\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragUpdate: props.onDragUpdate,\n onDragEnd: props.onDragEnd,\n autoScrollerOptions: props.autoScrollerOptions\n }, props.children));\n}\n\nconst zIndexOptions = {\n dragging: 5000,\n dropAnimating: 4500\n};\nconst getDraggingTransition = (shouldAnimateDragMovement, dropping) => {\n if (dropping) {\n return transitions.drop(dropping.duration);\n }\n if (shouldAnimateDragMovement) {\n return transitions.snap;\n }\n return transitions.fluid;\n};\nconst getDraggingOpacity = (isCombining, isDropAnimating) => {\n if (!isCombining) {\n return undefined;\n }\n return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\nconst getShouldDraggingAnimate = dragging => {\n if (dragging.forceShouldAnimate != null) {\n return dragging.forceShouldAnimate;\n }\n return dragging.mode === 'SNAP';\n};\nfunction getDraggingStyle(dragging) {\n const dimension = dragging.dimension;\n const box = dimension.client;\n const {\n offset,\n combineWith,\n dropping\n } = dragging;\n const isCombining = Boolean(combineWith);\n const shouldAnimate = getShouldDraggingAnimate(dragging);\n const isDropAnimating = Boolean(dropping);\n const transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n const style = {\n position: 'fixed',\n top: box.marginBox.top,\n left: box.marginBox.left,\n boxSizing: 'border-box',\n width: box.borderBox.width,\n height: box.borderBox.height,\n transition: getDraggingTransition(shouldAnimate, dropping),\n transform,\n opacity: getDraggingOpacity(isCombining, isDropAnimating),\n zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n pointerEvents: 'none'\n };\n return style;\n}\nfunction getSecondaryStyle(secondary) {\n return {\n transform: transforms.moveTo(secondary.offset),\n transition: secondary.shouldAnimateDisplacement ? undefined : 'none'\n };\n}\nfunction getStyle$1(mapped) {\n return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll = origin) {\n const computedStyles = window.getComputedStyle(el);\n const borderBox = el.getBoundingClientRect();\n const client = calculateBox(borderBox, computedStyles);\n const page = withScroll(client, windowScroll);\n const placeholder = {\n client,\n tagName: el.tagName.toLowerCase(),\n display: computedStyles.display\n };\n const displaceBy = {\n x: client.marginBox.width,\n y: client.marginBox.height\n };\n const dimension = {\n descriptor,\n placeholder,\n displaceBy,\n client,\n page\n };\n return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n const uniqueId = useUniqueId('draggable');\n const {\n descriptor,\n registry,\n getDraggableRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n } = args;\n const options = useMemo(() => ({\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n const getDimension = useCallback(windowScroll => {\n const el = getDraggableRef();\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant() : void 0;\n return getDimension$1(descriptor, el, windowScroll);\n }, [descriptor, getDraggableRef]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n options,\n getDimension\n }), [descriptor, getDimension, options, uniqueId]);\n const publishedRef = useRef(entry);\n const isFirstPublishRef = useRef(true);\n useIsomorphicLayoutEffect(() => {\n registry.draggable.register(publishedRef.current);\n return () => registry.draggable.unregister(publishedRef.current);\n }, [registry.draggable]);\n useIsomorphicLayoutEffect(() => {\n if (isFirstPublishRef.current) {\n isFirstPublishRef.current = false;\n return;\n }\n const last = publishedRef.current;\n publishedRef.current = entry;\n registry.draggable.update(entry, last);\n }, [entry, registry.draggable]);\n}\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `\n provided.innerRef has not been provided with a HTMLElement.\n\n You can find a guide on using the innerRef callback functions at:\n https://github.com/hello-pangea/dnd/blob/main/docs/guides/using-inner-ref.md\n `) : invariant() : void 0;\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n useDevSetupWarning(() => {\n function prefix(id) {\n return `Draggable[id: ${id}]: `;\n }\n const id = props.draggableId;\n !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Draggable requires a [string] draggableId.\n Provided: [type: ${typeof id}] (value: ${id})`) : invariant(false) : void 0;\n !Number.isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} requires an integer index prop`) : invariant(false) : void 0;\n if (props.mapped.type === 'DRAGGING') {\n return;\n }\n checkIsValidInnerRef(getRef());\n if (props.isEnabled) {\n !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} Unable to find drag handle`) : invariant(false) : void 0;\n }\n });\n}\nfunction useClonePropValidation(isClone) {\n useDev(() => {\n const initialRef = useRef(isClone);\n useDevSetupWarning(() => {\n !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n }, [isClone]);\n });\n}\n\nfunction useRequiredContext(Context) {\n const result = useContext(Context);\n !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant() : void 0;\n return result;\n}\n\nfunction preventHtml5Dnd(event) {\n event.preventDefault();\n}\nconst Draggable = props => {\n const ref = useRef(null);\n const setRef = useCallback((el = null) => {\n ref.current = el;\n }, []);\n const getRef = useCallback(() => ref.current, []);\n const {\n contextId,\n dragHandleUsageInstructionsId,\n registry\n } = useRequiredContext(AppContext);\n const {\n type,\n droppableId\n } = useRequiredContext(DroppableContext);\n const descriptor = useMemo(() => ({\n id: props.draggableId,\n index: props.index,\n type,\n droppableId\n }), [props.draggableId, props.index, type, droppableId]);\n const {\n children,\n draggableId,\n isEnabled,\n shouldRespectForcePress,\n canDragInteractiveElements,\n isClone,\n mapped,\n dropAnimationFinished: dropAnimationFinishedAction\n } = props;\n useValidation$1(props, contextId, getRef);\n useClonePropValidation(isClone);\n if (!isClone) {\n const forPublisher = useMemo(() => ({\n descriptor,\n registry,\n getDraggableRef: getRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n useDraggablePublisher(forPublisher);\n }\n const dragHandleProps = useMemo(() => isEnabled ? {\n tabIndex: 0,\n role: 'button',\n 'aria-describedby': dragHandleUsageInstructionsId,\n 'data-rfd-drag-handle-draggable-id': draggableId,\n 'data-rfd-drag-handle-context-id': contextId,\n draggable: false,\n onDragStart: preventHtml5Dnd\n } : null, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]);\n const onMoveEnd = useCallback(event => {\n if (mapped.type !== 'DRAGGING') {\n return;\n }\n if (!mapped.dropping) {\n return;\n }\n if (event.propertyName !== 'transform') {\n return;\n }\n flushSync(dropAnimationFinishedAction);\n }, [dropAnimationFinishedAction, mapped]);\n const provided = useMemo(() => {\n const style = getStyle$1(mapped);\n const onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : undefined;\n const result = {\n innerRef: setRef,\n draggableProps: {\n 'data-rfd-draggable-context-id': contextId,\n 'data-rfd-draggable-id': draggableId,\n style,\n onTransitionEnd\n },\n dragHandleProps\n };\n return result;\n }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n const rubric = useMemo(() => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }), [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n return React.createElement(React.Fragment, null, children(provided, mapped.snapshot, rubric));\n};\n\nvar isStrictEqual = (a, b) => a === b;\n\nvar whatIsDraggedOverFromResult = result => {\n const {\n combine,\n destination\n } = result;\n if (destination) {\n return destination.droppableId;\n }\n if (combine) {\n return combine.droppableId;\n }\n return null;\n};\n\nconst getCombineWithFromResult = result => {\n return result.combine ? result.combine.draggableId : null;\n};\nconst getCombineWithFromImpact = impact => {\n return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\nfunction getDraggableSelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne((mode, isClone, draggingOver = null, combineWith = null, dropping = null) => ({\n isDragging: true,\n isClone,\n isDropAnimating: Boolean(dropping),\n dropAnimation: dropping,\n mode,\n draggingOver,\n combineWith,\n combineTargetFor: null\n }));\n const getMemoizedProps = memoizeOne((offset, mode, dimension, isClone, draggingOver = null, combineWith = null, forceShouldAnimate = null) => ({\n mapped: {\n type: 'DRAGGING',\n dropping: null,\n draggingOver,\n combineWith,\n mode,\n offset,\n dimension,\n forceShouldAnimate,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n }\n }));\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id !== ownProps.draggableId) {\n return null;\n }\n const offset = state.current.client.offset;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const draggingOver = whatIsDraggedOver(state.impact);\n const combineWith = getCombineWithFromImpact(state.impact);\n const forceShouldAnimate = state.forceShouldAnimate;\n return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId !== ownProps.draggableId) {\n return null;\n }\n const isClone = ownProps.isClone;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const result = completed.result;\n const mode = result.mode;\n const draggingOver = whatIsDraggedOverFromResult(result);\n const combineWith = getCombineWithFromResult(result);\n const duration = state.dropDuration;\n const dropping = {\n duration,\n curve: curves.drop,\n moveTo: state.newHomeClientOffset,\n opacity: combineWith ? combine.opacity.drop : null,\n scale: combineWith ? combine.scale.drop : null\n };\n return {\n mapped: {\n type: 'DRAGGING',\n offset: state.newHomeClientOffset,\n dimension,\n dropping,\n draggingOver,\n combineWith,\n mode,\n forceShouldAnimate: null,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, dropping)\n }\n };\n }\n return null;\n };\n return selector;\n}\nfunction getSecondarySnapshot(combineTargetFor = null) {\n return {\n isDragging: false,\n isDropAnimating: false,\n isClone: false,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor,\n combineWith: null\n };\n}\nconst atRest = {\n mapped: {\n type: 'SECONDARY',\n offset: origin,\n combineTargetFor: null,\n shouldAnimateDisplacement: true,\n snapshot: getSecondarySnapshot(null)\n }\n};\nfunction getSecondarySelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n const getMemoizedProps = memoizeOne((offset, combineTargetFor = null, shouldAnimateDisplacement) => ({\n mapped: {\n type: 'SECONDARY',\n offset,\n combineTargetFor,\n shouldAnimateDisplacement,\n snapshot: getMemoizedSnapshot(combineTargetFor)\n }\n }));\n const getFallback = combineTargetFor => {\n return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n };\n const getProps = (ownId, draggingId, impact, afterCritical) => {\n const visualDisplacement = impact.displaced.visible[ownId];\n const isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n const combine = tryGetCombine(impact);\n const combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n if (!visualDisplacement) {\n if (!isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n if (impact.displaced.invisible[ownId]) {\n return null;\n }\n const change = negate(afterCritical.displacedBy.point);\n const offset = memoizedOffset(change.x, change.y);\n return getMemoizedProps(offset, combineTargetFor, true);\n }\n if (isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n const displaceBy = impact.displacedBy.point;\n const offset = memoizedOffset(displaceBy.x, displaceBy.y);\n return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n };\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n }\n return null;\n };\n return selector;\n}\nconst makeMapStateToProps$1 = () => {\n const draggingSelector = getDraggableSelector();\n const secondarySelector = getSecondarySelector();\n const selector = (state, ownProps) => draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n return selector;\n};\nconst mapDispatchToProps$1 = {\n dropAnimationFinished: dropAnimationFinished\n};\nconst ConnectedDraggable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n const droppableContext = useRequiredContext(DroppableContext);\n const isUsingCloneFor = droppableContext.isUsingCloneFor;\n if (isUsingCloneFor === props.draggableId && !props.isClone) {\n return null;\n }\n return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n const isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n const canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n const shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n return React.createElement(PrivateDraggable, _extends({}, props, {\n isClone: false,\n isEnabled: isEnabled,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress\n }));\n}\n\nconst isEqual = base => value => base === value;\nconst isScroll = isEqual('scroll');\nconst isAuto = isEqual('auto');\nconst isVisible = isEqual('visible');\nconst isEither = (overflow, fn) => fn(overflow.overflowX) || fn(overflow.overflowY);\nconst isBoth = (overflow, fn) => fn(overflow.overflowX) && fn(overflow.overflowY);\nconst isElementScrollable = el => {\n const style = window.getComputedStyle(el);\n const overflow = {\n overflowX: style.overflowX,\n overflowY: style.overflowY\n };\n return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\nconst isBodyScrollable = () => {\n if (process.env.NODE_ENV === 'production') {\n return false;\n }\n const body = getBodyElement();\n const html = document.documentElement;\n !html ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n if (!isElementScrollable(body)) {\n return false;\n }\n const htmlStyle = window.getComputedStyle(html);\n const htmlOverflow = {\n overflowX: htmlStyle.overflowX,\n overflowY: htmlStyle.overflowY\n };\n if (isBoth(htmlOverflow, isVisible)) {\n return false;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n We have detected that your <body> element might be a scroll container.\n We have found no reliable way of detecting whether the <body> element is a scroll container.\n Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement)\n\n Because we cannot determine if the <body> is a scroll container, and generally it is not one,\n we will be treating the <body> as *not* a scroll container\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/how-we-detect-scroll-containers.md\n `) : void 0;\n return false;\n};\nconst getClosestScrollable = el => {\n if (el == null) {\n return null;\n }\n if (el === document.body) {\n return isBodyScrollable() ? el : null;\n }\n if (el === document.documentElement) {\n return null;\n }\n if (!isElementScrollable(el)) {\n return getClosestScrollable(el.parentElement);\n }\n return el;\n};\n\nvar checkForNestedScrollContainers = scrollable => {\n if (!scrollable) {\n return;\n }\n const anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n if (!anotherScrollParent) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable: unsupported nested scroll container detected.\n A Droppable can only have one scroll parent (which can be itself)\n Nested scroll containers are currently not supported.\n\n We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\n `) : void 0;\n};\n\nvar getScroll = el => ({\n x: el.scrollLeft,\n y: el.scrollTop\n});\n\nconst getIsFixed = el => {\n if (!el) {\n return false;\n }\n const style = window.getComputedStyle(el);\n if (style.position === 'fixed') {\n return true;\n }\n return getIsFixed(el.parentElement);\n};\nvar getEnv = start => {\n const closestScrollable = getClosestScrollable(start);\n const isFixedOnPage = getIsFixed(start);\n return {\n closestScrollable,\n isFixedOnPage\n };\n};\n\nvar getDroppableDimension = ({\n descriptor,\n isEnabled,\n isCombineEnabled,\n isFixedOnPage,\n direction,\n client,\n page,\n closest\n}) => {\n const frame = (() => {\n if (!closest) {\n return null;\n }\n const {\n scrollSize,\n client: frameClient\n } = closest;\n const maxScroll = getMaxScroll({\n scrollHeight: scrollSize.scrollHeight,\n scrollWidth: scrollSize.scrollWidth,\n height: frameClient.paddingBox.height,\n width: frameClient.paddingBox.width\n });\n return {\n pageMarginBox: closest.page.marginBox,\n frameClient,\n scrollSize,\n shouldClipSubject: closest.shouldClipSubject,\n scroll: {\n initial: closest.scroll,\n current: closest.scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n })();\n const axis = direction === 'vertical' ? vertical : horizontal;\n const subject = getSubject({\n page,\n withPlaceholder: null,\n axis,\n frame\n });\n const dimension = {\n descriptor,\n isCombineEnabled,\n isFixedOnPage,\n axis,\n isEnabled,\n client,\n page,\n frame,\n subject\n };\n return dimension;\n};\n\nconst getClient = (targetRef, closestScrollable) => {\n const base = getBox(targetRef);\n if (!closestScrollable) {\n return base;\n }\n if (targetRef !== closestScrollable) {\n return base;\n }\n const top = base.paddingBox.top - closestScrollable.scrollTop;\n const left = base.paddingBox.left - closestScrollable.scrollLeft;\n const bottom = top + closestScrollable.scrollHeight;\n const right = left + closestScrollable.scrollWidth;\n const paddingBox = {\n top,\n right,\n bottom,\n left\n };\n const borderBox = expand(paddingBox, base.border);\n const client = createBox({\n borderBox,\n margin: base.margin,\n border: base.border,\n padding: base.padding\n });\n return client;\n};\nvar getDimension = ({\n ref,\n descriptor,\n env,\n windowScroll,\n direction,\n isDropDisabled,\n isCombineEnabled,\n shouldClipSubject\n}) => {\n const closestScrollable = env.closestScrollable;\n const client = getClient(ref, closestScrollable);\n const page = withScroll(client, windowScroll);\n const closest = (() => {\n if (!closestScrollable) {\n return null;\n }\n const frameClient = getBox(closestScrollable);\n const scrollSize = {\n scrollHeight: closestScrollable.scrollHeight,\n scrollWidth: closestScrollable.scrollWidth\n };\n return {\n client: frameClient,\n page: withScroll(frameClient, windowScroll),\n scroll: getScroll(closestScrollable),\n scrollSize,\n shouldClipSubject\n };\n })();\n const dimension = getDroppableDimension({\n descriptor,\n isEnabled: !isDropDisabled,\n isCombineEnabled,\n isFixedOnPage: env.isFixedOnPage,\n direction,\n client,\n page,\n closest\n });\n return dimension;\n};\n\nconst immediate = {\n passive: false\n};\nconst delayed = {\n passive: true\n};\nvar getListenerOptions = options => options.shouldPublishImmediately ? immediate : delayed;\n\nconst getClosestScrollableFromDrag = dragging => dragging && dragging.env.closestScrollable || null;\nfunction useDroppablePublisher(args) {\n const whileDraggingRef = useRef(null);\n const appContext = useRequiredContext(AppContext);\n const uniqueId = useUniqueId('droppable');\n const {\n registry,\n marshal\n } = appContext;\n const previousRef = usePrevious(args);\n const descriptor = useMemo(() => ({\n id: args.droppableId,\n type: args.type,\n mode: args.mode\n }), [args.droppableId, args.mode, args.type]);\n const publishedDescriptorRef = useRef(descriptor);\n const memoizedUpdateScroll = useMemo(() => memoizeOne((x, y) => {\n !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant() : void 0;\n const scroll = {\n x,\n y\n };\n marshal.updateDroppableScroll(descriptor.id, scroll);\n }), [descriptor.id, marshal]);\n const getClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n if (!dragging || !dragging.env.closestScrollable) {\n return origin;\n }\n return getScroll(dragging.env.closestScrollable);\n }, []);\n const updateScroll = useCallback(() => {\n const scroll = getClosestScroll();\n memoizedUpdateScroll(scroll.x, scroll.y);\n }, [getClosestScroll, memoizedUpdateScroll]);\n const scheduleScrollUpdate = useMemo(() => rafSchd(updateScroll), [updateScroll]);\n const onClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant() : void 0;\n const options = dragging.scrollOptions;\n if (options.shouldPublishImmediately) {\n updateScroll();\n return;\n }\n scheduleScrollUpdate();\n }, [scheduleScrollUpdate, updateScroll]);\n const getDimensionAndWatchScroll = useCallback((windowScroll, options) => {\n !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant() : void 0;\n const previous = previousRef.current;\n const ref = previous.getDroppableRef();\n !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant() : void 0;\n const env = getEnv(ref);\n const dragging = {\n ref,\n descriptor,\n env,\n scrollOptions: options\n };\n whileDraggingRef.current = dragging;\n const dimension = getDimension({\n ref,\n descriptor,\n env,\n windowScroll,\n direction: previous.direction,\n isDropDisabled: previous.isDropDisabled,\n isCombineEnabled: previous.isCombineEnabled,\n shouldClipSubject: !previous.ignoreContainerClipping\n });\n const scrollable = env.closestScrollable;\n if (scrollable) {\n scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n if (process.env.NODE_ENV !== 'production') {\n checkForNestedScrollContainers(scrollable);\n }\n }\n return dimension;\n }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n const getScrollWhileDragging = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant() : void 0;\n return getScroll(closest);\n }, []);\n const dragStopped = useCallback(() => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n whileDraggingRef.current = null;\n if (!closest) {\n return;\n }\n scheduleScrollUpdate.cancel();\n closest.removeAttribute(scrollContainer.contextId);\n closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n }, [onClosestScroll, scheduleScrollUpdate]);\n const scroll = useCallback(change => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant() : void 0;\n closest.scrollTop += change.y;\n closest.scrollLeft += change.x;\n }, []);\n const callbacks = useMemo(() => {\n return {\n getDimensionAndWatchScroll,\n getScrollWhileDragging,\n dragStopped,\n scroll\n };\n }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n callbacks\n }), [callbacks, descriptor, uniqueId]);\n useIsomorphicLayoutEffect(() => {\n publishedDescriptorRef.current = entry.descriptor;\n registry.droppable.register(entry);\n return () => {\n if (whileDraggingRef.current) {\n process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n dragStopped();\n }\n registry.droppable.unregister(entry);\n };\n }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n }, [args.isDropDisabled, marshal]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop() {}\nconst empty = {\n width: 0,\n height: 0,\n margin: noSpacing\n};\nconst getSize = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n if (isAnimatingOpenOnMount) {\n return empty;\n }\n if (animate === 'close') {\n return empty;\n }\n return {\n height: placeholder.client.borderBox.height,\n width: placeholder.client.borderBox.width,\n margin: placeholder.client.margin\n };\n};\nconst getStyle = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n const size = getSize({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n });\n return {\n display: placeholder.display,\n boxSizing: 'border-box',\n width: size.width,\n height: size.height,\n marginTop: size.margin.top,\n marginRight: size.margin.right,\n marginBottom: size.margin.bottom,\n marginLeft: size.margin.left,\n flexShrink: '0',\n flexGrow: '0',\n pointerEvents: 'none',\n transition: animate !== 'none' ? transitions.placeholder : null\n };\n};\nconst Placeholder = props => {\n const animateOpenTimerRef = useRef(null);\n const tryClearAnimateOpenTimer = useCallback(() => {\n if (!animateOpenTimerRef.current) {\n return;\n }\n clearTimeout(animateOpenTimerRef.current);\n animateOpenTimerRef.current = null;\n }, []);\n const {\n animate,\n onTransitionEnd,\n onClose,\n contextId\n } = props;\n const [isAnimatingOpenOnMount, setIsAnimatingOpenOnMount] = useState(props.animate === 'open');\n useEffect(() => {\n if (!isAnimatingOpenOnMount) {\n return noop;\n }\n if (animate !== 'open') {\n tryClearAnimateOpenTimer();\n setIsAnimatingOpenOnMount(false);\n return noop;\n }\n if (animateOpenTimerRef.current) {\n return noop;\n }\n animateOpenTimerRef.current = setTimeout(() => {\n animateOpenTimerRef.current = null;\n setIsAnimatingOpenOnMount(false);\n });\n return tryClearAnimateOpenTimer;\n }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n const onSizeChangeEnd = useCallback(event => {\n if (event.propertyName !== 'height') {\n return;\n }\n onTransitionEnd();\n if (animate === 'close') {\n onClose();\n }\n }, [animate, onClose, onTransitionEnd]);\n const style = getStyle({\n isAnimatingOpenOnMount,\n animate: props.animate,\n placeholder: props.placeholder\n });\n return React.createElement(props.placeholder.tagName, {\n style,\n 'data-rfd-placeholder-context-id': contextId,\n onTransitionEnd: onSizeChangeEnd,\n ref: props.innerRef\n });\n};\nvar Placeholder$1 = React.memo(Placeholder);\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\nfunction runChecks(args, checks) {\n checks.forEach(check => check(args));\n}\nconst shared = [function required({\n props\n}) {\n !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant() : void 0;\n !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `A Droppable requires a [string] droppableId. Provided: [${typeof props.droppableId}]`) : invariant() : void 0;\n}, function boolean({\n props\n}) {\n !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant() : void 0;\n}, function ref({\n getDroppableRef\n}) {\n checkIsValidInnerRef(getDroppableRef());\n}];\nconst standard = [function placeholder({\n props,\n getPlaceholderRef\n}) {\n if (!props.placeholder) {\n return;\n }\n const ref = getPlaceholderRef();\n if (ref) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable setup issue [droppableId: \"${props.droppableId}\"]:\n DroppableProvided > placeholder could not be found.\n\n Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/api/droppable.md\n `) : void 0;\n}];\nconst virtual = [function hasClone({\n props\n}) {\n !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant() : void 0;\n}, function hasNoPlaceholder({\n getPlaceholderRef\n}) {\n !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant() : void 0;\n}];\nfunction useValidation(args) {\n useDevSetupWarning(() => {\n runChecks(args, shared);\n if (args.props.mode === 'standard') {\n runChecks(args, standard);\n }\n if (args.props.mode === 'virtual') {\n runChecks(args, virtual);\n }\n });\n}\n\nclass AnimateInOut extends React.PureComponent {\n constructor(...args) {\n super(...args);\n this.state = {\n isVisible: Boolean(this.props.on),\n data: this.props.on,\n animate: this.props.shouldAnimate && this.props.on ? 'open' : 'none'\n };\n this.onClose = () => {\n if (this.state.animate !== 'close') {\n return;\n }\n this.setState({\n isVisible: false\n });\n };\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.shouldAnimate) {\n return {\n isVisible: Boolean(props.on),\n data: props.on,\n animate: 'none'\n };\n }\n if (props.on) {\n return {\n isVisible: true,\n data: props.on,\n animate: 'open'\n };\n }\n if (state.isVisible) {\n return {\n isVisible: true,\n data: state.data,\n animate: 'close'\n };\n }\n return {\n isVisible: false,\n animate: 'close',\n data: null\n };\n }\n render() {\n if (!this.state.isVisible) {\n return null;\n }\n const provided = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(provided);\n }\n}\n\nconst Droppable = props => {\n const appContext = useContext(AppContext);\n !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant() : void 0;\n const {\n contextId,\n isMovementAllowed\n } = appContext;\n const droppableRef = useRef(null);\n const placeholderRef = useRef(null);\n const {\n children,\n droppableId,\n type,\n mode,\n direction,\n ignoreContainerClipping,\n isDropDisabled,\n isCombineEnabled,\n snapshot,\n useClone,\n updateViewportMaxScroll,\n getContainerForClone\n } = props;\n const getDroppableRef = useCallback(() => droppableRef.current, []);\n const setDroppableRef = useCallback((value = null) => {\n droppableRef.current = value;\n }, []);\n const getPlaceholderRef = useCallback(() => placeholderRef.current, []);\n const setPlaceholderRef = useCallback((value = null) => {\n placeholderRef.current = value;\n }, []);\n useValidation({\n props,\n getDroppableRef,\n getPlaceholderRef\n });\n const onPlaceholderTransitionEnd = useCallback(() => {\n if (isMovementAllowed()) {\n updateViewportMaxScroll({\n maxScroll: getMaxWindowScroll()\n });\n }\n }, [isMovementAllowed, updateViewportMaxScroll]);\n useDroppablePublisher({\n droppableId,\n type,\n mode,\n direction,\n isDropDisabled,\n isCombineEnabled,\n ignoreContainerClipping,\n getDroppableRef\n });\n const placeholder = useMemo(() => React.createElement(AnimateInOut, {\n on: props.placeholder,\n shouldAnimate: props.shouldAnimatePlaceholder\n }, ({\n onClose,\n data,\n animate\n }) => React.createElement(Placeholder$1, {\n placeholder: data,\n onClose: onClose,\n innerRef: setPlaceholderRef,\n animate: animate,\n contextId: contextId,\n onTransitionEnd: onPlaceholderTransitionEnd\n })), [contextId, onPlaceholderTransitionEnd, props.placeholder, props.shouldAnimatePlaceholder, setPlaceholderRef]);\n const provided = useMemo(() => ({\n innerRef: setDroppableRef,\n placeholder,\n droppableProps: {\n 'data-rfd-droppable-id': droppableId,\n 'data-rfd-droppable-context-id': contextId\n }\n }), [contextId, droppableId, placeholder, setDroppableRef]);\n const isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n const droppableContext = useMemo(() => ({\n droppableId,\n type,\n isUsingCloneFor\n }), [droppableId, isUsingCloneFor, type]);\n function getClone() {\n if (!useClone) {\n return null;\n }\n const {\n dragging,\n render\n } = useClone;\n const node = React.createElement(PrivateDraggable, {\n draggableId: dragging.draggableId,\n index: dragging.source.index,\n isClone: true,\n isEnabled: true,\n shouldRespectForcePress: false,\n canDragInteractiveElements: true\n }, (draggableProvided, draggableSnapshot) => render(draggableProvided, draggableSnapshot, dragging));\n return ReactDOM.createPortal(node, getContainerForClone());\n }\n return React.createElement(DroppableContext.Provider, {\n value: droppableContext\n }, children(provided, snapshot), getClone());\n};\n\nfunction getBody() {\n !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant() : void 0;\n return document.body;\n}\nconst defaultProps = {\n mode: 'standard',\n type: 'DEFAULT',\n direction: 'vertical',\n isDropDisabled: false,\n isCombineEnabled: false,\n ignoreContainerClipping: false,\n renderClone: null,\n getContainerForClone: getBody\n};\nconst attachDefaultPropsToOwnProps = ownProps => {\n let mergedProps = {\n ...ownProps\n };\n let defaultPropKey;\n for (defaultPropKey in defaultProps) {\n if (ownProps[defaultPropKey] === undefined) {\n mergedProps = {\n ...mergedProps,\n [defaultPropKey]: defaultProps[defaultPropKey]\n };\n }\n }\n return mergedProps;\n};\nconst isMatchingType = (type, critical) => type === critical.droppable.type;\nconst getDraggable = (critical, dimensions) => dimensions.draggables[critical.draggable.id];\nconst makeMapStateToProps = () => {\n const idleWithAnimation = {\n placeholder: null,\n shouldAnimatePlaceholder: true,\n snapshot: {\n isDraggingOver: false,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: false\n },\n useClone: null\n };\n const idleWithoutAnimation = {\n ...idleWithAnimation,\n shouldAnimatePlaceholder: false\n };\n const getDraggableRubric = memoizeOne(descriptor => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }));\n const getMapProps = memoizeOne((id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) => {\n const draggableId = dragging.descriptor.id;\n const isHome = dragging.descriptor.droppableId === id;\n if (isHome) {\n const useClone = renderClone ? {\n render: renderClone,\n dragging: getDraggableRubric(dragging.descriptor)\n } : null;\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n draggingFromThisWith: draggableId,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: false,\n snapshot,\n useClone\n };\n }\n if (!isEnabled) {\n return idleWithoutAnimation;\n }\n if (!isDraggingOverForImpact) {\n return idleWithAnimation;\n }\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: draggableId,\n draggingFromThisWith: null,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: true,\n snapshot,\n useClone: null\n };\n });\n const selector = (state, ownProps) => {\n const ownPropsWithDefaultProps = attachDefaultPropsToOwnProps(ownProps);\n const id = ownPropsWithDefaultProps.droppableId;\n const type = ownPropsWithDefaultProps.type;\n const isEnabled = !ownPropsWithDefaultProps.isDropDisabled;\n const renderClone = ownPropsWithDefaultProps.renderClone;\n if (isDragging(state)) {\n const critical = state.critical;\n if (!isMatchingType(type, critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(critical, state.dimensions);\n const isDraggingOver = whatIsDraggedOver(state.impact) === id;\n return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(completed.critical, state.dimensions);\n return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, dragging, renderClone);\n }\n if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const wasOver = whatIsDraggedOver(completed.impact) === id;\n const wasCombining = Boolean(completed.impact.at && completed.impact.at.type === 'COMBINE');\n const isHome = completed.critical.droppable.id === id;\n if (wasOver) {\n return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n }\n if (isHome) {\n return idleWithAnimation;\n }\n return idleWithoutAnimation;\n }\n return idleWithoutAnimation;\n };\n return selector;\n};\nconst mapDispatchToProps = {\n updateViewportMaxScroll: updateViewportMaxScroll\n};\nconst ConnectedDroppable = connect(makeMapStateToProps, mapDispatchToProps, (stateProps, dispatchProps, ownProps) => {\n return {\n ...attachDefaultPropsToOwnProps(ownProps),\n ...stateProps,\n ...dispatchProps\n };\n}, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Droppable);\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable as Droppable, useKeyboardSensor, useMouseSensor, useTouchSensor };\n","import { DropResult } from '@hello-pangea/dnd';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { WidgetData } from '@/types';\n\nexport const getUpdatedData = (\n data: WidgetData,\n result: DropResult,\n): Pick<WidgetData, 'workplaces' | 'unassignedOperators'> | null => {\n const { source, destination, draggableId } = result;\n\n if (!destination) return null;\n if (source.droppableId === destination.droppableId && source.index === destination.index) return null;\n\n const userId = draggableId;\n const fromPool = source.droppableId === 'pool';\n const toPool = destination.droppableId === 'pool';\n\n let movedUser: { id: string; name: string } | undefined;\n let movedPresenceStatus = PresenceStatusEnum.NotPresent;\n\n const newUnassignedOperators = [...data.unassignedOperators];\n const newWorkplaces = data.workplaces.map((wp) => ({\n ...wp,\n assignedOperators: [...wp.assignedOperators],\n }));\n\n if (fromPool) {\n const idx = newUnassignedOperators.findIndex((op) => op.id === userId);\n if (idx !== -1) {\n movedUser = newUnassignedOperators[idx];\n newUnassignedOperators.splice(idx, 1);\n }\n } else {\n const sourceWp = newWorkplaces.find((wp) => wp.workplace.id === source.droppableId);\n if (sourceWp) {\n const idx = sourceWp.assignedOperators.findIndex((op) => op.user.id === userId);\n if (idx !== -1) {\n movedUser = sourceWp.assignedOperators[idx].user;\n movedPresenceStatus = sourceWp.assignedOperators[idx].presenceStatus;\n sourceWp.assignedOperators.splice(idx, 1);\n }\n }\n }\n\n if (!movedUser) return null;\n\n if (toPool) {\n newUnassignedOperators.splice(destination.index, 0, movedUser);\n } else {\n const destWp = newWorkplaces.find((wp) => wp.workplace.id === destination.droppableId);\n if (destWp) {\n destWp.assignedOperators.splice(destination.index, 0, {\n user: movedUser,\n presenceStatus: movedPresenceStatus,\n });\n }\n }\n\n return { workplaces: newWorkplaces, unassignedOperators: newUnassignedOperators };\n};\n","import { SxProps, Theme } from '@mui/material';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nconst presenceColors: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'success.main',\n [PresenceStatusEnum.NotPresent]: 'error.main',\n [PresenceStatusEnum.PresentElsewhere]: 'warning.main',\n};\n\nexport const makeCardStyles = (isDragging: boolean): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'center',\n gap: (theme) => theme.spacing(1),\n opacity: isDragging ? 0.8 : 1,\n padding: (theme) => theme.spacing(1),\n borderBottom: '1px solid rgba(255, 255, 255, 0.15)',\n boxShadow: 'none',\n '&:last-of-type': {\n borderBottom: 'none',\n },\n});\n\nexport const makePresenceDotStyles = (status: PresenceStatusEnum): SxProps<Theme> => ({\n flexShrink: 0,\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: presenceColors[status],\n});\n\nconst styles: Record<string, SxProps<Theme>> = {\n name: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n};\n\nexport default styles;\n","import React from 'react';\n\nimport { Droppable, DroppableProvided } from '@hello-pangea/dnd';\nimport { Box } from '@mui/material';\n\nimport { makeDropZoneStyles } from './styles';\n\ninterface DropZoneProps {\n droppableId: string;\n children: (provided: DroppableProvided) => React.ReactNode;\n}\n\nconst DropZone: React.FC<DropZoneProps> = ({ droppableId, children }) => (\n <Droppable droppableId={droppableId}>\n {(provided, snapshot) => (\n <Box ref={provided.innerRef} {...provided.droppableProps} sx={makeDropZoneStyles(snapshot.isDraggingOver)}>\n {children(provided)}\n {provided.placeholder}\n </Box>\n )}\n </Droppable>\n);\n\nexport default DropZone;\n","import { SxProps, Theme } from '@mui/material';\n\nexport const makeDropZoneStyles = (isDraggingOver: boolean): SxProps<Theme> => ({\n height: '100%',\n transition: 'background-color 0.2s ease',\n backgroundColor: isDraggingOver ? 'rgba(0,0,0,0.1)' : 'transparent',\n});\n","import React from 'react';\n\nimport { Draggable } from '@hello-pangea/dnd';\nimport { Box, Card, Typography } from '@mui/material';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { OperatorUser } from '@/types';\n\nimport styles, { makeCardStyles, makePresenceDotStyles } from './styles';\n\ninterface OperatorCardProps {\n user: OperatorUser;\n index: number;\n draggableId: string;\n showPresence?: boolean;\n presenceStatus?: PresenceStatusEnum;\n}\n\nconst OperatorCard: React.FC<OperatorCardProps> = ({ user, index, draggableId, showPresence, presenceStatus }) => (\n <Draggable draggableId={draggableId} index={index}>\n {(provided, snapshot) => (\n <Card\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n sx={makeCardStyles(snapshot.isDragging)}\n >\n {showPresence && presenceStatus && <Box sx={makePresenceDotStyles(presenceStatus)} />}\n <Typography sx={styles.name}>{user.name}</Typography>\n </Card>\n )}\n </Draggable>\n);\n\nexport default OperatorCard;\n","import { SxProps, Theme } from '@mui/material';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: 250,\n flexShrink: 0,\n height: '100%',\n },\n header: {\n display: 'flex',\n padding: (theme) => theme.spacing(0.5, 1),\n },\n action: {\n display: 'flex',\n alignSelf: 'center',\n margin: (theme) => theme.spacing(0, 0, 0, 1),\n },\n count: {\n fontWeight: 'bold',\n },\n content: {\n flexGrow: 1,\n padding: (theme) => theme.spacing(0.5),\n },\n};\n\nexport default styles;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Card, CardContent, CardHeader } from '@mui/material';\n\nimport { OperatorUser } from '@/types';\n\nimport DropZone from '../DropZone';\nimport OperatorCard from '../OperatorCard';\n\nimport styles from './styles';\n\ninterface PoolColumnProps {\n operators: OperatorUser[];\n}\n\nconst PoolColumn: React.FC<PoolColumnProps> = ({ operators }) => {\n const { t } = useTranslation();\n\n return (\n <Card sx={styles.root}>\n <CardHeader\n title={t('unassignedPool')}\n action={operators.length}\n slotProps={{ title: { variant: 'subtitle1' }, action: { sx: styles.action } }}\n sx={styles.header}\n />\n <CardContent sx={styles.content}>\n <DropZone droppableId=\"pool\">\n {() => (\n <React.Fragment>\n {operators.map((user, index) => (\n <OperatorCard key={user.id} user={user} index={index} draggableId={user.id} />\n ))}\n </React.Fragment>\n )}\n </DropZone>\n </CardContent>\n </Card>\n );\n};\n\nexport default PoolColumn;\n","import { SxProps, Theme } from '@mui/material';\n\nexport const makeRootStyles = (isOvercapacity: boolean): SxProps<Theme> => ({\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: 250,\n minHeight: 200,\n border: isOvercapacity ? 2 : 1,\n borderColor: isOvercapacity ? 'error.main' : 'divider',\n});\n\nconst styles: Record<string, SxProps<Theme>> = {\n header: {\n display: 'flex',\n padding: (theme) => theme.spacing(0.5, 1),\n '& .MuiCardHeader-content': {\n overflowX: 'hidden',\n },\n },\n title: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n action: {\n display: 'flex',\n alignSelf: 'center',\n gap: (theme) => theme.spacing(1),\n margin: (theme) => theme.spacing(0, 0, 0, 1),\n },\n content: {\n flexGrow: 1,\n padding: (theme) => theme.spacing(0.5),\n },\n};\n\nexport const makeStatusBadgeStyles = (status: 'missing' | 'overcapacity' | 'ok'): SxProps<Theme> => ({\n padding: (theme) => `${theme.spacing(0.25)} ${theme.spacing(1)}`,\n borderRadius: 1,\n color: status === 'ok' ? 'success.contrastText' : 'error.contrastText',\n backgroundColor: status === 'ok' ? 'success.main' : 'error.main',\n});\n\nexport default styles;\n","import React from 'react';\n\nimport { Card, CardContent, CardHeader, Typography } from '@mui/material';\nimport { ListWorkplaceAssignments_WorkplaceWithAssignment } from 'andoncloud-dashboard-toolkit';\n\nimport DropZone from '../DropZone';\nimport OperatorCard from '../OperatorCard';\n\nimport styles, { makeRootStyles, makeStatusBadgeStyles } from './styles';\n\nconst getStatusBadge = (assignedCount: number, recommendedOperators: number) => {\n const diff = assignedCount - recommendedOperators;\n if (diff > 0) {\n return { text: `+${diff}`, status: 'overcapacity' as const };\n }\n if (diff < 0) {\n return { text: `${diff}`, status: 'missing' as const };\n }\n return { text: 'OK', status: 'ok' as const };\n};\n\ninterface WorkplaceColumnProps {\n assignment: ListWorkplaceAssignments_WorkplaceWithAssignment;\n}\n\nconst WorkplaceColumn: React.FC<WorkplaceColumnProps> = ({ assignment }) => {\n const badge = getStatusBadge(assignment.assignedCount, assignment.recommendedOperators);\n\n return (\n <Card sx={makeRootStyles(assignment.isOvercapacity)}>\n <CardHeader\n title={assignment.workplace.name}\n action={\n <React.Fragment>\n <Typography>{`${assignment.assignedCount}/${assignment.recommendedOperators}`}</Typography>\n <Typography variant=\"caption\" sx={makeStatusBadgeStyles(badge.status)}>\n {badge.text}\n </Typography>\n </React.Fragment>\n }\n slotProps={{ title: { variant: 'subtitle1', sx: styles.title }, action: { sx: styles.action } }}\n sx={styles.header}\n />\n <CardContent sx={styles.content}>\n <DropZone droppableId={assignment.workplace.id}>\n {() => (\n <React.Fragment>\n {assignment.assignedOperators.map((operator, index) => (\n <OperatorCard\n key={operator.user.id}\n user={operator.user}\n index={index}\n draggableId={operator.user.id}\n showPresence\n presenceStatus={operator.presenceStatus}\n />\n ))}\n </React.Fragment>\n )}\n </DropZone>\n </CardContent>\n </Card>\n );\n};\n\nexport default WorkplaceColumn;\n","import { Theme } from '@mui/material';\n\nconst styles = {\n grid: (theme: Theme) => ({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap',\n alignContent: 'flex-start',\n gap: theme.spacing(1),\n height: '100%',\n overflowX: 'auto',\n }),\n};\n\nexport default styles;\n","import React from 'react';\n\nimport { DragDropContext, DropResult } from '@hello-pangea/dnd';\nimport { Box } from '@mui/material';\nimport { GqlClients } from 'andoncloud-dashboard-toolkit';\n\nimport { ViewState, WidgetData } from '@/types';\n\nimport { getUpdatedData } from './helpers';\nimport PoolColumn from './PoolColumn';\nimport WorkplaceColumn from './WorkplaceColumn';\n\nimport styles from './styles';\n\ninterface AssignmentBoardProps {\n data: WidgetData;\n viewState: ViewState;\n gqlClients: GqlClients;\n updateData: (data: Partial<WidgetData>) => void;\n onMutationComplete: () => void;\n}\n\nconst AssignmentBoard: React.FC<AssignmentBoardProps> = ({ data, viewState, gqlClients, updateData, onMutationComplete }) => {\n const { graphqlSdk } = gqlClients;\n\n const handleDragEnd = (result: DropResult) => {\n if (!graphqlSdk) return;\n\n const updatedData = getUpdatedData(data, result);\n if (!updatedData) return;\n\n updateData(updatedData);\n\n const { destination, draggableId } = result;\n const userId = draggableId;\n const toPool = destination!.droppableId === 'pool';\n\n if (toPool) {\n graphqlSdk\n .unassignOperator({\n input: {\n userId,\n shiftId: viewState.shift.id,\n validFrom: viewState.date,\n },\n })\n .then(onMutationComplete)\n .catch(() => {});\n } else {\n graphqlSdk\n .assignOperator({\n input: {\n userId,\n workplaceId: destination!.droppableId,\n shiftId: viewState.shift.id,\n validFrom: viewState.date,\n },\n })\n .then(onMutationComplete)\n .catch(() => {});\n }\n };\n\n return (\n <DragDropContext onDragEnd={handleDragEnd}>\n <Box sx={styles.grid}>\n <PoolColumn operators={data.unassignedOperators} />\n {data.workplaces.map((assignment) => (\n <WorkplaceColumn key={assignment.workplace.id} assignment={assignment} />\n ))}\n </Box>\n </DragDropContext>\n );\n};\n\nexport default AssignmentBoard;\n","import { SxProps, Theme } from '@mui/material';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: (theme) => theme.spacing(2),\n marginBottom: (theme) => theme.spacing(1),\n padding: (theme) => theme.spacing(1),\n borderBottom: '1px solid #717171',\n background: '#525860',\n },\n label: {\n minWidth: 200,\n textAlign: 'center',\n color: 'rgba(255, 255, 255, 0.65)',\n },\n};\n\nexport default styles;\n","import React from 'react';\n\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { Box, IconButton, Typography } from '@mui/material';\n\nimport { ViewState } from '@/types';\n\nimport styles from './styles';\n\ninterface NavigationProps {\n viewState: ViewState;\n onNavigate: (direction: 'prev' | 'next') => void;\n}\n\nconst Navigation: React.FC<NavigationProps> = ({ viewState, onNavigate }) => (\n <Box sx={styles.root}>\n <IconButton color=\"secondary\" onClick={() => onNavigate('prev')}>\n <ChevronLeftIcon />\n </IconButton>\n <Typography sx={styles.label}>\n {viewState.date} - {viewState.shift.name}\n </Typography>\n <IconButton color=\"secondary\" onClick={() => onNavigate('next')}>\n <ChevronRightIcon />\n </IconButton>\n </Box>\n);\n\nexport default Navigation;\n","import { SxProps, Theme } from '@mui/material/styles';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n};\n\nexport default styles;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Typography } from '@mui/material';\n\nimport { ViewState, WidgetViewProps } from '@/types';\nimport { getInitialState, navigateState } from '@/utils/state';\n\nimport AssignmentBoard from '../AssignmentBoard';\nimport Navigation from '../Navigation';\n\nimport styles from './styles';\n\nconst WidgetView: React.FC<WidgetViewProps> = ({ data, updateData, gqlClients, settings }) => {\n const { t } = useTranslation();\n const [viewState, setViewState] = useState<ViewState | null>(null);\n\n const { graphqlSdk } = gqlClients;\n\n useEffect(() => {\n if (data.shifts.length > 0 && !viewState) {\n const initialState = getInitialState(data.shifts);\n\n if (initialState) {\n setViewState(initialState);\n }\n }\n }, [data.shifts, viewState]);\n\n const fetchAssignmentsRef = useRef<() => void>(null!);\n\n fetchAssignmentsRef.current = () => {\n if (!graphqlSdk || !viewState || !updateData) return;\n\n graphqlSdk\n .workplaceAssignments({\n input: {\n date: viewState.date,\n shiftId: viewState.shift.id,\n departmentId: settings?.departmentId || undefined,\n },\n })\n .then(({ workplaceAssignments }) => {\n return updateData(workplaceAssignments);\n })\n .catch(() => {});\n };\n\n useEffect(() => {\n if (!viewState || !graphqlSdk) return;\n\n fetchAssignmentsRef.current?.();\n\n const refreshInterval = (settings?.refreshInterval || 60) * 1000;\n const intervalId = setInterval(() => fetchAssignmentsRef.current?.(), refreshInterval);\n\n return () => clearInterval(intervalId);\n }, [viewState, graphqlSdk, settings?.departmentId, settings?.refreshInterval]);\n\n const handleNavigate = useCallback(\n (direction: 'prev' | 'next') => {\n if (!viewState) return;\n const newState = navigateState(viewState, data.shifts, direction);\n setViewState(newState);\n },\n [viewState, data.shifts],\n );\n\n return (\n <Box sx={styles.root}>\n {viewState ? (\n <React.Fragment>\n <Navigation viewState={viewState} onNavigate={handleNavigate} />\n <AssignmentBoard data={data} viewState={viewState} gqlClients={gqlClients} updateData={updateData!} onMutationComplete={() => fetchAssignmentsRef.current?.()} />\n </React.Fragment>\n ) : (\n <Typography>{t('noShiftsAvailable')}</Typography>\n )}\n </Box>\n );\n};\n\nexport default WidgetView;\n","/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n","const reWords = /[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g\n\nconst words = (str) => str.match(reWords) || []\n\nconst upperFirst = (str) => str[0].toUpperCase() + str.slice(1)\n\nconst join = (str, d) => words(str).join(d).toLowerCase()\n\nconst camelCase = (str) =>\n words(str).reduce(\n (acc, next) =>\n `${acc}${\n !acc\n ? next.toLowerCase()\n : next[0].toUpperCase() + next.slice(1).toLowerCase()\n }`,\n '',\n )\n\nconst pascalCase = (str) => upperFirst(camelCase(str))\n\nconst snakeCase = (str) => join(str, '_')\n\nconst kebabCase = (str) => join(str, '-')\n\nconst sentenceCase = (str) => upperFirst(join(str, ' '))\n\nconst titleCase = (str) => words(str).map(upperFirst).join(' ')\n\nmodule.exports = {\n words,\n upperFirst,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n sentenceCase,\n titleCase,\n}\n","\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n","import { getter, forEach, split, normalizePath, join } from 'property-expr';\nimport { camelCase, snakeCase } from 'tiny-case';\nimport toposort from 'toposort';\n\nconst toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\nfunction printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}\n\nfunction toArray(value) {\n return value == null ? [] : [].concat(value);\n}\n\nlet _Symbol$toStringTag, _Symbol$hasInstance, _Symbol$toStringTag2;\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\n_Symbol$toStringTag = Symbol.toStringTag;\nclass ValidationErrorNoStack {\n constructor(errorOrErrors, value, field, type) {\n this.name = void 0;\n this.message = void 0;\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = void 0;\n this.inner = void 0;\n this[_Symbol$toStringTag] = 'Error';\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n const innerErrors = err.inner.length ? err.inner : [err];\n this.inner.push(...innerErrors);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n }\n}\n_Symbol$hasInstance = Symbol.hasInstance;\n_Symbol$toStringTag2 = Symbol.toStringTag;\nclass ValidationError extends Error {\n static formatError(message, params) {\n // Attempt to make the path more friendly for error message interpolation.\n const path = params.label || params.path || 'this';\n // Store the original path under `originalPath` so it isn't lost to custom\n // message functions; e.g., ones provided in `setLocale()` calls.\n params = Object.assign({}, params, {\n path,\n originalPath: params.path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n constructor(errorOrErrors, value, field, type, disableStack) {\n const errorNoStack = new ValidationErrorNoStack(errorOrErrors, value, field, type);\n if (disableStack) {\n return errorNoStack;\n }\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = [];\n this.inner = [];\n this[_Symbol$toStringTag2] = 'Error';\n this.name = errorNoStack.name;\n this.message = errorNoStack.message;\n this.type = errorNoStack.type;\n this.value = errorNoStack.value;\n this.path = errorNoStack.path;\n this.errors = errorNoStack.errors;\n this.inner = errorNoStack.inner;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ValidationError);\n }\n }\n static [_Symbol$hasInstance](inst) {\n return ValidationErrorNoStack[Symbol.hasInstance](inst) || super[Symbol.hasInstance](inst);\n }\n}\n\nlet mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n defined: '${path} must be defined',\n notNull: '${path} cannot be null',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n const castMsg = originalValue != null && originalValue !== value ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.';\n return type !== 'mixed' ? `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + castMsg : `${path} must match the configured type. ` + `The validated value was: \\`${printValue(value, true)}\\`` + castMsg;\n }\n};\nlet string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n datetime: '${path} must be a valid ISO date-time',\n datetime_precision: '${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits',\n datetime_offset: '${path} must be a valid ISO date-time with UTC \"Z\" timezone',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nlet number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nlet date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nlet boolean = {\n isValue: '${path} field must be ${value}'\n};\nlet object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}',\n exact: '${path} object contains unknown properties: ${properties}'\n};\nlet array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nlet tuple = {\n notType: params => {\n const {\n path,\n value,\n spec\n } = params;\n const typeLen = spec.types.length;\n if (Array.isArray(value)) {\n if (value.length < typeLen) return `${path} tuple value has too few items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n if (value.length > typeLen) return `${path} tuple value has too many items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n }\n return ValidationError.formatError(mixed.notType, params);\n }\n};\nvar locale = Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean,\n tuple\n});\n\nconst isSchema = obj => obj && obj.__isYupSchema__;\n\nclass Condition {\n static fromOptions(refs, config) {\n if (!config.then && !config.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = config;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n return new Condition(refs, (values, schema) => {\n var _branch;\n let branch = check(...values) ? then : otherwise;\n return (_branch = branch == null ? void 0 : branch(schema)) != null ? _branch : schema;\n });\n }\n constructor(refs, builder) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n this.fn = builder;\n }\n resolve(base, options) {\n let values = this.refs.map(ref =>\n // TODO: ? operator here?\n ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn(values, base, options);\n if (schema === undefined ||\n // @ts-ignore this can be base\n schema === base) {\n return base;\n }\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n}\n\nconst prefixes = {\n context: '$',\n value: '.'\n};\nfunction create$9(key, options) {\n return new Reference(key, options);\n}\nclass Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && getter(this.path, true);\n this.map = options.map;\n }\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n resolve() {\n return this;\n }\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n toString() {\n return `Ref(${this.key})`;\n }\n static isRef(value) {\n return value && value.__isYupRef;\n }\n}\n\n// @ts-ignore\nReference.prototype.__isYupRef = true;\n\nconst isAbsent = value => value == null;\n\nfunction createValidation(config) {\n function validate({\n value,\n path = '',\n options,\n originalValue,\n schema\n }, panic, next) {\n const {\n name,\n test,\n params,\n message,\n skipAbsent\n } = config;\n let {\n parent,\n context,\n abortEarly = schema.spec.abortEarly,\n disableStackTrace = schema.spec.disableStackTrace\n } = options;\n const resolveOptions = {\n value,\n parent,\n context\n };\n function createError(overrides = {}) {\n const nextParams = resolveParams(Object.assign({\n value,\n originalValue,\n label: schema.spec.label,\n path: overrides.path || path,\n spec: schema.spec,\n disableStackTrace: overrides.disableStackTrace || disableStackTrace\n }, params, overrides.params), resolveOptions);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name, nextParams.disableStackTrace);\n error.params = nextParams;\n return error;\n }\n const invalid = abortEarly ? panic : next;\n let ctx = {\n path,\n parent,\n type: name,\n from: options.from,\n createError,\n resolve(item) {\n return resolveMaybeRef(item, resolveOptions);\n },\n options,\n originalValue,\n schema\n };\n const handleResult = validOrError => {\n if (ValidationError.isError(validOrError)) invalid(validOrError);else if (!validOrError) invalid(createError());else next(null);\n };\n const handleError = err => {\n if (ValidationError.isError(err)) invalid(err);else panic(err);\n };\n const shouldSkip = skipAbsent && isAbsent(value);\n if (shouldSkip) {\n return handleResult(true);\n }\n let result;\n try {\n var _result;\n result = test.call(ctx, value, ctx);\n if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') {\n if (options.sync) {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n return Promise.resolve(result).then(handleResult, handleError);\n }\n } catch (err) {\n handleError(err);\n return;\n }\n handleResult(result);\n }\n validate.OPTIONS = config;\n return validate;\n}\n\n// Warning: mutates the input\nfunction resolveParams(params, options) {\n if (!params) return params;\n for (const key of Object.keys(params)) {\n params[key] = resolveMaybeRef(params[key], options);\n }\n return params;\n}\nfunction resolveMaybeRef(item, options) {\n return Reference.isRef(item) ? item.getValue(options.value, options.parent, options.context) : item;\n}\n\nfunction getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug;\n\n // root path: ''\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? _part.slice(1, _part.length - 1) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n let isTuple = schema.type === 'tuple';\n let idx = isArray ? parseInt(part, 10) : 0;\n if (schema.innerType || isTuple) {\n if (isTuple && !isArray) throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${lastPartDebug}\" must contain an index to the tuple element, e.g. \"${lastPartDebug}[0]\"`);\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n parent = value;\n value = value && value[idx];\n schema = isTuple ? schema.spec.types[idx] : schema.innerType;\n }\n\n // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema.type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\nfunction reach(obj, path, value, context) {\n return getIn(obj, path, value, context).schema;\n}\n\nclass ReferenceSet extends Set {\n describe() {\n const description = [];\n for (const item of this.values()) {\n description.push(Reference.isRef(item) ? item.describe() : item);\n }\n return description;\n }\n resolveAll(resolve) {\n let result = [];\n for (const item of this.values()) {\n result.push(resolve(item));\n }\n return result;\n }\n clone() {\n return new ReferenceSet(this.values());\n }\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.forEach(value => next.add(value));\n removeItems.forEach(value => next.delete(value));\n return next;\n }\n}\n\n// tweaked from https://github.com/Kelin2025/nanoclone/blob/0abeb7635bda9b68ef2277093f76dbe3bf3948e1/src/index.js\nfunction clone(src, seen = new Map()) {\n if (isSchema(src) || !src || typeof src !== 'object') return src;\n if (seen.has(src)) return seen.get(src);\n let copy;\n if (src instanceof Date) {\n // Date\n copy = new Date(src.getTime());\n seen.set(src, copy);\n } else if (src instanceof RegExp) {\n // RegExp\n copy = new RegExp(src);\n seen.set(src, copy);\n } else if (Array.isArray(src)) {\n // Array\n copy = new Array(src.length);\n seen.set(src, copy);\n for (let i = 0; i < src.length; i++) copy[i] = clone(src[i], seen);\n } else if (src instanceof Map) {\n // Map\n copy = new Map();\n seen.set(src, copy);\n for (const [k, v] of src.entries()) copy.set(k, clone(v, seen));\n } else if (src instanceof Set) {\n // Set\n copy = new Set();\n seen.set(src, copy);\n for (const v of src) copy.add(clone(v, seen));\n } else if (src instanceof Object) {\n // Object\n copy = {};\n seen.set(src, copy);\n for (const [k, v] of Object.entries(src)) copy[k] = clone(v, seen);\n } else {\n throw Error(`Unable to clone ${src}`);\n }\n return copy;\n}\n\n/**\n * Copied from @standard-schema/spec to avoid having a dependency on it.\n * https://github.com/standard-schema/standard-schema/blob/main/packages/spec/src/index.ts\n */\n\nfunction createStandardPath(path) {\n if (!(path != null && path.length)) {\n return undefined;\n }\n\n // Array to store the final path segments\n const segments = [];\n // Buffer for building the current segment\n let currentSegment = '';\n // Track if we're inside square brackets (array/property access)\n let inBrackets = false;\n // Track if we're inside quotes (for property names with special chars)\n let inQuotes = false;\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n if (char === '[' && !inQuotes) {\n // When entering brackets, push any accumulated segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n currentSegment = '';\n }\n inBrackets = true;\n continue;\n }\n if (char === ']' && !inQuotes) {\n if (currentSegment) {\n // Handle numeric indices (e.g. arr[0])\n if (/^\\d+$/.test(currentSegment)) {\n segments.push(currentSegment);\n } else {\n // Handle quoted property names (e.g. obj[\"foo.bar\"])\n segments.push(currentSegment.replace(/^\"|\"$/g, ''));\n }\n currentSegment = '';\n }\n inBrackets = false;\n continue;\n }\n if (char === '\"') {\n // Toggle quote state for handling quoted property names\n inQuotes = !inQuotes;\n continue;\n }\n if (char === '.' && !inBrackets && !inQuotes) {\n // On dots outside brackets/quotes, push current segment\n if (currentSegment) {\n segments.push(currentSegment);\n currentSegment = '';\n }\n continue;\n }\n currentSegment += char;\n }\n\n // Push any remaining segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n }\n return segments;\n}\nfunction createStandardIssues(error, parentPath) {\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.errors.map(err => ({\n message: err,\n path: createStandardPath(path)\n }));\n}\nfunction issuesFromValidationError(error, parentPath) {\n var _error$inner;\n if (!((_error$inner = error.inner) != null && _error$inner.length) && error.errors.length) {\n return createStandardIssues(error, parentPath);\n }\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.inner.flatMap(err => issuesFromValidationError(err, path));\n}\n\n// If `CustomSchemaMeta` isn't extended with any keys, we'll fall back to a\n// loose Record definition allowing free form usage.\nclass Schema {\n constructor(options) {\n this.type = void 0;\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this.internalTests = {};\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this._typeCheck = void 0;\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(mixed.notType);\n });\n this.type = options.type;\n this._typeCheck = options.check;\n this.spec = Object.assign({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n disableStackTrace: false,\n nullable: false,\n optional: true,\n coerce: true\n }, options == null ? void 0 : options.spec);\n this.withMutation(s => {\n s.nonNullable();\n });\n }\n\n // TODO: remove\n get _type() {\n return this.type;\n }\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n }\n\n // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n const next = Object.create(Object.getPrototypeOf(this));\n\n // @ts-expect-error this is readonly\n next.type = this.type;\n next._typeCheck = this._typeCheck;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.internalTests = Object.assign({}, this.internalTests);\n next.exclusiveTests = Object.assign({}, this.exclusiveTests);\n\n // @ts-expect-error this is readonly\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = clone(Object.assign({}, this.spec, spec));\n return next;\n }\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n const mergedSpec = Object.assign({}, base.spec, combined.spec);\n combined.spec = mergedSpec;\n combined.internalTests = Object.assign({}, base.internalTests, combined.internalTests);\n\n // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist);\n\n // start with the current tests\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests;\n\n // manually add the new tests to ensure\n // the deduping logic is consistent\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n isType(v) {\n if (v == null) {\n if (this.spec.nullable && v === null) return true;\n if (this.spec.optional && v === undefined) return true;\n return false;\n }\n return this._typeCheck(v);\n }\n resolve(options) {\n let schema = this;\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((prevSchema, condition) => condition.resolve(prevSchema, options), schema);\n schema = schema.resolve(options);\n }\n return schema;\n }\n resolveOptions(options) {\n var _options$strict, _options$abortEarly, _options$recursive, _options$disableStack;\n return Object.assign({}, options, {\n from: options.from || [],\n strict: (_options$strict = options.strict) != null ? _options$strict : this.spec.strict,\n abortEarly: (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly,\n recursive: (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive,\n disableStackTrace: (_options$disableStack = options.disableStackTrace) != null ? _options$disableStack : this.spec.disableStackTrace\n });\n }\n\n /**\n * Run the configured transform pipeline over an input value.\n */\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(Object.assign({}, options, {\n value\n // parent: options.parent,\n // context: options.context,\n }));\n\n let allowOptionality = options.assert === 'ignore-optionality';\n let result = resolvedSchema._cast(value, options);\n if (options.assert !== false && !resolvedSchema.isType(result)) {\n if (allowOptionality && isAbsent(result)) {\n return result;\n }\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema.type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n return result;\n }\n _cast(rawValue, options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((prevValue, fn) => fn.call(this, prevValue, rawValue, this, options), rawValue);\n if (value === undefined) {\n value = this.getDefault(options);\n }\n return value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n path,\n originalValue = _value,\n strict = this.spec.strict\n } = options;\n let value = _value;\n if (!strict) {\n value = this._cast(value, Object.assign({\n assert: false\n }, options));\n }\n let initialTests = [];\n for (let test of Object.values(this.internalTests)) {\n if (test) initialTests.push(test);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: initialTests\n }, panic, initialErrors => {\n // even if we aren't ending early we can't proceed further if the types aren't correct\n if (initialErrors.length) {\n return next(initialErrors, value);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: this.tests\n }, panic, next);\n });\n }\n\n /**\n * Executes a set of validations, either schema, produced Tests or a nested\n * schema validate result.\n */\n runTests(runOptions, panic, next) {\n let fired = false;\n let {\n tests,\n value,\n originalValue,\n path,\n options\n } = runOptions;\n let panicOnce = arg => {\n if (fired) return;\n fired = true;\n panic(arg, value);\n };\n let nextOnce = arg => {\n if (fired) return;\n fired = true;\n next(arg, value);\n };\n let count = tests.length;\n let nestedErrors = [];\n if (!count) return nextOnce([]);\n let args = {\n value,\n originalValue,\n path,\n options,\n schema: this\n };\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, panicOnce, function finishTestRun(err) {\n if (err) {\n Array.isArray(err) ? nestedErrors.push(...err) : nestedErrors.push(err);\n }\n if (--count <= 0) {\n nextOnce(nestedErrors);\n }\n });\n }\n }\n asNestedTest({\n key,\n index,\n parent,\n parentPath,\n originalParent,\n options\n }) {\n const k = key != null ? key : index;\n if (k == null) {\n throw TypeError('Must include `key` or `index` for nested validations');\n }\n const isIndex = typeof k === 'number';\n let value = parent[k];\n const testOptions = Object.assign({}, options, {\n // Nested validations fields are always strict:\n // 1. parent isn't strict so the casting will also have cast inner values\n // 2. parent is strict in which case the nested values weren't cast either\n strict: true,\n parent,\n value,\n originalValue: originalParent[k],\n // FIXME: tests depend on `index` being passed around deeply,\n // we should not let the options.key/index bleed through\n key: undefined,\n // index: undefined,\n [isIndex ? 'index' : 'key']: k,\n path: isIndex || k.includes('.') ? `${parentPath || ''}[${isIndex ? k : `\"${k}\"`}]` : (parentPath ? `${parentPath}.` : '') + key\n });\n return (_, panic, next) => this.resolve(testOptions)._validate(value, testOptions, panic, next);\n }\n validate(value, options) {\n var _options$disableStack2;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let disableStackTrace = (_options$disableStack2 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack2 : schema.spec.disableStackTrace;\n return new Promise((resolve, reject) => schema._validate(value, options, (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n reject(error);\n }, (errors, validated) => {\n if (errors.length) reject(new ValidationError(errors, validated, undefined, undefined, disableStackTrace));else resolve(validated);\n }));\n }\n validateSync(value, options) {\n var _options$disableStack3;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let result;\n let disableStackTrace = (_options$disableStack3 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack3 : schema.spec.disableStackTrace;\n schema._validate(value, Object.assign({}, options, {\n sync: true\n }), (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n throw error;\n }, (errors, validated) => {\n if (errors.length) throw new ValidationError(errors, value, undefined, undefined, disableStackTrace);\n result = validated;\n });\n return result;\n }\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n _getDefault(options) {\n let defaultValue = this.spec.default;\n if (defaultValue == null) {\n return defaultValue;\n }\n return typeof defaultValue === 'function' ? defaultValue.call(this, options) : clone(defaultValue);\n }\n getDefault(options\n // If schema is defaulted we know it's at least not undefined\n ) {\n let schema = this.resolve(options || {});\n return schema._getDefault(options);\n }\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n let next = this.clone({\n default: def\n });\n return next;\n }\n strict(isStrict = true) {\n return this.clone({\n strict: isStrict\n });\n }\n nullability(nullable, message) {\n const next = this.clone({\n nullable\n });\n next.internalTests.nullable = createValidation({\n message,\n name: 'nullable',\n test(value) {\n return value === null ? this.schema.spec.nullable : true;\n }\n });\n return next;\n }\n optionality(optional, message) {\n const next = this.clone({\n optional\n });\n next.internalTests.optionality = createValidation({\n message,\n name: 'optionality',\n test(value) {\n return value === undefined ? this.schema.spec.optional : true;\n }\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n defined(message = mixed.defined) {\n return this.optionality(false, message);\n }\n nullable() {\n return this.nullability(true);\n }\n nonNullable(message = mixed.notNull) {\n return this.nullability(false, message);\n }\n required(message = mixed.required) {\n return this.clone().withMutation(next => next.nonNullable(message).defined(message));\n }\n notRequired() {\n return this.clone().withMutation(next => next.nullable().optional());\n }\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n test(...args) {\n let opts;\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n if (opts.message === undefined) opts.message = mixed.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n let next = this.clone();\n let deps = toArray(keys).map(key => new Reference(key));\n deps.forEach(dep => {\n // @ts-ignore readonly array\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(typeof options === 'function' ? new Condition(deps, options) : Condition.fromOptions(deps, options));\n return next;\n }\n typeError(message) {\n let next = this.clone();\n next.internalTests.typeError = createValidation({\n message,\n name: 'typeError',\n skipAbsent: true,\n test(value) {\n if (!this.schema._typeCheck(value)) return this.createError({\n params: {\n type: this.schema.type\n }\n });\n return true;\n }\n });\n return next;\n }\n oneOf(enums, message = mixed.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n next._blacklist.delete(val);\n });\n next.internalTests.whiteList = createValidation({\n message,\n name: 'oneOf',\n skipAbsent: true,\n test(value) {\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: Array.from(valids).join(', '),\n resolved\n }\n });\n }\n });\n return next;\n }\n notOneOf(enums, message = mixed.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n next._whitelist.delete(val);\n });\n next.internalTests.blacklist = createValidation({\n message,\n name: 'notOneOf',\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: Array.from(invalids).join(', '),\n resolved\n }\n });\n return true;\n }\n });\n return next;\n }\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n /**\n * Return a serialized description of the schema including validations, flags, types etc.\n *\n * @param options Provide any needed context for resolving runtime schema alterations (lazy, when conditions, etc).\n */\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const {\n label,\n meta,\n optional,\n nullable\n } = next.spec;\n const description = {\n meta,\n label,\n optional,\n nullable,\n default: next.getDefault(options),\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.filter((n, idx, list) => list.findIndex(c => c.OPTIONS.name === n.OPTIONS.name) === idx).map(fn => {\n const params = fn.OPTIONS.params && options ? resolveParams(Object.assign({}, fn.OPTIONS.params), options) : fn.OPTIONS.params;\n return {\n name: fn.OPTIONS.name,\n params\n };\n })\n };\n return description;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (err instanceof ValidationError) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n// @ts-expect-error\nSchema.prototype.__isYupSchema__ = true;\nfor (const method of ['validate', 'validateSync']) Schema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], Object.assign({}, options, {\n parent,\n path\n }));\n};\nfor (const alias of ['equals', 'is']) Schema.prototype[alias] = Schema.prototype.oneOf;\nfor (const alias of ['not', 'nope']) Schema.prototype[alias] = Schema.prototype.notOneOf;\n\nconst returnsTrue = () => true;\nfunction create$8(spec) {\n return new MixedSchema(spec);\n}\nclass MixedSchema extends Schema {\n constructor(spec) {\n super(typeof spec === 'function' ? {\n type: 'mixed',\n check: spec\n } : Object.assign({\n type: 'mixed',\n check: returnsTrue\n }, spec));\n }\n}\ncreate$8.prototype = MixedSchema.prototype;\n\nfunction create$7() {\n return new BooleanSchema();\n}\nclass BooleanSchema extends Schema {\n constructor() {\n super({\n type: 'boolean',\n check(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (this.spec.coerce && !this.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n return value;\n });\n });\n }\n isTrue(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n test(value) {\n return isAbsent(value) || value === true;\n }\n });\n }\n isFalse(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n test(value) {\n return isAbsent(value) || value === false;\n }\n });\n }\n default(def) {\n return super.default(def);\n }\n defined(msg) {\n return super.defined(msg);\n }\n optional() {\n return super.optional();\n }\n required(msg) {\n return super.required(msg);\n }\n notRequired() {\n return super.notRequired();\n }\n nullable() {\n return super.nullable();\n }\n nonNullable(msg) {\n return super.nonNullable(msg);\n }\n strip(v) {\n return super.strip(v);\n }\n}\ncreate$7.prototype = BooleanSchema.prototype;\n\n/**\n * This file is a modified version of the file from the following repository:\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * © 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n\n// prettier-ignore\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm\nconst isoReg = /^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nfunction parseIsoDate(date) {\n const struct = parseDateStruct(date);\n if (!struct) return Date.parse ? Date.parse(date) : Number.NaN;\n\n // timestamps without timezone identifiers should be considered local time\n if (struct.z === undefined && struct.plusMinus === undefined) {\n return new Date(struct.year, struct.month, struct.day, struct.hour, struct.minute, struct.second, struct.millisecond).valueOf();\n }\n let totalMinutesOffset = 0;\n if (struct.z !== 'Z' && struct.plusMinus !== undefined) {\n totalMinutesOffset = struct.hourOffset * 60 + struct.minuteOffset;\n if (struct.plusMinus === '+') totalMinutesOffset = 0 - totalMinutesOffset;\n }\n return Date.UTC(struct.year, struct.month, struct.day, struct.hour, struct.minute + totalMinutesOffset, struct.second, struct.millisecond);\n}\nfunction parseDateStruct(date) {\n var _regexResult$7$length, _regexResult$;\n const regexResult = isoReg.exec(date);\n if (!regexResult) return null;\n\n // use of toNumber() avoids NaN timestamps caused by “undefined”\n // values being passed to Date constructor\n return {\n year: toNumber(regexResult[1]),\n month: toNumber(regexResult[2], 1) - 1,\n day: toNumber(regexResult[3], 1),\n hour: toNumber(regexResult[4]),\n minute: toNumber(regexResult[5]),\n second: toNumber(regexResult[6]),\n millisecond: regexResult[7] ?\n // allow arbitrary sub-second precision beyond milliseconds\n toNumber(regexResult[7].substring(0, 3)) : 0,\n precision: (_regexResult$7$length = (_regexResult$ = regexResult[7]) == null ? void 0 : _regexResult$.length) != null ? _regexResult$7$length : undefined,\n z: regexResult[8] || undefined,\n plusMinus: regexResult[9] || undefined,\n hourOffset: toNumber(regexResult[10]),\n minuteOffset: toNumber(regexResult[11])\n };\n}\nfunction toNumber(str, defaultValue = 0) {\n return Number(str) || defaultValue;\n}\n\n// Taken from HTML spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlet rEmail =\n// eslint-disable-next-line\n/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nlet rUrl =\n// eslint-disable-next-line\n/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i;\n\n// eslint-disable-next-line\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nlet yearMonthDay = '^\\\\d{4}-\\\\d{2}-\\\\d{2}';\nlet hourMinuteSecond = '\\\\d{2}:\\\\d{2}:\\\\d{2}';\nlet zOrOffset = '(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)';\nlet rIsoDateTime = new RegExp(`${yearMonthDay}T${hourMinuteSecond}(\\\\.\\\\d+)?${zOrOffset}$`);\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\nlet objStringTag = {}.toString();\nfunction create$6() {\n return new StringSchema();\n}\nclass StringSchema extends Schema {\n constructor() {\n super({\n type: 'string',\n check(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (!this.spec.coerce || this.isType(value)) return value;\n\n // don't ever convert arrays\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n\n // no one wants plain objects converted to [Object object]\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n required(message) {\n return super.required(message).withMutation(schema => schema.test({\n message: message || mixed.required,\n name: 'required',\n skipAbsent: true,\n test: value => !!value.length\n }));\n }\n notRequired() {\n return super.notRequired().withMutation(schema => {\n schema.tests = schema.tests.filter(t => t.OPTIONS.name !== 'required');\n return schema;\n });\n }\n length(length, message = string.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message = string.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message = string.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n return this.test({\n name: name || 'matches',\n message: message || string.matches,\n params: {\n regex\n },\n skipAbsent: true,\n test: value => value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n email(message = string.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n url(message = string.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n uuid(message = string.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n }\n datetime(options) {\n let message = '';\n let allowOffset;\n let precision;\n if (options) {\n if (typeof options === 'object') {\n ({\n message = '',\n allowOffset = false,\n precision = undefined\n } = options);\n } else {\n message = options;\n }\n }\n return this.matches(rIsoDateTime, {\n name: 'datetime',\n message: message || string.datetime,\n excludeEmptyString: true\n }).test({\n name: 'datetime_offset',\n message: message || string.datetime_offset,\n params: {\n allowOffset\n },\n skipAbsent: true,\n test: value => {\n if (!value || allowOffset) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return !!struct.z;\n }\n }).test({\n name: 'datetime_precision',\n message: message || string.datetime_precision,\n params: {\n precision\n },\n skipAbsent: true,\n test: value => {\n if (!value || precision == undefined) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return struct.precision === precision;\n }\n });\n }\n\n //-- transforms --\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n trim(message = string.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n lowercase(message = string.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n uppercase(message = string.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n}\ncreate$6.prototype = StringSchema.prototype;\n\n//\n// String Interfaces\n//\n\nlet isNaN$1 = value => value != +value;\nfunction create$5() {\n return new NumberSchema();\n}\nclass NumberSchema extends Schema {\n constructor() {\n super({\n type: 'number',\n check(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN$1(value);\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (!this.spec.coerce) return value;\n let parsed = value;\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN;\n // don't use parseFloat to avoid positives on alpha-numeric strings\n parsed = +parsed;\n }\n\n // null -> NaN isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (this.isType(parsed) || parsed === null) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n min(min, message = number.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(min);\n }\n });\n }\n max(max, message = number.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(max);\n }\n });\n }\n lessThan(less, message = number.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n skipAbsent: true,\n test(value) {\n return value < this.resolve(less);\n }\n });\n }\n moreThan(more, message = number.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n skipAbsent: true,\n test(value) {\n return value > this.resolve(more);\n }\n });\n }\n positive(msg = number.positive) {\n return this.moreThan(0, msg);\n }\n negative(msg = number.negative) {\n return this.lessThan(0, msg);\n }\n integer(message = number.integer) {\n return this.test({\n name: 'integer',\n message,\n skipAbsent: true,\n test: val => Number.isInteger(val)\n });\n }\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n round(method) {\n var _method;\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round';\n\n // this exists for symemtry with the new Math.trunc\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n}\ncreate$5.prototype = NumberSchema.prototype;\n\n//\n// Number Interfaces\n//\n\nlet invalidDate = new Date('');\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\nfunction create$4() {\n return new DateSchema();\n}\nclass DateSchema extends Schema {\n constructor() {\n super({\n type: 'date',\n check(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (!this.spec.coerce || this.isType(value) || value === null) return value;\n value = parseIsoDate(value);\n\n // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n return !isNaN(value) ? new Date(value) : DateSchema.INVALID_DATE;\n });\n });\n }\n prepareParam(ref, name) {\n let param;\n if (!Reference.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n return param;\n }\n min(min, message = date.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(limit);\n }\n });\n }\n max(max, message = date.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(limit);\n }\n });\n }\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate$4.prototype = DateSchema.prototype;\ncreate$4.INVALID_DATE = invalidDate;\n\n// @ts-expect-error\nfunction sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n function addNode(depPath, key) {\n let node = split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n for (const key of Object.keys(fields)) {\n let value = fields[key];\n nodes.add(key);\n if (Reference.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n return toposort.array(Array.from(nodes), edges).reverse();\n}\n\nfunction findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n if ((_err$path = err.path) != null && _err$path.includes(key)) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\nfunction sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}\n\nconst parseJson = (value, _, schema) => {\n if (typeof value !== 'string') {\n return value;\n }\n let parsed = value;\n try {\n parsed = JSON.parse(value);\n } catch (err) {\n /* */\n }\n return schema.isType(parsed) ? parsed : value;\n};\n\n// @ts-ignore\nfunction deepPartial(schema) {\n if ('fields' in schema) {\n const partial = {};\n for (const [key, fieldSchema] of Object.entries(schema.fields)) {\n partial[key] = deepPartial(fieldSchema);\n }\n return schema.setFields(partial);\n }\n if (schema.type === 'array') {\n const nextArray = schema.optional();\n if (nextArray.innerType) nextArray.innerType = deepPartial(nextArray.innerType);\n return nextArray;\n }\n if (schema.type === 'tuple') {\n return schema.optional().clone({\n types: schema.spec.types.map(deepPartial)\n });\n }\n if ('optional' in schema) {\n return schema.optional();\n }\n return schema;\n}\nconst deepHas = (obj, p) => {\n const path = [...normalizePath(p)];\n if (path.length === 1) return path[0] in obj;\n let last = path.pop();\n let parent = getter(join(path), true)(obj);\n return !!(parent && last in parent);\n};\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\nconst defaultSort = sortByKeyOrder([]);\nfunction create$3(spec) {\n return new ObjectSchema(spec);\n}\nclass ObjectSchema extends Schema {\n constructor(spec) {\n super({\n type: 'object',\n check(value) {\n return isObject(value) || typeof value === 'function';\n }\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n if (spec) {\n this.shape(spec);\n }\n });\n }\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n let value = super._cast(_value, options);\n\n //should ignore nulls here\n if (value === undefined) return this.getDefault(options);\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n let props = [].concat(this._nodes, Object.keys(value).filter(v => !this._nodes.includes(v)));\n let intermediateValue = {}; // is filled during the transform below\n let innerOptions = Object.assign({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n let isChanged = false;\n for (const prop of props) {\n let field = fields[prop];\n let exists = (prop in value);\n let inputValue = value[prop];\n if (field) {\n let fieldValue;\n\n // safe to mutate since this is fired in sequence\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop;\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = field instanceof Schema ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n if (fieldSpec != null && fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n fieldValue = !options.__validating || !strict ? field.cast(inputValue, innerOptions) : inputValue;\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = inputValue;\n }\n if (exists !== prop in intermediateValue || intermediateValue[prop] !== inputValue) {\n isChanged = true;\n }\n }\n return isChanged ? intermediateValue : value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n from = [],\n originalValue = _value,\n recursive = this.spec.recursive\n } = options;\n options.from = [{\n schema: this,\n value: originalValue\n }, ...from];\n // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n options.__validating = true;\n options.originalValue = originalValue;\n super._validate(_value, options, panic, (objectErrors, value) => {\n if (!recursive || !isObject(value)) {\n next(objectErrors, value);\n return;\n }\n originalValue = originalValue || value;\n let tests = [];\n for (let key of this._nodes) {\n let field = this.fields[key];\n if (!field || Reference.isRef(field)) {\n continue;\n }\n tests.push(field.asNestedTest({\n options,\n key,\n parent: value,\n parentPath: options.path,\n originalParent: originalValue\n }));\n }\n this.runTests({\n tests,\n value,\n originalValue,\n options\n }, panic, fieldErrors => {\n next(fieldErrors.sort(this._sortErrors).concat(objectErrors), value);\n });\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n next.fields = Object.assign({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n nextFields[field] = target === undefined ? schemaOrRef : target;\n }\n return next.withMutation(s =>\n // XXX: excludes here is wrong\n s.setFields(nextFields, [...this._excludedEdges, ...schema._excludedEdges]));\n }\n _getDefault(options) {\n if ('default' in this.spec) {\n return super._getDefault(options);\n }\n\n // if there is no default set invent one\n if (!this._nodes.length) {\n return undefined;\n }\n let dft = {};\n this._nodes.forEach(key => {\n var _innerOptions;\n const field = this.fields[key];\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n dft[key] = field && 'getDefault' in field ? field.getDefault(innerOptions) : undefined;\n });\n return dft;\n }\n setFields(shape, excludedEdges) {\n let next = this.clone();\n next.fields = shape;\n next._nodes = sortFields(shape, excludedEdges);\n next._sortErrors = sortByKeyOrder(Object.keys(shape));\n // XXX: this carries over edges which may not be what you want\n if (excludedEdges) next._excludedEdges = excludedEdges;\n return next;\n }\n shape(additions, excludes = []) {\n return this.clone().withMutation(next => {\n let edges = next._excludedEdges;\n if (excludes.length) {\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n edges = [...next._excludedEdges, ...excludes];\n }\n\n // XXX: excludes here is wrong\n return next.setFields(Object.assign(next.fields, additions), edges);\n });\n }\n partial() {\n const partial = {};\n for (const [key, schema] of Object.entries(this.fields)) {\n partial[key] = 'optional' in schema && schema.optional instanceof Function ? schema.optional() : schema;\n }\n return this.setFields(partial);\n }\n deepPartial() {\n const next = deepPartial(this);\n return next;\n }\n pick(keys) {\n const picked = {};\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n return this.setFields(picked, this._excludedEdges.filter(([a, b]) => keys.includes(a) && keys.includes(b)));\n }\n omit(keys) {\n const remaining = [];\n for (const key of Object.keys(this.fields)) {\n if (keys.includes(key)) continue;\n remaining.push(key);\n }\n return this.pick(remaining);\n }\n from(from, to, alias) {\n let fromGetter = getter(from, true);\n return this.transform(obj => {\n if (!obj) return obj;\n let newObj = obj;\n if (deepHas(obj, from)) {\n newObj = Object.assign({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n return newObj;\n });\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n\n /**\n * Similar to `noUnknown` but only validates that an object is the right shape without stripping the unknown keys\n */\n exact(message) {\n return this.test({\n name: 'exact',\n exclusive: true,\n message: message || object.exact,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return unknownKeys.length === 0 || this.createError({\n params: {\n properties: unknownKeys.join(', ')\n }\n });\n }\n });\n }\n stripUnknown() {\n return this.clone({\n noUnknown: true\n });\n }\n noUnknown(noAllow = true, message = object.noUnknown) {\n if (typeof noAllow !== 'boolean') {\n message = noAllow;\n noAllow = true;\n }\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n unknown(allow = true, message = object.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n transformKeys(fn) {\n return this.transform(obj => {\n if (!obj) return obj;\n const result = {};\n for (const key of Object.keys(obj)) result[fn(key)] = obj[key];\n return result;\n });\n }\n camelCase() {\n return this.transformKeys(camelCase);\n }\n snakeCase() {\n return this.transformKeys(snakeCase);\n }\n constantCase() {\n return this.transformKeys(key => snakeCase(key).toUpperCase());\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.fields = {};\n for (const [key, value] of Object.entries(next.fields)) {\n var _innerOptions2;\n let innerOptions = options;\n if ((_innerOptions2 = innerOptions) != null && _innerOptions2.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n base.fields[key] = value.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$3.prototype = ObjectSchema.prototype;\n\nfunction create$2(type) {\n return new ArraySchema(type);\n}\nclass ArraySchema extends Schema {\n constructor(type) {\n super({\n type: 'array',\n spec: {\n types: type\n },\n check(v) {\n return Array.isArray(v);\n }\n });\n\n // `undefined` specifically means uninitialized, as opposed to \"no subtype\"\n this.innerType = void 0;\n this.innerType = type;\n }\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts);\n\n // should ignore nulls here\n if (!this._typeCheck(value) || !this.innerType) {\n return value;\n }\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, Object.assign({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`,\n parent: value,\n originalValue: v,\n value: v,\n index: idx\n }));\n if (castElement !== v) {\n isChanged = true;\n }\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n var _options$recursive;\n // let sync = options.sync;\n // let path = options.path;\n let innerType = this.innerType;\n // let endEarly = options.abortEarly ?? this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n options.originalValue != null ? options.originalValue : _value;\n super._validate(_value, options, panic, (arrayErrors, value) => {\n var _options$originalValu2;\n if (!recursive || !innerType || !this._typeCheck(value)) {\n next(arrayErrors, value);\n return;\n }\n\n // #950 Ensure that sparse array empty slots are validated\n let tests = new Array(value.length);\n for (let index = 0; index < value.length; index++) {\n var _options$originalValu;\n tests[index] = innerType.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(arrayErrors), value));\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n return next;\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n concat(schema) {\n let next = super.concat(schema);\n\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n if (schema.innerType)\n // @ts-expect-error readonly\n next.innerType = next.innerType ?\n // @ts-expect-error Lazy doesn't have concat and will break\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema));\n\n // @ts-expect-error readonly\n next.innerType = schema;\n next.spec = Object.assign({}, next.spec, {\n types: schema\n });\n return next;\n }\n length(length, message = array.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message) {\n message = message || array.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n // FIXME(ts): Array<typeof T>\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message) {\n message = message || array.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n if (next.innerType) {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[0]\n });\n }\n base.innerType = next.innerType.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$2.prototype = ArraySchema.prototype;\n\n// @ts-ignore\nfunction create$1(schemas) {\n return new TupleSchema(schemas);\n}\nclass TupleSchema extends Schema {\n constructor(schemas) {\n super({\n type: 'tuple',\n spec: {\n types: schemas\n },\n check(v) {\n const types = this.spec.types;\n return Array.isArray(v) && v.length === types.length;\n }\n });\n this.withMutation(() => {\n this.typeError(tuple.notType);\n });\n }\n _cast(inputValue, options) {\n const {\n types\n } = this.spec;\n const value = super._cast(inputValue, options);\n if (!this._typeCheck(value)) {\n return value;\n }\n let isChanged = false;\n const castArray = types.map((type, idx) => {\n const castElement = type.cast(value[idx], Object.assign({}, options, {\n path: `${options.path || ''}[${idx}]`,\n parent: value,\n originalValue: value[idx],\n value: value[idx],\n index: idx\n }));\n if (castElement !== value[idx]) isChanged = true;\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n let itemTypes = this.spec.types;\n super._validate(_value, options, panic, (tupleErrors, value) => {\n var _options$originalValu2;\n // intentionally not respecting recursive\n if (!this._typeCheck(value)) {\n next(tupleErrors, value);\n return;\n }\n let tests = [];\n for (let [index, itemSchema] of itemTypes.entries()) {\n var _options$originalValu;\n tests[index] = itemSchema.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(tupleErrors), value));\n });\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.innerType = next.spec.types.map((schema, index) => {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[index]\n });\n }\n return schema.describe(innerOptions);\n });\n return base;\n }\n}\ncreate$1.prototype = TupleSchema.prototype;\n\nfunction create(builder) {\n return new Lazy(builder);\n}\nfunction catchValidationError(fn) {\n try {\n return fn();\n } catch (err) {\n if (ValidationError.isError(err)) return Promise.reject(err);\n throw err;\n }\n}\nclass Lazy {\n constructor(builder) {\n this.type = 'lazy';\n this.__isYupSchema__ = true;\n this.spec = void 0;\n this._resolve = (value, options = {}) => {\n let schema = this.builder(value, options);\n if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');\n if (this.spec.optional) schema = schema.optional();\n return schema.resolve(options);\n };\n this.builder = builder;\n this.spec = {\n meta: undefined,\n optional: false\n };\n }\n clone(spec) {\n const next = new Lazy(this.builder);\n next.spec = Object.assign({}, this.spec, spec);\n return next;\n }\n optionality(optional) {\n const next = this.clone({\n optional\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n resolve(options) {\n return this._resolve(options.value, options);\n }\n cast(value, options) {\n return this._resolve(value, options).cast(value, options);\n }\n asNestedTest(config) {\n let {\n key,\n index,\n parent,\n options\n } = config;\n let value = parent[index != null ? index : key];\n return this._resolve(value, Object.assign({}, options, {\n value,\n parent\n })).asNestedTest(config);\n }\n validate(value, options) {\n return catchValidationError(() => this._resolve(value, options).validate(value, options));\n }\n validateSync(value, options) {\n return this._resolve(value, options).validateSync(value, options);\n }\n validateAt(path, value, options) {\n return catchValidationError(() => this._resolve(value, options).validateAt(path, value, options));\n }\n validateSyncAt(path, value, options) {\n return this._resolve(value, options).validateSyncAt(path, value, options);\n }\n isValid(value, options) {\n try {\n return this._resolve(value, options).isValid(value, options);\n } catch (err) {\n if (ValidationError.isError(err)) {\n return Promise.resolve(false);\n }\n throw err;\n }\n }\n isValidSync(value, options) {\n return this._resolve(value, options).isValidSync(value, options);\n }\n describe(options) {\n return options ? this.resolve(options).describe(options) : {\n type: 'lazy',\n meta: this.spec.meta,\n label: undefined\n };\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (ValidationError.isError(err)) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n\nfunction setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}\n\nfunction addMethod(schemaType, name, fn) {\n if (!schemaType || !isSchema(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function');\n if (typeof name !== 'string') throw new TypeError('A Method name must be provided');\n if (typeof fn !== 'function') throw new TypeError('Method function must be provided');\n schemaType.prototype[name] = fn;\n}\n\nexport { ArraySchema, BooleanSchema, DateSchema, Lazy as LazySchema, MixedSchema, NumberSchema, ObjectSchema, Schema, StringSchema, TupleSchema, ValidationError, addMethod, create$2 as array, create$7 as bool, create$7 as boolean, create$4 as date, locale as defaultLocale, getIn, isSchema, create as lazy, create$8 as mixed, create$5 as number, create$3 as object, printValue, reach, create$9 as ref, setLocale, create$6 as string, create$1 as tuple };\n","import { TFunction } from 'i18next';\nimport * as yup from 'yup';\n\nexport const getSettingsFormProps = (t: TFunction) => {\n yup.setLocale({\n mixed: {\n required: t('This field is required'),\n },\n });\n return {\n initialValues: {\n departmentId: undefined,\n refreshInterval: 60,\n },\n validationSchema: yup.object({\n departmentId: yup.string(),\n refreshInterval: yup.number().oneOf([15, 30, 60]).required(),\n }),\n };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { useGqlClients, WidgetProps } from 'andoncloud-dashboard-toolkit';\nimport { BaseWidget } from 'andoncloud-widget-base';\n\nimport locales from '@/locales';\nimport { WidgetData, WidgetSettings } from '@/types';\nimport { getInitialState } from '@/utils/state';\nimport { LIBRARY_VERSION } from '@/version';\n\nimport SettingsFormContent from '../SettingsFormContent';\nimport WidgetView from '../WidgetView';\n\nimport { getSettingsFormProps } from './utils';\n\nconst Widget: React.FC<WidgetProps<WidgetData, WidgetSettings>> = ({\n url,\n wsUrl,\n lang,\n data,\n settings,\n ...widgetProps\n}) => {\n const { graphqlSdk, gqlWsClient } = useGqlClients({ url, wsUrl, lang });\n const [widgetData, setWidgetData] = useState<WidgetData | undefined>(data);\n\n useEffect(() => {\n if (!data && graphqlSdk) {\n Promise.all([graphqlSdk.departments(), graphqlSdk.shifts()])\n .then(([{ departments }, { shifts }]) => {\n const initialState = getInitialState(shifts);\n\n if (!initialState) {\n return;\n }\n const { date, shift } = initialState;\n\n return graphqlSdk\n .workplaceAssignments({\n input: {\n date,\n shiftId: shift.id,\n departmentId: settings?.departmentId || undefined,\n },\n })\n .then(({ workplaceAssignments }) => {\n return setWidgetData({\n ...workplaceAssignments,\n departments,\n shifts,\n });\n });\n })\n .catch(() => {});\n }\n }, [data, graphqlSdk, settings?.departmentId]);\n\n return (\n <BaseWidget\n lang={lang}\n locales={locales}\n data={widgetData}\n gqlClients={{ graphqlSdk, gqlWsClient }}\n WidgetView={WidgetView}\n getSettingsFormProps={getSettingsFormProps}\n SettingsFormContent={SettingsFormContent}\n version={LIBRARY_VERSION}\n data-testid=\"station-assignment-widget\"\n {...widgetProps}\n />\n );\n};\n\nexport default Widget;\n","export { default as Widget } from './components/Widget';\n\nexport const getDisplayName = (lang: 'en' | 'pl') => {\n switch (lang) {\n case 'en':\n return 'Operator assignment';\n case 'pl':\n return 'Przypisanie operatorów';\n default:\n return 'station-assignment-widget';\n }\n};\n\nexport const requiredFeatures = ['feature.station-assignment-widget'];\nexport const extraPermissions: string[] = [];\n\nexport { LIBRARY_VERSION as version } from './version';\n"],"names":["resources","en","translation","pl","module","exports","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","i","res","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","flags","parsedParts","isNowValid","_d","isNaN","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","t","this","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","argLen","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","removeFormattingTokens","match","replace","formatMoment","expandFormat","array","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","D","dates","date","d","days","day","e","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","h","hours","hour","ms","milliseconds","millisecond","minutes","minute","M","months","month","Q","quarters","quarter","s","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","w","weeks","week","W","isoweeks","isoweek","y","years","year","normalizeUnits","units","toLowerCase","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","regexes","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","indexOf","getSetYear","makeGetSet","unit","keepTime","set$1","get","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","daysInMonth","modMonth","o","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","min","setUTCMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","x","names","j","next","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","yearStr","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","currentDateArray","temp","weekdayOverflow","curWeek","createLocal","_week","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","configFromObject","configFromInput","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","unitHasDecimal","orderLen","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","priority","getPrioritizedUnits","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","Infinity","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","findShiftByName","shifts","find","getInitialState","moment","today","normalizedShifts","normalizeShifts","currentNormalizedShift","getCurrentShift","nextNormalizedShift","startedAt","tomorrow","tomorrowNormalizedShifts","LIBRARY_VERSION","SettingsFormContent","_ref","_formProps$values$dep","formProps","_useState","useState","tabValue","setTabValue","useTranslation","React","createElement","TabContext","Box","sx","borderBottom","borderColor","TabList","onChange","_","newValue","Tab","label","TabPanel","FormControl","fullWidth","InputLabel","id","Select","labelId","variant","departmentId","handleChange","MenuItem","departments","department","refreshInterval","formatProdErrorMessage","code","objectIs","is","useSyncExternalStore","useRef","useEffect","useMemo","useDebugValue","subscribe","getSnapshot","getServerSnapshot","selector","isEqual","instRef","current","inst","hasValue","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","NODE_ENV","__REACT_DEVTOOLS_GLOBAL_HOOK__","registerInternalModuleStart","require$$0","useSyncExternalStoreWithSelector","registerInternalModuleStop","require$$1","isProduction","invariant","condition","message","provided","getRect","top","right","bottom","left","width","height","center","expand","target","expandBy","shrink","shrinkBy","noSpacing","createBox","_ref2","borderBox","_ref2$margin","margin","_ref2$border","border","_ref2$padding","padding","marginBox","paddingBox","contentBox","parse","raw","Number","original","change","shiftBy","shifted","withScroll","scroll","window","pageXOffset","pageYOffset","calculateBox","styles","marginTop","marginRight","marginBottom","marginLeft","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","getBox","el","getBoundingClientRect","getComputedStyle","rafSchd$1","lastArgs","frameId","wrapperFn","_len","_key","requestAnimationFrame","cancel","cancelAnimationFrame","_extends","bind","r","isProduction$1","spacesAndTabs","lineStartWithSpaces","clean$2","trim","getDevMessage","log","type","getFormattedMessage","warning","error","noop$2","bindEvents","bindings","sharedOptions","unbindings","binding","options","shared","fromBinding","getOptions","addEventListener","eventName","removeEventListener","unbind","prefix$1","RbdInvariant","ErrorBoundary","Component","constructor","super","callbacks","onWindowError","event","getCallbacks","isDragging","tryAbort","err","preventDefault","setCallbacks","componentDidMount","componentDidCatch","setState","componentWillUnmount","render","props","children","position","withLocation","destination","isInHomeList","droppableId","startPosition","endPosition","withCombine","combine","draggableId","returnedToStart","preset","start","update","location","reason","isEqual$2","first","areInputsEqual","newInputs","lastInputs","getResult","inputs","initial","isFirstRun","committed","cache","Boolean","useCallback","origin","point1","point2","isEqual$1","negate","point","patch","line","otherValue","distance","sqrt","closest$1","points","offsetByPosition","spacing","getCorners","clip","frame","shouldClipSubject","executeClip","subject","pageMarginBox","getSubject","page","withPlaceholder","axis","scrolled","scroll$1","displacement","increased","increase","increasedBy","end","active","scrollDroppable","droppable","newScroll","scrollable","scrollDiff","scrollDisplacement","memoizeOne","resultFn","memoized","newArgs","lastThis","lastResult","clear","toDroppableMap","droppables","reduce","previous","descriptor","toDraggableMap","draggables","toDroppableList","toDraggableList","getDraggablesInsideDroppable","draggable","tryGetDestination","impact","at","tryGetCombine","removeDraggableFromList","remove","list","isHomeOf","noDisplacedBy","emptyGroups","invisible","visible","all","noImpact","displaced","displacedBy","isWithin","lowerBound","upperBound","isPartiallyVisibleThroughFrame","isWithinVertical","isWithinHorizontal","isPartiallyVisibleVertically","isPartiallyVisibleHorizontally","isBiggerVertically","isBiggerHorizontally","isTotallyVisibleThroughFrame","vertical","crossAxisLine","size","crossAxisStart","crossAxisEnd","crossAxisSize","horizontal","isVisible$1","toBeDisplaced","viewport","withDroppableDisplacement","isVisibleThroughFrameFn","displacedTarget","getDroppableDisplaced","isVisibleInDroppable","isVisibleInViewport","isTotallyVisible","getDisplacementGroups","afterDragging","forceShouldAnimate","last","groups","getTarget","shouldAnimate","getShouldAnimate","goAtEnd","insideDestination","inHomeList","newIndex","indexOfLastItem","getIndexOfLastItem","calculateReorderImpact","withoutDragging","sliceFrom","didStartAfterCritical","afterCritical","effected","distanceFromStartToBorderBoxCenter","box","getCrossAxisBorderBoxCenter","isMoving","goAfter","moveRelativeTo","goBefore","distanceFromEndToBorderBoxCenter","getPageBorderBoxCenterFromImpact","withoutDisplacement","getResultWithoutDroppableDisplacement","whenReordering","draggablePage","goIntoStart","moveInto","closestAfter","closest","withDisplacement","whenCombining","combineWith","displaceBy","getCombinedItemDisplacement","isDisplaced","scrollViewport","getDraggables$1","ids","getClientFromPageBorderBoxCenter","pageBorderBoxCenter","withoutPageScrollChange","withViewportDisplacement","client","isTotallyVisibleInNewLocation","newPageBorderBoxCenter","onlyOnMainAxis","changeNeeded","isTotallyVisibleOnAxis","getKnownActive","rect","getCurrentPageBorderBoxCenter","getCurrentPageBorderBox","getDisplacedBy","withMaxScroll","addPlaceholder","placeholderSize","requiredGrowth","getRequiredGrowthForPlaceholder","mode","availableSpace","needsToGrowBy","sum","dimension","added","oldFrameMaxScroll","maxScroll","newFrame","whatIsDraggedOver","isMovementAllowed","state","phase","isPositionInFrame","offsetRectByPosition","getIsDisplaced","getDragImpact","pageOffset","previousImpact","pageBorderBox","destinationId","candidates","isEnabled","childCenter","isContained","isStartContained","isEndContained","startCenter","sorted","candidate","getFurthestAway","getDroppableOver","pageBorderBoxWithDroppableScroll","withDroppableScroll","area","getCombineImpact","targetRect","isCombineEnabled","targetStart","targetEnd","child","childRect","didStartAfterCritical$1","getReorderImpact","atIndex","patchDroppableMap","updated","clientSelection","forcedClientSelection","dimensions","forcedDimensions","forcedViewport","forcedImpact","scrollJumpRequest","selection","borderBoxCenter","critical","newImpact","withUpdatedPlaceholders","recomputePlaceholders","cleaned","clearUnusedPlaceholder","lastDroppable","oldMaxScroll","removePlaceholder","isOver","patched","recompute","getDraggables","getClientBorderBoxCenter","refreshSnap","movementMode","needsVisibilityCheck","getLiftEffect","home","insideHome","rawIndex","inVirtualList","isSnapping","postDroppableChange","isEnabledChanging","patchDimensionMap","removeScrollJumpRequest","idle$2","completed","shouldFlush","reducer","action","payload","isWindowScrollAllowed","every","isFixedOnPage","onLiftImpact","publishWhileDraggingInVirtual","published","withScrollChange","modified","updatedAdditions","adjustAdditionsForScrollChanges","additions","updatedDroppables","windowScrollChange","getFrame","moved","offsetDraggable","offset$1","initialWindowScroll","placeholder","removals","wasOverId","wasOver","draggingState","isWaiting","moveInDirection","isActuallyOver","getDroppableOver$1","isMainAxisMovementAllowed","isMovingOnMainAxis","isMovingForward","previousPageBorderBoxCenter","moveToNextPlace","previousClientSelection","moveToNextCombine","getImpact","closestId","withoutDraggable","indexOfClosest","findIndex","proposedIndex","moveToNextIndex","wasAt","fromReorder","currentIndex","fromCombine","combineId","combineWithIndex","cautious","speculativelyIncrease","maxScrollChange","scrolledViewport","scrolledDroppable","withViewportScroll","tryGetVisible","moveCrossAxis","getBestCrossAxisDroppable","isBetweenSourceClipped","activeOfTarget","isBetweenDestinationClipped","contains","isWithinDroppable","getClosestDraggable","distanceToA","distanceToB","moveToNewDroppable","proposed","proposedPageBorderBoxCenter","isGoingBeforeTarget","relativeTo","dropDuration","newHomeClientOffset","guard","predicate","publishWhileDragging","collectionStarting","updateDroppableScroll","updateDroppableIsEnabled","updateDroppableIsCombineEnabled","move","moveUp","moveDown","moveRight","moveLeft","completeDrop","drop","curves","timings","outOfTheWay","minDropTime","maxDropTime","outOfTheWayTiming","transitions","fluid","snap","timing","moveTo","transforms","dropTimeRange","dropMiddleware","getState","dispatch","didDropInsideDroppable","getDropImpact","lastImpact","getNewHomeClientOffset","newClientCenter","getDropDuration","distance$1","animateDrop","getWindowScroll","scrollListener","store","listener","onWindowScroll","scheduled","rafSchd","passive","capture","document","getWindowScrollBinding","isActive","stop","getScrollListener","shouldStop$1","withTimings","getDragStart","execute","responder","announce","getDefaultMessage","willExpire","wasCalled","isExpired","timeoutId","setTimeout","clearTimeout","getExpiringAnnounce","dropAnimationFinishMiddleware","dropAnimationFlushOnScrollMiddleware","once","pendingDrop","postActionState","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","getMaxScroll","scrollHeight","scrollWidth","getDocumentElement","doc","documentElement","getMaxWindowScroll","clientWidth","clientHeight","shouldPublishUpdate","registry","dragging","entry","getById","canStartDrag","scrollWindow","scrollBy","getScrollableDroppables","defaultAutoScrollerOptions","startFromPercentage","maxScrollAtPercentage","maxPixelScroll","ease","percentage","durationDampening","stopDampeningAt","accelerateAt","disabled","getPercentage","startOfRange","endOfRange","range","getValue","distanceToEdge","dragStartTime","shouldUseTimeDampening","getAutoScrollerOptions","getValueFromDistance","autoScrollerOptions","startScrollingFrom","maxScrollValueAt","percentageFromMaxScrollValueAt","dampenValueByTime","proposedScroll","stopAt","runTime","betweenAccelerateAtAndStopAtPercentage","getScrollOnAxis","container","distanceToEdges","getDistanceThresholds","clean","getScroll$1","required","limited","adjustForSizeLimits","isTooBigVertically","isTooBigHorizontally","smallestSigned","getOverlap","getRemainder","targetScroll","overlap","canPartiallyScroll","rawMax","smallestChange","canScrollWindow","canScrollDroppable","getWindowScrollChange","getBestScrollableDroppable","getScrollableDroppableOver","maybe","getDroppableScrollChange","dragHandle","contextId","scrollContainer","getStyles","rules","property","rule","useIsomorphicLayoutEffect","useLayoutEffect","getHead","head","querySelector","createStyleEl","nonce","setAttribute","querySelectorAll","parentNode","getWindowFromEl","ownerDocument","defaultView","isHtmlElement","HTMLElement","findDragHandle","possible","handle","getAttribute","createRegistry","entries","subscribers","notify","cb","findDraggableById","findDroppableById","register","uniqueId","unregister","findById","exists","getAllByType","splice","StoreContext","createContext","getBodyElement","body","visuallyHidden","useUniqueId","useId","AppContext","semver","getVersion","major","minor","suffix","useDev","useHook","useDevSetupWarning","usePrevious","ref","tab","enter","pageUp","pageDown","preventedKeys","preventStandardKeyEvents","keyCode","supportedEventName","idle$1","noop$1","scrollJumpKeys","idle","interactiveTagNames","isAnInteractiveElement","parent","includes","tagName","attribute","parentElement","isEventInInteractiveElement","getBorderBoxCenterPosition","supportedMatchesName","Element","closestPonyfill","expected","isLockActive","shouldWarn","canStart","lockAPI","isClaimed","defaultSensors","api","phaseRef","unbindEventsRef","startCaptureBinding","defaultPrevented","button","ctrlKey","metaKey","shiftKey","altKey","findClosestDraggableId","actions","tryGetLock","sourceEvent","clientX","clientY","startPendingDrag","preventForcePressBinding","findOptionsForDraggable","shouldRespectForcePress","canGetLock","listenForCapture","shouldBlockNextClick","abort","bindCapturingEvents","getPhase","setPhase","fluidLift","getCaptureBindings","preDrag","isCapturing","snapLift","getDraggingBindings","touch","touches","longPressTimerId","unbindTarget","hasMoved","force","shouldRespect","getHandleBindings","unbindWindow","getWindowBindings","startDragging","useSensorMarshal","customSensors","enableDefaultSensors","useSensors","lock","release","claim","abandon","newLock","tryAbandon","create","tryAbandonLock","forceStop","forceSensorStop","draggable$1","findDraggable","canDragInteractiveElements","getShouldRespectForcePress","tryDispatchWhenDragging","getAction","lift","finish","cleanup","lift$1","liftActionArgs","move$1","tryStart","getSelector","findClosestDragHandleFromEvent","tryGetClosestDraggableIdFromEvent","tryReleaseLock","isLockClaimed","sensorHooks","previousRef","getStore","lazyRef","App","sensors","dragHandleUsageInstructions","lazyStoreRef","checkReactVersion","peerDepValue","actualValue","peerDep","actual","isSatisfied","peerDependencies","doctype","publicId","checkDoctype","lastPropsRef","getResponders","onBeforeCapture","flushSync","onBeforeCapureCallback","onBeforeDragStart","onDragStart","onDragEnd","onDragUpdate","createResponders","createAutoScrollerOptions","getId","style","appendChild","removeChild","textContent","useAnnouncer","dragHandleUsageInstructionsId","text","getElementId","display","useHiddenTextElement","styleMarshal","context","dragHandle$1","grabCursor","always","resting","dropAnimating","transition","userCancel","getStyles$1","alwaysRef","dynamicRef","setDynamicStyle","setAlwaysStyle","dynamic","dropping","useStyleMarshal","lazyDispatch","marshalCallbacks","bindActionCreators","useRegistry","dimensionMarshal","createDimensionMarshal","collection","publisher","staging","collect","getDimension","getScrollWhileDragging","publish","createPublisher","subscriber","marshal","startPublishing","request","unsubscribe","getInitialPublish","scrollOptions","getViewport","windowScroll","getDimensionAndWatchScroll","stopPublishing","dragStopped","autoScroller","createAutoScroller","fluidScroller","createFluidScroller","scheduleWindowScroll","scheduleDroppableScroll","tryScroll","wasScrollNeeded","fakeScrollCallback","jumpScroll","createJumpScroller","droppableRemainder","scrollDroppableAsMuchAsItCan","getDroppableOverlap","whatTheDroppableCanScroll","windowRemainder","scrollWindowAsMuchAsItCan","getWindowOverlap","whatTheWindowCanScroll","moveByOffset","focusMarshal","entriesRef","recordRef","restoreFocusFrameRef","isMountedRef","focus","tryGiveFocus","tryGiveFocusTo","activeElement","tryShiftRecord","redirectTo","tryRestoreFocusRecorded","record","tryRecordFocus","focused","useFocusMarshal","createStore","createStore$1","applyMiddleware","dimensionMarshalStopper","shouldPublishImmediately","indexes","errors","formatted","checkIndexes","validateDimensions","shouldStop","autoScroll","isWatching","responders","getPublisher","asyncMarshal","getAsyncMarshal","timerId","flush","shallow","beforeCapture","beforeStart","lastCritical","lastLocation","lastCombine","hasCriticalChanged","isCriticalEqual","hasLocationChanged","areLocationsEqual","hasGroupingChanged","isCombineEqual","tryResetStore","getCanLift","getIsMovementAllowed","appContext","canLift","Provider","DragDropContext","getDraggingTransition","shouldAnimateDragMovement","getDraggingOpacity","isCombining","isDropAnimating","DroppableContext","checkIsValidInnerRef","useRequiredContext","Context","useContext","preventHtml5Dnd","isStrictEqual","whatIsDraggedOverFromResult","getSecondarySnapshot","combineTargetFor","isClone","dropAnimation","draggingOver","atRest","mapped","shouldAnimateDisplacement","snapshot","ConnectedDraggable","connect","makeMapStateToProps$1","draggingSelector","memoizedOffset","getMemoizedSnapshot","getMemoizedProps","ownProps","getCombineWithFromResult","curve","opacity","scale","getDraggableSelector","secondarySelector","getFallback","getProps","ownId","draggingId","visualDisplacement","isAfterCriticalInVirtualList","getSecondarySelector","dropAnimationFinished","areStatePropsEqual","setRef","getRef","dropAnimationFinishedAction","isInteger","useValidation$1","initialRef","useClonePropValidation","getDraggableRef","computedStyles","getDimension$1","publishedRef","isFirstPublishRef","useDraggablePublisher","dragHandleProps","tabIndex","role","onMoveEnd","propertyName","getShouldDraggingAnimate","transform","translate","boxSizing","zIndex","pointerEvents","getDraggingStyle","secondary","getStyle$1","innerRef","draggableProps","onTransitionEnd","rubric","Fragment","PrivateDraggable","isUsingCloneFor","PublicDraggable","isDragDisabled","disableInteractiveElementBlocking","isScroll","isAuto","isVisible","isEither","overflowX","overflowY","isElementScrollable","getClosestScrollable","isBodyScrollable","html","htmlStyle","isBoth","getScroll","scrollLeft","scrollTop","getIsFixed","immediate","delayed","getListenerOptions","getClosestScrollableFromDrag","env","closestScrollable","noop","Placeholder$1","memo","animateOpenTimerRef","tryClearAnimateOpenTimer","animate","onClose","isAnimatingOpenOnMount","setIsAnimatingOpenOnMount","onSizeChangeEnd","getStyle","getSize","flexShrink","flexGrow","isBoolean","runChecks","checks","check","isDropDisabled","ignoreContainerClipping","getDroppableRef","standard","getPlaceholderRef","virtual","renderClone","AnimateInOut","PureComponent","on","getDerivedStateFromProps","defaultProps","getContainerForClone","attachDefaultPropsToOwnProps","defaultPropKey","mergedProps","isMatchingType","getDraggable","ConnectedDroppable","makeMapStateToProps","idleWithAnimation","shouldAnimatePlaceholder","isDraggingOver","draggingOverWith","draggingFromThisWith","isUsingPlaceholder","useClone","idleWithoutAnimation","getDraggableRubric","getMapProps","isDraggingOverForConsumer","isDraggingOverForImpact","ownPropsWithDefaultProps","wasCombining","updateViewportMaxScroll","stateProps","dispatchProps","droppableRef","placeholderRef","setDroppableRef","setPlaceholderRef","onPlaceholderTransitionEnd","whileDraggingRef","publishedDescriptorRef","memoizedUpdateScroll","getClosestScroll","updateScroll","scheduleScrollUpdate","onClosestScroll","getClient","targetRef","frameClient","scrollSize","getDroppableDimension","checkForNestedScrollContainers","removeAttribute","useDroppablePublisher","droppableProps","droppableContext","node","draggableProvided","draggableSnapshot","ReactDOM","createPortal","getClone","_presenceColors","DropZone","Droppable","backgroundColor","presenceColors","PresenceStatusEnum","Present","NotPresent","PresentElsewhere","makeCardStyles","alignItems","gap","theme","boxShadow","textOverflow","whiteSpace","OperatorCard","user","showPresence","presenceStatus","Draggable","Card","status","borderRadius","Typography","root","flexDirection","header","alignSelf","count","fontWeight","content","PoolColumn","operators","_useTranslation","CardHeader","title","slotProps","CardContent","WorkplaceColumn","isOvercapacity","assignment","badge","assignedCount","recommendedOperators","minHeight","workplace","color","assignedOperators","operator","grid","flexWrap","alignContent","AssignmentBoard","viewState","updateData","onMutationComplete","graphqlSdk","gqlClients","updatedData","movedUser","userId","fromPool","toPool","movedPresenceStatus","newUnassignedOperators","unassignedOperators","newWorkplaces","workplaces","wp","idx","op","sourceWp","destWp","getUpdatedData","unassignOperator","shiftId","validFrom","then","assignOperator","workplaceId","justifyContent","background","minWidth","textAlign","Navigation","onNavigate","IconButton","onClick","ChevronLeftIcon","ChevronRightIcon","WidgetView","settings","setViewState","initialState","fetchAssignmentsRef","workplaceAssignments","intervalId","setInterval","clearInterval","handleNavigate","newState","currentState","navigateState","Cache","maxSize","_maxSize","_size","_values","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","pathCache","setCache","getCache","propertyExpr","normalizePath","path","part","safe","segments","isQuoted","thisArg","iter","isBracket","shouldBeQuoted","str","hasLeadingNumber","hasSpecialChars","reWords","words","tinyCase","acc","toposort_1","edges","toposort","Set","edge","uniqueNodes","nodes","cursor","visited","outgoingEdges","Map","has","makeOutgoingEdges","nodesHash","makeNodesHash","visit","predecessors","nodeRep","JSON","stringify","outgoing","delete","errorToString","regExpToString","symbolToString","SYMBOL_REGEXP","printSimpleValue","quoteStrings","typeOf","printNumber","tag","printValue","_Symbol$toStringTag","_Symbol$hasInstance","_Symbol$toStringTag2","strReg","toStringTag","ValidationErrorNoStack","errorOrErrors","params","inner","ValidationError","isError","hasInstance","formatError","originalPath","disableStack","errorNoStack","captureStackTrace","mixed","default","defined","notNull","oneOf","notOneOf","notType","originalValue","castMsg","email","url","uuid","datetime","datetime_precision","datetime_offset","uppercase","lessThan","moreThan","positive","negative","integer","object","noUnknown","exact","tuple","spec","typeLen","types","boolean","isValue","isSchema","__isYupSchema__","Condition","fromOptions","refs","otherwise","TypeError","schema","_branch","branch","builder","resolve","Reference","isContext","isSibling","cast","describe","isRef","__isYupRef","isAbsent","createValidation","validate","panic","skipAbsent","abortEarly","disableStackTrace","resolveOptions","createError","overrides","nextParams","resolveParams","ctx","resolveMaybeRef","handleResult","validOrError","handleError","_result","sync","Promise","OPTIONS","getIn","lastPart","lastPartDebug","_part","isTuple","innerType","fields","parentPath","ReferenceSet","description","resolveAll","merge","newItems","removeItems","src","seen","copy","v","createStandardPath","currentSegment","inBrackets","inQuotes","char","issuesFromValidationError","_error$inner","createStandardIssues","flatMap","Schema","deps","tests","conditions","_mutate","internalTests","_whitelist","_blacklist","exclusiveTests","_typeCheck","withMutation","typeError","strip","recursive","nullable","optional","coerce","nonNullable","_type","getPrototypeOf","meta","before","combined","mergedSpec","isType","prevSchema","_options$strict","_options$abortEarly","_options$recursive","_options$disableStack","resolvedSchema","allowOptionality","assert","_cast","formattedValue","formattedResult","rawValue","prevValue","getDefault","_validate","_value","initialTests","runTests","initialErrors","runOptions","fired","panicOnce","nextOnce","nestedErrors","asNestedTest","originalParent","isIndex","testOptions","_options$disableStack2","reject","parsed","validated","validateSync","_options$disableStack3","isValidSync","_getDefault","defaultValue","def","nullability","optionality","notRequired","opts","isExclusive","exclusive","when","dep","enums","whiteList","valids","resolved","blacklist","invalids","vendor","issues","method","isoReg","parseDateStruct","_regexResult$7$length","_regexResult$","regexResult","toNumber","substring","precision","z","plusMinus","hourOffset","minuteOffset","rEmail","rUrl","rUUID","rIsoDateTime","isTrimmed","objStringTag","create$6","StringSchema","_raw","strValue","excludeEmptyString","search","allowOffset","struct","ensure","create$5","NumberSchema","isNaN$1","less","more","truncate","_method","avail","DateSchema","totalMinutesOffset","parseIsoDate","INVALID_DATE","prepareParam","param","_err$path","sortByKeyOrder","parseJson","deepPartial","partial","fieldSchema","setFields","nextArray","unknown","known","defaultSort","create$3","ObjectSchema","_sortErrors","_nodes","_excludedEdges","shape","_options$stripUnknown","stripUnknown","intermediateValue","innerOptions","__validating","isChanged","inputValue","fieldValue","fieldSpec","objectErrors","fieldErrors","nextFields","schemaOrRef","dft","_innerOptions","excludedEdges","excludes","addNode","depPath","reverse","sortFields","pick","picked","omit","remaining","fromGetter","newObj","deepHas","p","pop","json","unknownKeys","noAllow","allow","transformKeys","camelCase","snakeCase","constantCase","_innerOptions2","getSettingsFormProps","custom","initialValues","validationSchema","yup","wsUrl","widgetProps","_objectWithoutPropertiesLoose","_excluded","_useGqlClients","useGqlClients","gqlWsClient","widgetData","setWidgetData","_ref3","BaseWidget"],"mappings":"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"}
|