andoncloud-workplaces-status-widget 1.2.0 → 1.2.2

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/graphql/jsutils/nodejsCustomInspectSymbol.mjs","../node_modules/graphql/jsutils/defineInspect.mjs","../node_modules/graphql/jsutils/invariant.mjs","../node_modules/graphql/language/ast.mjs","../node_modules/graphql/jsutils/inspect.mjs","../node_modules/graphql/language/visitor.mjs","../node_modules/graphql/language/printer.mjs","../node_modules/graphql/language/blockString.mjs","../src/locales/index.ts","../src/version.ts","../src/components/TabPanel/index.tsx","../src/components/SettingsFormContent/index.tsx","../node_modules/moment/moment.js","../src/components/StatusCard/helpers.ts","../node_modules/moment-duration-format/lib/moment-duration-format.js","../node_modules/react-text-truncate/lib/index.js","../src/components/StatusCard/MetricCard/index.tsx","../src/components/StatusCard/MetricCard/styles.ts","../src/components/StatusCard/index.tsx","../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":["// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\nvar nodejsCustomInspectSymbol = typeof Symbol === 'function' && typeof Symbol.for === 'function' ? Symbol.for('nodejs.util.inspect.custom') : undefined;\nexport default nodejsCustomInspectSymbol;\n","import invariant from \"./invariant.mjs\";\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\n/**\n * The `defineInspect()` function defines `inspect()` prototype method as alias of `toJSON`\n */\n\nexport default function defineInspect(classObject) {\n var fn = classObject.prototype.toJSON;\n typeof fn === 'function' || invariant(0);\n classObject.prototype.inspect = fn; // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\n if (nodejsCustomInspectSymbol) {\n classObject.prototype[nodejsCustomInspectSymbol] = fn;\n }\n}\n","export default function invariant(condition, message) {\n var booleanCondition = Boolean(condition); // istanbul ignore else (See transformation done in './resources/inlineInvariant.js')\n\n if (!booleanCondition) {\n throw new Error(message != null ? message : 'Unexpected invariant triggered.');\n }\n}\n","import defineInspect from \"../jsutils/defineInspect.mjs\";\n\n/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport var Location = /*#__PURE__*/function () {\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The Token at which this Node begins.\n */\n\n /**\n * The Token at which this Node ends.\n */\n\n /**\n * The Source document the AST represents.\n */\n function Location(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n }\n\n var _proto = Location.prototype;\n\n _proto.toJSON = function toJSON() {\n return {\n start: this.start,\n end: this.end\n };\n };\n\n return Location;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Location);\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport var Token = /*#__PURE__*/function () {\n /**\n * The kind of Token.\n */\n\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The 1-indexed line number on which this Token appears.\n */\n\n /**\n * The 1-indexed column number at which this Token begins.\n */\n\n /**\n * For non-punctuation tokens, represents the interpreted value of the token.\n */\n\n /**\n * Tokens exist as nodes in a double-linked-list amongst all tokens\n * including ignored tokens. <SOF> is always the first node and <EOF>\n * the last.\n */\n function Token(kind, start, end, line, column, prev, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column;\n this.value = value;\n this.prev = prev;\n this.next = null;\n }\n\n var _proto2 = Token.prototype;\n\n _proto2.toJSON = function toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column\n };\n };\n\n return Token;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Token);\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n return maybeNode != null && typeof maybeNode.kind === 'string';\n}\n/**\n * The list of all possible AST node types.\n */\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-disable flowtype/no-weak-types */\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\nvar MAX_ARRAY_LENGTH = 10;\nvar MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport default function inspect(value) {\n return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n switch (_typeof(value)) {\n case 'string':\n return JSON.stringify(value);\n\n case 'function':\n return value.name ? \"[function \".concat(value.name, \"]\") : '[function]';\n\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n return formatObjectValue(value, seenValues);\n\n default:\n return String(value);\n }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n if (previouslySeenValues.indexOf(value) !== -1) {\n return '[Circular]';\n }\n\n var seenValues = [].concat(previouslySeenValues, [value]);\n var customInspectFn = getCustomFn(value);\n\n if (customInspectFn !== undefined) {\n var customValue = customInspectFn.call(value); // check for infinite recursion\n\n if (customValue !== value) {\n return typeof customValue === 'string' ? customValue : formatValue(customValue, seenValues);\n }\n } else if (Array.isArray(value)) {\n return formatArray(value, seenValues);\n }\n\n return formatObject(value, seenValues);\n}\n\nfunction formatObject(object, seenValues) {\n var keys = Object.keys(object);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[' + getObjectTag(object) + ']';\n }\n\n var properties = keys.map(function (key) {\n var value = formatValue(object[key], seenValues);\n return key + ': ' + value;\n });\n return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n if (array.length === 0) {\n return '[]';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[Array]';\n }\n\n var len = Math.min(MAX_ARRAY_LENGTH, array.length);\n var remaining = array.length - len;\n var items = [];\n\n for (var i = 0; i < len; ++i) {\n items.push(formatValue(array[i], seenValues));\n }\n\n if (remaining === 1) {\n items.push('... 1 more item');\n } else if (remaining > 1) {\n items.push(\"... \".concat(remaining, \" more items\"));\n }\n\n return '[' + items.join(', ') + ']';\n}\n\nfunction getCustomFn(object) {\n var customInspectFn = object[String(nodejsCustomInspectSymbol)];\n\n if (typeof customInspectFn === 'function') {\n return customInspectFn;\n }\n\n if (typeof object.inspect === 'function') {\n return object.inspect;\n }\n}\n\nfunction getObjectTag(object) {\n var tag = Object.prototype.toString.call(object).replace(/^\\[object /, '').replace(/]$/, '');\n\n if (tag === 'Object' && typeof object.constructor === 'function') {\n var name = object.constructor.name;\n\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n }\n\n return tag;\n}\n","import inspect from \"../jsutils/inspect.mjs\";\nimport { isNode } from \"./ast.mjs\";\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\nexport var QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: ['name', // Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n 'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['description', 'directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n InterfaceTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields']\n};\nexport var BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * const editedAST = visit(ast, {\n * enter(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: skip visiting this node\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * },\n * leave(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: no action\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * }\n * });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * visit(ast, {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n * a specific kind.\n *\n * visit(ast, {\n * Kind: {\n * enter(node) {\n * // enter the \"Kind\" node\n * }\n * leave(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * visit(ast, {\n * enter(node) {\n * // enter any node\n * },\n * leave(node) {\n * // leave any node\n * }\n * })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n * visit(ast, {\n * enter: {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * },\n * leave: {\n * Kind(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n */\n\nexport function visit(root, visitor) {\n var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n /* eslint-disable no-undef-init */\n var stack = undefined;\n var inArray = Array.isArray(root);\n var keys = [root];\n var index = -1;\n var edits = [];\n var node = undefined;\n var key = undefined;\n var parent = undefined;\n var path = [];\n var ancestors = [];\n var newRoot = root;\n /* eslint-enable no-undef-init */\n\n do {\n index++;\n var isLeaving = index === keys.length;\n var isEdited = isLeaving && edits.length !== 0;\n\n if (isLeaving) {\n key = ancestors.length === 0 ? undefined : path[path.length - 1];\n node = parent;\n parent = ancestors.pop();\n\n if (isEdited) {\n if (inArray) {\n node = node.slice();\n } else {\n var clone = {};\n\n for (var _i2 = 0, _Object$keys2 = Object.keys(node); _i2 < _Object$keys2.length; _i2++) {\n var k = _Object$keys2[_i2];\n clone[k] = node[k];\n }\n\n node = clone;\n }\n\n var editOffset = 0;\n\n for (var ii = 0; ii < edits.length; ii++) {\n var editKey = edits[ii][0];\n var editValue = edits[ii][1];\n\n if (inArray) {\n editKey -= editOffset;\n }\n\n if (inArray && editValue === null) {\n node.splice(editKey, 1);\n editOffset++;\n } else {\n node[editKey] = editValue;\n }\n }\n }\n\n index = stack.index;\n keys = stack.keys;\n edits = stack.edits;\n inArray = stack.inArray;\n stack = stack.prev;\n } else {\n key = parent ? inArray ? index : keys[index] : undefined;\n node = parent ? parent[key] : newRoot;\n\n if (node === null || node === undefined) {\n continue;\n }\n\n if (parent) {\n path.push(key);\n }\n }\n\n var result = void 0;\n\n if (!Array.isArray(node)) {\n if (!isNode(node)) {\n throw new Error(\"Invalid AST Node: \".concat(inspect(node), \".\"));\n }\n\n var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n\n if (visitFn) {\n result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n if (result === BREAK) {\n break;\n }\n\n if (result === false) {\n if (!isLeaving) {\n path.pop();\n continue;\n }\n } else if (result !== undefined) {\n edits.push([key, result]);\n\n if (!isLeaving) {\n if (isNode(result)) {\n node = result;\n } else {\n path.pop();\n continue;\n }\n }\n }\n }\n }\n\n if (result === undefined && isEdited) {\n edits.push([key, node]);\n }\n\n if (isLeaving) {\n path.pop();\n } else {\n var _visitorKeys$node$kin;\n\n stack = {\n inArray: inArray,\n index: index,\n keys: keys,\n edits: edits,\n prev: stack\n };\n inArray = Array.isArray(node);\n keys = inArray ? node : (_visitorKeys$node$kin = visitorKeys[node.kind]) !== null && _visitorKeys$node$kin !== void 0 ? _visitorKeys$node$kin : [];\n index = -1;\n edits = [];\n\n if (parent) {\n ancestors.push(parent);\n }\n\n parent = node;\n }\n } while (stack !== undefined);\n\n if (edits.length !== 0) {\n newRoot = edits[edits.length - 1][1];\n }\n\n return newRoot;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nexport function visitInParallel(visitors) {\n var skipping = new Array(visitors.length);\n return {\n enter: function enter(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n false);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === false) {\n skipping[i] = node;\n } else if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined) {\n return result;\n }\n }\n }\n }\n },\n leave: function leave(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n true);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined && result !== false) {\n return result;\n }\n }\n } else if (skipping[i] === node) {\n skipping[i] = null;\n }\n }\n }\n };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n var kindVisitor = visitor[kind];\n\n if (kindVisitor) {\n if (!isLeaving && typeof kindVisitor === 'function') {\n // { Kind() {} }\n return kindVisitor;\n }\n\n var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n\n if (typeof kindSpecificVisitor === 'function') {\n // { Kind: { enter() {}, leave() {} } }\n return kindSpecificVisitor;\n }\n } else {\n var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n\n if (specificVisitor) {\n if (typeof specificVisitor === 'function') {\n // { enter() {}, leave() {} }\n return specificVisitor;\n }\n\n var specificKindVisitor = specificVisitor[kind];\n\n if (typeof specificKindVisitor === 'function') {\n // { enter: { Kind() {} }, leave: { Kind() {} } }\n return specificKindVisitor;\n }\n }\n }\n}\n","import { visit } from \"./visitor.mjs\";\nimport { printBlockString } from \"./blockString.mjs\";\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n return visit(ast, {\n leave: printDocASTReducer\n });\n}\nvar MAX_LINE_LENGTH = 80; // TODO: provide better type coverage in future\n\nvar printDocASTReducer = {\n Name: function Name(node) {\n return node.value;\n },\n Variable: function Variable(node) {\n return '$' + node.name;\n },\n // Document\n Document: function Document(node) {\n return join(node.definitions, '\\n\\n') + '\\n';\n },\n OperationDefinition: function OperationDefinition(node) {\n var op = node.operation;\n var name = node.name;\n var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n var directives = join(node.directives, ' ');\n var selectionSet = node.selectionSet; // Anonymous queries with no directives or variable definitions can use\n // the query short form.\n\n return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n },\n VariableDefinition: function VariableDefinition(_ref) {\n var variable = _ref.variable,\n type = _ref.type,\n defaultValue = _ref.defaultValue,\n directives = _ref.directives;\n return variable + ': ' + type + wrap(' = ', defaultValue) + wrap(' ', join(directives, ' '));\n },\n SelectionSet: function SelectionSet(_ref2) {\n var selections = _ref2.selections;\n return block(selections);\n },\n Field: function Field(_ref3) {\n var alias = _ref3.alias,\n name = _ref3.name,\n args = _ref3.arguments,\n directives = _ref3.directives,\n selectionSet = _ref3.selectionSet;\n var prefix = wrap('', alias, ': ') + name;\n var argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n if (argsLine.length > MAX_LINE_LENGTH) {\n argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n }\n\n return join([argsLine, join(directives, ' '), selectionSet], ' ');\n },\n Argument: function Argument(_ref4) {\n var name = _ref4.name,\n value = _ref4.value;\n return name + ': ' + value;\n },\n // Fragments\n FragmentSpread: function FragmentSpread(_ref5) {\n var name = _ref5.name,\n directives = _ref5.directives;\n return '...' + name + wrap(' ', join(directives, ' '));\n },\n InlineFragment: function InlineFragment(_ref6) {\n var typeCondition = _ref6.typeCondition,\n directives = _ref6.directives,\n selectionSet = _ref6.selectionSet;\n return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n },\n FragmentDefinition: function FragmentDefinition(_ref7) {\n var name = _ref7.name,\n typeCondition = _ref7.typeCondition,\n variableDefinitions = _ref7.variableDefinitions,\n directives = _ref7.directives,\n selectionSet = _ref7.selectionSet;\n return (// Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n \"fragment \".concat(name).concat(wrap('(', join(variableDefinitions, ', '), ')'), \" \") + \"on \".concat(typeCondition, \" \").concat(wrap('', join(directives, ' '), ' ')) + selectionSet\n );\n },\n // Value\n IntValue: function IntValue(_ref8) {\n var value = _ref8.value;\n return value;\n },\n FloatValue: function FloatValue(_ref9) {\n var value = _ref9.value;\n return value;\n },\n StringValue: function StringValue(_ref10, key) {\n var value = _ref10.value,\n isBlockString = _ref10.block;\n return isBlockString ? printBlockString(value, key === 'description' ? '' : ' ') : JSON.stringify(value);\n },\n BooleanValue: function BooleanValue(_ref11) {\n var value = _ref11.value;\n return value ? 'true' : 'false';\n },\n NullValue: function NullValue() {\n return 'null';\n },\n EnumValue: function EnumValue(_ref12) {\n var value = _ref12.value;\n return value;\n },\n ListValue: function ListValue(_ref13) {\n var values = _ref13.values;\n return '[' + join(values, ', ') + ']';\n },\n ObjectValue: function ObjectValue(_ref14) {\n var fields = _ref14.fields;\n return '{' + join(fields, ', ') + '}';\n },\n ObjectField: function ObjectField(_ref15) {\n var name = _ref15.name,\n value = _ref15.value;\n return name + ': ' + value;\n },\n // Directive\n Directive: function Directive(_ref16) {\n var name = _ref16.name,\n args = _ref16.arguments;\n return '@' + name + wrap('(', join(args, ', '), ')');\n },\n // Type\n NamedType: function NamedType(_ref17) {\n var name = _ref17.name;\n return name;\n },\n ListType: function ListType(_ref18) {\n var type = _ref18.type;\n return '[' + type + ']';\n },\n NonNullType: function NonNullType(_ref19) {\n var type = _ref19.type;\n return type + '!';\n },\n // Type System Definitions\n SchemaDefinition: addDescription(function (_ref20) {\n var directives = _ref20.directives,\n operationTypes = _ref20.operationTypes;\n return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n }),\n OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n var operation = _ref21.operation,\n type = _ref21.type;\n return operation + ': ' + type;\n },\n ScalarTypeDefinition: addDescription(function (_ref22) {\n var name = _ref22.name,\n directives = _ref22.directives;\n return join(['scalar', name, join(directives, ' ')], ' ');\n }),\n ObjectTypeDefinition: addDescription(function (_ref23) {\n var name = _ref23.name,\n interfaces = _ref23.interfaces,\n directives = _ref23.directives,\n fields = _ref23.fields;\n return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n FieldDefinition: addDescription(function (_ref24) {\n var name = _ref24.name,\n args = _ref24.arguments,\n type = _ref24.type,\n directives = _ref24.directives;\n return name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + ': ' + type + wrap(' ', join(directives, ' '));\n }),\n InputValueDefinition: addDescription(function (_ref25) {\n var name = _ref25.name,\n type = _ref25.type,\n defaultValue = _ref25.defaultValue,\n directives = _ref25.directives;\n return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n }),\n InterfaceTypeDefinition: addDescription(function (_ref26) {\n var name = _ref26.name,\n interfaces = _ref26.interfaces,\n directives = _ref26.directives,\n fields = _ref26.fields;\n return join(['interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n UnionTypeDefinition: addDescription(function (_ref27) {\n var name = _ref27.name,\n directives = _ref27.directives,\n types = _ref27.types;\n return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n }),\n EnumTypeDefinition: addDescription(function (_ref28) {\n var name = _ref28.name,\n directives = _ref28.directives,\n values = _ref28.values;\n return join(['enum', name, join(directives, ' '), block(values)], ' ');\n }),\n EnumValueDefinition: addDescription(function (_ref29) {\n var name = _ref29.name,\n directives = _ref29.directives;\n return join([name, join(directives, ' ')], ' ');\n }),\n InputObjectTypeDefinition: addDescription(function (_ref30) {\n var name = _ref30.name,\n directives = _ref30.directives,\n fields = _ref30.fields;\n return join(['input', name, join(directives, ' '), block(fields)], ' ');\n }),\n DirectiveDefinition: addDescription(function (_ref31) {\n var name = _ref31.name,\n args = _ref31.arguments,\n repeatable = _ref31.repeatable,\n locations = _ref31.locations;\n return 'directive @' + name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + (repeatable ? ' repeatable' : '') + ' on ' + join(locations, ' | ');\n }),\n SchemaExtension: function SchemaExtension(_ref32) {\n var directives = _ref32.directives,\n operationTypes = _ref32.operationTypes;\n return join(['extend schema', join(directives, ' '), block(operationTypes)], ' ');\n },\n ScalarTypeExtension: function ScalarTypeExtension(_ref33) {\n var name = _ref33.name,\n directives = _ref33.directives;\n return join(['extend scalar', name, join(directives, ' ')], ' ');\n },\n ObjectTypeExtension: function ObjectTypeExtension(_ref34) {\n var name = _ref34.name,\n interfaces = _ref34.interfaces,\n directives = _ref34.directives,\n fields = _ref34.fields;\n return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n InterfaceTypeExtension: function InterfaceTypeExtension(_ref35) {\n var name = _ref35.name,\n interfaces = _ref35.interfaces,\n directives = _ref35.directives,\n fields = _ref35.fields;\n return join(['extend interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n UnionTypeExtension: function UnionTypeExtension(_ref36) {\n var name = _ref36.name,\n directives = _ref36.directives,\n types = _ref36.types;\n return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n },\n EnumTypeExtension: function EnumTypeExtension(_ref37) {\n var name = _ref37.name,\n directives = _ref37.directives,\n values = _ref37.values;\n return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n },\n InputObjectTypeExtension: function InputObjectTypeExtension(_ref38) {\n var name = _ref38.name,\n directives = _ref38.directives,\n fields = _ref38.fields;\n return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n }\n};\n\nfunction addDescription(cb) {\n return function (node) {\n return join([node.description, cb(node)], '\\n');\n };\n}\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\n\nfunction join(maybeArray) {\n var _maybeArray$filter$jo;\n\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (_maybeArray$filter$jo = maybeArray === null || maybeArray === void 0 ? void 0 : maybeArray.filter(function (x) {\n return x;\n }).join(separator)) !== null && _maybeArray$filter$jo !== void 0 ? _maybeArray$filter$jo : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\n\n\nfunction block(array) {\n return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\n\nfunction wrap(start, maybeString) {\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n return maybeString != null && maybeString !== '' ? start + maybeString + end : '';\n}\n\nfunction indent(str) {\n return wrap(' ', str.replace(/\\n/g, '\\n '));\n}\n\nfunction isMultiline(str) {\n return str.indexOf('\\n') !== -1;\n}\n\nfunction hasMultilineItems(maybeArray) {\n return maybeArray != null && maybeArray.some(isMultiline);\n}\n","/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\nexport function dedentBlockStringValue(rawString) {\n // Expand a block string's raw value into independent lines.\n var lines = rawString.split(/\\r\\n|[\\n\\r]/g); // Remove common indentation from all lines but first.\n\n var commonIndent = getBlockStringIndentation(rawString);\n\n if (commonIndent !== 0) {\n for (var i = 1; i < lines.length; i++) {\n lines[i] = lines[i].slice(commonIndent);\n }\n } // Remove leading and trailing blank lines.\n\n\n var startLine = 0;\n\n while (startLine < lines.length && isBlank(lines[startLine])) {\n ++startLine;\n }\n\n var endLine = lines.length;\n\n while (endLine > startLine && isBlank(lines[endLine - 1])) {\n --endLine;\n } // Return a string of the lines joined with U+000A.\n\n\n return lines.slice(startLine, endLine).join('\\n');\n}\n\nfunction isBlank(str) {\n for (var i = 0; i < str.length; ++i) {\n if (str[i] !== ' ' && str[i] !== '\\t') {\n return false;\n }\n }\n\n return true;\n}\n/**\n * @internal\n */\n\n\nexport function getBlockStringIndentation(value) {\n var _commonIndent;\n\n var isFirstLine = true;\n var isEmptyLine = true;\n var indent = 0;\n var commonIndent = null;\n\n for (var i = 0; i < value.length; ++i) {\n switch (value.charCodeAt(i)) {\n case 13:\n // \\r\n if (value.charCodeAt(i + 1) === 10) {\n ++i; // skip \\r\\n as one symbol\n }\n\n // falls through\n\n case 10:\n // \\n\n isFirstLine = false;\n isEmptyLine = true;\n indent = 0;\n break;\n\n case 9: // \\t\n\n case 32:\n // <space>\n ++indent;\n break;\n\n default:\n if (isEmptyLine && !isFirstLine && (commonIndent === null || indent < commonIndent)) {\n commonIndent = indent;\n }\n\n isEmptyLine = false;\n }\n }\n\n return (_commonIndent = commonIndent) !== null && _commonIndent !== void 0 ? _commonIndent : 0;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value) {\n var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var preferMultipleLines = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var isSingleLine = value.indexOf('\\n') === -1;\n var hasLeadingSpace = value[0] === ' ' || value[0] === '\\t';\n var hasTrailingQuote = value[value.length - 1] === '\"';\n var hasTrailingSlash = value[value.length - 1] === '\\\\';\n var printAsMultipleLines = !isSingleLine || hasTrailingQuote || hasTrailingSlash || preferMultipleLines;\n var result = ''; // Format a multi-line block quote to account for leading space.\n\n if (printAsMultipleLines && !(isSingleLine && hasLeadingSpace)) {\n result += '\\n' + indentation;\n }\n\n result += indentation ? value.replace(/\\n/g, '\\n' + indentation) : value;\n\n if (printAsMultipleLines) {\n result += '\\n';\n }\n\n return '\"\"\"' + result.replace(/\"\"\"/g, '\\\\\"\"\"') + '\"\"\"';\n}\n","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","export const LIBRARY_VERSION = '1.2.0';","import React from 'react';\n\nimport { Box } from '@mui/material';\n\ninterface TabPanelProps {\n children: React.ReactNode;\n value: number;\n index: number;\n}\n\nconst TabPanel: React.FC<TabPanelProps> = ({ children, value, index }) => {\n return (\n <Box role=\"tabpanel\" hidden={value !== index} id={`tabpanel-${index}`} sx={{ mt: 2 }}>\n {children}\n </Box>\n );\n};\n\nexport default TabPanel;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Checkbox, List, ListItem, ListItemButton, ListItemIcon, ListItemText, Tab, Tabs } from '@mui/material';\nimport { SortableSelect } from 'andoncloud-dashboard-toolkit';\nimport { SettingsFormContentProps } from 'andoncloud-widget-base';\n\nimport { WidgetData, WidgetSettings } from '@/types';\n\nimport TabPanel from '../TabPanel';\n\nconst SettingsFormContent: React.FC<SettingsFormContentProps<WidgetData, WidgetSettings>> = ({ data, formProps }) => {\n const [selectedTab, setSelectedTab] = useState<number>(0);\n const { t } = useTranslation();\n\n const statusOptions = useMemo(\n () => [\n { label: t('Green'), value: 'green' },\n { label: t('Yellow'), value: 'yellow' },\n { label: t('Red'), value: 'red' },\n { label: t('Gray'), value: 'gray' },\n ],\n [t],\n );\n\n useEffect(() => {\n if (!formProps.values.workplacesIds?.length && data?.workplaces) {\n formProps.setFieldValue(\n 'workplacesIds',\n data.workplaces.map(({ id }) => id),\n );\n }\n }, [formProps, data?.workplaces]);\n\n const handleToggleWorkplaceSelected = (workplaceId: string) => {\n const selectedWorkplacesIds = formProps.values.workplacesIds || [];\n\n if (selectedWorkplacesIds.indexOf(workplaceId) !== -1) {\n formProps.setFieldValue(\n 'workplacesIds',\n selectedWorkplacesIds.filter((id) => id !== workplaceId),\n );\n } else {\n formProps.setFieldValue('workplacesIds', [...selectedWorkplacesIds, workplaceId]);\n }\n };\n\n return (\n <React.Fragment>\n <Tabs\n value={selectedTab}\n onChange={(_, value) => setSelectedTab(value)}\n centered\n sx={{\n borderBottom: '1px solid rgba(255,255,255,0.1)',\n '.MuiTab-root': {\n color: 'rgba(255,255,255,0.5)',\n '&.Mui-selected': {\n color: 'white',\n },\n },\n }}\n >\n <Tab label={t('Statuses')} />\n <Tab label={t('Workplaces')} />\n </Tabs>\n <TabPanel value={selectedTab} index={0}>\n <SortableSelect\n placeholder={`${t('Select and arange the order')}...`}\n options={statusOptions}\n selected={formProps.values.statusColors || []}\n onChange={(selected) => formProps.setFieldValue('statusColors', [...selected])}\n />\n </TabPanel>\n <TabPanel value={selectedTab} index={1}>\n <List sx={{ color: 'white', maxHeight: '500px', overflowY: 'scroll' }}>\n {data.workplaces?.map((workplace) => (\n <ListItem key={workplace.id}>\n <ListItemButton role={undefined} onClick={() => handleToggleWorkplaceSelected(workplace.id)} dense>\n <ListItemIcon>\n <Checkbox\n edge=\"start\"\n checked={(formProps.values.workplacesIds || []).indexOf(workplace.id) !== -1}\n tabIndex={-1}\n disableRipple\n />\n </ListItemIcon>\n <ListItemText id={workplace.id} primary={workplace.name} />\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n </TabPanel>\n </React.Fragment>\n );\n};\n\nexport default SettingsFormContent;\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 { ListStatusChangesQuery } from 'andoncloud-dashboard-toolkit';\nimport moment from 'moment';\n\nexport const getDuration = (statusChange: ListStatusChangesQuery['statusChanges'][0]) => {\n if (statusChange.finishedAt && statusChange.startedAt) {\n return Math.abs(moment(statusChange.startedAt).diff(moment(statusChange.finishedAt), 'seconds'));\n }\n return Math.abs(moment().diff(moment(statusChange.startedAt), 'seconds'));\n};\n","/*! Moment Duration Format v2.2.2\n * https://github.com/jsmreese/moment-duration-format\n * Date: 2018-02-16\n *\n * Duration format plugin function for the Moment.js library\n * http://momentjs.com/\n *\n * Copyright 2018 John Madhavan-Reese\n * Released under the MIT license\n */\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['moment'], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but only CommonJS-like\n // enviroments that support module.exports, like Node.\n try {\n module.exports = factory(require('moment'));\n } catch (e) {\n // If moment is not available, leave the setup up to the user.\n // Like when using moment-timezone or similar moment-based package.\n module.exports = factory;\n }\n }\n\n if (root) {\n // Globals.\n root.momentDurationFormatSetup = root.moment ? factory(root.moment) : factory;\n }\n})(this, function (moment) {\n // `Number#tolocaleString` is tested on plugin initialization.\n // If the feature test passes, `toLocaleStringWorks` will be set to `true` and the\n // native function will be used to generate formatted output. If the feature\n // test fails, the fallback format function internal to this plugin will be\n // used.\n var toLocaleStringWorks = false;\n\n // `Number#toLocaleString` rounds incorrectly for select numbers in Microsoft\n // environments (Edge, IE11, Windows Phone) and possibly other environments.\n // If the rounding test fails and `toLocaleString` will be used for formatting,\n // the plugin will \"pre-round\" number values using the fallback number format\n // function before passing them to `toLocaleString` for final formatting.\n var toLocaleStringRoundingWorks = false;\n\n // `Intl.NumberFormat#format` is tested on plugin initialization.\n // If the feature test passes, `intlNumberFormatRoundingWorks` will be set to\n // `true` and the native function will be used to generate formatted output.\n // If the feature test fails, either `Number#tolocaleString` (if\n // `toLocaleStringWorks` is `true`), or the fallback format function internal\n // to this plugin will be used.\n var intlNumberFormatWorks = false;\n\n // `Intl.NumberFormat#format` rounds incorrectly for select numbers in Microsoft\n // environments (Edge, IE11, Windows Phone) and possibly other environments.\n // If the rounding test fails and `Intl.NumberFormat#format` will be used for\n // formatting, the plugin will \"pre-round\" number values using the fallback number\n // format function before passing them to `Intl.NumberFormat#format` for final\n // formatting.\n var intlNumberFormatRoundingWorks = false;\n\n // Token type names in order of descending magnitude.\n var types = \"escape years months weeks days hours minutes seconds milliseconds general\".split(\" \");\n\n var bubbles = [\n {\n type: \"seconds\",\n targets: [\n { type: \"minutes\", value: 60 },\n { type: \"hours\", value: 3600 },\n { type: \"days\", value: 86400 },\n { type: \"weeks\", value: 604800 },\n { type: \"months\", value: 2678400 },\n { type: \"years\", value: 31536000 }\n ]\n },\n {\n type: \"minutes\",\n targets: [\n { type: \"hours\", value: 60 },\n { type: \"days\", value: 1440 },\n { type: \"weeks\", value: 10080 },\n { type: \"months\", value: 44640 },\n { type: \"years\", value: 525600 }\n ]\n },\n {\n type: \"hours\",\n targets: [\n { type: \"days\", value: 24 },\n { type: \"weeks\", value: 168 },\n { type: \"months\", value: 744 },\n { type: \"years\", value: 8760 }\n ]\n },\n {\n type: \"days\",\n targets: [\n { type: \"weeks\", value: 7 },\n { type: \"months\", value: 31 },\n { type: \"years\", value: 365 }\n ]\n },\n {\n type: \"months\",\n targets: [\n { type: \"years\", value: 12 }\n ]\n }\n ];\n\n // stringIncludes\n function stringIncludes(str, search) {\n if (search.length > str.length) {\n return false;\n }\n\n return str.indexOf(search) !== -1;\n }\n\n // repeatZero(qty)\n // Returns \"0\" repeated `qty` times.\n // `qty` must be a integer >= 0.\n function repeatZero(qty) {\n var result = \"\";\n\n while (qty) {\n result += \"0\";\n qty -= 1;\n }\n\n return result;\n }\n\n function stringRound(digits) {\n var digitsArray = digits.split(\"\").reverse();\n var i = 0;\n var carry = true;\n\n while (carry && i < digitsArray.length) {\n if (i) {\n if (digitsArray[i] === \"9\") {\n digitsArray[i] = \"0\";\n } else {\n digitsArray[i] = (parseInt(digitsArray[i], 10) + 1).toString();\n carry = false;\n }\n } else {\n if (parseInt(digitsArray[i], 10) < 5) {\n carry = false;\n }\n\n digitsArray[i] = \"0\";\n }\n\n i += 1;\n }\n\n if (carry) {\n digitsArray.push(\"1\");\n }\n\n return digitsArray.reverse().join(\"\");\n }\n\n // cachedNumberFormat\n // Returns an `Intl.NumberFormat` instance for the given locale and configuration.\n // On first use of a particular configuration, the instance is cached for fast\n // repeat access.\n function cachedNumberFormat(locale, options) {\n // Create a sorted, stringified version of `options`\n // for use as part of the cache key\n var optionsString = map(\n keys(options).sort(),\n function(key) {\n return key + ':' + options[key];\n }\n ).join(',');\n\n // Set our cache key\n var cacheKey = locale + '+' + optionsString;\n\n // If we don't have this configuration cached, configure and cache it\n if (!cachedNumberFormat.cache[cacheKey]) {\n cachedNumberFormat.cache[cacheKey] = Intl.NumberFormat(locale, options);\n }\n\n // Return the cached version of this configuration\n return cachedNumberFormat.cache[cacheKey];\n }\n cachedNumberFormat.cache = {};\n\n // formatNumber\n // Formats any number greater than or equal to zero using these options:\n // - userLocale\n // - useToLocaleString\n // - useGrouping\n // - grouping\n // - maximumSignificantDigits\n // - minimumIntegerDigits\n // - fractionDigits\n // - groupingSeparator\n // - decimalSeparator\n //\n // `useToLocaleString` will use `Intl.NumberFormat` or `toLocaleString` for formatting.\n // `userLocale` option is passed through to the formatting function.\n // `fractionDigits` is passed through to `maximumFractionDigits` and `minimumFractionDigits`\n // Using `maximumSignificantDigits` will override `minimumIntegerDigits` and `fractionDigits`.\n function formatNumber(number, options, userLocale) {\n var useToLocaleString = options.useToLocaleString;\n var useGrouping = options.useGrouping;\n var grouping = useGrouping && options.grouping.slice();\n var maximumSignificantDigits = options.maximumSignificantDigits;\n var minimumIntegerDigits = options.minimumIntegerDigits || 1;\n var fractionDigits = options.fractionDigits || 0;\n var groupingSeparator = options.groupingSeparator;\n var decimalSeparator = options.decimalSeparator;\n\n if (useToLocaleString && userLocale) {\n var localeStringOptions = {\n minimumIntegerDigits: minimumIntegerDigits,\n useGrouping: useGrouping\n };\n\n if (fractionDigits) {\n localeStringOptions.maximumFractionDigits = fractionDigits;\n localeStringOptions.minimumFractionDigits = fractionDigits;\n }\n\n // toLocaleString output is \"0.0\" instead of \"0\" for HTC browsers\n // when maximumSignificantDigits is set. See #96.\n if (maximumSignificantDigits && number > 0) {\n localeStringOptions.maximumSignificantDigits = maximumSignificantDigits;\n }\n\n if (intlNumberFormatWorks) {\n if (!intlNumberFormatRoundingWorks) {\n var roundingOptions = extend({}, options);\n roundingOptions.useGrouping = false;\n roundingOptions.decimalSeparator = \".\";\n number = parseFloat(formatNumber(number, roundingOptions), 10);\n }\n\n return cachedNumberFormat(userLocale, localeStringOptions).format(number);\n } else {\n if (!toLocaleStringRoundingWorks) {\n var roundingOptions = extend({}, options);\n roundingOptions.useGrouping = false;\n roundingOptions.decimalSeparator = \".\";\n number = parseFloat(formatNumber(number, roundingOptions), 10);\n }\n\n return number.toLocaleString(userLocale, localeStringOptions);\n }\n }\n\n var numberString;\n\n // Add 1 to digit output length for floating point errors workaround. See below.\n if (maximumSignificantDigits) {\n numberString = number.toPrecision(maximumSignificantDigits + 1);\n } else {\n numberString = number.toFixed(fractionDigits + 1);\n }\n\n var integerString;\n var fractionString;\n var exponentString;\n\n var temp = numberString.split(\"e\");\n\n exponentString = temp[1] || \"\";\n\n temp = temp[0].split(\".\");\n\n fractionString = temp[1] || \"\";\n integerString = temp[0] || \"\";\n\n // Workaround for floating point errors in `toFixed` and `toPrecision`.\n // (3.55).toFixed(1); --> \"3.5\"\n // (123.55 - 120).toPrecision(2); --> \"3.5\"\n // (123.55 - 120); --> 3.549999999999997\n // (123.55 - 120).toFixed(2); --> \"3.55\"\n // Round by examing the string output of the next digit.\n\n // *************** Implement String Rounding here ***********************\n // Check integerString + fractionString length of toPrecision before rounding.\n // Check length of fractionString from toFixed output before rounding.\n var integerLength = integerString.length;\n var fractionLength = fractionString.length;\n var digitCount = integerLength + fractionLength;\n var digits = integerString + fractionString;\n\n if (maximumSignificantDigits && digitCount === (maximumSignificantDigits + 1) || !maximumSignificantDigits && fractionLength === (fractionDigits + 1)) {\n // Round digits.\n digits = stringRound(digits);\n\n if (digits.length === digitCount + 1) {\n integerLength = integerLength + 1;\n }\n\n // Discard final fractionDigit.\n if (fractionLength) {\n digits = digits.slice(0, -1);\n }\n\n // Separate integer and fraction.\n integerString = digits.slice(0, integerLength);\n fractionString = digits.slice(integerLength);\n }\n\n // Trim trailing zeroes from fractionString because toPrecision outputs\n // precision, not significant digits.\n if (maximumSignificantDigits) {\n fractionString = fractionString.replace(/0*$/, \"\");\n }\n\n // Handle exponent.\n var exponent = parseInt(exponentString, 10);\n\n if (exponent > 0) {\n if (fractionString.length <= exponent) {\n fractionString = fractionString + repeatZero(exponent - fractionString.length);\n\n integerString = integerString + fractionString;\n fractionString = \"\";\n } else {\n integerString = integerString + fractionString.slice(0, exponent);\n fractionString = fractionString.slice(exponent);\n }\n } else if (exponent < 0) {\n fractionString = (repeatZero(Math.abs(exponent) - integerString.length) + integerString + fractionString);\n\n integerString = \"0\";\n }\n\n if (!maximumSignificantDigits) {\n // Trim or pad fraction when not using maximumSignificantDigits.\n fractionString = fractionString.slice(0, fractionDigits);\n\n if (fractionString.length < fractionDigits) {\n fractionString = fractionString + repeatZero(fractionDigits - fractionString.length);\n }\n\n // Pad integer when using minimumIntegerDigits\n // and not using maximumSignificantDigits.\n if (integerString.length < minimumIntegerDigits) {\n integerString = repeatZero(minimumIntegerDigits - integerString.length) + integerString;\n }\n }\n\n var formattedString = \"\";\n\n // Handle grouping.\n if (useGrouping) {\n temp = integerString;\n var group;\n\n while (temp.length) {\n if (grouping.length) {\n group = grouping.shift();\n }\n\n if (formattedString) {\n formattedString = groupingSeparator + formattedString;\n }\n\n formattedString = temp.slice(-group) + formattedString;\n\n temp = temp.slice(0, -group);\n }\n } else {\n formattedString = integerString;\n }\n\n // Add decimalSeparator and fraction.\n if (fractionString) {\n formattedString = formattedString + decimalSeparator + fractionString;\n }\n\n return formattedString;\n }\n\n // durationLabelCompare\n function durationLabelCompare(a, b) {\n if (a.label.length > b.label.length) {\n return -1;\n }\n\n if (a.label.length < b.label.length) {\n return 1;\n }\n\n // a must be equal to b\n return 0;\n }\n\n // durationGetLabels\n function durationGetLabels(token, localeData) {\n var labels = [];\n\n each(keys(localeData), function (localeDataKey) {\n if (localeDataKey.slice(0, 15) !== \"_durationLabels\") {\n return;\n }\n\n var labelType = localeDataKey.slice(15).toLowerCase();\n\n each(keys(localeData[localeDataKey]), function (labelKey) {\n if (labelKey.slice(0, 1) === token) {\n labels.push({\n type: labelType,\n key: labelKey,\n label: localeData[localeDataKey][labelKey]\n });\n }\n });\n });\n\n return labels;\n }\n\n // durationPluralKey\n function durationPluralKey(token, integerValue, decimalValue) {\n // Singular for a value of `1`, but not for `1.0`.\n if (integerValue === 1 && decimalValue === null) {\n return token;\n }\n\n return token + token;\n }\n\n var engLocale = {\n durationLabelsStandard: {\n S: 'millisecond',\n SS: 'milliseconds',\n s: 'second',\n ss: 'seconds',\n m: 'minute',\n mm: 'minutes',\n h: 'hour',\n hh: 'hours',\n d: 'day',\n dd: 'days',\n w: 'week',\n ww: 'weeks',\n M: 'month',\n MM: 'months',\n y: 'year',\n yy: 'years'\n },\n durationLabelsShort: {\n S: 'msec',\n SS: 'msecs',\n s: 'sec',\n ss: 'secs',\n m: 'min',\n mm: 'mins',\n h: 'hr',\n hh: 'hrs',\n d: 'dy',\n dd: 'dys',\n w: 'wk',\n ww: 'wks',\n M: 'mo',\n MM: 'mos',\n y: 'yr',\n yy: 'yrs'\n },\n durationTimeTemplates: {\n HMS: 'h:mm:ss',\n HM: 'h:mm',\n MS: 'm:ss'\n },\n durationLabelTypes: [\n { type: \"standard\", string: \"__\" },\n { type: \"short\", string: \"_\" }\n ],\n durationPluralKey: durationPluralKey\n };\n\n // isArray\n function isArray(array) {\n return Object.prototype.toString.call(array) === \"[object Array]\";\n }\n\n // isObject\n function isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n }\n\n // findLast\n function findLast(array, callback) {\n var index = array.length;\n\n while (index -= 1) {\n if (callback(array[index])) { return array[index]; }\n }\n }\n\n // find\n function find(array, callback) {\n var index = 0;\n\n var max = array && array.length || 0;\n\n var match;\n\n if (typeof callback !== \"function\") {\n match = callback;\n callback = function (item) {\n return item === match;\n };\n }\n\n while (index < max) {\n if (callback(array[index])) { return array[index]; }\n index += 1;\n }\n }\n\n // each\n function each(array, callback) {\n var index = 0,\n max = array.length;\n\n if (!array || !max) { return; }\n\n while (index < max) {\n if (callback(array[index], index) === false) { return; }\n index += 1;\n }\n }\n\n // map\n function map(array, callback) {\n var index = 0,\n max = array.length,\n ret = [];\n\n if (!array || !max) { return ret; }\n\n while (index < max) {\n ret[index] = callback(array[index], index);\n index += 1;\n }\n\n return ret;\n }\n\n // pluck\n function pluck(array, prop) {\n return map(array, function (item) {\n return item[prop];\n });\n }\n\n // compact\n function compact(array) {\n var ret = [];\n\n each(array, function (item) {\n if (item) { ret.push(item); }\n });\n\n return ret;\n }\n\n // unique\n function unique(array) {\n var ret = [];\n\n each(array, function (_a) {\n if (!find(ret, _a)) { ret.push(_a); }\n });\n\n return ret;\n }\n\n // intersection\n function intersection(a, b) {\n var ret = [];\n\n each(a, function (_a) {\n each(b, function (_b) {\n if (_a === _b) { ret.push(_a); }\n });\n });\n\n return unique(ret);\n }\n\n // rest\n function rest(array, callback) {\n var ret = [];\n\n each(array, function (item, index) {\n if (!callback(item)) {\n ret = array.slice(index);\n return false;\n }\n });\n\n return ret;\n }\n\n // initial\n function initial(array, callback) {\n var reversed = array.slice().reverse();\n\n return rest(reversed, callback).reverse();\n }\n\n // extend\n function extend(a, b) {\n for (var key in b) {\n if (b.hasOwnProperty(key)) { a[key] = b[key]; }\n }\n\n return a;\n }\n\n // keys\n function keys(a) {\n var ret = [];\n\n for (var key in a) {\n if (a.hasOwnProperty(key)) { ret.push(key); }\n }\n\n return ret;\n }\n\n // any\n function any(array, callback) {\n var index = 0,\n max = array.length;\n\n if (!array || !max) { return false; }\n\n while (index < max) {\n if (callback(array[index], index) === true) { return true; }\n index += 1;\n }\n\n return false;\n }\n\n // flatten\n function flatten(array) {\n var ret = [];\n\n each(array, function(child) {\n ret = ret.concat(child);\n });\n\n return ret;\n }\n\n function toLocaleStringSupportsLocales() {\n var number = 0;\n try {\n number.toLocaleString('i');\n } catch (e) {\n return e.name === 'RangeError';\n }\n return false;\n }\n\n function featureTestFormatterRounding(formatter) {\n return formatter(3.55, \"en\", {\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: 1,\n maximumFractionDigits: 1\n }) === \"3.6\";\n }\n\n function featureTestFormatter(formatter) {\n var passed = true;\n\n // Test minimumIntegerDigits.\n passed = passed && formatter(1, \"en\", { minimumIntegerDigits: 1 }) === \"1\";\n passed = passed && formatter(1, \"en\", { minimumIntegerDigits: 2 }) === \"01\";\n passed = passed && formatter(1, \"en\", { minimumIntegerDigits: 3 }) === \"001\";\n if (!passed) { return false; }\n\n // Test maximumFractionDigits and minimumFractionDigits.\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 0, minimumFractionDigits: 0 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 1, minimumFractionDigits: 1 }) === \"100.0\";\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 2, minimumFractionDigits: 2 }) === \"99.99\";\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 3, minimumFractionDigits: 3 }) === \"99.990\";\n if (!passed) { return false; }\n\n // Test maximumSignificantDigits.\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 1 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 2 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 3 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 4 }) === \"99.99\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 5 }) === \"99.99\";\n if (!passed) { return false; }\n\n // Test grouping.\n passed = passed && formatter(1000, \"en\", { useGrouping: true }) === \"1,000\";\n passed = passed && formatter(1000, \"en\", { useGrouping: false }) === \"1000\";\n if (!passed) { return false; }\n\n return true;\n }\n\n // durationsFormat(durations [, template] [, precision] [, settings])\n function durationsFormat() {\n var args = [].slice.call(arguments);\n var settings = {};\n var durations;\n\n // Parse arguments.\n each(args, function (arg, index) {\n if (!index) {\n if (!isArray(arg)) {\n throw \"Expected array as the first argument to durationsFormat.\";\n }\n\n durations = arg;\n }\n\n if (typeof arg === \"string\" || typeof arg === \"function\") {\n settings.template = arg;\n return;\n }\n\n if (typeof arg === \"number\") {\n settings.precision = arg;\n return;\n }\n\n if (isObject(arg)) {\n extend(settings, arg);\n }\n });\n\n if (!durations || !durations.length) {\n return [];\n }\n\n settings.returnMomentTypes = true;\n\n var formattedDurations = map(durations, function (dur) {\n return dur.format(settings);\n });\n\n // Merge token types from all durations.\n var outputTypes = intersection(types, unique(pluck(flatten(formattedDurations), \"type\")));\n\n var largest = settings.largest;\n\n if (largest) {\n outputTypes = outputTypes.slice(0, largest);\n }\n\n settings.returnMomentTypes = false;\n settings.outputTypes = outputTypes;\n\n return map(durations, function (dur) {\n return dur.format(settings);\n });\n }\n\n // durationFormat([template] [, precision] [, settings])\n function durationFormat() {\n\n var args = [].slice.call(arguments);\n var settings = extend({}, this.format.defaults);\n\n // Keep a shadow copy of this moment for calculating remainders.\n // Perform all calculations on positive duration value, handle negative\n // sign at the very end.\n var asMilliseconds = this.asMilliseconds();\n var asMonths = this.asMonths();\n\n // Treat invalid durations as having a value of 0 milliseconds.\n if (typeof this.isValid === \"function\" && this.isValid() === false) {\n asMilliseconds = 0;\n asMonths = 0;\n }\n\n var isNegative = asMilliseconds < 0;\n\n // Two shadow copies are needed because of the way moment.js handles\n // duration arithmetic for years/months and for weeks/days/hours/minutes/seconds.\n var remainder = moment.duration(Math.abs(asMilliseconds), \"milliseconds\");\n var remainderMonths = moment.duration(Math.abs(asMonths), \"months\");\n\n // Parse arguments.\n each(args, function (arg) {\n if (typeof arg === \"string\" || typeof arg === \"function\") {\n settings.template = arg;\n return;\n }\n\n if (typeof arg === \"number\") {\n settings.precision = arg;\n return;\n }\n\n if (isObject(arg)) {\n extend(settings, arg);\n }\n });\n\n var momentTokens = {\n years: \"y\",\n months: \"M\",\n weeks: \"w\",\n days: \"d\",\n hours: \"h\",\n minutes: \"m\",\n seconds: \"s\",\n milliseconds: \"S\"\n };\n\n var tokenDefs = {\n escape: /\\[(.+?)\\]/,\n years: /\\*?[Yy]+/,\n months: /\\*?M+/,\n weeks: /\\*?[Ww]+/,\n days: /\\*?[Dd]+/,\n hours: /\\*?[Hh]+/,\n minutes: /\\*?m+/,\n seconds: /\\*?s+/,\n milliseconds: /\\*?S+/,\n general: /.+?/\n };\n\n // Types array is available in the template function.\n settings.types = types;\n\n var typeMap = function (token) {\n return find(types, function (type) {\n return tokenDefs[type].test(token);\n });\n };\n\n var tokenizer = new RegExp(map(types, function (type) {\n return tokenDefs[type].source;\n }).join(\"|\"), \"g\");\n\n // Current duration object is available in the template function.\n settings.duration = this;\n\n // Eval template function and cache template string.\n var template = typeof settings.template === \"function\" ? settings.template.apply(settings) : settings.template;\n\n // outputTypes and returnMomentTypes are settings to support durationsFormat().\n\n // outputTypes is an array of moment token types that determines\n // the tokens returned in formatted output. This option overrides\n // trim, largest, stopTrim, etc.\n var outputTypes = settings.outputTypes;\n\n // returnMomentTypes is a boolean that sets durationFormat to return\n // the processed momentTypes instead of formatted output.\n var returnMomentTypes = settings.returnMomentTypes;\n\n var largest = settings.largest;\n\n // Setup stopTrim array of token types.\n var stopTrim = [];\n\n if (!outputTypes) {\n if (isArray(settings.stopTrim)) {\n settings.stopTrim = settings.stopTrim.join(\"\");\n }\n\n // Parse stopTrim string to create token types array.\n if (settings.stopTrim) {\n each(settings.stopTrim.match(tokenizer), function (token) {\n var type = typeMap(token);\n\n if (type === \"escape\" || type === \"general\") {\n return;\n }\n\n stopTrim.push(type);\n });\n }\n }\n\n // Cache moment's locale data.\n var localeData = moment.localeData();\n\n if (!localeData) {\n localeData = {};\n }\n\n // Fall back to this plugin's `eng` extension.\n each(keys(engLocale), function (key) {\n if (typeof engLocale[key] === \"function\") {\n if (!localeData[key]) {\n localeData[key] = engLocale[key];\n }\n\n return;\n }\n\n if (!localeData[\"_\" + key]) {\n localeData[\"_\" + key] = engLocale[key];\n }\n });\n\n // Replace Duration Time Template strings.\n // For locale `eng`: `_HMS_`, `_HM_`, and `_MS_`.\n each(keys(localeData._durationTimeTemplates), function (item) {\n template = template.replace(\"_\" + item + \"_\", localeData._durationTimeTemplates[item]);\n });\n\n // Determine user's locale.\n var userLocale = settings.userLocale || moment.locale();\n\n var useLeftUnits = settings.useLeftUnits;\n var usePlural = settings.usePlural;\n var precision = settings.precision;\n var forceLength = settings.forceLength;\n var useGrouping = settings.useGrouping;\n var trunc = settings.trunc;\n\n // Use significant digits only when precision is greater than 0.\n var useSignificantDigits = settings.useSignificantDigits && precision > 0;\n var significantDigits = useSignificantDigits ? settings.precision : 0;\n var significantDigitsCache = significantDigits;\n\n var minValue = settings.minValue;\n var isMinValue = false;\n\n var maxValue = settings.maxValue;\n var isMaxValue = false;\n\n // formatNumber fallback options.\n var useToLocaleString = settings.useToLocaleString;\n var groupingSeparator = settings.groupingSeparator;\n var decimalSeparator = settings.decimalSeparator;\n var grouping = settings.grouping;\n\n useToLocaleString = useToLocaleString && (toLocaleStringWorks || intlNumberFormatWorks);\n\n // Trim options.\n var trim = settings.trim;\n\n if (isArray(trim)) {\n trim = trim.join(\" \");\n }\n\n if (trim === null && (largest || maxValue || useSignificantDigits)) {\n trim = \"all\";\n }\n\n if (trim === null || trim === true || trim === \"left\" || trim === \"right\") {\n trim = \"large\";\n }\n\n if (trim === false) {\n trim = \"\";\n }\n\n var trimIncludes = function (item) {\n return item.test(trim);\n };\n\n var rLarge = /large/;\n var rSmall = /small/;\n var rBoth = /both/;\n var rMid = /mid/;\n var rAll = /^all|[^sm]all/;\n var rFinal = /final/;\n\n var trimLarge = largest > 0 || any([rLarge, rBoth, rAll], trimIncludes);\n var trimSmall = any([rSmall, rBoth, rAll], trimIncludes);\n var trimMid = any([rMid, rAll], trimIncludes);\n var trimFinal = any([rFinal, rAll], trimIncludes);\n\n // Parse format string to create raw tokens array.\n var rawTokens = map(template.match(tokenizer), function (token, index) {\n var type = typeMap(token);\n\n if (token.slice(0, 1) === \"*\") {\n token = token.slice(1);\n\n if (type !== \"escape\" && type !== \"general\") {\n stopTrim.push(type);\n }\n }\n\n return {\n index: index,\n length: token.length,\n text: \"\",\n\n // Replace escaped tokens with the non-escaped token text.\n token: (type === \"escape\" ? token.replace(tokenDefs.escape, \"$1\") : token),\n\n // Ignore type on non-moment tokens.\n type: ((type === \"escape\" || type === \"general\") ? null : type)\n };\n });\n\n // Associate text tokens with moment tokens.\n var currentToken = {\n index: 0,\n length: 0,\n token: \"\",\n text: \"\",\n type: null\n };\n\n var tokens = [];\n\n if (useLeftUnits) {\n rawTokens.reverse();\n }\n\n each(rawTokens, function (token) {\n if (token.type) {\n if (currentToken.type || currentToken.text) {\n tokens.push(currentToken);\n }\n\n currentToken = token;\n\n return;\n }\n\n if (useLeftUnits) {\n currentToken.text = token.token + currentToken.text;\n } else {\n currentToken.text += token.token;\n }\n });\n\n if (currentToken.type || currentToken.text) {\n tokens.push(currentToken);\n }\n\n if (useLeftUnits) {\n tokens.reverse();\n }\n\n // Find unique moment token types in the template in order of\n // descending magnitude.\n var momentTypes = intersection(types, unique(compact(pluck(tokens, \"type\"))));\n\n // Exit early if there are no moment token types.\n if (!momentTypes.length) {\n return pluck(tokens, \"text\").join(\"\");\n }\n\n // Calculate values for each moment type in the template.\n // For processing the settings, values are associated with moment types.\n // Values will be assigned to tokens at the last step in order to\n // assume nothing about frequency or order of tokens in the template.\n momentTypes = map(momentTypes, function (momentType, index) {\n // Is this the least-magnitude moment token found?\n var isSmallest = ((index + 1) === momentTypes.length);\n\n // Is this the greatest-magnitude moment token found?\n var isLargest = (!index);\n\n // Get the raw value in the current units.\n var rawValue;\n\n if (momentType === \"years\" || momentType === \"months\") {\n rawValue = remainderMonths.as(momentType);\n } else {\n rawValue = remainder.as(momentType);\n }\n\n var wholeValue = Math.floor(rawValue);\n var decimalValue = rawValue - wholeValue;\n\n var token = find(tokens, function (token) {\n return momentType === token.type;\n });\n\n if (isLargest && maxValue && rawValue > maxValue) {\n isMaxValue = true;\n }\n\n if (isSmallest && minValue && Math.abs(settings.duration.as(momentType)) < minValue) {\n isMinValue = true;\n }\n\n // Note the length of the largest-magnitude moment token:\n // if it is greater than one and forceLength is not set,\n // then default forceLength to `true`.\n //\n // Rationale is this: If the template is \"h:mm:ss\" and the\n // moment value is 5 minutes, the user-friendly output is\n // \"5:00\", not \"05:00\". We shouldn't pad the `minutes` token\n // even though it has length of two if the template is \"h:mm:ss\";\n //\n // If the minutes output should always include the leading zero\n // even when the hour is trimmed then set `{ forceLength: true }`\n // to output \"05:00\". If the template is \"hh:mm:ss\", the user\n // clearly wanted everything padded so we should output \"05:00\";\n //\n // If the user wants the full padded output, they can use\n // template \"hh:mm:ss\" and set `{ trim: false }` to output\n // \"00:05:00\".\n if (isLargest && forceLength === null && token.length > 1) {\n forceLength = true;\n }\n\n // Update remainder.\n remainder.subtract(wholeValue, momentType);\n remainderMonths.subtract(wholeValue, momentType);\n\n return {\n rawValue: rawValue,\n wholeValue: wholeValue,\n // Decimal value is only retained for the least-magnitude\n // moment type in the format template.\n decimalValue: isSmallest ? decimalValue : 0,\n isSmallest: isSmallest,\n isLargest: isLargest,\n type: momentType,\n // Tokens can appear multiple times in a template string,\n // but all instances must share the same length.\n tokenLength: token.length\n };\n });\n\n var truncMethod = trunc ? Math.floor : Math.round;\n var truncate = function (value, places) {\n var factor = Math.pow(10, places);\n return truncMethod(value * factor) / factor;\n };\n\n var foundFirst = false;\n var bubbled = false;\n\n var formatValue = function (momentType, index) {\n var formatOptions = {\n useGrouping: useGrouping,\n groupingSeparator: groupingSeparator,\n decimalSeparator: decimalSeparator,\n grouping: grouping,\n useToLocaleString: useToLocaleString\n };\n\n if (useSignificantDigits) {\n if (significantDigits <= 0) {\n momentType.rawValue = 0;\n momentType.wholeValue = 0;\n momentType.decimalValue = 0;\n } else {\n formatOptions.maximumSignificantDigits = significantDigits;\n momentType.significantDigits = significantDigits;\n }\n }\n\n if (isMaxValue && !bubbled) {\n if (momentType.isLargest) {\n momentType.wholeValue = maxValue;\n momentType.decimalValue = 0;\n } else {\n momentType.wholeValue = 0;\n momentType.decimalValue = 0;\n }\n }\n\n if (isMinValue && !bubbled) {\n if (momentType.isSmallest) {\n momentType.wholeValue = minValue;\n momentType.decimalValue = 0;\n } else {\n momentType.wholeValue = 0;\n momentType.decimalValue = 0;\n }\n }\n\n if (momentType.isSmallest || momentType.significantDigits && momentType.significantDigits - momentType.wholeValue.toString().length <= 0) {\n // Apply precision to least significant token value.\n if (precision < 0) {\n momentType.value = truncate(momentType.wholeValue, precision);\n } else if (precision === 0) {\n momentType.value = truncMethod(momentType.wholeValue + momentType.decimalValue);\n } else { // precision > 0\n if (useSignificantDigits) {\n if (trunc) {\n momentType.value = truncate(momentType.rawValue, significantDigits - momentType.wholeValue.toString().length);\n } else {\n momentType.value = momentType.rawValue;\n }\n\n if (momentType.wholeValue) {\n significantDigits -= momentType.wholeValue.toString().length;\n }\n } else {\n formatOptions.fractionDigits = precision;\n\n if (trunc) {\n momentType.value = momentType.wholeValue + truncate(momentType.decimalValue, precision);\n } else {\n momentType.value = momentType.wholeValue + momentType.decimalValue;\n }\n }\n }\n } else {\n if (useSignificantDigits && momentType.wholeValue) {\n // Outer Math.round required here to handle floating point errors.\n momentType.value = Math.round(truncate(momentType.wholeValue, momentType.significantDigits - momentType.wholeValue.toString().length));\n\n significantDigits -= momentType.wholeValue.toString().length;\n } else {\n momentType.value = momentType.wholeValue;\n }\n }\n\n if (momentType.tokenLength > 1 && (forceLength || foundFirst)) {\n formatOptions.minimumIntegerDigits = momentType.tokenLength;\n\n if (bubbled && formatOptions.maximumSignificantDigits < momentType.tokenLength) {\n delete formatOptions.maximumSignificantDigits;\n }\n }\n\n if (!foundFirst && (momentType.value > 0 || trim === \"\" /* trim: false */ || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n foundFirst = true;\n }\n\n momentType.formattedValue = formatNumber(momentType.value, formatOptions, userLocale);\n\n formatOptions.useGrouping = false;\n formatOptions.decimalSeparator = \".\";\n momentType.formattedValueEn = formatNumber(momentType.value, formatOptions, \"en\");\n\n if (momentType.tokenLength === 2 && momentType.type === \"milliseconds\") {\n momentType.formattedValueMS = formatNumber(momentType.value, {\n minimumIntegerDigits: 3,\n useGrouping: false\n }, \"en\").slice(0, 2);\n }\n\n return momentType;\n };\n\n // Calculate formatted values.\n momentTypes = map(momentTypes, formatValue);\n momentTypes = compact(momentTypes);\n\n // Bubble rounded values.\n if (momentTypes.length > 1) {\n var findType = function (type) {\n return find(momentTypes, function (momentType) {\n return momentType.type === type;\n });\n };\n\n var bubbleTypes = function (bubble) {\n var bubbleMomentType = findType(bubble.type);\n\n if (!bubbleMomentType) {\n return;\n }\n\n each(bubble.targets, function (target) {\n var targetMomentType = findType(target.type);\n\n if (!targetMomentType) {\n return;\n }\n\n if (parseInt(bubbleMomentType.formattedValueEn, 10) === target.value) {\n bubbleMomentType.rawValue = 0;\n bubbleMomentType.wholeValue = 0;\n bubbleMomentType.decimalValue = 0;\n targetMomentType.rawValue += 1;\n targetMomentType.wholeValue += 1;\n targetMomentType.decimalValue = 0;\n targetMomentType.formattedValueEn = targetMomentType.wholeValue.toString();\n bubbled = true;\n }\n });\n };\n\n each(bubbles, bubbleTypes);\n }\n\n // Recalculate formatted values.\n if (bubbled) {\n foundFirst = false;\n significantDigits = significantDigitsCache;\n momentTypes = map(momentTypes, formatValue);\n momentTypes = compact(momentTypes);\n }\n\n if (outputTypes && !(isMaxValue && !settings.trim)) {\n momentTypes = map(momentTypes, function (momentType) {\n if (find(outputTypes, function (outputType) {\n return momentType.type === outputType;\n })) {\n return momentType;\n }\n\n return null;\n });\n\n momentTypes = compact(momentTypes);\n } else {\n // Trim Large.\n if (trimLarge) {\n momentTypes = rest(momentTypes, function (momentType) {\n // Stop trimming on:\n // - the smallest moment type\n // - a type marked for stopTrim\n // - a type that has a whole value\n return !momentType.isSmallest && !momentType.wholeValue && !find(stopTrim, momentType.type);\n });\n }\n\n // Largest.\n if (largest && momentTypes.length) {\n momentTypes = momentTypes.slice(0, largest);\n }\n\n // Trim Small.\n if (trimSmall && momentTypes.length > 1) {\n momentTypes = initial(momentTypes, function (momentType) {\n // Stop trimming on:\n // - a type marked for stopTrim\n // - a type that has a whole value\n // - the largest momentType\n return !momentType.wholeValue && !find(stopTrim, momentType.type) && !momentType.isLargest;\n });\n }\n\n // Trim Mid.\n if (trimMid) {\n momentTypes = map(momentTypes, function (momentType, index) {\n if (index > 0 && index < momentTypes.length - 1 && !momentType.wholeValue) {\n return null;\n }\n\n return momentType;\n });\n\n momentTypes = compact(momentTypes);\n }\n\n // Trim Final.\n if (trimFinal && momentTypes.length === 1 && !momentTypes[0].wholeValue && !(!trunc && momentTypes[0].isSmallest && momentTypes[0].rawValue < minValue)) {\n momentTypes = [];\n }\n }\n\n if (returnMomentTypes) {\n return momentTypes;\n }\n\n // Localize and pluralize unit labels.\n each(tokens, function (token) {\n var key = momentTokens[token.type];\n\n var momentType = find(momentTypes, function (momentType) {\n return momentType.type === token.type;\n });\n\n if (!key || !momentType) {\n return;\n }\n\n var values = momentType.formattedValueEn.split(\".\");\n\n values[0] = parseInt(values[0], 10);\n\n if (values[1]) {\n values[1] = parseFloat(\"0.\" + values[1], 10);\n } else {\n values[1] = null;\n }\n\n var pluralKey = localeData.durationPluralKey(key, values[0], values[1]);\n\n var labels = durationGetLabels(key, localeData);\n\n var autoLocalized = false;\n\n var pluralizedLabels = {};\n\n // Auto-Localized unit labels.\n each(localeData._durationLabelTypes, function (labelType) {\n var label = find(labels, function (label) {\n return label.type === labelType.type && label.key === pluralKey;\n });\n\n if (label) {\n pluralizedLabels[label.type] = label.label;\n\n if (stringIncludes(token.text, labelType.string)) {\n token.text = token.text.replace(labelType.string, label.label);\n autoLocalized = true;\n }\n }\n });\n\n // Auto-pluralized unit labels.\n if (usePlural && !autoLocalized) {\n labels.sort(durationLabelCompare);\n\n each(labels, function (label) {\n if (pluralizedLabels[label.type] === label.label) {\n if (stringIncludes(token.text, label.label)) {\n // Stop checking this token if its label is already\n // correctly pluralized.\n return false;\n }\n\n // Skip this label if it is correct, but not present in\n // the token's text.\n return;\n }\n\n if (stringIncludes(token.text, label.label)) {\n // Replece this token's label and stop checking.\n token.text = token.text.replace(label.label, pluralizedLabels[label.type]);\n return false;\n }\n });\n }\n });\n\n // Build ouptut.\n tokens = map(tokens, function (token) {\n if (!token.type) {\n return token.text;\n }\n\n var momentType = find(momentTypes, function (momentType) {\n return momentType.type === token.type;\n });\n\n if (!momentType) {\n return \"\";\n }\n\n var out = \"\";\n\n if (useLeftUnits) {\n out += token.text;\n }\n\n if (isNegative && isMaxValue || !isNegative && isMinValue) {\n out += \"< \";\n isMaxValue = false;\n isMinValue = false;\n }\n\n if (isNegative && isMinValue || !isNegative && isMaxValue) {\n out += \"> \";\n isMaxValue = false;\n isMinValue = false;\n }\n\n if (isNegative && (momentType.value > 0 || trim === \"\" || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n out += \"-\";\n isNegative = false;\n }\n\n if (token.type === \"milliseconds\" && momentType.formattedValueMS) {\n out += momentType.formattedValueMS;\n } else {\n out += momentType.formattedValue;\n }\n\n if (!useLeftUnits) {\n out += token.text;\n }\n\n return out;\n });\n\n // Trim leading and trailing comma, space, colon, and dot.\n return tokens.join(\"\").replace(/(,| |:|\\.)*$/, \"\").replace(/^(,| |:|\\.)*/, \"\");\n }\n\n // defaultFormatTemplate\n function defaultFormatTemplate() {\n var dur = this.duration;\n\n var findType = function findType(type) {\n return dur._data[type];\n };\n\n var firstType = find(this.types, findType);\n\n var lastType = findLast(this.types, findType);\n\n // Default template strings for each duration dimension type.\n switch (firstType) {\n case \"milliseconds\":\n return \"S __\";\n case \"seconds\": // Fallthrough.\n case \"minutes\":\n return \"*_MS_\";\n case \"hours\":\n return \"_HMS_\";\n case \"days\": // Possible Fallthrough.\n if (firstType === lastType) {\n return \"d __\";\n }\n case \"weeks\":\n if (firstType === lastType) {\n return \"w __\";\n }\n\n if (this.trim === null) {\n this.trim = \"both\";\n }\n\n return \"w __, d __, h __\";\n case \"months\": // Possible Fallthrough.\n if (firstType === lastType) {\n return \"M __\";\n }\n case \"years\":\n if (firstType === lastType) {\n return \"y __\";\n }\n\n if (this.trim === null) {\n this.trim = \"both\";\n }\n\n return \"y __, M __, d __\";\n default:\n if (this.trim === null) {\n this.trim = \"both\";\n }\n\n return \"y __, d __, h __, m __, s __\";\n }\n }\n\n // init\n function init(context) {\n if (!context) {\n throw \"Moment Duration Format init cannot find moment instance.\";\n }\n\n context.duration.format = durationsFormat;\n context.duration.fn.format = durationFormat;\n\n context.duration.fn.format.defaults = {\n // Many options are defaulted to `null` to distinguish between\n // 'not set' and 'set to `false`'\n\n // trim\n // Can be a string, a delimited list of strings, an array of strings,\n // or a boolean.\n // \"large\" - will trim largest-magnitude zero-value tokens until\n // finding a token with a value, a token identified as 'stopTrim', or\n // the final token of the format string.\n // \"small\" - will trim smallest-magnitude zero-value tokens until\n // finding a token with a value, a token identified as 'stopTrim', or\n // the final token of the format string.\n // \"both\" - will execute \"large\" trim then \"small\" trim.\n // \"mid\" - will trim any zero-value tokens that are not the first or\n // last tokens. Usually used in conjunction with \"large\" or \"both\".\n // e.g. \"large mid\" or \"both mid\".\n // \"final\" - will trim the final token if it is zero-value. Use this\n // option with \"large\" or \"both\" to output an empty string when\n // formatting a zero-value duration. e.g. \"large final\" or \"both final\".\n // \"all\" - Will trim all zero-value tokens. Shorthand for \"both mid final\".\n // \"left\" - maps to \"large\" to support plugin's version 1 API.\n // \"right\" - maps to \"large\" to support plugin's version 1 API.\n // `false` - template tokens are not trimmed.\n // `true` - treated as \"large\".\n // `null` - treated as \"large\".\n trim: null,\n\n // stopTrim\n // A moment token string, a delimited set of moment token strings,\n // or an array of moment token strings. Trimming will stop when a token\n // listed in this option is reached. A \"*\" character in the format\n // template string will also mark a moment token as stopTrim.\n // e.g. \"d [days] *h:mm:ss\" will always stop trimming at the 'hours' token.\n stopTrim: null,\n\n // largest\n // Set to a positive integer to output only the \"n\" largest-magnitude\n // moment tokens that have a value. All lesser-magnitude moment tokens\n // will be ignored. This option takes effect even if `trim` is set\n // to `false`.\n largest: null,\n\n // maxValue\n // Use `maxValue` to render generalized output for large duration values,\n // e.g. `\"> 60 days\"`. `maxValue` must be a positive integer and is\n /// applied to the greatest-magnitude moment token in the format template.\n maxValue: null,\n\n // minValue\n // Use `minValue` to render generalized output for small duration values,\n // e.g. `\"< 5 minutes\"`. `minValue` must be a positive integer and is\n // applied to the least-magnitude moment token in the format template.\n minValue: null,\n\n // precision\n // If a positive integer, number of decimal fraction digits to render.\n // If a negative integer, number of integer place digits to truncate to 0.\n // If `useSignificantDigits` is set to `true` and `precision` is a positive\n // integer, sets the maximum number of significant digits used in the\n // formatted output.\n precision: 0,\n\n // trunc\n // Default behavior rounds final token value. Set to `true` to\n // truncate final token value, which was the default behavior in\n // version 1 of this plugin.\n trunc: false,\n\n // forceLength\n // Force first moment token with a value to render at full length\n // even when template is trimmed and first moment token has length of 1.\n forceLength: null,\n\n // userLocale\n // Formatted numerical output is rendered using `toLocaleString`\n // and the locale of the user's environment. Set this option to render\n // numerical output using a different locale. Unit names are rendered\n // and detected using the locale set in moment.js, which can be different\n // from the locale of user's environment.\n userLocale: null,\n\n // usePlural\n // Will automatically singularize or pluralize unit names when they\n // appear in the text associated with each moment token. Standard and\n // short unit labels are singularized and pluralized, based on locale.\n // e.g. in english, \"1 second\" or \"1 sec\" would be rendered instead\n // of \"1 seconds\" or \"1 secs\". The default pluralization function\n // renders a plural label for a value with decimal precision.\n // e.g. \"1.0 seconds\" is never rendered as \"1.0 second\".\n // Label types and pluralization function are configurable in the\n // localeData extensions.\n usePlural: true,\n\n // useLeftUnits\n // The text to the right of each moment token in a format string\n // is treated as that token's units for the purposes of trimming,\n // singularizing, and auto-localizing.\n // e.g. \"h [hours], m [minutes], s [seconds]\".\n // To properly singularize or localize a format string such as\n // \"[hours] h, [minutes] m, [seconds] s\", where the units appear\n // to the left of each moment token, set useLeftUnits to `true`.\n // This plugin is not tested in the context of rtl text.\n useLeftUnits: false,\n\n // useGrouping\n // Enables locale-based digit grouping in the formatted output. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n useGrouping: true,\n\n // useSignificantDigits\n // Treat the `precision` option as the maximum significant digits\n // to be rendered. Precision must be a positive integer. Significant\n // digits extend across unit types,\n // e.g. \"6 hours 37.5 minutes\" represents 4 significant digits.\n // Enabling this option causes token length to be ignored. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n useSignificantDigits: false,\n\n // template\n // The template string used to format the duration. May be a function\n // or a string. Template functions are executed with the `this` binding\n // of the settings object so that template strings may be dynamically\n // generated based on the duration object (accessible via `this.duration`)\n // or any of the other settings. Leading and trailing space, comma,\n // period, and colon characters are trimmed from the resulting string.\n template: defaultFormatTemplate,\n\n // useToLocaleString\n // Set this option to `false` to ignore the `toLocaleString` feature\n // test and force the use of the `formatNumber` fallback function\n // included in this plugin.\n useToLocaleString: true,\n\n // formatNumber fallback options.\n // When `toLocaleString` is detected and passes the feature test, the\n // following options will have no effect: `toLocaleString` will be used\n // for formatting and the grouping separator, decimal separator, and\n // integer digit grouping will be determined by the user locale.\n\n // groupingSeparator\n // The integer digit grouping separator used when using the fallback\n // formatNumber function.\n groupingSeparator: \",\",\n\n // decimalSeparator\n // The decimal separator used when using the fallback formatNumber\n // function.\n decimalSeparator: \".\",\n\n // grouping\n // The integer digit grouping used when using the fallback formatNumber\n // function. Must be an array. The default value of `[3]` gives the\n // standard 3-digit thousand/million/billion digit groupings for the\n // \"en\" locale. Setting this option to `[3, 2]` would generate the\n // thousand/lakh/crore digit groupings used in the \"en-IN\" locale.\n grouping: [3]\n };\n\n context.updateLocale('en', engLocale);\n }\n\n // Run feature tests for `Number#toLocaleString`.\n var toLocaleStringFormatter = function(number, locale, options) {\n return number.toLocaleString(locale, options);\n };\n\n toLocaleStringWorks = toLocaleStringSupportsLocales() && featureTestFormatter(toLocaleStringFormatter);\n toLocaleStringRoundingWorks = toLocaleStringWorks && featureTestFormatterRounding(toLocaleStringFormatter);\n\n // Run feature tests for `Intl.NumberFormat#format`.\n var intlNumberFormatFormatter = function(number, locale, options) {\n if (typeof window !== 'undefined' && window && window.Intl && window.Intl.NumberFormat) {\n return window.Intl.NumberFormat(locale, options).format(number);\n }\n };\n\n intlNumberFormatWorks = featureTestFormatter(intlNumberFormatFormatter);\n intlNumberFormatRoundingWorks = intlNumberFormatWorks && featureTestFormatterRounding(intlNumberFormatFormatter);\n\n // Initialize duration format on the global moment instance.\n init(moment);\n\n // Return the init function so that duration format can be\n // initialized on other moment instances.\n return init;\n});\n","\"use strict\";\n\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"react\", \"prop-types\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"react\"), require(\"prop-types\"));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.React, global.propTypes);\n global.undefined = mod.exports;\n }\n})(void 0, function (exports, _react, _propTypes) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = undefined;\n\n var _react2 = _interopRequireDefault(_react);\n\n var _propTypes2 = _interopRequireDefault(_propTypes);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var PRECISION = 0.0001;\n\n var isEqual = function isEqual(n1, n2) {\n return Math.abs(n1 - n2) < PRECISION;\n };\n\n var TextTruncate = function (_Component) {\n _inherits(TextTruncate, _Component);\n\n function TextTruncate() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, TextTruncate);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(TextTruncate)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"onResize\", function () {\n if (_this.rafId) {\n window.cancelAnimationFrame(_this.rafId);\n }\n\n _this.rafId = window.requestAnimationFrame(_this.update.bind(_assertThisInitialized(_this)));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onToggled\", function (truncated) {\n typeof _this.props.onToggled === 'function' && setTimeout(function () {\n return _this.props.onToggled(truncated);\n }, 0);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTruncated\", function () {\n typeof _this.props.onTruncated === 'function' && setTimeout(function () {\n return _this.props.onTruncated();\n }, 0);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onCalculated\", function () {\n typeof _this.props.onCalculated === 'function' && setTimeout(function () {\n return _this.props.onCalculated();\n }, 0);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"update\", function () {\n var style = window.getComputedStyle(_this.scope);\n var font = [style['font-weight'], style['font-style'], style['font-size'], style['font-family'], style['letter-spacing']].join(' ');\n _this.canvas.font = font;\n\n _this.forceUpdate();\n });\n\n return _this;\n }\n\n _createClass(TextTruncate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var canvas = document.createElement('canvas');\n var docFragment = document.createDocumentFragment();\n var style = window.getComputedStyle(this.scope);\n var font = [style['font-weight'], style['font-style'], style['font-size'], style['font-family']].join(' ');\n docFragment.appendChild(canvas);\n this.canvas = canvas.getContext('2d');\n this.canvas.font = font;\n this.forceUpdate();\n window.addEventListener('resize', this.onResize);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n\n if (this.rafId) {\n window.cancelAnimationFrame(this.rafId);\n }\n }\n }, {\n key: \"measureWidth\",\n value: function measureWidth(text) {\n return this.canvas.measureText(text).width;\n }\n }, {\n key: \"getRenderText\",\n value: function getRenderText() {\n var _this$props = this.props,\n containerClassName = _this$props.containerClassName,\n element = _this$props.element,\n line = _this$props.line,\n onCalculated = _this$props.onCalculated,\n onTruncated = _this$props.onTruncated,\n onToggled = _this$props.onToggled,\n text = _this$props.text,\n textElement = _this$props.textElement,\n textTruncateChild = _this$props.textTruncateChild,\n truncateText = _this$props.truncateText,\n maxCalculateTimes = _this$props.maxCalculateTimes,\n props = _objectWithoutProperties(_this$props, [\"containerClassName\", \"element\", \"line\", \"onCalculated\", \"onTruncated\", \"onToggled\", \"text\", \"textElement\", \"textTruncateChild\", \"truncateText\", \"maxCalculateTimes\"]);\n\n var scopeWidth = this.scope.getBoundingClientRect().width; // return if display:none\n\n if (scopeWidth === 0) {\n return null;\n }\n\n var fullTextWidth = this.measureWidth(text); // return if all of text can be displayed\n\n if (scopeWidth > fullTextWidth || isEqual(scopeWidth, fullTextWidth)) {\n this.onToggled(false);\n return (0, _react.createElement)(textElement, props, text);\n }\n\n var childText = '';\n\n if (textTruncateChild && typeof textTruncateChild.type === 'string') {\n var type = textTruncateChild.type;\n\n if (type.indexOf('span') >= 0 || type.indexOf('a') >= 0) {\n childText = textTruncateChild.props.children;\n }\n }\n\n var currentPos = 1;\n var maxTextLength = text.length;\n var truncatedText = '';\n var splitPos = 0;\n var startPos = 0;\n var displayLine = line;\n var width = 0;\n var lastIsEng = false;\n var isPrevLineWithoutSpace = false;\n var lastPos = 0;\n var lastSpaceIndex = -1;\n var ext = '';\n var loopCnt = 0;\n\n while (displayLine-- > 0) {\n ext = displayLine ? '' : truncateText + (childText ? ' ' + childText : '');\n\n while (currentPos <= maxTextLength) {\n truncatedText = text.substr(startPos, currentPos);\n width = this.measureWidth(truncatedText + ext);\n\n if (width < scopeWidth) {\n splitPos = text.indexOf(' ', currentPos + 1);\n\n if (splitPos === -1) {\n currentPos += 1;\n lastIsEng = false;\n } else {\n lastIsEng = true;\n currentPos = splitPos;\n }\n } else {\n do {\n if (loopCnt++ >= maxCalculateTimes) {\n break;\n }\n\n truncatedText = text.substr(startPos, currentPos);\n\n if (!displayLine) {\n currentPos--;\n }\n\n if (truncatedText[truncatedText.length - 1] === ' ') {\n truncatedText = text.substr(startPos, currentPos - 1);\n }\n\n if (lastIsEng) {\n lastSpaceIndex = truncatedText.lastIndexOf(' ');\n\n if (lastSpaceIndex > -1) {\n currentPos = lastSpaceIndex;\n\n if (displayLine) {\n currentPos++;\n }\n\n truncatedText = text.substr(startPos, currentPos);\n } else {\n currentPos--;\n truncatedText = text.substr(startPos, currentPos);\n }\n } else {\n currentPos--;\n truncatedText = text.substr(startPos, currentPos);\n }\n\n width = this.measureWidth(truncatedText + ext);\n } while ((width > scopeWidth || isEqual(width, scopeWidth)) && truncatedText.length > 0);\n\n startPos += currentPos;\n break;\n }\n }\n\n if (currentPos >= maxTextLength) {\n startPos = maxTextLength;\n break;\n }\n\n if (lastIsEng && !isPrevLineWithoutSpace && text.substr(lastPos, currentPos).indexOf(' ') === -1) {\n isPrevLineWithoutSpace = text.substr(lastPos, currentPos).indexOf(' ') === -1;\n displayLine--;\n }\n\n lastPos = currentPos + 1;\n }\n\n if (startPos === maxTextLength) {\n this.onToggled(false);\n return (0, _react.createElement)(textElement, props, text);\n }\n\n this.onTruncated();\n this.onToggled(true);\n return _react2[\"default\"].createElement(\"span\", props, (0, _react.createElement)(textElement, props, text.substr(0, startPos) + truncateText + ' '), textTruncateChild);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n element = _this$props2.element,\n text = _this$props2.text,\n _this$props2$style = _this$props2.style,\n style = _this$props2$style === void 0 ? {} : _this$props2$style,\n containerClassName = _this$props2.containerClassName,\n line = _this$props2.line,\n onCalculated = _this$props2.onCalculated,\n onTruncated = _this$props2.onTruncated,\n onToggled = _this$props2.onToggled,\n textElement = _this$props2.textElement,\n textTruncateChild = _this$props2.textTruncateChild,\n truncateText = _this$props2.truncateText,\n maxCalculateTimes = _this$props2.maxCalculateTimes,\n props = _objectWithoutProperties(_this$props2, [\"element\", \"text\", \"style\", \"containerClassName\", \"line\", \"onCalculated\", \"onTruncated\", \"onToggled\", \"textElement\", \"textTruncateChild\", \"truncateText\", \"maxCalculateTimes\"]);\n\n var fontWeight = style.fontWeight,\n fontStyle = style.fontStyle,\n fontSize = style.fontSize,\n fontFamily = style.fontFamily;\n var renderText = this.scope && line ? this.getRenderText() : (0, _react.createElement)(textElement, props, text);\n var rootProps = {\n ref: function ref(el) {\n _this2.scope = el;\n },\n className: containerClassName,\n style: {\n overflow: 'hidden',\n fontWeight: fontWeight,\n fontStyle: fontStyle,\n fontSize: fontSize,\n fontFamily: fontFamily\n }\n };\n this.scope && this.onCalculated();\n return (0, _react.createElement)(element, rootProps, renderText);\n }\n }]);\n\n return TextTruncate;\n }(_react.Component);\n\n _defineProperty(TextTruncate, \"propTypes\", {\n containerClassName: _propTypes2[\"default\"].string,\n element: _propTypes2[\"default\"].string,\n line: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].bool]),\n onCalculated: _propTypes2[\"default\"].func,\n onTruncated: _propTypes2[\"default\"].func,\n onToggled: _propTypes2[\"default\"].func,\n text: _propTypes2[\"default\"].string,\n textElement: _propTypes2[\"default\"].elementType,\n textTruncateChild: _propTypes2[\"default\"].node,\n truncateText: _propTypes2[\"default\"].string,\n maxCalculateTimes: _propTypes2[\"default\"].number\n });\n\n _defineProperty(TextTruncate, \"defaultProps\", {\n element: 'div',\n line: 1,\n text: '',\n textElement: 'span',\n truncateText: '…',\n maxCalculateTimes: 10\n });\n\n exports.default = TextTruncate;\n ;\n module.exports = exports.default;\n});\n","import 'moment-duration-format';\n\nimport React from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport TextTruncate from 'react-text-truncate';\n\nimport { Box, Card, CardContent, CardHeader, CardProps, Typography } from '@mui/material';\nimport { AndonLightColor, MetricValue } from 'andoncloud-dashboard-toolkit';\nimport moment from 'moment';\n\nimport makeStyles from './styles';\n\ninterface MetricCardProps extends CardProps {\n title: string;\n metricLabel: React.ReactNode;\n metricValue?: MetricValue;\n progressValue?: MetricValue;\n extraValue?: React.ReactNode;\n rounded?: boolean;\n}\n\nconst MetricCard: React.FC<MetricCardProps> = ({ title, metricLabel, metricValue, extraValue, rounded, ...props }) => {\n const { t } = useTranslation();\n const formatValue = (metricValue: MetricValue) => {\n const value = metricValue.textValue;\n\n if (value) {\n return moment.duration(value, 'seconds').format('m[m] s[s]', {\n useGrouping: false,\n });\n }\n return '';\n };\n const getBackground = () => {\n const statusColor = metricValue?.statusColor;\n\n if (statusColor) {\n switch (statusColor) {\n case AndonLightColor.Green:\n return 'linear-gradient(180deg, #31BF59 0%, #32D74B 100%)';\n case AndonLightColor.Yellow:\n return 'linear-gradient(360deg, #FFD60A 0%, #FFC12F 100%)';\n case AndonLightColor.Red:\n return 'linear-gradient(0deg, #F05C53 0%, #FF3B2F 100%)';\n default:\n return 'rgba(187, 187, 187, 0.75)';\n }\n }\n return 'rgba(255, 255, 255, 0.75)';\n };\n const styles = makeStyles({\n card: { rounded },\n cardOverlay: { background: getBackground() },\n showBgPattern: true,\n });\n\n return (\n <Card sx={styles.card} {...props}>\n <Box sx={styles.cardOverlay} />\n <CardHeader title={<TextTruncate line={1} text={title} />} sx={styles.cardHeader} />\n <CardContent sx={styles.cardContent}>\n <Typography sx={styles.cardLabel}>{metricLabel}</Typography>\n <Typography sx={styles.cardValue}>\n {metricValue ? formatValue(metricValue) : <Trans t={t}>No value for the selected metric</Trans>}\n </Typography>\n {extraValue && <Typography sx={styles.cardExtra}>{extraValue}</Typography>}\n </CardContent>\n </Card>\n );\n};\n\nexport default MetricCard;\n","import { lighten } from '@mui/material';\nimport { SxProps, Theme } from '@mui/system';\n\nimport bgPattern from '../../../assets/bg-pattern.svg';\n\ninterface StylesProps {\n card: {\n rounded?: boolean;\n };\n cardOverlay: {\n background: string;\n };\n showBgPattern: boolean;\n}\n\nconst makeStyles = (props: StylesProps): Record<string, SxProps<Theme>> => ({\n card: {\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(props.showBgPattern && {\n mixBlendMode: 'hard-light',\n background: `url(${bgPattern}), linear-gradient(329.66deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%)`,\n backgroundSize: 'cover',\n }),\n ...(props.card.rounded\n ? {\n borderRadius: '4px',\n }\n : {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }),\n },\n cardOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: -1,\n ...(props.showBgPattern && {\n mixBlendMode: 'hard-light',\n }),\n ...(props.card.rounded\n ? {\n borderRadius: '4px',\n }\n : {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }),\n ...props.cardOverlay,\n },\n cardHeader: {\n height: '20%',\n color: '#2D2D2D',\n borderBottom: '1px solid rgba(113, 113, 113, 0.1)',\n background: 'transparent',\n '& span': {\n fontSize: '1em',\n fontWeight: 500,\n },\n },\n cardContent: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '80%',\n minWidth: 'auto',\n minHeight: 'auto',\n maxWidth: 'none',\n background: 'transparent',\n '& > img': {\n flexBasis: '25%',\n minWidth: '125px',\n maxWidth: '25%',\n },\n },\n cardLabel: {\n width: '100%',\n lineHeight: '2.5em',\n fontSize: '2.3em',\n fontWeight: 700,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textAlign: 'center',\n textOverflow: 'ellipsis',\n },\n cardValue: {\n lineHeight: '1.2em',\n textAlign: 'center',\n fontSize: '2em',\n fontWeight: 700,\n color: lighten('#2D2D2D', 0.1),\n },\n cardExtra: {\n lineHeight: '3em',\n textAlign: 'center',\n fontSize: '1em',\n fontWeight: 600,\n },\n});\n\nexport default makeStyles;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { AndonLightColor, MetricTypeEnum, MetricUnitEnum, MetricValue } from 'andoncloud-dashboard-toolkit';\n\nimport { WorkplaceStatusProps } from '@/types';\n\nimport { getDuration } from './helpers';\nimport MetricCard from './MetricCard';\n\nconst StatusCard: React.FC<WorkplaceStatusProps> = ({ companyConfig, workplace, statusChange }) => {\n const [metricValue, setMetricValue] = useState<MetricValue>({\n id: `last_status_change_${workplace.id}`,\n workplaceId: workplace.id,\n metricId: 'last_status_change',\n type: MetricTypeEnum.Kpi,\n statusColor: statusChange?.reason.statusColor || AndonLightColor.Gray,\n textValue: statusChange ? getDuration(statusChange).toString() : '0',\n unit: MetricUnitEnum.Duration,\n active: true,\n });\n const { t } = useTranslation();\n\n const workplaceConfig = companyConfig?.workplacesConfigs.find((config) => config.workplaceId === workplace.id);\n const orderLabel = !!workplaceConfig?.orderConfig.alternativeName ? t('AlternativeOrder') : t('Order');\n const orderNumber = statusChange?.order?.number;\n\n useEffect(() => {\n let interval: NodeJS.Timeout;\n\n if (statusChange) {\n setMetricValue((metric) => ({\n ...metric,\n statusColor: statusChange.reason.statusColor,\n textValue: getDuration(statusChange).toString(),\n }));\n\n if (!statusChange.finishedAt) {\n interval = setInterval(() => {\n setMetricValue((metric) => ({\n ...metric,\n statusColor: statusChange.reason.statusColor,\n textValue: getDuration(statusChange).toString(),\n }));\n }, 10_000);\n }\n }\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [statusChange]);\n\n return (\n <MetricCard\n title={workplace.name}\n metricLabel={statusChange?.reason.name || ''}\n metricValue={metricValue}\n extraValue={orderNumber && `${orderLabel}: ${orderNumber}`}\n rounded\n />\n );\n};\n\nexport default StatusCard;\n","import React, { useEffect, useState } from 'react';\n\nimport { List, ListItem } from '@mui/material';\nimport type { ListStatusChangesQuery, Workplace } from 'andoncloud-dashboard-toolkit';\n\nimport { WidgetViewProps } from '@/types';\n\nimport StatusCard from '../StatusCard';\n\ninterface WorkplaceDetails {\n workplace: Workplace;\n statusChange?: ListStatusChangesQuery['statusChanges'][0];\n}\n\nconst WidgetView: React.FC<WidgetViewProps> = ({ data, settings }) => {\n const [workplacesDetails, setWorkplacesDetails] = useState<WorkplaceDetails[]>([]);\n\n useEffect(() => {\n const workplacesIds = settings?.workplacesIds || [];\n const statusColors = settings?.statusColors || [];\n const getCurrentStatusChange = (workplace: Workplace) =>\n (data?.statusChanges || [])\n .filter((statusChange) => statusChange.workplaceId === workplace.id)\n .sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime())\n .pop();\n\n setWorkplacesDetails(\n (data.workplaces || [])\n .filter((workplace) => !workplacesIds.length || workplacesIds.indexOf(workplace.id) !== -1)\n .map((workplace) => ({ workplace, statusChange: getCurrentStatusChange(workplace) }))\n .filter(\n (details) =>\n !statusColors.length || statusColors.indexOf(details.statusChange?.reason.statusColor || '') !== -1,\n )\n .sort((a, b) => {\n const aStatusColor = a.statusChange?.reason.statusColor;\n const bStatusColor = b.statusChange?.reason.statusColor;\n\n if (aStatusColor && bStatusColor) {\n return statusColors.indexOf(aStatusColor) - statusColors.indexOf(bStatusColor);\n }\n return aStatusColor ? -1 : 1;\n }),\n );\n }, [data, settings]);\n\n return (\n <List sx={{ display: 'flex', height: '100%', '&:last-child': { marginRight: '10px' } }}>\n {workplacesDetails.slice(0, 6).map(({ workplace, statusChange }) => (\n <ListItem key={workplace.id} sx={{ minWidth: '15.5vw', marginLeft: '10px', padding: 0 }}>\n <StatusCard companyConfig={data.companyConfig} workplace={workplace} statusChange={statusChange} />\n </ListItem>\n ))}\n </List>\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 function resolve(item) {\n return Reference.isRef(item) ? item.getValue(value, parent, context) : item;\n }\n function createError(overrides = {}) {\n const nextParams = 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);\n for (const key of Object.keys(nextParams)) nextParams[key] = resolve(nextParams[key]);\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,\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\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// 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({\n value\n }, options));\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), 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.map(fn => ({\n name: fn.OPTIONS.name,\n params: fn.OPTIONS.params\n })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)\n };\n return description;\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, ctx) => {\n if (ctx.spec.coerce && !ctx.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, ctx) => {\n if (!ctx.spec.coerce || ctx.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, ctx) => {\n if (!ctx.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 (ctx.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, ctx) => {\n // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (!ctx.spec.coerce || ctx.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, _, ctx) => {\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 ctx.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 if (field) {\n let fieldValue;\n let inputValue = value[prop];\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 ?\n // TODO: use _cast, this is double resolving\n field.cast(value[prop], innerOptions) : value[prop];\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = value[prop];\n }\n if (exists !== prop in intermediateValue || intermediateValue[prop] !== value[prop]) {\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 }));\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 }));\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}\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 statusColors: [],\n workplacesIds: [],\n },\n validationSchema: yup.object({\n statusColors: yup.array().of(yup.string()).required(),\n workplacesIds: yup.array().of(yup.string()).required(),\n }),\n };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport {\n StatusChange,\n useGqlClients,\n WidgetProps,\n WorkplaceEvent,\n WorkplaceEventDocument,\n WorkplaceEventSubscriptionPayload,\n} from 'andoncloud-dashboard-toolkit';\nimport { BaseWidget } from 'andoncloud-widget-base';\nimport { print } from 'graphql';\n\nimport locales from '@/locales';\nimport { WidgetData, WidgetSettings } from '@/types';\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>> = ({ url, wsUrl, lang, data, ...widgetProps }) => {\n const { graphqlSdk, gqlWsClient } = useGqlClients({ url, wsUrl, lang });\n const [gqlWsSubscribed, setGqlWsSubscribed] = useState<boolean>(false);\n const [widgetData, setWidgetData] = useState<WidgetData | undefined>(data);\n\n useEffect(() => {\n if (!widgetData && graphqlSdk) {\n graphqlSdk\n .companyConfig()\n .then(({ companyConfig }) =>\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n companyConfig,\n })),\n )\n .catch(() => {});\n\n graphqlSdk\n .listWorkplaces()\n .then(({ workplaces }) =>\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n workplaces,\n })),\n )\n .catch(() => {});\n\n graphqlSdk\n .listStatusChanges()\n .then(({ statusChanges }) =>\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n statusChanges,\n })),\n )\n .catch(() => {});\n }\n if (widgetData?.workplaces && gqlWsClient && !gqlWsSubscribed) {\n widgetData.workplaces.forEach(({ id }) => {\n gqlWsClient.subscribe<WorkplaceEventSubscriptionPayload>(\n print(WorkplaceEventDocument),\n { id },\n ({ event, subject }) => {\n if (event === WorkplaceEvent.StatusChangeCreated) {\n const statusChange = subject as StatusChange;\n\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n statusChanges: [statusChange, ...current.statusChanges],\n }));\n }\n },\n );\n setGqlWsSubscribed(true);\n });\n }\n }, [data, graphqlSdk, gqlWsClient, gqlWsSubscribed, widgetData]);\n\n return (\n <BaseWidget\n url={url}\n lang={lang}\n locales={locales}\n data={widgetData}\n WidgetView={WidgetView}\n getSettingsFormProps={getSettingsFormProps}\n SettingsFormContent={SettingsFormContent}\n version={LIBRARY_VERSION}\n data-testid=\"workplaces-status-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 'Workplaces statuses';\n case 'pl':\n return 'Statusy stanowisk';\n default:\n return 'workplaces-status-widget';\n }\n};\n\nexport const permissions = [];\n\nexport { LIBRARY_VERSION as version } from './version';\n"],"names":["nodejsCustomInspectSymbol$1","Symbol","for","undefined","defineInspect","classObject","fn","prototype","toJSON","Boolean","Error","invariant","inspect","nodejsCustomInspectSymbol","isNode","maybeNode","kind","_typeof","obj","iterator","constructor","formatValue","value","seenValues","JSON","stringify","name","concat","previouslySeenValues","indexOf","customInspectFn","object","String","getCustomFn","customValue","call","Array","isArray","array","length","len","Math","min","remaining","items","i","push","join","formatArray","keys","Object","tag","toString","replace","getObjectTag","map","key","formatObject","formatObjectValue","Location","startToken","endToken","source","this","start","end","Token","line","column","prev","next","QueryDocumentKeys","Name","Document","OperationDefinition","VariableDefinition","Variable","SelectionSet","Field","Argument","FragmentSpread","InlineFragment","FragmentDefinition","IntValue","FloatValue","StringValue","BooleanValue","NullValue","EnumValue","ListValue","ObjectValue","ObjectField","Directive","NamedType","ListType","NonNullType","SchemaDefinition","OperationTypeDefinition","ScalarTypeDefinition","ObjectTypeDefinition","FieldDefinition","InputValueDefinition","InterfaceTypeDefinition","UnionTypeDefinition","EnumTypeDefinition","EnumValueDefinition","InputObjectTypeDefinition","DirectiveDefinition","SchemaExtension","ScalarTypeExtension","ObjectTypeExtension","InterfaceTypeExtension","UnionTypeExtension","EnumTypeExtension","InputObjectTypeExtension","BREAK","freeze","getVisitFn","visitor","isLeaving","kindVisitor","kindSpecificVisitor","leave","enter","specificVisitor","specificKindVisitor","printDocASTReducer","node","definitions","op","operation","varDefs","wrap","variableDefinitions","directives","selectionSet","_ref","variable","type","defaultValue","_ref2","block","selections","_ref3","args","arguments","prefix","alias","argsLine","indent","_ref4","_ref5","_ref6","typeCondition","_ref7","_ref8","_ref9","_ref10","indentation","preferMultipleLines","isSingleLine","printAsMultipleLines","result","printBlockString","_ref11","_ref12","_ref13","values","_ref14","fields","_ref15","_ref16","_ref17","_ref18","_ref19","addDescription","_ref20","operationTypes","_ref21","_ref22","_ref23","interfaces","_ref24","hasMultilineItems","_ref25","_ref26","_ref27","types","_ref28","_ref29","_ref30","_ref31","repeatable","locations","_ref32","_ref33","_ref34","_ref35","_ref36","_ref37","_ref38","cb","description","maybeArray","_maybeArray$filter$jo","separator","filter","x","maybeString","str","isMultiline","some","resources","en","translation","pl","LIBRARY_VERSION","TabPanel","index","React","createElement","Box","role","hidden","id","sx","mt","children","SettingsFormContent","_data$workplaces","data","formProps","_useState","useState","selectedTab","setSelectedTab","t","useTranslation","statusOptions","useMemo","label","useEffect","_formProps$values$wor","workplacesIds","workplaces","setFieldValue","Fragment","Tabs","onChange","_","centered","borderBottom","color","Tab","SortableSelect","placeholder","options","selected","statusColors","List","maxHeight","overflowY","workplace","ListItem","ListItemButton","onClick","workplaceId","selectedWorkplacesIds","dense","ListItemIcon","Checkbox","edge","checked","tabIndex","disableRipple","ListItemText","primary","module","exports","hookCallback","hooks","apply","input","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","Date","arr","res","arrLen","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","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","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","argLen","slice","stack","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","match","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","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","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","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","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","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","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","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","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","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","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","zone","isLocal","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","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","Infinity","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","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","getDuration","statusChange","finishedAt","startedAt","moment","root","require$$0","momentDurationFormatSetup","toLocaleStringWorks","toLocaleStringRoundingWorks","intlNumberFormatWorks","intlNumberFormatRoundingWorks","bubbles","targets","stringIncludes","search","repeatZero","qty","cachedNumberFormat","cacheKey","cache","Intl","NumberFormat","formatNumber","userLocale","integerString","fractionString","exponentString","useToLocaleString","useGrouping","grouping","maximumSignificantDigits","minimumIntegerDigits","fractionDigits","groupingSeparator","decimalSeparator","roundingOptions","localeStringOptions","maximumFractionDigits","minimumFractionDigits","toLocaleString","toPrecision","integerLength","fractionLength","digitCount","digits","digitsArray","reverse","carry","stringRound","exponent","group","formattedString","durationLabelCompare","engLocale","durationLabelsStandard","S","SS","durationLabelsShort","durationTimeTemplates","HMS","HM","MS","durationLabelTypes","durationPluralKey","integerValue","decimalValue","find","each","pluck","compact","unique","intersection","_b","rest","any","featureTestFormatterRounding","formatter","featureTestFormatter","passed","durationsFormat","durations","settings","precision","template","returnMomentTypes","formattedDurations","dur","outputTypes","child","flatten","largest","durationFormat","isNegative","remainder","remainderMonths","momentTokens","tokenDefs","escape","general","typeMap","tokenizer","stopTrim","_durationTimeTemplates","useLeftUnits","usePlural","forceLength","trunc","useSignificantDigits","significantDigits","significantDigitsCache","minValue","isMinValue","maxValue","isMaxValue","trim","trimIncludes","rBoth","rAll","trimLarge","trimSmall","trimMid","trimFinal","rawTokens","text","currentToken","momentTypes","momentType","rawValue","isSmallest","isLargest","wholeValue","tokenLength","truncMethod","truncate","places","factor","foundFirst","bubbled","formatOptions","formattedValue","formattedValueEn","formattedValueMS","findType","bubble","bubbleMomentType","target","targetMomentType","initial","outputType","pluralKey","labels","localeDataKey","labelType","labelKey","durationGetLabels","autoLocalized","pluralizedLabels","_durationLabelTypes","defaultFormatTemplate","firstType","lastType","findLast","init","context","toLocaleStringFormatter","toLocaleStringSupportsLocales","intlNumberFormatFormatter","window","_react","_propTypes","defineProperty","default","_react2","_interopRequireDefault","_propTypes2","__esModule","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","p","_defineProperty","enumerable","configurable","writable","isEqual","n1","n2","TextTruncate","_Component","_getPrototypeOf2","_this","instance","Constructor","TypeError","_classCallCheck","_len","_key","_possibleConstructorReturn","rafId","cancelAnimationFrame","requestAnimationFrame","update","bind","truncated","props","onToggled","setTimeout","onTruncated","onCalculated","style","getComputedStyle","scope","font","canvas","forceUpdate","subClass","superClass","create","_inherits","protoProps","document","docFragment","createDocumentFragment","appendChild","getContext","addEventListener","onResize","removeEventListener","measureText","width","_this$props","textElement","textTruncateChild","truncateText","maxCalculateTimes","scopeWidth","getBoundingClientRect","fullTextWidth","measureWidth","childText","currentPos","maxTextLength","truncatedText","splitPos","startPos","displayLine","lastIsEng","isPrevLineWithoutSpace","lastPos","lastSpaceIndex","ext","loopCnt","lastIndexOf","_this2","_this$props2","element","_this$props2$style","containerClassName","fontWeight","fontStyle","fontSize","fontFamily","renderText","getRenderText","rootProps","ref","el","className","descriptor","_defineProperties","Component","oneOfType","bool","elementType","require$$1","MetricCard","title","metricLabel","metricValue","extraValue","rounded","_excluded","styles","card","_extends","position","height","showBgPattern","mixBlendMode","background","bgPattern","backgroundSize","borderRadius","borderTopLeftRadius","borderTopRightRadius","cardOverlay","top","left","zIndex","cardHeader","cardContent","display","flexDirection","alignItems","justifyContent","minWidth","minHeight","maxWidth","flexBasis","cardLabel","lineHeight","whiteSpace","textAlign","textOverflow","cardValue","lighten","cardExtra","makeStyles","statusColor","AndonLightColor","Green","Yellow","Red","getBackground","Card","CardHeader","CardContent","Typography","textValue","Trans","StatusCard","_statusChange$order","companyConfig","metricId","MetricTypeEnum","Kpi","reason","Gray","MetricUnitEnum","active","setMetricValue","workplaceConfig","workplacesConfigs","orderLabel","orderConfig","alternativeName","orderNumber","order","interval","metric","setInterval","clearInterval","WidgetView","workplacesDetails","setWorkplacesDetails","getCurrentStatusChange","statusChanges","pop","details","_details$statusChange","_a$statusChange","_b$statusChange","aStatusColor","bStatusColor","marginRight","marginLeft","padding","Cache","maxSize","_maxSize","clear","_size","_values","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","pathCache","setCache","getCache","propertyExpr","normalizePath","path","part","safe","segments","reduce","isQuoted","thisArg","iter","idx","isBracket","shouldBeQuoted","hasLeadingNumber","hasSpecialChars","reWords","words","tinyCase","acc","toposort_1","edges","toposort","Set","uniqueNodes","nodes","cursor","sorted","visited","outgoingEdges","Map","has","makeOutgoingEdges","nodesHash","makeNodesHash","visit","predecessors","nodeRep","outgoing","delete","errorToString","regExpToString","symbolToString","SYMBOL_REGEXP","printSimpleValue","quoteStrings","typeOf","printNumber","printValue","_Symbol$toStringTag","_Symbol$hasInstance","_Symbol$toStringTag2","strReg","toStringTag","ValidationErrorNoStack","errorOrErrors","message","params","errors","inner","err","ValidationError","isError","hasInstance","formatError","originalPath","disableStack","errorNoStack","super","captureStackTrace","inst","mixed","required","defined","notNull","oneOf","notOneOf","notType","originalValue","castMsg","email","url","uuid","datetime","datetime_precision","datetime_offset","uppercase","noUnknown","exact","tuple","spec","typeLen","lessThan","moreThan","positive","negative","integer","boolean","isValue","isSchema","__isYupSchema__","Condition","fromOptions","refs","then","otherwise","is","check","every","schema","_branch","branch","builder","resolve","getValue","parent","Reference","isContext","isSibling","cast","describe","isRef","__isYupRef","isAbsent","createValidation","validate","panic","skipAbsent","abortEarly","disableStackTrace","createError","overrides","nextParams","error","ctx","handleResult","validOrError","handleError","_result","sync","Promise","OPTIONS","getIn","lastPart","lastPartDebug","_part","isTuple","innerType","parentPath","ReferenceSet","resolveAll","merge","newItems","removeItems","src","seen","copy","v","entries","Schema","deps","tests","transforms","conditions","_mutate","internalTests","_whitelist","_blacklist","exclusiveTests","_typeCheck","withMutation","typeError","strip","recursive","nullable","optional","coerce","nonNullable","_type","meta","before","combined","mergedSpec","isType","prevSchema","condition","resolveOptions","_options$strict","_options$abortEarly","_options$recursive","_options$disableStack","resolvedSchema","allowOptionality","assert","_cast","formattedResult","prevValue","getDefault","_validate","_value","initialTests","runTests","initialErrors","runOptions","fired","panicOnce","nextOnce","count","nestedErrors","asNestedTest","originalParent","isIndex","testOptions","includes","_options$disableStack2","reject","parsed","validated","validateSync","_options$disableStack3","isValidSync","_getDefault","def","nullability","optionality","notRequired","transform","opts","isExclusive","exclusive","when","dep","enums","whiteList","valids","resolved","blacklist","invalids","list","findIndex","method","isoReg","parseDateStruct","_regexResult$7$length","_regexResult$","regexResult","toNumber","substring","z","plusMinus","hourOffset","minuteOffset","Number","rEmail","rUrl","rUUID","rIsoDateTime","isTrimmed","objStringTag","create$6","StringSchema","_raw","strValue","excludeEmptyString","allowOffset","struct","ensure","DateSchema","parse","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","exists","fieldValue","inputValue","fieldSpec","objectErrors","fieldErrors","nextFields","schemaOrRef","dft","_innerOptions","excludedEdges","excludes","addNode","depPath","sortFields","additions","pick","picked","omit","fromGetter","newObj","last","deepHas","json","unknownKeys","noAllow","allow","transformKeys","camelCase","snakeCase","constantCase","_innerOptions2","create$2","ArraySchema","_opts","castArray","castElement","arrayErrors","_options$originalValu2","_options$originalValu","innerTypeErrors","of","original","rejector","getSettingsFormProps","custom","initialValues","validationSchema","yup","wsUrl","widgetProps","_useGqlClients","useGqlClients","graphqlSdk","gqlWsClient","gqlWsSubscribed","setGqlWsSubscribed","_useState2","widgetData","setWidgetData","current","listWorkplaces","listStatusChanges","subscribe","visitorKeys","inArray","edits","ancestors","newRoot","isEdited","_i2","_Object$keys2","editOffset","editKey","editValue","splice","_visitorKeys$node$kin","visitFn","WorkplaceEventDocument","event","WorkplaceEvent","StatusChangeCreated","subject","BaseWidget"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/graphql/jsutils/nodejsCustomInspectSymbol.mjs","../node_modules/graphql/jsutils/defineInspect.mjs","../node_modules/graphql/jsutils/invariant.mjs","../node_modules/graphql/language/ast.mjs","../node_modules/graphql/jsutils/inspect.mjs","../node_modules/graphql/language/visitor.mjs","../node_modules/graphql/language/printer.mjs","../node_modules/graphql/language/blockString.mjs","../src/locales/index.ts","../src/version.ts","../src/components/TabPanel/index.tsx","../src/components/SettingsFormContent/index.tsx","../node_modules/moment/moment.js","../src/components/StatusCard/helpers.ts","../node_modules/moment-duration-format/lib/moment-duration-format.js","../node_modules/react-text-truncate/lib/index.js","../src/components/StatusCard/MetricCard/index.tsx","../src/components/StatusCard/MetricCard/styles.ts","../src/components/StatusCard/index.tsx","../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":["// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\nvar nodejsCustomInspectSymbol = typeof Symbol === 'function' && typeof Symbol.for === 'function' ? Symbol.for('nodejs.util.inspect.custom') : undefined;\nexport default nodejsCustomInspectSymbol;\n","import invariant from \"./invariant.mjs\";\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\n/**\n * The `defineInspect()` function defines `inspect()` prototype method as alias of `toJSON`\n */\n\nexport default function defineInspect(classObject) {\n var fn = classObject.prototype.toJSON;\n typeof fn === 'function' || invariant(0);\n classObject.prototype.inspect = fn; // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\n if (nodejsCustomInspectSymbol) {\n classObject.prototype[nodejsCustomInspectSymbol] = fn;\n }\n}\n","export default function invariant(condition, message) {\n var booleanCondition = Boolean(condition); // istanbul ignore else (See transformation done in './resources/inlineInvariant.js')\n\n if (!booleanCondition) {\n throw new Error(message != null ? message : 'Unexpected invariant triggered.');\n }\n}\n","import defineInspect from \"../jsutils/defineInspect.mjs\";\n\n/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport var Location = /*#__PURE__*/function () {\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The Token at which this Node begins.\n */\n\n /**\n * The Token at which this Node ends.\n */\n\n /**\n * The Source document the AST represents.\n */\n function Location(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n }\n\n var _proto = Location.prototype;\n\n _proto.toJSON = function toJSON() {\n return {\n start: this.start,\n end: this.end\n };\n };\n\n return Location;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Location);\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport var Token = /*#__PURE__*/function () {\n /**\n * The kind of Token.\n */\n\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The 1-indexed line number on which this Token appears.\n */\n\n /**\n * The 1-indexed column number at which this Token begins.\n */\n\n /**\n * For non-punctuation tokens, represents the interpreted value of the token.\n */\n\n /**\n * Tokens exist as nodes in a double-linked-list amongst all tokens\n * including ignored tokens. <SOF> is always the first node and <EOF>\n * the last.\n */\n function Token(kind, start, end, line, column, prev, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column;\n this.value = value;\n this.prev = prev;\n this.next = null;\n }\n\n var _proto2 = Token.prototype;\n\n _proto2.toJSON = function toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column\n };\n };\n\n return Token;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Token);\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n return maybeNode != null && typeof maybeNode.kind === 'string';\n}\n/**\n * The list of all possible AST node types.\n */\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-disable flowtype/no-weak-types */\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\nvar MAX_ARRAY_LENGTH = 10;\nvar MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport default function inspect(value) {\n return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n switch (_typeof(value)) {\n case 'string':\n return JSON.stringify(value);\n\n case 'function':\n return value.name ? \"[function \".concat(value.name, \"]\") : '[function]';\n\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n return formatObjectValue(value, seenValues);\n\n default:\n return String(value);\n }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n if (previouslySeenValues.indexOf(value) !== -1) {\n return '[Circular]';\n }\n\n var seenValues = [].concat(previouslySeenValues, [value]);\n var customInspectFn = getCustomFn(value);\n\n if (customInspectFn !== undefined) {\n var customValue = customInspectFn.call(value); // check for infinite recursion\n\n if (customValue !== value) {\n return typeof customValue === 'string' ? customValue : formatValue(customValue, seenValues);\n }\n } else if (Array.isArray(value)) {\n return formatArray(value, seenValues);\n }\n\n return formatObject(value, seenValues);\n}\n\nfunction formatObject(object, seenValues) {\n var keys = Object.keys(object);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[' + getObjectTag(object) + ']';\n }\n\n var properties = keys.map(function (key) {\n var value = formatValue(object[key], seenValues);\n return key + ': ' + value;\n });\n return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n if (array.length === 0) {\n return '[]';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[Array]';\n }\n\n var len = Math.min(MAX_ARRAY_LENGTH, array.length);\n var remaining = array.length - len;\n var items = [];\n\n for (var i = 0; i < len; ++i) {\n items.push(formatValue(array[i], seenValues));\n }\n\n if (remaining === 1) {\n items.push('... 1 more item');\n } else if (remaining > 1) {\n items.push(\"... \".concat(remaining, \" more items\"));\n }\n\n return '[' + items.join(', ') + ']';\n}\n\nfunction getCustomFn(object) {\n var customInspectFn = object[String(nodejsCustomInspectSymbol)];\n\n if (typeof customInspectFn === 'function') {\n return customInspectFn;\n }\n\n if (typeof object.inspect === 'function') {\n return object.inspect;\n }\n}\n\nfunction getObjectTag(object) {\n var tag = Object.prototype.toString.call(object).replace(/^\\[object /, '').replace(/]$/, '');\n\n if (tag === 'Object' && typeof object.constructor === 'function') {\n var name = object.constructor.name;\n\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n }\n\n return tag;\n}\n","import inspect from \"../jsutils/inspect.mjs\";\nimport { isNode } from \"./ast.mjs\";\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\nexport var QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: ['name', // Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n 'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['description', 'directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n InterfaceTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields']\n};\nexport var BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * const editedAST = visit(ast, {\n * enter(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: skip visiting this node\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * },\n * leave(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: no action\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * }\n * });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * visit(ast, {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n * a specific kind.\n *\n * visit(ast, {\n * Kind: {\n * enter(node) {\n * // enter the \"Kind\" node\n * }\n * leave(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * visit(ast, {\n * enter(node) {\n * // enter any node\n * },\n * leave(node) {\n * // leave any node\n * }\n * })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n * visit(ast, {\n * enter: {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * },\n * leave: {\n * Kind(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n */\n\nexport function visit(root, visitor) {\n var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n /* eslint-disable no-undef-init */\n var stack = undefined;\n var inArray = Array.isArray(root);\n var keys = [root];\n var index = -1;\n var edits = [];\n var node = undefined;\n var key = undefined;\n var parent = undefined;\n var path = [];\n var ancestors = [];\n var newRoot = root;\n /* eslint-enable no-undef-init */\n\n do {\n index++;\n var isLeaving = index === keys.length;\n var isEdited = isLeaving && edits.length !== 0;\n\n if (isLeaving) {\n key = ancestors.length === 0 ? undefined : path[path.length - 1];\n node = parent;\n parent = ancestors.pop();\n\n if (isEdited) {\n if (inArray) {\n node = node.slice();\n } else {\n var clone = {};\n\n for (var _i2 = 0, _Object$keys2 = Object.keys(node); _i2 < _Object$keys2.length; _i2++) {\n var k = _Object$keys2[_i2];\n clone[k] = node[k];\n }\n\n node = clone;\n }\n\n var editOffset = 0;\n\n for (var ii = 0; ii < edits.length; ii++) {\n var editKey = edits[ii][0];\n var editValue = edits[ii][1];\n\n if (inArray) {\n editKey -= editOffset;\n }\n\n if (inArray && editValue === null) {\n node.splice(editKey, 1);\n editOffset++;\n } else {\n node[editKey] = editValue;\n }\n }\n }\n\n index = stack.index;\n keys = stack.keys;\n edits = stack.edits;\n inArray = stack.inArray;\n stack = stack.prev;\n } else {\n key = parent ? inArray ? index : keys[index] : undefined;\n node = parent ? parent[key] : newRoot;\n\n if (node === null || node === undefined) {\n continue;\n }\n\n if (parent) {\n path.push(key);\n }\n }\n\n var result = void 0;\n\n if (!Array.isArray(node)) {\n if (!isNode(node)) {\n throw new Error(\"Invalid AST Node: \".concat(inspect(node), \".\"));\n }\n\n var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n\n if (visitFn) {\n result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n if (result === BREAK) {\n break;\n }\n\n if (result === false) {\n if (!isLeaving) {\n path.pop();\n continue;\n }\n } else if (result !== undefined) {\n edits.push([key, result]);\n\n if (!isLeaving) {\n if (isNode(result)) {\n node = result;\n } else {\n path.pop();\n continue;\n }\n }\n }\n }\n }\n\n if (result === undefined && isEdited) {\n edits.push([key, node]);\n }\n\n if (isLeaving) {\n path.pop();\n } else {\n var _visitorKeys$node$kin;\n\n stack = {\n inArray: inArray,\n index: index,\n keys: keys,\n edits: edits,\n prev: stack\n };\n inArray = Array.isArray(node);\n keys = inArray ? node : (_visitorKeys$node$kin = visitorKeys[node.kind]) !== null && _visitorKeys$node$kin !== void 0 ? _visitorKeys$node$kin : [];\n index = -1;\n edits = [];\n\n if (parent) {\n ancestors.push(parent);\n }\n\n parent = node;\n }\n } while (stack !== undefined);\n\n if (edits.length !== 0) {\n newRoot = edits[edits.length - 1][1];\n }\n\n return newRoot;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nexport function visitInParallel(visitors) {\n var skipping = new Array(visitors.length);\n return {\n enter: function enter(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n false);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === false) {\n skipping[i] = node;\n } else if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined) {\n return result;\n }\n }\n }\n }\n },\n leave: function leave(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n true);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined && result !== false) {\n return result;\n }\n }\n } else if (skipping[i] === node) {\n skipping[i] = null;\n }\n }\n }\n };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n var kindVisitor = visitor[kind];\n\n if (kindVisitor) {\n if (!isLeaving && typeof kindVisitor === 'function') {\n // { Kind() {} }\n return kindVisitor;\n }\n\n var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n\n if (typeof kindSpecificVisitor === 'function') {\n // { Kind: { enter() {}, leave() {} } }\n return kindSpecificVisitor;\n }\n } else {\n var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n\n if (specificVisitor) {\n if (typeof specificVisitor === 'function') {\n // { enter() {}, leave() {} }\n return specificVisitor;\n }\n\n var specificKindVisitor = specificVisitor[kind];\n\n if (typeof specificKindVisitor === 'function') {\n // { enter: { Kind() {} }, leave: { Kind() {} } }\n return specificKindVisitor;\n }\n }\n }\n}\n","import { visit } from \"./visitor.mjs\";\nimport { printBlockString } from \"./blockString.mjs\";\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n return visit(ast, {\n leave: printDocASTReducer\n });\n}\nvar MAX_LINE_LENGTH = 80; // TODO: provide better type coverage in future\n\nvar printDocASTReducer = {\n Name: function Name(node) {\n return node.value;\n },\n Variable: function Variable(node) {\n return '$' + node.name;\n },\n // Document\n Document: function Document(node) {\n return join(node.definitions, '\\n\\n') + '\\n';\n },\n OperationDefinition: function OperationDefinition(node) {\n var op = node.operation;\n var name = node.name;\n var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n var directives = join(node.directives, ' ');\n var selectionSet = node.selectionSet; // Anonymous queries with no directives or variable definitions can use\n // the query short form.\n\n return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n },\n VariableDefinition: function VariableDefinition(_ref) {\n var variable = _ref.variable,\n type = _ref.type,\n defaultValue = _ref.defaultValue,\n directives = _ref.directives;\n return variable + ': ' + type + wrap(' = ', defaultValue) + wrap(' ', join(directives, ' '));\n },\n SelectionSet: function SelectionSet(_ref2) {\n var selections = _ref2.selections;\n return block(selections);\n },\n Field: function Field(_ref3) {\n var alias = _ref3.alias,\n name = _ref3.name,\n args = _ref3.arguments,\n directives = _ref3.directives,\n selectionSet = _ref3.selectionSet;\n var prefix = wrap('', alias, ': ') + name;\n var argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n if (argsLine.length > MAX_LINE_LENGTH) {\n argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n }\n\n return join([argsLine, join(directives, ' '), selectionSet], ' ');\n },\n Argument: function Argument(_ref4) {\n var name = _ref4.name,\n value = _ref4.value;\n return name + ': ' + value;\n },\n // Fragments\n FragmentSpread: function FragmentSpread(_ref5) {\n var name = _ref5.name,\n directives = _ref5.directives;\n return '...' + name + wrap(' ', join(directives, ' '));\n },\n InlineFragment: function InlineFragment(_ref6) {\n var typeCondition = _ref6.typeCondition,\n directives = _ref6.directives,\n selectionSet = _ref6.selectionSet;\n return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n },\n FragmentDefinition: function FragmentDefinition(_ref7) {\n var name = _ref7.name,\n typeCondition = _ref7.typeCondition,\n variableDefinitions = _ref7.variableDefinitions,\n directives = _ref7.directives,\n selectionSet = _ref7.selectionSet;\n return (// Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n \"fragment \".concat(name).concat(wrap('(', join(variableDefinitions, ', '), ')'), \" \") + \"on \".concat(typeCondition, \" \").concat(wrap('', join(directives, ' '), ' ')) + selectionSet\n );\n },\n // Value\n IntValue: function IntValue(_ref8) {\n var value = _ref8.value;\n return value;\n },\n FloatValue: function FloatValue(_ref9) {\n var value = _ref9.value;\n return value;\n },\n StringValue: function StringValue(_ref10, key) {\n var value = _ref10.value,\n isBlockString = _ref10.block;\n return isBlockString ? printBlockString(value, key === 'description' ? '' : ' ') : JSON.stringify(value);\n },\n BooleanValue: function BooleanValue(_ref11) {\n var value = _ref11.value;\n return value ? 'true' : 'false';\n },\n NullValue: function NullValue() {\n return 'null';\n },\n EnumValue: function EnumValue(_ref12) {\n var value = _ref12.value;\n return value;\n },\n ListValue: function ListValue(_ref13) {\n var values = _ref13.values;\n return '[' + join(values, ', ') + ']';\n },\n ObjectValue: function ObjectValue(_ref14) {\n var fields = _ref14.fields;\n return '{' + join(fields, ', ') + '}';\n },\n ObjectField: function ObjectField(_ref15) {\n var name = _ref15.name,\n value = _ref15.value;\n return name + ': ' + value;\n },\n // Directive\n Directive: function Directive(_ref16) {\n var name = _ref16.name,\n args = _ref16.arguments;\n return '@' + name + wrap('(', join(args, ', '), ')');\n },\n // Type\n NamedType: function NamedType(_ref17) {\n var name = _ref17.name;\n return name;\n },\n ListType: function ListType(_ref18) {\n var type = _ref18.type;\n return '[' + type + ']';\n },\n NonNullType: function NonNullType(_ref19) {\n var type = _ref19.type;\n return type + '!';\n },\n // Type System Definitions\n SchemaDefinition: addDescription(function (_ref20) {\n var directives = _ref20.directives,\n operationTypes = _ref20.operationTypes;\n return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n }),\n OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n var operation = _ref21.operation,\n type = _ref21.type;\n return operation + ': ' + type;\n },\n ScalarTypeDefinition: addDescription(function (_ref22) {\n var name = _ref22.name,\n directives = _ref22.directives;\n return join(['scalar', name, join(directives, ' ')], ' ');\n }),\n ObjectTypeDefinition: addDescription(function (_ref23) {\n var name = _ref23.name,\n interfaces = _ref23.interfaces,\n directives = _ref23.directives,\n fields = _ref23.fields;\n return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n FieldDefinition: addDescription(function (_ref24) {\n var name = _ref24.name,\n args = _ref24.arguments,\n type = _ref24.type,\n directives = _ref24.directives;\n return name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + ': ' + type + wrap(' ', join(directives, ' '));\n }),\n InputValueDefinition: addDescription(function (_ref25) {\n var name = _ref25.name,\n type = _ref25.type,\n defaultValue = _ref25.defaultValue,\n directives = _ref25.directives;\n return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n }),\n InterfaceTypeDefinition: addDescription(function (_ref26) {\n var name = _ref26.name,\n interfaces = _ref26.interfaces,\n directives = _ref26.directives,\n fields = _ref26.fields;\n return join(['interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n UnionTypeDefinition: addDescription(function (_ref27) {\n var name = _ref27.name,\n directives = _ref27.directives,\n types = _ref27.types;\n return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n }),\n EnumTypeDefinition: addDescription(function (_ref28) {\n var name = _ref28.name,\n directives = _ref28.directives,\n values = _ref28.values;\n return join(['enum', name, join(directives, ' '), block(values)], ' ');\n }),\n EnumValueDefinition: addDescription(function (_ref29) {\n var name = _ref29.name,\n directives = _ref29.directives;\n return join([name, join(directives, ' ')], ' ');\n }),\n InputObjectTypeDefinition: addDescription(function (_ref30) {\n var name = _ref30.name,\n directives = _ref30.directives,\n fields = _ref30.fields;\n return join(['input', name, join(directives, ' '), block(fields)], ' ');\n }),\n DirectiveDefinition: addDescription(function (_ref31) {\n var name = _ref31.name,\n args = _ref31.arguments,\n repeatable = _ref31.repeatable,\n locations = _ref31.locations;\n return 'directive @' + name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + (repeatable ? ' repeatable' : '') + ' on ' + join(locations, ' | ');\n }),\n SchemaExtension: function SchemaExtension(_ref32) {\n var directives = _ref32.directives,\n operationTypes = _ref32.operationTypes;\n return join(['extend schema', join(directives, ' '), block(operationTypes)], ' ');\n },\n ScalarTypeExtension: function ScalarTypeExtension(_ref33) {\n var name = _ref33.name,\n directives = _ref33.directives;\n return join(['extend scalar', name, join(directives, ' ')], ' ');\n },\n ObjectTypeExtension: function ObjectTypeExtension(_ref34) {\n var name = _ref34.name,\n interfaces = _ref34.interfaces,\n directives = _ref34.directives,\n fields = _ref34.fields;\n return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n InterfaceTypeExtension: function InterfaceTypeExtension(_ref35) {\n var name = _ref35.name,\n interfaces = _ref35.interfaces,\n directives = _ref35.directives,\n fields = _ref35.fields;\n return join(['extend interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n UnionTypeExtension: function UnionTypeExtension(_ref36) {\n var name = _ref36.name,\n directives = _ref36.directives,\n types = _ref36.types;\n return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n },\n EnumTypeExtension: function EnumTypeExtension(_ref37) {\n var name = _ref37.name,\n directives = _ref37.directives,\n values = _ref37.values;\n return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n },\n InputObjectTypeExtension: function InputObjectTypeExtension(_ref38) {\n var name = _ref38.name,\n directives = _ref38.directives,\n fields = _ref38.fields;\n return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n }\n};\n\nfunction addDescription(cb) {\n return function (node) {\n return join([node.description, cb(node)], '\\n');\n };\n}\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\n\nfunction join(maybeArray) {\n var _maybeArray$filter$jo;\n\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (_maybeArray$filter$jo = maybeArray === null || maybeArray === void 0 ? void 0 : maybeArray.filter(function (x) {\n return x;\n }).join(separator)) !== null && _maybeArray$filter$jo !== void 0 ? _maybeArray$filter$jo : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\n\n\nfunction block(array) {\n return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\n\nfunction wrap(start, maybeString) {\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n return maybeString != null && maybeString !== '' ? start + maybeString + end : '';\n}\n\nfunction indent(str) {\n return wrap(' ', str.replace(/\\n/g, '\\n '));\n}\n\nfunction isMultiline(str) {\n return str.indexOf('\\n') !== -1;\n}\n\nfunction hasMultilineItems(maybeArray) {\n return maybeArray != null && maybeArray.some(isMultiline);\n}\n","/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\nexport function dedentBlockStringValue(rawString) {\n // Expand a block string's raw value into independent lines.\n var lines = rawString.split(/\\r\\n|[\\n\\r]/g); // Remove common indentation from all lines but first.\n\n var commonIndent = getBlockStringIndentation(rawString);\n\n if (commonIndent !== 0) {\n for (var i = 1; i < lines.length; i++) {\n lines[i] = lines[i].slice(commonIndent);\n }\n } // Remove leading and trailing blank lines.\n\n\n var startLine = 0;\n\n while (startLine < lines.length && isBlank(lines[startLine])) {\n ++startLine;\n }\n\n var endLine = lines.length;\n\n while (endLine > startLine && isBlank(lines[endLine - 1])) {\n --endLine;\n } // Return a string of the lines joined with U+000A.\n\n\n return lines.slice(startLine, endLine).join('\\n');\n}\n\nfunction isBlank(str) {\n for (var i = 0; i < str.length; ++i) {\n if (str[i] !== ' ' && str[i] !== '\\t') {\n return false;\n }\n }\n\n return true;\n}\n/**\n * @internal\n */\n\n\nexport function getBlockStringIndentation(value) {\n var _commonIndent;\n\n var isFirstLine = true;\n var isEmptyLine = true;\n var indent = 0;\n var commonIndent = null;\n\n for (var i = 0; i < value.length; ++i) {\n switch (value.charCodeAt(i)) {\n case 13:\n // \\r\n if (value.charCodeAt(i + 1) === 10) {\n ++i; // skip \\r\\n as one symbol\n }\n\n // falls through\n\n case 10:\n // \\n\n isFirstLine = false;\n isEmptyLine = true;\n indent = 0;\n break;\n\n case 9: // \\t\n\n case 32:\n // <space>\n ++indent;\n break;\n\n default:\n if (isEmptyLine && !isFirstLine && (commonIndent === null || indent < commonIndent)) {\n commonIndent = indent;\n }\n\n isEmptyLine = false;\n }\n }\n\n return (_commonIndent = commonIndent) !== null && _commonIndent !== void 0 ? _commonIndent : 0;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value) {\n var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var preferMultipleLines = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var isSingleLine = value.indexOf('\\n') === -1;\n var hasLeadingSpace = value[0] === ' ' || value[0] === '\\t';\n var hasTrailingQuote = value[value.length - 1] === '\"';\n var hasTrailingSlash = value[value.length - 1] === '\\\\';\n var printAsMultipleLines = !isSingleLine || hasTrailingQuote || hasTrailingSlash || preferMultipleLines;\n var result = ''; // Format a multi-line block quote to account for leading space.\n\n if (printAsMultipleLines && !(isSingleLine && hasLeadingSpace)) {\n result += '\\n' + indentation;\n }\n\n result += indentation ? value.replace(/\\n/g, '\\n' + indentation) : value;\n\n if (printAsMultipleLines) {\n result += '\\n';\n }\n\n return '\"\"\"' + result.replace(/\"\"\"/g, '\\\\\"\"\"') + '\"\"\"';\n}\n","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","export const LIBRARY_VERSION = '1.2.2';","import React from 'react';\n\nimport { Box } from '@mui/material';\n\ninterface TabPanelProps {\n children: React.ReactNode;\n value: number;\n index: number;\n}\n\nconst TabPanel: React.FC<TabPanelProps> = ({ children, value, index }) => {\n return (\n <Box role=\"tabpanel\" hidden={value !== index} id={`tabpanel-${index}`} sx={{ mt: 2 }}>\n {children}\n </Box>\n );\n};\n\nexport default TabPanel;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Checkbox, List, ListItem, ListItemButton, ListItemIcon, ListItemText, Tab, Tabs } from '@mui/material';\nimport { SortableSelect } from 'andoncloud-dashboard-toolkit';\nimport { SettingsFormContentProps } from 'andoncloud-widget-base';\n\nimport { WidgetData, WidgetSettings } from '@/types';\n\nimport TabPanel from '../TabPanel';\n\nconst SettingsFormContent: React.FC<SettingsFormContentProps<WidgetData, WidgetSettings>> = ({ data, formProps }) => {\n const [selectedTab, setSelectedTab] = useState<number>(0);\n const { t } = useTranslation();\n\n const statusOptions = useMemo(\n () => [\n { label: t('Green'), value: 'green' },\n { label: t('Yellow'), value: 'yellow' },\n { label: t('Red'), value: 'red' },\n { label: t('Gray'), value: 'gray' },\n ],\n [t],\n );\n\n useEffect(() => {\n if (!formProps.values.workplacesIds?.length && data?.workplaces) {\n formProps.setFieldValue(\n 'workplacesIds',\n data.workplaces.map(({ id }) => id),\n );\n }\n }, [formProps, data?.workplaces]);\n\n const handleToggleWorkplaceSelected = (workplaceId: string) => {\n const selectedWorkplacesIds = formProps.values.workplacesIds || [];\n\n if (selectedWorkplacesIds.indexOf(workplaceId) !== -1) {\n formProps.setFieldValue(\n 'workplacesIds',\n selectedWorkplacesIds.filter((id) => id !== workplaceId),\n );\n } else {\n formProps.setFieldValue('workplacesIds', [...selectedWorkplacesIds, workplaceId]);\n }\n };\n\n return (\n <React.Fragment>\n <Tabs\n value={selectedTab}\n onChange={(_, value) => setSelectedTab(value)}\n centered\n sx={{\n borderBottom: '1px solid rgba(255,255,255,0.1)',\n '.MuiTab-root': {\n color: 'rgba(255,255,255,0.5)',\n '&.Mui-selected': {\n color: 'white',\n },\n },\n }}\n >\n <Tab label={t('Statuses')} />\n <Tab label={t('Workplaces')} />\n </Tabs>\n <TabPanel value={selectedTab} index={0}>\n <SortableSelect\n placeholder={`${t('Select and arange the order')}...`}\n options={statusOptions}\n selected={formProps.values.statusColors || []}\n onChange={(selected) => formProps.setFieldValue('statusColors', [...selected])}\n />\n </TabPanel>\n <TabPanel value={selectedTab} index={1}>\n <List sx={{ color: 'white', maxHeight: '500px', overflowY: 'scroll' }}>\n {data.workplaces?.map((workplace) => (\n <ListItem key={workplace.id}>\n <ListItemButton role={undefined} onClick={() => handleToggleWorkplaceSelected(workplace.id)} dense>\n <ListItemIcon>\n <Checkbox\n edge=\"start\"\n checked={(formProps.values.workplacesIds || []).indexOf(workplace.id) !== -1}\n tabIndex={-1}\n disableRipple\n />\n </ListItemIcon>\n <ListItemText id={workplace.id} primary={workplace.name} />\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n </TabPanel>\n </React.Fragment>\n );\n};\n\nexport default SettingsFormContent;\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 { ListStatusChanges_StatusChange } from 'andoncloud-dashboard-toolkit';\nimport moment from 'moment';\n\nexport const getDuration = (statusChange: ListStatusChanges_StatusChange) => {\n if (statusChange.finishedAt && statusChange.startedAt) {\n return Math.abs(moment(statusChange.startedAt).diff(moment(statusChange.finishedAt), 'seconds'));\n }\n return Math.abs(moment().diff(moment(statusChange.startedAt), 'seconds'));\n};\n","/*! Moment Duration Format v2.2.2\n * https://github.com/jsmreese/moment-duration-format\n * Date: 2018-02-16\n *\n * Duration format plugin function for the Moment.js library\n * http://momentjs.com/\n *\n * Copyright 2018 John Madhavan-Reese\n * Released under the MIT license\n */\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['moment'], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but only CommonJS-like\n // enviroments that support module.exports, like Node.\n try {\n module.exports = factory(require('moment'));\n } catch (e) {\n // If moment is not available, leave the setup up to the user.\n // Like when using moment-timezone or similar moment-based package.\n module.exports = factory;\n }\n }\n\n if (root) {\n // Globals.\n root.momentDurationFormatSetup = root.moment ? factory(root.moment) : factory;\n }\n})(this, function (moment) {\n // `Number#tolocaleString` is tested on plugin initialization.\n // If the feature test passes, `toLocaleStringWorks` will be set to `true` and the\n // native function will be used to generate formatted output. If the feature\n // test fails, the fallback format function internal to this plugin will be\n // used.\n var toLocaleStringWorks = false;\n\n // `Number#toLocaleString` rounds incorrectly for select numbers in Microsoft\n // environments (Edge, IE11, Windows Phone) and possibly other environments.\n // If the rounding test fails and `toLocaleString` will be used for formatting,\n // the plugin will \"pre-round\" number values using the fallback number format\n // function before passing them to `toLocaleString` for final formatting.\n var toLocaleStringRoundingWorks = false;\n\n // `Intl.NumberFormat#format` is tested on plugin initialization.\n // If the feature test passes, `intlNumberFormatRoundingWorks` will be set to\n // `true` and the native function will be used to generate formatted output.\n // If the feature test fails, either `Number#tolocaleString` (if\n // `toLocaleStringWorks` is `true`), or the fallback format function internal\n // to this plugin will be used.\n var intlNumberFormatWorks = false;\n\n // `Intl.NumberFormat#format` rounds incorrectly for select numbers in Microsoft\n // environments (Edge, IE11, Windows Phone) and possibly other environments.\n // If the rounding test fails and `Intl.NumberFormat#format` will be used for\n // formatting, the plugin will \"pre-round\" number values using the fallback number\n // format function before passing them to `Intl.NumberFormat#format` for final\n // formatting.\n var intlNumberFormatRoundingWorks = false;\n\n // Token type names in order of descending magnitude.\n var types = \"escape years months weeks days hours minutes seconds milliseconds general\".split(\" \");\n\n var bubbles = [\n {\n type: \"seconds\",\n targets: [\n { type: \"minutes\", value: 60 },\n { type: \"hours\", value: 3600 },\n { type: \"days\", value: 86400 },\n { type: \"weeks\", value: 604800 },\n { type: \"months\", value: 2678400 },\n { type: \"years\", value: 31536000 }\n ]\n },\n {\n type: \"minutes\",\n targets: [\n { type: \"hours\", value: 60 },\n { type: \"days\", value: 1440 },\n { type: \"weeks\", value: 10080 },\n { type: \"months\", value: 44640 },\n { type: \"years\", value: 525600 }\n ]\n },\n {\n type: \"hours\",\n targets: [\n { type: \"days\", value: 24 },\n { type: \"weeks\", value: 168 },\n { type: \"months\", value: 744 },\n { type: \"years\", value: 8760 }\n ]\n },\n {\n type: \"days\",\n targets: [\n { type: \"weeks\", value: 7 },\n { type: \"months\", value: 31 },\n { type: \"years\", value: 365 }\n ]\n },\n {\n type: \"months\",\n targets: [\n { type: \"years\", value: 12 }\n ]\n }\n ];\n\n // stringIncludes\n function stringIncludes(str, search) {\n if (search.length > str.length) {\n return false;\n }\n\n return str.indexOf(search) !== -1;\n }\n\n // repeatZero(qty)\n // Returns \"0\" repeated `qty` times.\n // `qty` must be a integer >= 0.\n function repeatZero(qty) {\n var result = \"\";\n\n while (qty) {\n result += \"0\";\n qty -= 1;\n }\n\n return result;\n }\n\n function stringRound(digits) {\n var digitsArray = digits.split(\"\").reverse();\n var i = 0;\n var carry = true;\n\n while (carry && i < digitsArray.length) {\n if (i) {\n if (digitsArray[i] === \"9\") {\n digitsArray[i] = \"0\";\n } else {\n digitsArray[i] = (parseInt(digitsArray[i], 10) + 1).toString();\n carry = false;\n }\n } else {\n if (parseInt(digitsArray[i], 10) < 5) {\n carry = false;\n }\n\n digitsArray[i] = \"0\";\n }\n\n i += 1;\n }\n\n if (carry) {\n digitsArray.push(\"1\");\n }\n\n return digitsArray.reverse().join(\"\");\n }\n\n // cachedNumberFormat\n // Returns an `Intl.NumberFormat` instance for the given locale and configuration.\n // On first use of a particular configuration, the instance is cached for fast\n // repeat access.\n function cachedNumberFormat(locale, options) {\n // Create a sorted, stringified version of `options`\n // for use as part of the cache key\n var optionsString = map(\n keys(options).sort(),\n function(key) {\n return key + ':' + options[key];\n }\n ).join(',');\n\n // Set our cache key\n var cacheKey = locale + '+' + optionsString;\n\n // If we don't have this configuration cached, configure and cache it\n if (!cachedNumberFormat.cache[cacheKey]) {\n cachedNumberFormat.cache[cacheKey] = Intl.NumberFormat(locale, options);\n }\n\n // Return the cached version of this configuration\n return cachedNumberFormat.cache[cacheKey];\n }\n cachedNumberFormat.cache = {};\n\n // formatNumber\n // Formats any number greater than or equal to zero using these options:\n // - userLocale\n // - useToLocaleString\n // - useGrouping\n // - grouping\n // - maximumSignificantDigits\n // - minimumIntegerDigits\n // - fractionDigits\n // - groupingSeparator\n // - decimalSeparator\n //\n // `useToLocaleString` will use `Intl.NumberFormat` or `toLocaleString` for formatting.\n // `userLocale` option is passed through to the formatting function.\n // `fractionDigits` is passed through to `maximumFractionDigits` and `minimumFractionDigits`\n // Using `maximumSignificantDigits` will override `minimumIntegerDigits` and `fractionDigits`.\n function formatNumber(number, options, userLocale) {\n var useToLocaleString = options.useToLocaleString;\n var useGrouping = options.useGrouping;\n var grouping = useGrouping && options.grouping.slice();\n var maximumSignificantDigits = options.maximumSignificantDigits;\n var minimumIntegerDigits = options.minimumIntegerDigits || 1;\n var fractionDigits = options.fractionDigits || 0;\n var groupingSeparator = options.groupingSeparator;\n var decimalSeparator = options.decimalSeparator;\n\n if (useToLocaleString && userLocale) {\n var localeStringOptions = {\n minimumIntegerDigits: minimumIntegerDigits,\n useGrouping: useGrouping\n };\n\n if (fractionDigits) {\n localeStringOptions.maximumFractionDigits = fractionDigits;\n localeStringOptions.minimumFractionDigits = fractionDigits;\n }\n\n // toLocaleString output is \"0.0\" instead of \"0\" for HTC browsers\n // when maximumSignificantDigits is set. See #96.\n if (maximumSignificantDigits && number > 0) {\n localeStringOptions.maximumSignificantDigits = maximumSignificantDigits;\n }\n\n if (intlNumberFormatWorks) {\n if (!intlNumberFormatRoundingWorks) {\n var roundingOptions = extend({}, options);\n roundingOptions.useGrouping = false;\n roundingOptions.decimalSeparator = \".\";\n number = parseFloat(formatNumber(number, roundingOptions), 10);\n }\n\n return cachedNumberFormat(userLocale, localeStringOptions).format(number);\n } else {\n if (!toLocaleStringRoundingWorks) {\n var roundingOptions = extend({}, options);\n roundingOptions.useGrouping = false;\n roundingOptions.decimalSeparator = \".\";\n number = parseFloat(formatNumber(number, roundingOptions), 10);\n }\n\n return number.toLocaleString(userLocale, localeStringOptions);\n }\n }\n\n var numberString;\n\n // Add 1 to digit output length for floating point errors workaround. See below.\n if (maximumSignificantDigits) {\n numberString = number.toPrecision(maximumSignificantDigits + 1);\n } else {\n numberString = number.toFixed(fractionDigits + 1);\n }\n\n var integerString;\n var fractionString;\n var exponentString;\n\n var temp = numberString.split(\"e\");\n\n exponentString = temp[1] || \"\";\n\n temp = temp[0].split(\".\");\n\n fractionString = temp[1] || \"\";\n integerString = temp[0] || \"\";\n\n // Workaround for floating point errors in `toFixed` and `toPrecision`.\n // (3.55).toFixed(1); --> \"3.5\"\n // (123.55 - 120).toPrecision(2); --> \"3.5\"\n // (123.55 - 120); --> 3.549999999999997\n // (123.55 - 120).toFixed(2); --> \"3.55\"\n // Round by examing the string output of the next digit.\n\n // *************** Implement String Rounding here ***********************\n // Check integerString + fractionString length of toPrecision before rounding.\n // Check length of fractionString from toFixed output before rounding.\n var integerLength = integerString.length;\n var fractionLength = fractionString.length;\n var digitCount = integerLength + fractionLength;\n var digits = integerString + fractionString;\n\n if (maximumSignificantDigits && digitCount === (maximumSignificantDigits + 1) || !maximumSignificantDigits && fractionLength === (fractionDigits + 1)) {\n // Round digits.\n digits = stringRound(digits);\n\n if (digits.length === digitCount + 1) {\n integerLength = integerLength + 1;\n }\n\n // Discard final fractionDigit.\n if (fractionLength) {\n digits = digits.slice(0, -1);\n }\n\n // Separate integer and fraction.\n integerString = digits.slice(0, integerLength);\n fractionString = digits.slice(integerLength);\n }\n\n // Trim trailing zeroes from fractionString because toPrecision outputs\n // precision, not significant digits.\n if (maximumSignificantDigits) {\n fractionString = fractionString.replace(/0*$/, \"\");\n }\n\n // Handle exponent.\n var exponent = parseInt(exponentString, 10);\n\n if (exponent > 0) {\n if (fractionString.length <= exponent) {\n fractionString = fractionString + repeatZero(exponent - fractionString.length);\n\n integerString = integerString + fractionString;\n fractionString = \"\";\n } else {\n integerString = integerString + fractionString.slice(0, exponent);\n fractionString = fractionString.slice(exponent);\n }\n } else if (exponent < 0) {\n fractionString = (repeatZero(Math.abs(exponent) - integerString.length) + integerString + fractionString);\n\n integerString = \"0\";\n }\n\n if (!maximumSignificantDigits) {\n // Trim or pad fraction when not using maximumSignificantDigits.\n fractionString = fractionString.slice(0, fractionDigits);\n\n if (fractionString.length < fractionDigits) {\n fractionString = fractionString + repeatZero(fractionDigits - fractionString.length);\n }\n\n // Pad integer when using minimumIntegerDigits\n // and not using maximumSignificantDigits.\n if (integerString.length < minimumIntegerDigits) {\n integerString = repeatZero(minimumIntegerDigits - integerString.length) + integerString;\n }\n }\n\n var formattedString = \"\";\n\n // Handle grouping.\n if (useGrouping) {\n temp = integerString;\n var group;\n\n while (temp.length) {\n if (grouping.length) {\n group = grouping.shift();\n }\n\n if (formattedString) {\n formattedString = groupingSeparator + formattedString;\n }\n\n formattedString = temp.slice(-group) + formattedString;\n\n temp = temp.slice(0, -group);\n }\n } else {\n formattedString = integerString;\n }\n\n // Add decimalSeparator and fraction.\n if (fractionString) {\n formattedString = formattedString + decimalSeparator + fractionString;\n }\n\n return formattedString;\n }\n\n // durationLabelCompare\n function durationLabelCompare(a, b) {\n if (a.label.length > b.label.length) {\n return -1;\n }\n\n if (a.label.length < b.label.length) {\n return 1;\n }\n\n // a must be equal to b\n return 0;\n }\n\n // durationGetLabels\n function durationGetLabels(token, localeData) {\n var labels = [];\n\n each(keys(localeData), function (localeDataKey) {\n if (localeDataKey.slice(0, 15) !== \"_durationLabels\") {\n return;\n }\n\n var labelType = localeDataKey.slice(15).toLowerCase();\n\n each(keys(localeData[localeDataKey]), function (labelKey) {\n if (labelKey.slice(0, 1) === token) {\n labels.push({\n type: labelType,\n key: labelKey,\n label: localeData[localeDataKey][labelKey]\n });\n }\n });\n });\n\n return labels;\n }\n\n // durationPluralKey\n function durationPluralKey(token, integerValue, decimalValue) {\n // Singular for a value of `1`, but not for `1.0`.\n if (integerValue === 1 && decimalValue === null) {\n return token;\n }\n\n return token + token;\n }\n\n var engLocale = {\n durationLabelsStandard: {\n S: 'millisecond',\n SS: 'milliseconds',\n s: 'second',\n ss: 'seconds',\n m: 'minute',\n mm: 'minutes',\n h: 'hour',\n hh: 'hours',\n d: 'day',\n dd: 'days',\n w: 'week',\n ww: 'weeks',\n M: 'month',\n MM: 'months',\n y: 'year',\n yy: 'years'\n },\n durationLabelsShort: {\n S: 'msec',\n SS: 'msecs',\n s: 'sec',\n ss: 'secs',\n m: 'min',\n mm: 'mins',\n h: 'hr',\n hh: 'hrs',\n d: 'dy',\n dd: 'dys',\n w: 'wk',\n ww: 'wks',\n M: 'mo',\n MM: 'mos',\n y: 'yr',\n yy: 'yrs'\n },\n durationTimeTemplates: {\n HMS: 'h:mm:ss',\n HM: 'h:mm',\n MS: 'm:ss'\n },\n durationLabelTypes: [\n { type: \"standard\", string: \"__\" },\n { type: \"short\", string: \"_\" }\n ],\n durationPluralKey: durationPluralKey\n };\n\n // isArray\n function isArray(array) {\n return Object.prototype.toString.call(array) === \"[object Array]\";\n }\n\n // isObject\n function isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n }\n\n // findLast\n function findLast(array, callback) {\n var index = array.length;\n\n while (index -= 1) {\n if (callback(array[index])) { return array[index]; }\n }\n }\n\n // find\n function find(array, callback) {\n var index = 0;\n\n var max = array && array.length || 0;\n\n var match;\n\n if (typeof callback !== \"function\") {\n match = callback;\n callback = function (item) {\n return item === match;\n };\n }\n\n while (index < max) {\n if (callback(array[index])) { return array[index]; }\n index += 1;\n }\n }\n\n // each\n function each(array, callback) {\n var index = 0,\n max = array.length;\n\n if (!array || !max) { return; }\n\n while (index < max) {\n if (callback(array[index], index) === false) { return; }\n index += 1;\n }\n }\n\n // map\n function map(array, callback) {\n var index = 0,\n max = array.length,\n ret = [];\n\n if (!array || !max) { return ret; }\n\n while (index < max) {\n ret[index] = callback(array[index], index);\n index += 1;\n }\n\n return ret;\n }\n\n // pluck\n function pluck(array, prop) {\n return map(array, function (item) {\n return item[prop];\n });\n }\n\n // compact\n function compact(array) {\n var ret = [];\n\n each(array, function (item) {\n if (item) { ret.push(item); }\n });\n\n return ret;\n }\n\n // unique\n function unique(array) {\n var ret = [];\n\n each(array, function (_a) {\n if (!find(ret, _a)) { ret.push(_a); }\n });\n\n return ret;\n }\n\n // intersection\n function intersection(a, b) {\n var ret = [];\n\n each(a, function (_a) {\n each(b, function (_b) {\n if (_a === _b) { ret.push(_a); }\n });\n });\n\n return unique(ret);\n }\n\n // rest\n function rest(array, callback) {\n var ret = [];\n\n each(array, function (item, index) {\n if (!callback(item)) {\n ret = array.slice(index);\n return false;\n }\n });\n\n return ret;\n }\n\n // initial\n function initial(array, callback) {\n var reversed = array.slice().reverse();\n\n return rest(reversed, callback).reverse();\n }\n\n // extend\n function extend(a, b) {\n for (var key in b) {\n if (b.hasOwnProperty(key)) { a[key] = b[key]; }\n }\n\n return a;\n }\n\n // keys\n function keys(a) {\n var ret = [];\n\n for (var key in a) {\n if (a.hasOwnProperty(key)) { ret.push(key); }\n }\n\n return ret;\n }\n\n // any\n function any(array, callback) {\n var index = 0,\n max = array.length;\n\n if (!array || !max) { return false; }\n\n while (index < max) {\n if (callback(array[index], index) === true) { return true; }\n index += 1;\n }\n\n return false;\n }\n\n // flatten\n function flatten(array) {\n var ret = [];\n\n each(array, function(child) {\n ret = ret.concat(child);\n });\n\n return ret;\n }\n\n function toLocaleStringSupportsLocales() {\n var number = 0;\n try {\n number.toLocaleString('i');\n } catch (e) {\n return e.name === 'RangeError';\n }\n return false;\n }\n\n function featureTestFormatterRounding(formatter) {\n return formatter(3.55, \"en\", {\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: 1,\n maximumFractionDigits: 1\n }) === \"3.6\";\n }\n\n function featureTestFormatter(formatter) {\n var passed = true;\n\n // Test minimumIntegerDigits.\n passed = passed && formatter(1, \"en\", { minimumIntegerDigits: 1 }) === \"1\";\n passed = passed && formatter(1, \"en\", { minimumIntegerDigits: 2 }) === \"01\";\n passed = passed && formatter(1, \"en\", { minimumIntegerDigits: 3 }) === \"001\";\n if (!passed) { return false; }\n\n // Test maximumFractionDigits and minimumFractionDigits.\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 0, minimumFractionDigits: 0 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 1, minimumFractionDigits: 1 }) === \"100.0\";\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 2, minimumFractionDigits: 2 }) === \"99.99\";\n passed = passed && formatter(99.99, \"en\", { maximumFractionDigits: 3, minimumFractionDigits: 3 }) === \"99.990\";\n if (!passed) { return false; }\n\n // Test maximumSignificantDigits.\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 1 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 2 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 3 }) === \"100\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 4 }) === \"99.99\";\n passed = passed && formatter(99.99, \"en\", { maximumSignificantDigits: 5 }) === \"99.99\";\n if (!passed) { return false; }\n\n // Test grouping.\n passed = passed && formatter(1000, \"en\", { useGrouping: true }) === \"1,000\";\n passed = passed && formatter(1000, \"en\", { useGrouping: false }) === \"1000\";\n if (!passed) { return false; }\n\n return true;\n }\n\n // durationsFormat(durations [, template] [, precision] [, settings])\n function durationsFormat() {\n var args = [].slice.call(arguments);\n var settings = {};\n var durations;\n\n // Parse arguments.\n each(args, function (arg, index) {\n if (!index) {\n if (!isArray(arg)) {\n throw \"Expected array as the first argument to durationsFormat.\";\n }\n\n durations = arg;\n }\n\n if (typeof arg === \"string\" || typeof arg === \"function\") {\n settings.template = arg;\n return;\n }\n\n if (typeof arg === \"number\") {\n settings.precision = arg;\n return;\n }\n\n if (isObject(arg)) {\n extend(settings, arg);\n }\n });\n\n if (!durations || !durations.length) {\n return [];\n }\n\n settings.returnMomentTypes = true;\n\n var formattedDurations = map(durations, function (dur) {\n return dur.format(settings);\n });\n\n // Merge token types from all durations.\n var outputTypes = intersection(types, unique(pluck(flatten(formattedDurations), \"type\")));\n\n var largest = settings.largest;\n\n if (largest) {\n outputTypes = outputTypes.slice(0, largest);\n }\n\n settings.returnMomentTypes = false;\n settings.outputTypes = outputTypes;\n\n return map(durations, function (dur) {\n return dur.format(settings);\n });\n }\n\n // durationFormat([template] [, precision] [, settings])\n function durationFormat() {\n\n var args = [].slice.call(arguments);\n var settings = extend({}, this.format.defaults);\n\n // Keep a shadow copy of this moment for calculating remainders.\n // Perform all calculations on positive duration value, handle negative\n // sign at the very end.\n var asMilliseconds = this.asMilliseconds();\n var asMonths = this.asMonths();\n\n // Treat invalid durations as having a value of 0 milliseconds.\n if (typeof this.isValid === \"function\" && this.isValid() === false) {\n asMilliseconds = 0;\n asMonths = 0;\n }\n\n var isNegative = asMilliseconds < 0;\n\n // Two shadow copies are needed because of the way moment.js handles\n // duration arithmetic for years/months and for weeks/days/hours/minutes/seconds.\n var remainder = moment.duration(Math.abs(asMilliseconds), \"milliseconds\");\n var remainderMonths = moment.duration(Math.abs(asMonths), \"months\");\n\n // Parse arguments.\n each(args, function (arg) {\n if (typeof arg === \"string\" || typeof arg === \"function\") {\n settings.template = arg;\n return;\n }\n\n if (typeof arg === \"number\") {\n settings.precision = arg;\n return;\n }\n\n if (isObject(arg)) {\n extend(settings, arg);\n }\n });\n\n var momentTokens = {\n years: \"y\",\n months: \"M\",\n weeks: \"w\",\n days: \"d\",\n hours: \"h\",\n minutes: \"m\",\n seconds: \"s\",\n milliseconds: \"S\"\n };\n\n var tokenDefs = {\n escape: /\\[(.+?)\\]/,\n years: /\\*?[Yy]+/,\n months: /\\*?M+/,\n weeks: /\\*?[Ww]+/,\n days: /\\*?[Dd]+/,\n hours: /\\*?[Hh]+/,\n minutes: /\\*?m+/,\n seconds: /\\*?s+/,\n milliseconds: /\\*?S+/,\n general: /.+?/\n };\n\n // Types array is available in the template function.\n settings.types = types;\n\n var typeMap = function (token) {\n return find(types, function (type) {\n return tokenDefs[type].test(token);\n });\n };\n\n var tokenizer = new RegExp(map(types, function (type) {\n return tokenDefs[type].source;\n }).join(\"|\"), \"g\");\n\n // Current duration object is available in the template function.\n settings.duration = this;\n\n // Eval template function and cache template string.\n var template = typeof settings.template === \"function\" ? settings.template.apply(settings) : settings.template;\n\n // outputTypes and returnMomentTypes are settings to support durationsFormat().\n\n // outputTypes is an array of moment token types that determines\n // the tokens returned in formatted output. This option overrides\n // trim, largest, stopTrim, etc.\n var outputTypes = settings.outputTypes;\n\n // returnMomentTypes is a boolean that sets durationFormat to return\n // the processed momentTypes instead of formatted output.\n var returnMomentTypes = settings.returnMomentTypes;\n\n var largest = settings.largest;\n\n // Setup stopTrim array of token types.\n var stopTrim = [];\n\n if (!outputTypes) {\n if (isArray(settings.stopTrim)) {\n settings.stopTrim = settings.stopTrim.join(\"\");\n }\n\n // Parse stopTrim string to create token types array.\n if (settings.stopTrim) {\n each(settings.stopTrim.match(tokenizer), function (token) {\n var type = typeMap(token);\n\n if (type === \"escape\" || type === \"general\") {\n return;\n }\n\n stopTrim.push(type);\n });\n }\n }\n\n // Cache moment's locale data.\n var localeData = moment.localeData();\n\n if (!localeData) {\n localeData = {};\n }\n\n // Fall back to this plugin's `eng` extension.\n each(keys(engLocale), function (key) {\n if (typeof engLocale[key] === \"function\") {\n if (!localeData[key]) {\n localeData[key] = engLocale[key];\n }\n\n return;\n }\n\n if (!localeData[\"_\" + key]) {\n localeData[\"_\" + key] = engLocale[key];\n }\n });\n\n // Replace Duration Time Template strings.\n // For locale `eng`: `_HMS_`, `_HM_`, and `_MS_`.\n each(keys(localeData._durationTimeTemplates), function (item) {\n template = template.replace(\"_\" + item + \"_\", localeData._durationTimeTemplates[item]);\n });\n\n // Determine user's locale.\n var userLocale = settings.userLocale || moment.locale();\n\n var useLeftUnits = settings.useLeftUnits;\n var usePlural = settings.usePlural;\n var precision = settings.precision;\n var forceLength = settings.forceLength;\n var useGrouping = settings.useGrouping;\n var trunc = settings.trunc;\n\n // Use significant digits only when precision is greater than 0.\n var useSignificantDigits = settings.useSignificantDigits && precision > 0;\n var significantDigits = useSignificantDigits ? settings.precision : 0;\n var significantDigitsCache = significantDigits;\n\n var minValue = settings.minValue;\n var isMinValue = false;\n\n var maxValue = settings.maxValue;\n var isMaxValue = false;\n\n // formatNumber fallback options.\n var useToLocaleString = settings.useToLocaleString;\n var groupingSeparator = settings.groupingSeparator;\n var decimalSeparator = settings.decimalSeparator;\n var grouping = settings.grouping;\n\n useToLocaleString = useToLocaleString && (toLocaleStringWorks || intlNumberFormatWorks);\n\n // Trim options.\n var trim = settings.trim;\n\n if (isArray(trim)) {\n trim = trim.join(\" \");\n }\n\n if (trim === null && (largest || maxValue || useSignificantDigits)) {\n trim = \"all\";\n }\n\n if (trim === null || trim === true || trim === \"left\" || trim === \"right\") {\n trim = \"large\";\n }\n\n if (trim === false) {\n trim = \"\";\n }\n\n var trimIncludes = function (item) {\n return item.test(trim);\n };\n\n var rLarge = /large/;\n var rSmall = /small/;\n var rBoth = /both/;\n var rMid = /mid/;\n var rAll = /^all|[^sm]all/;\n var rFinal = /final/;\n\n var trimLarge = largest > 0 || any([rLarge, rBoth, rAll], trimIncludes);\n var trimSmall = any([rSmall, rBoth, rAll], trimIncludes);\n var trimMid = any([rMid, rAll], trimIncludes);\n var trimFinal = any([rFinal, rAll], trimIncludes);\n\n // Parse format string to create raw tokens array.\n var rawTokens = map(template.match(tokenizer), function (token, index) {\n var type = typeMap(token);\n\n if (token.slice(0, 1) === \"*\") {\n token = token.slice(1);\n\n if (type !== \"escape\" && type !== \"general\") {\n stopTrim.push(type);\n }\n }\n\n return {\n index: index,\n length: token.length,\n text: \"\",\n\n // Replace escaped tokens with the non-escaped token text.\n token: (type === \"escape\" ? token.replace(tokenDefs.escape, \"$1\") : token),\n\n // Ignore type on non-moment tokens.\n type: ((type === \"escape\" || type === \"general\") ? null : type)\n };\n });\n\n // Associate text tokens with moment tokens.\n var currentToken = {\n index: 0,\n length: 0,\n token: \"\",\n text: \"\",\n type: null\n };\n\n var tokens = [];\n\n if (useLeftUnits) {\n rawTokens.reverse();\n }\n\n each(rawTokens, function (token) {\n if (token.type) {\n if (currentToken.type || currentToken.text) {\n tokens.push(currentToken);\n }\n\n currentToken = token;\n\n return;\n }\n\n if (useLeftUnits) {\n currentToken.text = token.token + currentToken.text;\n } else {\n currentToken.text += token.token;\n }\n });\n\n if (currentToken.type || currentToken.text) {\n tokens.push(currentToken);\n }\n\n if (useLeftUnits) {\n tokens.reverse();\n }\n\n // Find unique moment token types in the template in order of\n // descending magnitude.\n var momentTypes = intersection(types, unique(compact(pluck(tokens, \"type\"))));\n\n // Exit early if there are no moment token types.\n if (!momentTypes.length) {\n return pluck(tokens, \"text\").join(\"\");\n }\n\n // Calculate values for each moment type in the template.\n // For processing the settings, values are associated with moment types.\n // Values will be assigned to tokens at the last step in order to\n // assume nothing about frequency or order of tokens in the template.\n momentTypes = map(momentTypes, function (momentType, index) {\n // Is this the least-magnitude moment token found?\n var isSmallest = ((index + 1) === momentTypes.length);\n\n // Is this the greatest-magnitude moment token found?\n var isLargest = (!index);\n\n // Get the raw value in the current units.\n var rawValue;\n\n if (momentType === \"years\" || momentType === \"months\") {\n rawValue = remainderMonths.as(momentType);\n } else {\n rawValue = remainder.as(momentType);\n }\n\n var wholeValue = Math.floor(rawValue);\n var decimalValue = rawValue - wholeValue;\n\n var token = find(tokens, function (token) {\n return momentType === token.type;\n });\n\n if (isLargest && maxValue && rawValue > maxValue) {\n isMaxValue = true;\n }\n\n if (isSmallest && minValue && Math.abs(settings.duration.as(momentType)) < minValue) {\n isMinValue = true;\n }\n\n // Note the length of the largest-magnitude moment token:\n // if it is greater than one and forceLength is not set,\n // then default forceLength to `true`.\n //\n // Rationale is this: If the template is \"h:mm:ss\" and the\n // moment value is 5 minutes, the user-friendly output is\n // \"5:00\", not \"05:00\". We shouldn't pad the `minutes` token\n // even though it has length of two if the template is \"h:mm:ss\";\n //\n // If the minutes output should always include the leading zero\n // even when the hour is trimmed then set `{ forceLength: true }`\n // to output \"05:00\". If the template is \"hh:mm:ss\", the user\n // clearly wanted everything padded so we should output \"05:00\";\n //\n // If the user wants the full padded output, they can use\n // template \"hh:mm:ss\" and set `{ trim: false }` to output\n // \"00:05:00\".\n if (isLargest && forceLength === null && token.length > 1) {\n forceLength = true;\n }\n\n // Update remainder.\n remainder.subtract(wholeValue, momentType);\n remainderMonths.subtract(wholeValue, momentType);\n\n return {\n rawValue: rawValue,\n wholeValue: wholeValue,\n // Decimal value is only retained for the least-magnitude\n // moment type in the format template.\n decimalValue: isSmallest ? decimalValue : 0,\n isSmallest: isSmallest,\n isLargest: isLargest,\n type: momentType,\n // Tokens can appear multiple times in a template string,\n // but all instances must share the same length.\n tokenLength: token.length\n };\n });\n\n var truncMethod = trunc ? Math.floor : Math.round;\n var truncate = function (value, places) {\n var factor = Math.pow(10, places);\n return truncMethod(value * factor) / factor;\n };\n\n var foundFirst = false;\n var bubbled = false;\n\n var formatValue = function (momentType, index) {\n var formatOptions = {\n useGrouping: useGrouping,\n groupingSeparator: groupingSeparator,\n decimalSeparator: decimalSeparator,\n grouping: grouping,\n useToLocaleString: useToLocaleString\n };\n\n if (useSignificantDigits) {\n if (significantDigits <= 0) {\n momentType.rawValue = 0;\n momentType.wholeValue = 0;\n momentType.decimalValue = 0;\n } else {\n formatOptions.maximumSignificantDigits = significantDigits;\n momentType.significantDigits = significantDigits;\n }\n }\n\n if (isMaxValue && !bubbled) {\n if (momentType.isLargest) {\n momentType.wholeValue = maxValue;\n momentType.decimalValue = 0;\n } else {\n momentType.wholeValue = 0;\n momentType.decimalValue = 0;\n }\n }\n\n if (isMinValue && !bubbled) {\n if (momentType.isSmallest) {\n momentType.wholeValue = minValue;\n momentType.decimalValue = 0;\n } else {\n momentType.wholeValue = 0;\n momentType.decimalValue = 0;\n }\n }\n\n if (momentType.isSmallest || momentType.significantDigits && momentType.significantDigits - momentType.wholeValue.toString().length <= 0) {\n // Apply precision to least significant token value.\n if (precision < 0) {\n momentType.value = truncate(momentType.wholeValue, precision);\n } else if (precision === 0) {\n momentType.value = truncMethod(momentType.wholeValue + momentType.decimalValue);\n } else { // precision > 0\n if (useSignificantDigits) {\n if (trunc) {\n momentType.value = truncate(momentType.rawValue, significantDigits - momentType.wholeValue.toString().length);\n } else {\n momentType.value = momentType.rawValue;\n }\n\n if (momentType.wholeValue) {\n significantDigits -= momentType.wholeValue.toString().length;\n }\n } else {\n formatOptions.fractionDigits = precision;\n\n if (trunc) {\n momentType.value = momentType.wholeValue + truncate(momentType.decimalValue, precision);\n } else {\n momentType.value = momentType.wholeValue + momentType.decimalValue;\n }\n }\n }\n } else {\n if (useSignificantDigits && momentType.wholeValue) {\n // Outer Math.round required here to handle floating point errors.\n momentType.value = Math.round(truncate(momentType.wholeValue, momentType.significantDigits - momentType.wholeValue.toString().length));\n\n significantDigits -= momentType.wholeValue.toString().length;\n } else {\n momentType.value = momentType.wholeValue;\n }\n }\n\n if (momentType.tokenLength > 1 && (forceLength || foundFirst)) {\n formatOptions.minimumIntegerDigits = momentType.tokenLength;\n\n if (bubbled && formatOptions.maximumSignificantDigits < momentType.tokenLength) {\n delete formatOptions.maximumSignificantDigits;\n }\n }\n\n if (!foundFirst && (momentType.value > 0 || trim === \"\" /* trim: false */ || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n foundFirst = true;\n }\n\n momentType.formattedValue = formatNumber(momentType.value, formatOptions, userLocale);\n\n formatOptions.useGrouping = false;\n formatOptions.decimalSeparator = \".\";\n momentType.formattedValueEn = formatNumber(momentType.value, formatOptions, \"en\");\n\n if (momentType.tokenLength === 2 && momentType.type === \"milliseconds\") {\n momentType.formattedValueMS = formatNumber(momentType.value, {\n minimumIntegerDigits: 3,\n useGrouping: false\n }, \"en\").slice(0, 2);\n }\n\n return momentType;\n };\n\n // Calculate formatted values.\n momentTypes = map(momentTypes, formatValue);\n momentTypes = compact(momentTypes);\n\n // Bubble rounded values.\n if (momentTypes.length > 1) {\n var findType = function (type) {\n return find(momentTypes, function (momentType) {\n return momentType.type === type;\n });\n };\n\n var bubbleTypes = function (bubble) {\n var bubbleMomentType = findType(bubble.type);\n\n if (!bubbleMomentType) {\n return;\n }\n\n each(bubble.targets, function (target) {\n var targetMomentType = findType(target.type);\n\n if (!targetMomentType) {\n return;\n }\n\n if (parseInt(bubbleMomentType.formattedValueEn, 10) === target.value) {\n bubbleMomentType.rawValue = 0;\n bubbleMomentType.wholeValue = 0;\n bubbleMomentType.decimalValue = 0;\n targetMomentType.rawValue += 1;\n targetMomentType.wholeValue += 1;\n targetMomentType.decimalValue = 0;\n targetMomentType.formattedValueEn = targetMomentType.wholeValue.toString();\n bubbled = true;\n }\n });\n };\n\n each(bubbles, bubbleTypes);\n }\n\n // Recalculate formatted values.\n if (bubbled) {\n foundFirst = false;\n significantDigits = significantDigitsCache;\n momentTypes = map(momentTypes, formatValue);\n momentTypes = compact(momentTypes);\n }\n\n if (outputTypes && !(isMaxValue && !settings.trim)) {\n momentTypes = map(momentTypes, function (momentType) {\n if (find(outputTypes, function (outputType) {\n return momentType.type === outputType;\n })) {\n return momentType;\n }\n\n return null;\n });\n\n momentTypes = compact(momentTypes);\n } else {\n // Trim Large.\n if (trimLarge) {\n momentTypes = rest(momentTypes, function (momentType) {\n // Stop trimming on:\n // - the smallest moment type\n // - a type marked for stopTrim\n // - a type that has a whole value\n return !momentType.isSmallest && !momentType.wholeValue && !find(stopTrim, momentType.type);\n });\n }\n\n // Largest.\n if (largest && momentTypes.length) {\n momentTypes = momentTypes.slice(0, largest);\n }\n\n // Trim Small.\n if (trimSmall && momentTypes.length > 1) {\n momentTypes = initial(momentTypes, function (momentType) {\n // Stop trimming on:\n // - a type marked for stopTrim\n // - a type that has a whole value\n // - the largest momentType\n return !momentType.wholeValue && !find(stopTrim, momentType.type) && !momentType.isLargest;\n });\n }\n\n // Trim Mid.\n if (trimMid) {\n momentTypes = map(momentTypes, function (momentType, index) {\n if (index > 0 && index < momentTypes.length - 1 && !momentType.wholeValue) {\n return null;\n }\n\n return momentType;\n });\n\n momentTypes = compact(momentTypes);\n }\n\n // Trim Final.\n if (trimFinal && momentTypes.length === 1 && !momentTypes[0].wholeValue && !(!trunc && momentTypes[0].isSmallest && momentTypes[0].rawValue < minValue)) {\n momentTypes = [];\n }\n }\n\n if (returnMomentTypes) {\n return momentTypes;\n }\n\n // Localize and pluralize unit labels.\n each(tokens, function (token) {\n var key = momentTokens[token.type];\n\n var momentType = find(momentTypes, function (momentType) {\n return momentType.type === token.type;\n });\n\n if (!key || !momentType) {\n return;\n }\n\n var values = momentType.formattedValueEn.split(\".\");\n\n values[0] = parseInt(values[0], 10);\n\n if (values[1]) {\n values[1] = parseFloat(\"0.\" + values[1], 10);\n } else {\n values[1] = null;\n }\n\n var pluralKey = localeData.durationPluralKey(key, values[0], values[1]);\n\n var labels = durationGetLabels(key, localeData);\n\n var autoLocalized = false;\n\n var pluralizedLabels = {};\n\n // Auto-Localized unit labels.\n each(localeData._durationLabelTypes, function (labelType) {\n var label = find(labels, function (label) {\n return label.type === labelType.type && label.key === pluralKey;\n });\n\n if (label) {\n pluralizedLabels[label.type] = label.label;\n\n if (stringIncludes(token.text, labelType.string)) {\n token.text = token.text.replace(labelType.string, label.label);\n autoLocalized = true;\n }\n }\n });\n\n // Auto-pluralized unit labels.\n if (usePlural && !autoLocalized) {\n labels.sort(durationLabelCompare);\n\n each(labels, function (label) {\n if (pluralizedLabels[label.type] === label.label) {\n if (stringIncludes(token.text, label.label)) {\n // Stop checking this token if its label is already\n // correctly pluralized.\n return false;\n }\n\n // Skip this label if it is correct, but not present in\n // the token's text.\n return;\n }\n\n if (stringIncludes(token.text, label.label)) {\n // Replece this token's label and stop checking.\n token.text = token.text.replace(label.label, pluralizedLabels[label.type]);\n return false;\n }\n });\n }\n });\n\n // Build ouptut.\n tokens = map(tokens, function (token) {\n if (!token.type) {\n return token.text;\n }\n\n var momentType = find(momentTypes, function (momentType) {\n return momentType.type === token.type;\n });\n\n if (!momentType) {\n return \"\";\n }\n\n var out = \"\";\n\n if (useLeftUnits) {\n out += token.text;\n }\n\n if (isNegative && isMaxValue || !isNegative && isMinValue) {\n out += \"< \";\n isMaxValue = false;\n isMinValue = false;\n }\n\n if (isNegative && isMinValue || !isNegative && isMaxValue) {\n out += \"> \";\n isMaxValue = false;\n isMinValue = false;\n }\n\n if (isNegative && (momentType.value > 0 || trim === \"\" || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n out += \"-\";\n isNegative = false;\n }\n\n if (token.type === \"milliseconds\" && momentType.formattedValueMS) {\n out += momentType.formattedValueMS;\n } else {\n out += momentType.formattedValue;\n }\n\n if (!useLeftUnits) {\n out += token.text;\n }\n\n return out;\n });\n\n // Trim leading and trailing comma, space, colon, and dot.\n return tokens.join(\"\").replace(/(,| |:|\\.)*$/, \"\").replace(/^(,| |:|\\.)*/, \"\");\n }\n\n // defaultFormatTemplate\n function defaultFormatTemplate() {\n var dur = this.duration;\n\n var findType = function findType(type) {\n return dur._data[type];\n };\n\n var firstType = find(this.types, findType);\n\n var lastType = findLast(this.types, findType);\n\n // Default template strings for each duration dimension type.\n switch (firstType) {\n case \"milliseconds\":\n return \"S __\";\n case \"seconds\": // Fallthrough.\n case \"minutes\":\n return \"*_MS_\";\n case \"hours\":\n return \"_HMS_\";\n case \"days\": // Possible Fallthrough.\n if (firstType === lastType) {\n return \"d __\";\n }\n case \"weeks\":\n if (firstType === lastType) {\n return \"w __\";\n }\n\n if (this.trim === null) {\n this.trim = \"both\";\n }\n\n return \"w __, d __, h __\";\n case \"months\": // Possible Fallthrough.\n if (firstType === lastType) {\n return \"M __\";\n }\n case \"years\":\n if (firstType === lastType) {\n return \"y __\";\n }\n\n if (this.trim === null) {\n this.trim = \"both\";\n }\n\n return \"y __, M __, d __\";\n default:\n if (this.trim === null) {\n this.trim = \"both\";\n }\n\n return \"y __, d __, h __, m __, s __\";\n }\n }\n\n // init\n function init(context) {\n if (!context) {\n throw \"Moment Duration Format init cannot find moment instance.\";\n }\n\n context.duration.format = durationsFormat;\n context.duration.fn.format = durationFormat;\n\n context.duration.fn.format.defaults = {\n // Many options are defaulted to `null` to distinguish between\n // 'not set' and 'set to `false`'\n\n // trim\n // Can be a string, a delimited list of strings, an array of strings,\n // or a boolean.\n // \"large\" - will trim largest-magnitude zero-value tokens until\n // finding a token with a value, a token identified as 'stopTrim', or\n // the final token of the format string.\n // \"small\" - will trim smallest-magnitude zero-value tokens until\n // finding a token with a value, a token identified as 'stopTrim', or\n // the final token of the format string.\n // \"both\" - will execute \"large\" trim then \"small\" trim.\n // \"mid\" - will trim any zero-value tokens that are not the first or\n // last tokens. Usually used in conjunction with \"large\" or \"both\".\n // e.g. \"large mid\" or \"both mid\".\n // \"final\" - will trim the final token if it is zero-value. Use this\n // option with \"large\" or \"both\" to output an empty string when\n // formatting a zero-value duration. e.g. \"large final\" or \"both final\".\n // \"all\" - Will trim all zero-value tokens. Shorthand for \"both mid final\".\n // \"left\" - maps to \"large\" to support plugin's version 1 API.\n // \"right\" - maps to \"large\" to support plugin's version 1 API.\n // `false` - template tokens are not trimmed.\n // `true` - treated as \"large\".\n // `null` - treated as \"large\".\n trim: null,\n\n // stopTrim\n // A moment token string, a delimited set of moment token strings,\n // or an array of moment token strings. Trimming will stop when a token\n // listed in this option is reached. A \"*\" character in the format\n // template string will also mark a moment token as stopTrim.\n // e.g. \"d [days] *h:mm:ss\" will always stop trimming at the 'hours' token.\n stopTrim: null,\n\n // largest\n // Set to a positive integer to output only the \"n\" largest-magnitude\n // moment tokens that have a value. All lesser-magnitude moment tokens\n // will be ignored. This option takes effect even if `trim` is set\n // to `false`.\n largest: null,\n\n // maxValue\n // Use `maxValue` to render generalized output for large duration values,\n // e.g. `\"> 60 days\"`. `maxValue` must be a positive integer and is\n /// applied to the greatest-magnitude moment token in the format template.\n maxValue: null,\n\n // minValue\n // Use `minValue` to render generalized output for small duration values,\n // e.g. `\"< 5 minutes\"`. `minValue` must be a positive integer and is\n // applied to the least-magnitude moment token in the format template.\n minValue: null,\n\n // precision\n // If a positive integer, number of decimal fraction digits to render.\n // If a negative integer, number of integer place digits to truncate to 0.\n // If `useSignificantDigits` is set to `true` and `precision` is a positive\n // integer, sets the maximum number of significant digits used in the\n // formatted output.\n precision: 0,\n\n // trunc\n // Default behavior rounds final token value. Set to `true` to\n // truncate final token value, which was the default behavior in\n // version 1 of this plugin.\n trunc: false,\n\n // forceLength\n // Force first moment token with a value to render at full length\n // even when template is trimmed and first moment token has length of 1.\n forceLength: null,\n\n // userLocale\n // Formatted numerical output is rendered using `toLocaleString`\n // and the locale of the user's environment. Set this option to render\n // numerical output using a different locale. Unit names are rendered\n // and detected using the locale set in moment.js, which can be different\n // from the locale of user's environment.\n userLocale: null,\n\n // usePlural\n // Will automatically singularize or pluralize unit names when they\n // appear in the text associated with each moment token. Standard and\n // short unit labels are singularized and pluralized, based on locale.\n // e.g. in english, \"1 second\" or \"1 sec\" would be rendered instead\n // of \"1 seconds\" or \"1 secs\". The default pluralization function\n // renders a plural label for a value with decimal precision.\n // e.g. \"1.0 seconds\" is never rendered as \"1.0 second\".\n // Label types and pluralization function are configurable in the\n // localeData extensions.\n usePlural: true,\n\n // useLeftUnits\n // The text to the right of each moment token in a format string\n // is treated as that token's units for the purposes of trimming,\n // singularizing, and auto-localizing.\n // e.g. \"h [hours], m [minutes], s [seconds]\".\n // To properly singularize or localize a format string such as\n // \"[hours] h, [minutes] m, [seconds] s\", where the units appear\n // to the left of each moment token, set useLeftUnits to `true`.\n // This plugin is not tested in the context of rtl text.\n useLeftUnits: false,\n\n // useGrouping\n // Enables locale-based digit grouping in the formatted output. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n useGrouping: true,\n\n // useSignificantDigits\n // Treat the `precision` option as the maximum significant digits\n // to be rendered. Precision must be a positive integer. Significant\n // digits extend across unit types,\n // e.g. \"6 hours 37.5 minutes\" represents 4 significant digits.\n // Enabling this option causes token length to be ignored. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n useSignificantDigits: false,\n\n // template\n // The template string used to format the duration. May be a function\n // or a string. Template functions are executed with the `this` binding\n // of the settings object so that template strings may be dynamically\n // generated based on the duration object (accessible via `this.duration`)\n // or any of the other settings. Leading and trailing space, comma,\n // period, and colon characters are trimmed from the resulting string.\n template: defaultFormatTemplate,\n\n // useToLocaleString\n // Set this option to `false` to ignore the `toLocaleString` feature\n // test and force the use of the `formatNumber` fallback function\n // included in this plugin.\n useToLocaleString: true,\n\n // formatNumber fallback options.\n // When `toLocaleString` is detected and passes the feature test, the\n // following options will have no effect: `toLocaleString` will be used\n // for formatting and the grouping separator, decimal separator, and\n // integer digit grouping will be determined by the user locale.\n\n // groupingSeparator\n // The integer digit grouping separator used when using the fallback\n // formatNumber function.\n groupingSeparator: \",\",\n\n // decimalSeparator\n // The decimal separator used when using the fallback formatNumber\n // function.\n decimalSeparator: \".\",\n\n // grouping\n // The integer digit grouping used when using the fallback formatNumber\n // function. Must be an array. The default value of `[3]` gives the\n // standard 3-digit thousand/million/billion digit groupings for the\n // \"en\" locale. Setting this option to `[3, 2]` would generate the\n // thousand/lakh/crore digit groupings used in the \"en-IN\" locale.\n grouping: [3]\n };\n\n context.updateLocale('en', engLocale);\n }\n\n // Run feature tests for `Number#toLocaleString`.\n var toLocaleStringFormatter = function(number, locale, options) {\n return number.toLocaleString(locale, options);\n };\n\n toLocaleStringWorks = toLocaleStringSupportsLocales() && featureTestFormatter(toLocaleStringFormatter);\n toLocaleStringRoundingWorks = toLocaleStringWorks && featureTestFormatterRounding(toLocaleStringFormatter);\n\n // Run feature tests for `Intl.NumberFormat#format`.\n var intlNumberFormatFormatter = function(number, locale, options) {\n if (typeof window !== 'undefined' && window && window.Intl && window.Intl.NumberFormat) {\n return window.Intl.NumberFormat(locale, options).format(number);\n }\n };\n\n intlNumberFormatWorks = featureTestFormatter(intlNumberFormatFormatter);\n intlNumberFormatRoundingWorks = intlNumberFormatWorks && featureTestFormatterRounding(intlNumberFormatFormatter);\n\n // Initialize duration format on the global moment instance.\n init(moment);\n\n // Return the init function so that duration format can be\n // initialized on other moment instances.\n return init;\n});\n","\"use strict\";\n\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"react\", \"prop-types\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"react\"), require(\"prop-types\"));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.React, global.propTypes);\n global.undefined = mod.exports;\n }\n})(void 0, function (exports, _react, _propTypes) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = undefined;\n\n var _react2 = _interopRequireDefault(_react);\n\n var _propTypes2 = _interopRequireDefault(_propTypes);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var PRECISION = 0.0001;\n\n var isEqual = function isEqual(n1, n2) {\n return Math.abs(n1 - n2) < PRECISION;\n };\n\n var TextTruncate = function (_Component) {\n _inherits(TextTruncate, _Component);\n\n function TextTruncate() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, TextTruncate);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(TextTruncate)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"onResize\", function () {\n if (_this.rafId) {\n window.cancelAnimationFrame(_this.rafId);\n }\n\n _this.rafId = window.requestAnimationFrame(_this.update.bind(_assertThisInitialized(_this)));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onToggled\", function (truncated) {\n typeof _this.props.onToggled === 'function' && setTimeout(function () {\n return _this.props.onToggled(truncated);\n }, 0);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTruncated\", function () {\n typeof _this.props.onTruncated === 'function' && setTimeout(function () {\n return _this.props.onTruncated();\n }, 0);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onCalculated\", function () {\n typeof _this.props.onCalculated === 'function' && setTimeout(function () {\n return _this.props.onCalculated();\n }, 0);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"update\", function () {\n var style = window.getComputedStyle(_this.scope);\n var font = [style['font-weight'], style['font-style'], style['font-size'], style['font-family'], style['letter-spacing']].join(' ');\n _this.canvas.font = font;\n\n _this.forceUpdate();\n });\n\n return _this;\n }\n\n _createClass(TextTruncate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var canvas = document.createElement('canvas');\n var docFragment = document.createDocumentFragment();\n var style = window.getComputedStyle(this.scope);\n var font = [style['font-weight'], style['font-style'], style['font-size'], style['font-family']].join(' ');\n docFragment.appendChild(canvas);\n this.canvas = canvas.getContext('2d');\n this.canvas.font = font;\n this.forceUpdate();\n window.addEventListener('resize', this.onResize);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n\n if (this.rafId) {\n window.cancelAnimationFrame(this.rafId);\n }\n }\n }, {\n key: \"measureWidth\",\n value: function measureWidth(text) {\n return this.canvas.measureText(text).width;\n }\n }, {\n key: \"getRenderText\",\n value: function getRenderText() {\n var _this$props = this.props,\n containerClassName = _this$props.containerClassName,\n element = _this$props.element,\n line = _this$props.line,\n onCalculated = _this$props.onCalculated,\n onTruncated = _this$props.onTruncated,\n onToggled = _this$props.onToggled,\n text = _this$props.text,\n textElement = _this$props.textElement,\n textTruncateChild = _this$props.textTruncateChild,\n truncateText = _this$props.truncateText,\n maxCalculateTimes = _this$props.maxCalculateTimes,\n props = _objectWithoutProperties(_this$props, [\"containerClassName\", \"element\", \"line\", \"onCalculated\", \"onTruncated\", \"onToggled\", \"text\", \"textElement\", \"textTruncateChild\", \"truncateText\", \"maxCalculateTimes\"]);\n\n var scopeWidth = this.scope.getBoundingClientRect().width; // return if display:none\n\n if (scopeWidth === 0) {\n return null;\n }\n\n var fullTextWidth = this.measureWidth(text); // return if all of text can be displayed\n\n if (scopeWidth > fullTextWidth || isEqual(scopeWidth, fullTextWidth)) {\n this.onToggled(false);\n return (0, _react.createElement)(textElement, props, text);\n }\n\n var childText = '';\n\n if (textTruncateChild && typeof textTruncateChild.type === 'string') {\n var type = textTruncateChild.type;\n\n if (type.indexOf('span') >= 0 || type.indexOf('a') >= 0) {\n childText = textTruncateChild.props.children;\n }\n }\n\n var currentPos = 1;\n var maxTextLength = text.length;\n var truncatedText = '';\n var splitPos = 0;\n var startPos = 0;\n var displayLine = line;\n var width = 0;\n var lastIsEng = false;\n var isPrevLineWithoutSpace = false;\n var lastPos = 0;\n var lastSpaceIndex = -1;\n var ext = '';\n var loopCnt = 0;\n\n while (displayLine-- > 0) {\n ext = displayLine ? '' : truncateText + (childText ? ' ' + childText : '');\n\n while (currentPos <= maxTextLength) {\n truncatedText = text.substr(startPos, currentPos);\n width = this.measureWidth(truncatedText + ext);\n\n if (width < scopeWidth) {\n splitPos = text.indexOf(' ', currentPos + 1);\n\n if (splitPos === -1) {\n currentPos += 1;\n lastIsEng = false;\n } else {\n lastIsEng = true;\n currentPos = splitPos;\n }\n } else {\n do {\n if (loopCnt++ >= maxCalculateTimes) {\n break;\n }\n\n truncatedText = text.substr(startPos, currentPos);\n\n if (!displayLine) {\n currentPos--;\n }\n\n if (truncatedText[truncatedText.length - 1] === ' ') {\n truncatedText = text.substr(startPos, currentPos - 1);\n }\n\n if (lastIsEng) {\n lastSpaceIndex = truncatedText.lastIndexOf(' ');\n\n if (lastSpaceIndex > -1) {\n currentPos = lastSpaceIndex;\n\n if (displayLine) {\n currentPos++;\n }\n\n truncatedText = text.substr(startPos, currentPos);\n } else {\n currentPos--;\n truncatedText = text.substr(startPos, currentPos);\n }\n } else {\n currentPos--;\n truncatedText = text.substr(startPos, currentPos);\n }\n\n width = this.measureWidth(truncatedText + ext);\n } while ((width > scopeWidth || isEqual(width, scopeWidth)) && truncatedText.length > 0);\n\n startPos += currentPos;\n break;\n }\n }\n\n if (currentPos >= maxTextLength) {\n startPos = maxTextLength;\n break;\n }\n\n if (lastIsEng && !isPrevLineWithoutSpace && text.substr(lastPos, currentPos).indexOf(' ') === -1) {\n isPrevLineWithoutSpace = text.substr(lastPos, currentPos).indexOf(' ') === -1;\n displayLine--;\n }\n\n lastPos = currentPos + 1;\n }\n\n if (startPos === maxTextLength) {\n this.onToggled(false);\n return (0, _react.createElement)(textElement, props, text);\n }\n\n this.onTruncated();\n this.onToggled(true);\n return _react2[\"default\"].createElement(\"span\", props, (0, _react.createElement)(textElement, props, text.substr(0, startPos) + truncateText + ' '), textTruncateChild);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n element = _this$props2.element,\n text = _this$props2.text,\n _this$props2$style = _this$props2.style,\n style = _this$props2$style === void 0 ? {} : _this$props2$style,\n containerClassName = _this$props2.containerClassName,\n line = _this$props2.line,\n onCalculated = _this$props2.onCalculated,\n onTruncated = _this$props2.onTruncated,\n onToggled = _this$props2.onToggled,\n textElement = _this$props2.textElement,\n textTruncateChild = _this$props2.textTruncateChild,\n truncateText = _this$props2.truncateText,\n maxCalculateTimes = _this$props2.maxCalculateTimes,\n props = _objectWithoutProperties(_this$props2, [\"element\", \"text\", \"style\", \"containerClassName\", \"line\", \"onCalculated\", \"onTruncated\", \"onToggled\", \"textElement\", \"textTruncateChild\", \"truncateText\", \"maxCalculateTimes\"]);\n\n var fontWeight = style.fontWeight,\n fontStyle = style.fontStyle,\n fontSize = style.fontSize,\n fontFamily = style.fontFamily;\n var renderText = this.scope && line ? this.getRenderText() : (0, _react.createElement)(textElement, props, text);\n var rootProps = {\n ref: function ref(el) {\n _this2.scope = el;\n },\n className: containerClassName,\n style: {\n overflow: 'hidden',\n fontWeight: fontWeight,\n fontStyle: fontStyle,\n fontSize: fontSize,\n fontFamily: fontFamily\n }\n };\n this.scope && this.onCalculated();\n return (0, _react.createElement)(element, rootProps, renderText);\n }\n }]);\n\n return TextTruncate;\n }(_react.Component);\n\n _defineProperty(TextTruncate, \"propTypes\", {\n containerClassName: _propTypes2[\"default\"].string,\n element: _propTypes2[\"default\"].string,\n line: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].bool]),\n onCalculated: _propTypes2[\"default\"].func,\n onTruncated: _propTypes2[\"default\"].func,\n onToggled: _propTypes2[\"default\"].func,\n text: _propTypes2[\"default\"].string,\n textElement: _propTypes2[\"default\"].elementType,\n textTruncateChild: _propTypes2[\"default\"].node,\n truncateText: _propTypes2[\"default\"].string,\n maxCalculateTimes: _propTypes2[\"default\"].number\n });\n\n _defineProperty(TextTruncate, \"defaultProps\", {\n element: 'div',\n line: 1,\n text: '',\n textElement: 'span',\n truncateText: '…',\n maxCalculateTimes: 10\n });\n\n exports.default = TextTruncate;\n ;\n module.exports = exports.default;\n});\n","import 'moment-duration-format';\n\nimport React from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport TextTruncate from 'react-text-truncate';\n\nimport { Box, Card, CardContent, CardHeader, CardProps, Typography } from '@mui/material';\nimport { AndonLightColor, MetricValue } from 'andoncloud-dashboard-toolkit';\nimport moment from 'moment';\n\nimport makeStyles from './styles';\n\ninterface MetricCardProps extends CardProps {\n title: string;\n metricLabel: React.ReactNode;\n metricValue?: MetricValue;\n progressValue?: MetricValue;\n extraValue?: React.ReactNode;\n rounded?: boolean;\n}\n\nconst MetricCard: React.FC<MetricCardProps> = ({ title, metricLabel, metricValue, extraValue, rounded, ...props }) => {\n const { t } = useTranslation();\n const formatValue = (metricValue: MetricValue) => {\n const value = metricValue.textValue;\n\n if (value) {\n return moment.duration(value, 'seconds').format('m[m] s[s]', {\n useGrouping: false,\n });\n }\n return '';\n };\n const getBackground = () => {\n const statusColor = metricValue?.statusColor;\n\n if (statusColor) {\n switch (statusColor) {\n case AndonLightColor.Green:\n return 'linear-gradient(180deg, #31BF59 0%, #32D74B 100%)';\n case AndonLightColor.Yellow:\n return 'linear-gradient(360deg, #FFD60A 0%, #FFC12F 100%)';\n case AndonLightColor.Red:\n return 'linear-gradient(0deg, #F05C53 0%, #FF3B2F 100%)';\n default:\n return 'rgba(187, 187, 187, 0.75)';\n }\n }\n return 'rgba(255, 255, 255, 0.75)';\n };\n const styles = makeStyles({\n card: { rounded },\n cardOverlay: { background: getBackground() },\n showBgPattern: true,\n });\n\n return (\n <Card sx={styles.card} {...props}>\n <Box sx={styles.cardOverlay} />\n <CardHeader title={<TextTruncate line={1} text={title} />} sx={styles.cardHeader} />\n <CardContent sx={styles.cardContent}>\n <Typography sx={styles.cardLabel}>{metricLabel}</Typography>\n <Typography sx={styles.cardValue}>\n {metricValue ? formatValue(metricValue) : <Trans t={t}>No value for the selected metric</Trans>}\n </Typography>\n {extraValue && <Typography sx={styles.cardExtra}>{extraValue}</Typography>}\n </CardContent>\n </Card>\n );\n};\n\nexport default MetricCard;\n","import { lighten } from '@mui/material';\nimport { SxProps, Theme } from '@mui/system';\n\nimport bgPattern from '../../../assets/bg-pattern.svg';\n\ninterface StylesProps {\n card: {\n rounded?: boolean;\n };\n cardOverlay: {\n background: string;\n };\n showBgPattern: boolean;\n}\n\nconst makeStyles = (props: StylesProps): Record<string, SxProps<Theme>> => ({\n card: {\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(props.showBgPattern && {\n mixBlendMode: 'hard-light',\n background: `url(${bgPattern}), linear-gradient(329.66deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%)`,\n backgroundSize: 'cover',\n }),\n ...(props.card.rounded\n ? {\n borderRadius: '4px',\n }\n : {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }),\n },\n cardOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: -1,\n ...(props.showBgPattern && {\n mixBlendMode: 'hard-light',\n }),\n ...(props.card.rounded\n ? {\n borderRadius: '4px',\n }\n : {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }),\n ...props.cardOverlay,\n },\n cardHeader: {\n height: '20%',\n color: '#2D2D2D',\n borderBottom: '1px solid rgba(113, 113, 113, 0.1)',\n background: 'transparent',\n '& span': {\n fontSize: '1em',\n fontWeight: 500,\n },\n },\n cardContent: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '80%',\n minWidth: 'auto',\n minHeight: 'auto',\n maxWidth: 'none',\n background: 'transparent',\n '& > img': {\n flexBasis: '25%',\n minWidth: '125px',\n maxWidth: '25%',\n },\n },\n cardLabel: {\n width: '100%',\n lineHeight: '2.5em',\n fontSize: '2.3em',\n fontWeight: 700,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textAlign: 'center',\n textOverflow: 'ellipsis',\n },\n cardValue: {\n lineHeight: '1.2em',\n textAlign: 'center',\n fontSize: '2em',\n fontWeight: 700,\n color: lighten('#2D2D2D', 0.1),\n },\n cardExtra: {\n lineHeight: '4em',\n textAlign: 'center',\n fontSize: '1em',\n fontWeight: 600,\n },\n});\n\nexport default makeStyles;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { AndonLightColor, MetricTypeEnum, MetricUnitEnum, MetricValue } from 'andoncloud-dashboard-toolkit';\n\nimport { WorkplaceStatusProps } from '@/types';\n\nimport { getDuration } from './helpers';\nimport MetricCard from './MetricCard';\n\nconst StatusCard: React.FC<WorkplaceStatusProps> = ({ companyConfig, workplace, statusChange }) => {\n const [metricValue, setMetricValue] = useState<MetricValue>({\n id: `last_status_change_${workplace.id}`,\n workplaceId: workplace.id,\n metricId: 'last_status_change',\n type: MetricTypeEnum.Kpi,\n statusColor: statusChange?.reason.statusColor || AndonLightColor.Gray,\n textValue: statusChange ? getDuration(statusChange).toString() : '0',\n unit: MetricUnitEnum.Duration,\n active: true,\n });\n const { t } = useTranslation();\n\n const workplaceConfig = companyConfig?.workplacesConfigs.find((config) => config.workplaceId === workplace.id);\n const orderLabel = !!workplaceConfig?.orderConfig.alternativeName ? t('AlternativeOrder') : t('Order');\n const orderNumber = statusChange?.order?.number;\n\n useEffect(() => {\n let interval: NodeJS.Timeout;\n\n if (statusChange) {\n setMetricValue((metric) => ({\n ...metric,\n statusColor: statusChange.reason.statusColor,\n textValue: getDuration(statusChange).toString(),\n }));\n\n if (!statusChange.finishedAt) {\n interval = setInterval(() => {\n setMetricValue((metric) => ({\n ...metric,\n statusColor: statusChange.reason.statusColor,\n textValue: getDuration(statusChange).toString(),\n }));\n }, 10_000);\n }\n }\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [statusChange]);\n\n return (\n <MetricCard\n title={workplace.name}\n metricLabel={statusChange?.reason.name || ''}\n metricValue={metricValue}\n extraValue={`${orderLabel}: ${orderNumber || '-'}`}\n rounded\n />\n );\n};\n\nexport default StatusCard;\n","import React, { useEffect, useState } from 'react';\n\nimport { List, ListItem } from '@mui/material';\nimport type { ListStatusChanges_StatusChange, ListWorkplaces_Workplace, Workplace } from 'andoncloud-dashboard-toolkit';\n\nimport { WidgetViewProps } from '@/types';\n\nimport StatusCard from '../StatusCard';\n\ninterface WorkplaceDetails {\n workplace: ListWorkplaces_Workplace;\n statusChange?: ListStatusChanges_StatusChange;\n}\n\nconst WidgetView: React.FC<WidgetViewProps> = ({ data, settings }) => {\n const [workplacesDetails, setWorkplacesDetails] = useState<WorkplaceDetails[]>([]);\n\n useEffect(() => {\n const workplacesIds = settings?.workplacesIds || [];\n const statusColors = settings?.statusColors || [];\n const getCurrentStatusChange = (workplace: Workplace) =>\n (data?.statusChanges || [])\n .filter((statusChange) => statusChange.workplaceId === workplace.id)\n .sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime())\n .pop();\n\n setWorkplacesDetails(\n (data.workplaces || [])\n .filter((workplace) => !workplacesIds.length || workplacesIds.indexOf(workplace.id) !== -1)\n .map((workplace) => ({ workplace, statusChange: getCurrentStatusChange(workplace) }))\n .filter(\n (details) =>\n !statusColors.length || statusColors.indexOf(details.statusChange?.reason.statusColor || '') !== -1,\n )\n .sort((a, b) => {\n const aStatusColor = a.statusChange?.reason.statusColor;\n const bStatusColor = b.statusChange?.reason.statusColor;\n\n if (aStatusColor && bStatusColor) {\n return statusColors.indexOf(aStatusColor) - statusColors.indexOf(bStatusColor);\n }\n return aStatusColor ? -1 : 1;\n }),\n );\n }, [data, settings]);\n\n return (\n <List sx={{ display: 'flex', height: '100%', '&:last-child': { marginRight: '10px' } }}>\n {workplacesDetails.slice(0, 6).map(({ workplace, statusChange }) => (\n <ListItem key={workplace.id} sx={{ minWidth: '15.5vw', marginLeft: '10px', padding: 0 }}>\n <StatusCard companyConfig={data.companyConfig} workplace={workplace} statusChange={statusChange} />\n </ListItem>\n ))}\n </List>\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 function resolve(item) {\n return Reference.isRef(item) ? item.getValue(value, parent, context) : item;\n }\n function createError(overrides = {}) {\n const nextParams = 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);\n for (const key of Object.keys(nextParams)) nextParams[key] = resolve(nextParams[key]);\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,\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\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// 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({\n value\n }, options));\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), 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.map(fn => ({\n name: fn.OPTIONS.name,\n params: fn.OPTIONS.params\n })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)\n };\n return description;\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, ctx) => {\n if (ctx.spec.coerce && !ctx.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, ctx) => {\n if (!ctx.spec.coerce || ctx.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, ctx) => {\n if (!ctx.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 (ctx.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, ctx) => {\n // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (!ctx.spec.coerce || ctx.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, _, ctx) => {\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 ctx.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 if (field) {\n let fieldValue;\n let inputValue = value[prop];\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 ?\n // TODO: use _cast, this is double resolving\n field.cast(value[prop], innerOptions) : value[prop];\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = value[prop];\n }\n if (exists !== prop in intermediateValue || intermediateValue[prop] !== value[prop]) {\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 }));\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 }));\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}\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 statusColors: [],\n workplacesIds: [],\n },\n validationSchema: yup.object({\n statusColors: yup.array().of(yup.string()).required(),\n workplacesIds: yup.array().of(yup.string()).required(),\n }),\n };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport {\n StatusChange,\n useGqlClients,\n WidgetProps,\n WorkplaceEvent,\n WorkplaceEventDocument,\n WorkplaceEventSubscriptionPayload,\n} from 'andoncloud-dashboard-toolkit';\nimport { BaseWidget } from 'andoncloud-widget-base';\nimport { print } from 'graphql';\n\nimport locales from '@/locales';\nimport { WidgetData, WidgetSettings } from '@/types';\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>> = ({ url, wsUrl, lang, data, ...widgetProps }) => {\n const { graphqlSdk, gqlWsClient } = useGqlClients({ url, wsUrl, lang });\n const [gqlWsSubscribed, setGqlWsSubscribed] = useState<boolean>(false);\n const [widgetData, setWidgetData] = useState<WidgetData | undefined>(data);\n\n useEffect(() => {\n if (!widgetData && graphqlSdk) {\n graphqlSdk\n .companyConfig()\n .then(({ companyConfig }) =>\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n companyConfig,\n })),\n )\n .catch(() => {});\n\n graphqlSdk\n .listWorkplaces()\n .then(({ workplaces }) =>\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n workplaces,\n })),\n )\n .catch(() => {});\n\n graphqlSdk\n .listStatusChanges()\n .then(({ statusChanges }) =>\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n statusChanges,\n })),\n )\n .catch(() => {});\n }\n if (widgetData?.workplaces && gqlWsClient && !gqlWsSubscribed) {\n widgetData.workplaces.forEach(({ id }) => {\n gqlWsClient.subscribe<WorkplaceEventSubscriptionPayload>(\n print(WorkplaceEventDocument),\n { id },\n ({ event, subject }) => {\n if (event === WorkplaceEvent.StatusChangeCreated) {\n const statusChange = subject as StatusChange;\n\n setWidgetData((current: WidgetData) => ({\n ...(current || {}),\n statusChanges: [statusChange, ...current.statusChanges],\n }));\n }\n },\n );\n setGqlWsSubscribed(true);\n });\n }\n }, [data, graphqlSdk, gqlWsClient, gqlWsSubscribed, widgetData]);\n\n return (\n <BaseWidget\n url={url}\n lang={lang}\n locales={locales}\n data={widgetData}\n WidgetView={WidgetView}\n getSettingsFormProps={getSettingsFormProps}\n SettingsFormContent={SettingsFormContent}\n version={LIBRARY_VERSION}\n data-testid=\"workplaces-status-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 'Workplaces statuses';\n case 'pl':\n return 'Statusy stanowisk';\n default:\n return 'workplaces-status-widget';\n }\n};\n\nexport const permissions = [];\n\nexport { LIBRARY_VERSION as version } from './version';\n"],"names":["nodejsCustomInspectSymbol$1","Symbol","for","undefined","defineInspect","classObject","fn","prototype","toJSON","Boolean","Error","invariant","inspect","nodejsCustomInspectSymbol","isNode","maybeNode","kind","_typeof","obj","iterator","constructor","formatValue","value","seenValues","JSON","stringify","name","concat","previouslySeenValues","indexOf","customInspectFn","object","String","getCustomFn","customValue","call","Array","isArray","array","length","len","Math","min","remaining","items","i","push","join","formatArray","keys","Object","tag","toString","replace","getObjectTag","map","key","formatObject","formatObjectValue","Location","startToken","endToken","source","this","start","end","Token","line","column","prev","next","QueryDocumentKeys","Name","Document","OperationDefinition","VariableDefinition","Variable","SelectionSet","Field","Argument","FragmentSpread","InlineFragment","FragmentDefinition","IntValue","FloatValue","StringValue","BooleanValue","NullValue","EnumValue","ListValue","ObjectValue","ObjectField","Directive","NamedType","ListType","NonNullType","SchemaDefinition","OperationTypeDefinition","ScalarTypeDefinition","ObjectTypeDefinition","FieldDefinition","InputValueDefinition","InterfaceTypeDefinition","UnionTypeDefinition","EnumTypeDefinition","EnumValueDefinition","InputObjectTypeDefinition","DirectiveDefinition","SchemaExtension","ScalarTypeExtension","ObjectTypeExtension","InterfaceTypeExtension","UnionTypeExtension","EnumTypeExtension","InputObjectTypeExtension","BREAK","freeze","getVisitFn","visitor","isLeaving","kindVisitor","kindSpecificVisitor","leave","enter","specificVisitor","specificKindVisitor","printDocASTReducer","node","definitions","op","operation","varDefs","wrap","variableDefinitions","directives","selectionSet","_ref","variable","type","defaultValue","_ref2","block","selections","_ref3","args","arguments","prefix","alias","argsLine","indent","_ref4","_ref5","_ref6","typeCondition","_ref7","_ref8","_ref9","_ref10","indentation","preferMultipleLines","isSingleLine","printAsMultipleLines","result","printBlockString","_ref11","_ref12","_ref13","values","_ref14","fields","_ref15","_ref16","_ref17","_ref18","_ref19","addDescription","_ref20","operationTypes","_ref21","_ref22","_ref23","interfaces","_ref24","hasMultilineItems","_ref25","_ref26","_ref27","types","_ref28","_ref29","_ref30","_ref31","repeatable","locations","_ref32","_ref33","_ref34","_ref35","_ref36","_ref37","_ref38","cb","description","maybeArray","_maybeArray$filter$jo","separator","filter","x","maybeString","str","isMultiline","some","resources","en","translation","pl","LIBRARY_VERSION","TabPanel","index","React","createElement","Box","role","hidden","id","sx","mt","children","SettingsFormContent","_data$workplaces","data","formProps","_useState","useState","selectedTab","setSelectedTab","t","useTranslation","statusOptions","useMemo","label","useEffect","_formProps$values$wor","workplacesIds","workplaces","setFieldValue","Fragment","Tabs","onChange","_","centered","borderBottom","color","Tab","SortableSelect","placeholder","options","selected","statusColors","List","maxHeight","overflowY","workplace","ListItem","ListItemButton","onClick","workplaceId","selectedWorkplacesIds","dense","ListItemIcon","Checkbox","edge","checked","tabIndex","disableRipple","ListItemText","primary","module","exports","hookCallback","hooks","apply","input","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","Date","arr","res","arrLen","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","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","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","argLen","slice","stack","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","match","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","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","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","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","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","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","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","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","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","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","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","zone","isLocal","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","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","Infinity","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","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","getDuration","statusChange","finishedAt","startedAt","moment","root","require$$0","momentDurationFormatSetup","toLocaleStringWorks","toLocaleStringRoundingWorks","intlNumberFormatWorks","intlNumberFormatRoundingWorks","bubbles","targets","stringIncludes","search","repeatZero","qty","cachedNumberFormat","cacheKey","cache","Intl","NumberFormat","formatNumber","userLocale","integerString","fractionString","exponentString","useToLocaleString","useGrouping","grouping","maximumSignificantDigits","minimumIntegerDigits","fractionDigits","groupingSeparator","decimalSeparator","roundingOptions","localeStringOptions","maximumFractionDigits","minimumFractionDigits","toLocaleString","toPrecision","integerLength","fractionLength","digitCount","digits","digitsArray","reverse","carry","stringRound","exponent","group","formattedString","durationLabelCompare","engLocale","durationLabelsStandard","S","SS","durationLabelsShort","durationTimeTemplates","HMS","HM","MS","durationLabelTypes","durationPluralKey","integerValue","decimalValue","find","each","pluck","compact","unique","intersection","_b","rest","any","featureTestFormatterRounding","formatter","featureTestFormatter","passed","durationsFormat","durations","settings","precision","template","returnMomentTypes","formattedDurations","dur","outputTypes","child","flatten","largest","durationFormat","isNegative","remainder","remainderMonths","momentTokens","tokenDefs","escape","general","typeMap","tokenizer","stopTrim","_durationTimeTemplates","useLeftUnits","usePlural","forceLength","trunc","useSignificantDigits","significantDigits","significantDigitsCache","minValue","isMinValue","maxValue","isMaxValue","trim","trimIncludes","rBoth","rAll","trimLarge","trimSmall","trimMid","trimFinal","rawTokens","text","currentToken","momentTypes","momentType","rawValue","isSmallest","isLargest","wholeValue","tokenLength","truncMethod","truncate","places","factor","foundFirst","bubbled","formatOptions","formattedValue","formattedValueEn","formattedValueMS","findType","bubble","bubbleMomentType","target","targetMomentType","initial","outputType","pluralKey","labels","localeDataKey","labelType","labelKey","durationGetLabels","autoLocalized","pluralizedLabels","_durationLabelTypes","defaultFormatTemplate","firstType","lastType","findLast","init","context","toLocaleStringFormatter","toLocaleStringSupportsLocales","intlNumberFormatFormatter","window","_react","_propTypes","defineProperty","default","_react2","_interopRequireDefault","_propTypes2","__esModule","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","p","_defineProperty","enumerable","configurable","writable","isEqual","n1","n2","TextTruncate","_Component","_getPrototypeOf2","_this","instance","Constructor","TypeError","_classCallCheck","_len","_key","_possibleConstructorReturn","rafId","cancelAnimationFrame","requestAnimationFrame","update","bind","truncated","props","onToggled","setTimeout","onTruncated","onCalculated","style","getComputedStyle","scope","font","canvas","forceUpdate","subClass","superClass","create","_inherits","protoProps","document","docFragment","createDocumentFragment","appendChild","getContext","addEventListener","onResize","removeEventListener","measureText","width","_this$props","textElement","textTruncateChild","truncateText","maxCalculateTimes","scopeWidth","getBoundingClientRect","fullTextWidth","measureWidth","childText","currentPos","maxTextLength","truncatedText","splitPos","startPos","displayLine","lastIsEng","isPrevLineWithoutSpace","lastPos","lastSpaceIndex","ext","loopCnt","lastIndexOf","_this2","_this$props2","element","_this$props2$style","containerClassName","fontWeight","fontStyle","fontSize","fontFamily","renderText","getRenderText","rootProps","ref","el","className","descriptor","_defineProperties","Component","oneOfType","bool","elementType","require$$1","MetricCard","title","metricLabel","metricValue","extraValue","rounded","_excluded","styles","card","_extends","position","height","showBgPattern","mixBlendMode","background","bgPattern","backgroundSize","borderRadius","borderTopLeftRadius","borderTopRightRadius","cardOverlay","top","left","zIndex","cardHeader","cardContent","display","flexDirection","alignItems","justifyContent","minWidth","minHeight","maxWidth","flexBasis","cardLabel","lineHeight","whiteSpace","textAlign","textOverflow","cardValue","lighten","cardExtra","makeStyles","statusColor","AndonLightColor","Green","Yellow","Red","getBackground","Card","CardHeader","CardContent","Typography","textValue","Trans","StatusCard","_statusChange$order","companyConfig","metricId","MetricTypeEnum","Kpi","reason","Gray","MetricUnitEnum","active","setMetricValue","workplaceConfig","workplacesConfigs","orderLabel","orderConfig","alternativeName","orderNumber","order","interval","metric","setInterval","clearInterval","WidgetView","workplacesDetails","setWorkplacesDetails","getCurrentStatusChange","statusChanges","pop","details","_details$statusChange","_a$statusChange","_b$statusChange","aStatusColor","bStatusColor","marginRight","marginLeft","padding","Cache","maxSize","_maxSize","clear","_size","_values","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","pathCache","setCache","getCache","propertyExpr","normalizePath","path","part","safe","segments","reduce","isQuoted","thisArg","iter","idx","isBracket","shouldBeQuoted","hasLeadingNumber","hasSpecialChars","reWords","words","tinyCase","acc","toposort_1","edges","toposort","Set","uniqueNodes","nodes","cursor","sorted","visited","outgoingEdges","Map","has","makeOutgoingEdges","nodesHash","makeNodesHash","visit","predecessors","nodeRep","outgoing","delete","errorToString","regExpToString","symbolToString","SYMBOL_REGEXP","printSimpleValue","quoteStrings","typeOf","printNumber","printValue","_Symbol$toStringTag","_Symbol$hasInstance","_Symbol$toStringTag2","strReg","toStringTag","ValidationErrorNoStack","errorOrErrors","message","params","errors","inner","err","ValidationError","isError","hasInstance","formatError","originalPath","disableStack","errorNoStack","super","captureStackTrace","inst","mixed","required","defined","notNull","oneOf","notOneOf","notType","originalValue","castMsg","email","url","uuid","datetime","datetime_precision","datetime_offset","uppercase","noUnknown","exact","tuple","spec","typeLen","lessThan","moreThan","positive","negative","integer","boolean","isValue","isSchema","__isYupSchema__","Condition","fromOptions","refs","then","otherwise","is","check","every","schema","_branch","branch","builder","resolve","getValue","parent","Reference","isContext","isSibling","cast","describe","isRef","__isYupRef","isAbsent","createValidation","validate","panic","skipAbsent","abortEarly","disableStackTrace","createError","overrides","nextParams","error","ctx","handleResult","validOrError","handleError","_result","sync","Promise","OPTIONS","getIn","lastPart","lastPartDebug","_part","isTuple","innerType","parentPath","ReferenceSet","resolveAll","merge","newItems","removeItems","src","seen","copy","v","entries","Schema","deps","tests","transforms","conditions","_mutate","internalTests","_whitelist","_blacklist","exclusiveTests","_typeCheck","withMutation","typeError","strip","recursive","nullable","optional","coerce","nonNullable","_type","meta","before","combined","mergedSpec","isType","prevSchema","condition","resolveOptions","_options$strict","_options$abortEarly","_options$recursive","_options$disableStack","resolvedSchema","allowOptionality","assert","_cast","formattedResult","prevValue","getDefault","_validate","_value","initialTests","runTests","initialErrors","runOptions","fired","panicOnce","nextOnce","count","nestedErrors","asNestedTest","originalParent","isIndex","testOptions","includes","_options$disableStack2","reject","parsed","validated","validateSync","_options$disableStack3","isValidSync","_getDefault","def","nullability","optionality","notRequired","transform","opts","isExclusive","exclusive","when","dep","enums","whiteList","valids","resolved","blacklist","invalids","list","findIndex","method","isoReg","parseDateStruct","_regexResult$7$length","_regexResult$","regexResult","toNumber","substring","z","plusMinus","hourOffset","minuteOffset","Number","rEmail","rUrl","rUUID","rIsoDateTime","isTrimmed","objStringTag","create$6","StringSchema","_raw","strValue","excludeEmptyString","allowOffset","struct","ensure","DateSchema","parse","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","exists","fieldValue","inputValue","fieldSpec","objectErrors","fieldErrors","nextFields","schemaOrRef","dft","_innerOptions","excludedEdges","excludes","addNode","depPath","sortFields","additions","pick","picked","omit","fromGetter","newObj","last","deepHas","json","unknownKeys","noAllow","allow","transformKeys","camelCase","snakeCase","constantCase","_innerOptions2","create$2","ArraySchema","_opts","castArray","castElement","arrayErrors","_options$originalValu2","_options$originalValu","innerTypeErrors","of","original","rejector","getSettingsFormProps","custom","initialValues","validationSchema","yup","wsUrl","widgetProps","_useGqlClients","useGqlClients","graphqlSdk","gqlWsClient","gqlWsSubscribed","setGqlWsSubscribed","_useState2","widgetData","setWidgetData","current","listWorkplaces","listStatusChanges","subscribe","visitorKeys","inArray","edits","ancestors","newRoot","isEdited","_i2","_Object$keys2","editOffset","editKey","editValue","splice","_visitorKeys$node$kin","visitFn","WorkplaceEventDocument","event","WorkplaceEvent","StatusChangeCreated","subject","BaseWidget"],"mappings":"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"}